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.
- cleanvibe-0.1.2/LICENSE +21 -0
- cleanvibe-0.1.2/PKG-INFO +92 -0
- cleanvibe-0.1.2/README.md +66 -0
- cleanvibe-0.1.2/cleanvibe/__init__.py +3 -0
- cleanvibe-0.1.2/cleanvibe/cli.py +82 -0
- cleanvibe-0.1.2/cleanvibe/scaffold.py +116 -0
- cleanvibe-0.1.2/cleanvibe/templates.py +80 -0
- cleanvibe-0.1.2/cleanvibe.egg-info/PKG-INFO +92 -0
- cleanvibe-0.1.2/cleanvibe.egg-info/SOURCES.txt +12 -0
- cleanvibe-0.1.2/cleanvibe.egg-info/dependency_links.txt +1 -0
- cleanvibe-0.1.2/cleanvibe.egg-info/entry_points.txt +2 -0
- cleanvibe-0.1.2/cleanvibe.egg-info/top_level.txt +1 -0
- cleanvibe-0.1.2/pyproject.toml +36 -0
- cleanvibe-0.1.2/setup.cfg +4 -0
cleanvibe-0.1.2/LICENSE
ADDED
|
@@ -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.
|
cleanvibe-0.1.2/PKG-INFO
ADDED
|
@@ -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,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 @@
|
|
|
1
|
+
|
|
@@ -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"
|