cleanvibe 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Immanuelle
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,92 @@
1
+ Metadata-Version: 2.4
2
+ Name: cleanvibe
3
+ Version: 0.1.2
4
+ Summary: A workflow accelerator that scaffolds AI-assisted coding projects with opinionated documentation and launches Claude Code.
5
+ Author: Immanuelle
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/Immanuelle/cleanvibe
8
+ Project-URL: Issues, https://github.com/Immanuelle/cleanvibe/issues
9
+ Keywords: claude,ai,scaffold,workflow,vibe-coding
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.9
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Software Development
21
+ Classifier: Topic :: Utilities
22
+ Requires-Python: >=3.9
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Dynamic: license-file
26
+
27
+ # cleanvibe
28
+
29
+ A tiny Python CLI that scaffolds AI-assisted coding projects and launches Claude Code.
30
+
31
+ `cleanvibe` is not a coding tool. It's a **state initializer** -- it removes the friction between "I want to build something" and "Claude is working inside a well-structured environment." The real value lives in the `CLAUDE.md` it injects: an opinionated behavior contract that enforces documentation discipline, meaningful commits, and iterative file-based thinking.
32
+
33
+ ## Install
34
+
35
+ ```
36
+ pip install cleanvibe
37
+ ```
38
+
39
+ ## Usage
40
+
41
+ ### Create a new project
42
+
43
+ ```
44
+ cleanvibe new my-project
45
+ ```
46
+
47
+ This will:
48
+ 1. Create the directory `my-project/`
49
+ 2. Write `CLAUDE.md` (workflow rules for AI-assisted development)
50
+ 3. Write `README.md` (starter documentation)
51
+ 4. Write `.gitignore` (sensible Python defaults)
52
+ 5. Initialize a git repo with an initial commit
53
+ 6. Launch Claude Code inside the project
54
+
55
+ ### Clone an existing repo
56
+
57
+ ```
58
+ cleanvibe clone https://github.com/user/repo
59
+ ```
60
+
61
+ This will:
62
+ 1. `git clone` the repository
63
+ 2. Check for missing `CLAUDE.md`, `README.md`, `.gitignore`
64
+ 3. Inject any missing files without overwriting existing ones
65
+ 4. Launch Claude Code inside the project
66
+
67
+ ### Options
68
+
69
+ ```
70
+ cleanvibe new my-project --dry-run # Preview what would be created
71
+ cleanvibe new my-project --no-claude # Skip launching Claude Code
72
+ cleanvibe clone REPO path --dry-run # Preview what would be done
73
+ cleanvibe --version # Show version
74
+ ```
75
+
76
+ ## Why?
77
+
78
+ Most people struggle with blank repo paralysis, poor commit hygiene, and AI assistants that ramble without producing durable artifacts. `cleanvibe` solves this by injecting a disciplined thinking contract into every project from the start.
79
+
80
+ The `CLAUDE.md` template enforces:
81
+ - Commit early and often with meaningful messages
82
+ - No planning-only modes -- all thinking produces files and commits
83
+ - Keep documentation up to date as the project evolves
84
+ - Use `planning/` directories for exploration instead of internal planning modes
85
+
86
+ ## Cross-platform
87
+
88
+ Works on Windows, Linux, and macOS. Zero dependencies beyond Python 3.9+.
89
+
90
+ ## License
91
+
92
+ MIT
@@ -0,0 +1,66 @@
1
+ # cleanvibe
2
+
3
+ A tiny Python CLI that scaffolds AI-assisted coding projects and launches Claude Code.
4
+
5
+ `cleanvibe` is not a coding tool. It's a **state initializer** -- it removes the friction between "I want to build something" and "Claude is working inside a well-structured environment." The real value lives in the `CLAUDE.md` it injects: an opinionated behavior contract that enforces documentation discipline, meaningful commits, and iterative file-based thinking.
6
+
7
+ ## Install
8
+
9
+ ```
10
+ pip install cleanvibe
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ### Create a new project
16
+
17
+ ```
18
+ cleanvibe new my-project
19
+ ```
20
+
21
+ This will:
22
+ 1. Create the directory `my-project/`
23
+ 2. Write `CLAUDE.md` (workflow rules for AI-assisted development)
24
+ 3. Write `README.md` (starter documentation)
25
+ 4. Write `.gitignore` (sensible Python defaults)
26
+ 5. Initialize a git repo with an initial commit
27
+ 6. Launch Claude Code inside the project
28
+
29
+ ### Clone an existing repo
30
+
31
+ ```
32
+ cleanvibe clone https://github.com/user/repo
33
+ ```
34
+
35
+ This will:
36
+ 1. `git clone` the repository
37
+ 2. Check for missing `CLAUDE.md`, `README.md`, `.gitignore`
38
+ 3. Inject any missing files without overwriting existing ones
39
+ 4. Launch Claude Code inside the project
40
+
41
+ ### Options
42
+
43
+ ```
44
+ cleanvibe new my-project --dry-run # Preview what would be created
45
+ cleanvibe new my-project --no-claude # Skip launching Claude Code
46
+ cleanvibe clone REPO path --dry-run # Preview what would be done
47
+ cleanvibe --version # Show version
48
+ ```
49
+
50
+ ## Why?
51
+
52
+ Most people struggle with blank repo paralysis, poor commit hygiene, and AI assistants that ramble without producing durable artifacts. `cleanvibe` solves this by injecting a disciplined thinking contract into every project from the start.
53
+
54
+ The `CLAUDE.md` template enforces:
55
+ - Commit early and often with meaningful messages
56
+ - No planning-only modes -- all thinking produces files and commits
57
+ - Keep documentation up to date as the project evolves
58
+ - Use `planning/` directories for exploration instead of internal planning modes
59
+
60
+ ## Cross-platform
61
+
62
+ Works on Windows, Linux, and macOS. Zero dependencies beyond Python 3.9+.
63
+
64
+ ## License
65
+
66
+ MIT
@@ -0,0 +1,3 @@
1
+ """cleanvibe - scaffold AI-assisted coding projects and launch Claude Code."""
2
+
3
+ __version__ = "0.1.2"
@@ -0,0 +1,82 @@
1
+ """Command-line interface for cleanvibe.
2
+
3
+ Usage:
4
+ cleanvibe new PATH Create a new scaffolded project
5
+ cleanvibe clone REPO [PATH] Clone a repo and inject scaffolding
6
+ cleanvibe --version Show version
7
+
8
+ Zero dependencies. Just Python stdlib.
9
+ """
10
+
11
+ import argparse
12
+ import sys
13
+ from pathlib import Path
14
+
15
+ from . import __version__
16
+ from .scaffold import clone_project, create_project
17
+
18
+
19
+ def main(argv: list[str] | None = None) -> None:
20
+ parser = argparse.ArgumentParser(
21
+ prog="cleanvibe",
22
+ description="Scaffold AI-assisted coding projects and launch Claude Code.",
23
+ )
24
+ parser.add_argument(
25
+ "--version", action="version", version=f"cleanvibe {__version__}"
26
+ )
27
+
28
+ subparsers = parser.add_subparsers(dest="command")
29
+
30
+ # cleanvibe new PATH
31
+ new_parser = subparsers.add_parser(
32
+ "new", help="Create a new project with opinionated scaffolding"
33
+ )
34
+ new_parser.add_argument("path", type=Path, help="Directory to create")
35
+ new_parser.add_argument(
36
+ "--dry-run", action="store_true", help="Show what would be created without writing anything"
37
+ )
38
+ new_parser.add_argument(
39
+ "--no-claude", action="store_true", help="Skip launching Claude Code after scaffolding"
40
+ )
41
+
42
+ # cleanvibe clone REPO [PATH]
43
+ clone_parser = subparsers.add_parser(
44
+ "clone", help="Clone a repo and inject missing scaffolding"
45
+ )
46
+ clone_parser.add_argument("repo", help="Git repository URL to clone")
47
+ clone_parser.add_argument(
48
+ "path", nargs="?", type=Path, default=None, help="Target directory (defaults to repo name)"
49
+ )
50
+ clone_parser.add_argument(
51
+ "--dry-run", action="store_true", help="Show what would be done without writing anything"
52
+ )
53
+ clone_parser.add_argument(
54
+ "--no-claude", action="store_true", help="Skip launching Claude Code after cloning"
55
+ )
56
+
57
+ args = parser.parse_args(argv)
58
+
59
+ if args.command is None:
60
+ parser.print_help()
61
+ sys.exit(0)
62
+
63
+ if args.command == "new":
64
+ if args.path.exists() and any(args.path.iterdir()):
65
+ print(f"Error: {args.path} already exists and is not empty.", file=sys.stderr)
66
+ sys.exit(1)
67
+ print(f"Creating project: {args.path}")
68
+ create_project(args.path, dry_run=args.dry_run, no_claude=args.no_claude)
69
+
70
+ elif args.command == "clone":
71
+ if args.path is None:
72
+ # Derive directory name from repo URL
73
+ repo_name = args.repo.rstrip("/").rsplit("/", 1)[-1]
74
+ if repo_name.endswith(".git"):
75
+ repo_name = repo_name[:-4]
76
+ args.path = Path(repo_name)
77
+ print(f"Cloning {args.repo} -> {args.path}")
78
+ clone_project(args.repo, args.path, dry_run=args.dry_run, no_claude=args.no_claude)
79
+
80
+
81
+ if __name__ == "__main__":
82
+ main()
@@ -0,0 +1,116 @@
1
+ """Core scaffolding logic for cleanvibe.
2
+
3
+ Creates project directories, writes template files, initializes git,
4
+ and launches Claude Code.
5
+ """
6
+
7
+ import os
8
+ import platform
9
+ import subprocess
10
+ import sys
11
+ from pathlib import Path
12
+
13
+ from . import templates
14
+
15
+
16
+ def create_project(path: Path, dry_run: bool = False, no_claude: bool = False) -> None:
17
+ """Create a new project directory with opinionated scaffolding."""
18
+ project_name = path.name
19
+
20
+ if dry_run:
21
+ print(f"[dry-run] Would create directory: {path}")
22
+ print(f"[dry-run] Would write: {path / 'CLAUDE.md'}")
23
+ print(f"[dry-run] Would write: {path / 'README.md'}")
24
+ print(f"[dry-run] Would write: {path / '.gitignore'}")
25
+ print(f"[dry-run] Would run: git init")
26
+ print(f"[dry-run] Would run: git add . && git commit")
27
+ if not no_claude:
28
+ print(f"[dry-run] Would launch: claude")
29
+ return
30
+
31
+ path.mkdir(parents=True, exist_ok=True)
32
+
33
+ _write(path / "CLAUDE.md", templates.claude_md(project_name))
34
+ _write(path / "README.md", templates.readme_md(project_name))
35
+ _write(path / ".gitignore", templates.GITIGNORE)
36
+
37
+ _git_init(path)
38
+
39
+ if not no_claude:
40
+ _launch_claude(path)
41
+
42
+
43
+ def clone_project(repo: str, path: Path, dry_run: bool = False, no_claude: bool = False) -> None:
44
+ """Clone a repo and inject scaffolding if missing."""
45
+ if dry_run:
46
+ print(f"[dry-run] Would run: git clone {repo} {path}")
47
+ print(f"[dry-run] Would check for missing CLAUDE.md / README.md / .gitignore")
48
+ print(f"[dry-run] Would inject any missing files")
49
+ if not no_claude:
50
+ print(f"[dry-run] Would launch: claude")
51
+ return
52
+
53
+ result = subprocess.run(["git", "clone", repo, str(path)])
54
+ if result.returncode != 0:
55
+ print(f"Error: git clone failed with exit code {result.returncode}", file=sys.stderr)
56
+ sys.exit(1)
57
+
58
+ project_name = path.name
59
+
60
+ # Only inject files that are missing - don't overwrite existing ones
61
+ claude_md = path / "CLAUDE.md"
62
+ if not claude_md.exists():
63
+ _write(claude_md, templates.claude_md(project_name))
64
+ print(f" Injected CLAUDE.md (was missing)")
65
+
66
+ readme = path / "README.md"
67
+ if not readme.exists():
68
+ _write(readme, templates.readme_md(project_name))
69
+ print(f" Injected README.md (was missing)")
70
+
71
+ gitignore = path / ".gitignore"
72
+ if not gitignore.exists():
73
+ _write(gitignore, templates.GITIGNORE)
74
+ print(f" Injected .gitignore (was missing)")
75
+
76
+ if not no_claude:
77
+ _launch_claude(path)
78
+
79
+
80
+ def _write(filepath: Path, content: str) -> None:
81
+ filepath.write_text(content, encoding="utf-8")
82
+ print(f" Created {filepath.name}")
83
+
84
+
85
+ def _git_init(path: Path) -> None:
86
+ subprocess.run(["git", "init"], cwd=path, capture_output=True)
87
+ subprocess.run(["git", "add", "."], cwd=path, capture_output=True)
88
+ subprocess.run(
89
+ ["git", "commit", "-m", "Initial commit: cleanvibe scaffold"],
90
+ cwd=path,
91
+ capture_output=True,
92
+ )
93
+ print(f" Initialized git repo with initial commit")
94
+
95
+
96
+ def _launch_claude(path: Path) -> None:
97
+ """Launch Claude Code in the project directory.
98
+
99
+ On Windows, opens a new cmd window. On Unix, replaces the current process.
100
+ """
101
+ print(f" Launching Claude Code...")
102
+ system = platform.system()
103
+ try:
104
+ if system == "Windows":
105
+ subprocess.Popen(
106
+ ["cmd", "/k", f'cd /d "{path}" && claude'],
107
+ creationflags=subprocess.CREATE_NEW_CONSOLE,
108
+ )
109
+ else:
110
+ os.chdir(path)
111
+ os.execlp("claude", "claude")
112
+ except FileNotFoundError:
113
+ print(
114
+ " Could not launch 'claude'. Make sure Claude Code is installed and on your PATH.",
115
+ file=sys.stderr,
116
+ )
@@ -0,0 +1,80 @@
1
+ """Default templates that cleanvibe injects into new projects.
2
+
3
+ The CLAUDE.md template is the core of cleanvibe. It shapes how Claude Code
4
+ behaves inside a repo by enforcing documentation discipline, meaningful commits,
5
+ and iterative file-based thinking over planning-only modes.
6
+ """
7
+
8
+ from datetime import datetime
9
+
10
+
11
+ def claude_md(project_name: str) -> str:
12
+ date = datetime.now().strftime("%Y-%m-%d")
13
+ return f"""# {project_name}
14
+
15
+ ## Workflow Rules
16
+ - **Commit early and often.** Every meaningful change gets a commit with a clear message explaining *why*, not just what.
17
+ - **Do not enter planning-only modes.** All thinking must produce files and commits. If scope is unclear, create a `planning/` directory and write `.md` files there instead of using an internal planning mode.
18
+ - **Keep this file up to date.** As the project takes shape, record architectural decisions, conventions, and anything needed to work effectively in this repo.
19
+ - **Update README.md regularly.** It should always reflect the current state of the project for human readers.
20
+
21
+ ## Project Description
22
+ _TODO: Describe what this project is about._
23
+
24
+ ## Architecture and Conventions
25
+ _TODO: Document key decisions, file structure, and patterns as they emerge._
26
+
27
+ # currentDate
28
+ Today's date is {date}.
29
+ """
30
+
31
+
32
+ def readme_md(project_name: str) -> str:
33
+ return f"""# {project_name}
34
+
35
+ > Scaffolded with [cleanvibe](https://github.com/Immanuelle/cleanvibe).
36
+
37
+ ## About
38
+
39
+ _TODO: Describe what this project does._
40
+
41
+ ## Getting Started
42
+
43
+ This project was initialized with `cleanvibe new` and is intended to be developed
44
+ with AI-assisted coding via Claude Code.
45
+
46
+ ```
47
+ cd {project_name}
48
+ claude
49
+ ```
50
+ """
51
+
52
+
53
+ GITIGNORE = """# Python
54
+ __pycache__/
55
+ *.py[cod]
56
+ *.egg-info/
57
+ dist/
58
+ build/
59
+ *.egg
60
+ .eggs/
61
+
62
+ # Virtual environments
63
+ .venv/
64
+ venv/
65
+ env/
66
+
67
+ # IDE
68
+ .vscode/
69
+ .idea/
70
+ *.swp
71
+ *.swo
72
+
73
+ # OS
74
+ .DS_Store
75
+ Thumbs.db
76
+
77
+ # Environment
78
+ .env
79
+ .env.local
80
+ """
@@ -0,0 +1,92 @@
1
+ Metadata-Version: 2.4
2
+ Name: cleanvibe
3
+ Version: 0.1.2
4
+ Summary: A workflow accelerator that scaffolds AI-assisted coding projects with opinionated documentation and launches Claude Code.
5
+ Author: Immanuelle
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/Immanuelle/cleanvibe
8
+ Project-URL: Issues, https://github.com/Immanuelle/cleanvibe/issues
9
+ Keywords: claude,ai,scaffold,workflow,vibe-coding
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.9
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Software Development
21
+ Classifier: Topic :: Utilities
22
+ Requires-Python: >=3.9
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Dynamic: license-file
26
+
27
+ # cleanvibe
28
+
29
+ A tiny Python CLI that scaffolds AI-assisted coding projects and launches Claude Code.
30
+
31
+ `cleanvibe` is not a coding tool. It's a **state initializer** -- it removes the friction between "I want to build something" and "Claude is working inside a well-structured environment." The real value lives in the `CLAUDE.md` it injects: an opinionated behavior contract that enforces documentation discipline, meaningful commits, and iterative file-based thinking.
32
+
33
+ ## Install
34
+
35
+ ```
36
+ pip install cleanvibe
37
+ ```
38
+
39
+ ## Usage
40
+
41
+ ### Create a new project
42
+
43
+ ```
44
+ cleanvibe new my-project
45
+ ```
46
+
47
+ This will:
48
+ 1. Create the directory `my-project/`
49
+ 2. Write `CLAUDE.md` (workflow rules for AI-assisted development)
50
+ 3. Write `README.md` (starter documentation)
51
+ 4. Write `.gitignore` (sensible Python defaults)
52
+ 5. Initialize a git repo with an initial commit
53
+ 6. Launch Claude Code inside the project
54
+
55
+ ### Clone an existing repo
56
+
57
+ ```
58
+ cleanvibe clone https://github.com/user/repo
59
+ ```
60
+
61
+ This will:
62
+ 1. `git clone` the repository
63
+ 2. Check for missing `CLAUDE.md`, `README.md`, `.gitignore`
64
+ 3. Inject any missing files without overwriting existing ones
65
+ 4. Launch Claude Code inside the project
66
+
67
+ ### Options
68
+
69
+ ```
70
+ cleanvibe new my-project --dry-run # Preview what would be created
71
+ cleanvibe new my-project --no-claude # Skip launching Claude Code
72
+ cleanvibe clone REPO path --dry-run # Preview what would be done
73
+ cleanvibe --version # Show version
74
+ ```
75
+
76
+ ## Why?
77
+
78
+ Most people struggle with blank repo paralysis, poor commit hygiene, and AI assistants that ramble without producing durable artifacts. `cleanvibe` solves this by injecting a disciplined thinking contract into every project from the start.
79
+
80
+ The `CLAUDE.md` template enforces:
81
+ - Commit early and often with meaningful messages
82
+ - No planning-only modes -- all thinking produces files and commits
83
+ - Keep documentation up to date as the project evolves
84
+ - Use `planning/` directories for exploration instead of internal planning modes
85
+
86
+ ## Cross-platform
87
+
88
+ Works on Windows, Linux, and macOS. Zero dependencies beyond Python 3.9+.
89
+
90
+ ## License
91
+
92
+ MIT
@@ -0,0 +1,12 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ cleanvibe/__init__.py
5
+ cleanvibe/cli.py
6
+ cleanvibe/scaffold.py
7
+ cleanvibe/templates.py
8
+ cleanvibe.egg-info/PKG-INFO
9
+ cleanvibe.egg-info/SOURCES.txt
10
+ cleanvibe.egg-info/dependency_links.txt
11
+ cleanvibe.egg-info/entry_points.txt
12
+ cleanvibe.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ cleanvibe = cleanvibe.cli:main
@@ -0,0 +1 @@
1
+ cleanvibe
@@ -0,0 +1,36 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "cleanvibe"
7
+ version = "0.1.2"
8
+ description = "A workflow accelerator that scaffolds AI-assisted coding projects with opinionated documentation and launches Claude Code."
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ requires-python = ">=3.9"
12
+ authors = [
13
+ { name = "Immanuelle" },
14
+ ]
15
+ keywords = ["claude", "ai", "scaffold", "workflow", "vibe-coding"]
16
+ classifiers = [
17
+ "Development Status :: 3 - Alpha",
18
+ "Environment :: Console",
19
+ "Intended Audience :: Developers",
20
+ "Operating System :: OS Independent",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.9",
23
+ "Programming Language :: Python :: 3.10",
24
+ "Programming Language :: Python :: 3.11",
25
+ "Programming Language :: Python :: 3.12",
26
+ "Programming Language :: Python :: 3.13",
27
+ "Topic :: Software Development",
28
+ "Topic :: Utilities",
29
+ ]
30
+
31
+ [project.scripts]
32
+ cleanvibe = "cleanvibe.cli:main"
33
+
34
+ [project.urls]
35
+ Homepage = "https://github.com/Immanuelle/cleanvibe"
36
+ Issues = "https://github.com/Immanuelle/cleanvibe/issues"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+