A CLI tool for managing Git worktrees with Claude Code integration
Project description
Evo
A powerful CLI tool for managing Git worktrees with integrated AI coding assistant support. Evo streamlines development workflows by creating isolated Git worktrees and launching them with Claude or other AI assistants.
Features
- Smart Git Worktree Management: Create and manage worktrees with a single command
- AI Assistant Integration: Built-in support for Claude and other coding assistants
- Isolated Development: Optional devcontainer support for secure, isolated environments
- Project Configuration: Define build, test, and lint commands per project
- Usage Analytics: Track token usage and costs for AI assistants
- Session Management: View and filter coding sessions by project
- Automatic File Sync: Copy untracked files (like .env) to new worktrees
Installation
From PyPI
pip install evo
From Source
git clone https://github.com/yourusername/evo.git
cd evo
pip install -e .
Requirements
- Python 3.12+
- Git
- Claude CLI (or other supported AI assistant)
- For isolated runtime:
- Docker
- devcontainer CLI (
npm install -g @devcontainers/cli)
Quick Start
- Initialize your project:
evo init
This creates:
.evo/config.json- Project-specific configuration.devcontainer/- Devcontainer support files
- Create a development environment:
evo dev feature/new-feature
- Launch with a specific task:
evo dev fix/bug-123 -p "Fix the authentication timeout issue"
Commands
evo init
Initialize project configuration and devcontainer support.
evo init
Creates the .evo/config.json file with default settings and sets up devcontainer configuration for isolated development.
evo dev
Create a Git worktree and launch it with an AI assistant.
evo dev <branch-name> [OPTIONS]
Arguments:
branch_name- Name of the branch to create worktree for
Options:
-p, --prompt- Initial prompt to pass to the AI assistant-r, --runtime- Development runtime:local(default),isolated, orremote
Examples:
# Basic usage
evo dev feature/new-api
# With specific task
evo dev fix/memory-leak -p "Investigate and fix the memory leak in the worker process"
# Using isolated devcontainer
evo dev feature/secure-feature --runtime isolated
Behavior:
- Creates a worktree at
../{repo-name}-{branch-name} - Creates new branch if it doesn't exist
- Copies configured worktree files (e.g., .env)
- Runs configured build commands
- Launches AI assistant with test/lint commands in prompt
evo usage
Display AI assistant usage statistics for the last N days.
evo usage [OPTIONS]
Options:
-d, --days- Number of days to show (default: 30)
Examples:
# Last 30 days
evo usage
# Last week
evo usage -d 7
# Last quarter
evo usage --days 90
Shows:
- Daily token usage by model
- Estimated costs
- Total tokens and costs for the period
evo sessions
Display recent coding sessions, filtered by project.
evo sessions [OPTIONS]
Options:
-p, --project- Filter sessions by project name
Examples:
# Sessions for current project
evo sessions
# Sessions for specific project
evo sessions -p myapp
# Sessions matching pattern
evo sessions --project api
Configuration
Project Configuration
Located at .evo/config.json in your project root:
{
"build_commands": ["npm install", "npm run build"],
"test_command": "npm test",
"lint_command": "npm run lint",
"worktree_files": [".env", ".env.local", ".mcp"],
"disable_firewall": false,
"default_cli": "claude"
}
Options:
build_commands- Commands to run after creating worktreetest_command- Test command to include in AI promptlint_command- Lint command to include in AI promptworktree_files- Untracked files to copy to new worktreesdisable_firewall- Allow network access in devcontainersdefault_cli- AI assistant to use (currently only "claude")
Global Configuration
Located at ~/.config/evo/config.json:
{
"default_cli": "claude"
}
Currently stores the default CLI tool preference.
Isolated Development (Devcontainers)
For enhanced security and isolation, use the --runtime isolated option:
evo dev feature/secure --runtime isolated
Benefits:
- Network isolation (configurable)
- Consistent development environment
- No local environment pollution
- Automatic cleanup
Requirements:
- Docker Desktop or Docker Engine
- devcontainer CLI
Tips and Best Practices
-
Branch Naming: Use descriptive hierarchical names
evo dev feature/auth/oauth2 evo dev bugfix/api/rate-limiting
-
Complex Prompts: Use files for detailed instructions
evo dev refactor/database -p "$(cat refactor-plan.md)"
-
Environment Files: Configure important untracked files
{ "worktree_files": [".env", ".env.local", "config/secrets.json"] }
-
Build Automation: Set up build commands to prepare the environment
{ "build_commands": ["npm install", "npm run generate", "npm run db:migrate"] }
How It Works
- Worktree Creation: Creates a Git worktree in a sibling directory
- Branch Management: Creates new branches or checks out existing ones
- File Synchronization: Copies specified untracked files
- Environment Setup: Runs build commands to prepare the workspace
- AI Integration: Launches AI assistant with context about test/lint commands
- Session Tracking: Records sessions for usage analytics
Development
Setting Up Development Environment
# Clone repository
git clone https://github.com/yourusername/evo.git
cd evo
# Install with development dependencies
pip install -e ".[dev]"
# Install pre-commit hooks (if available)
pre-commit install
Running Tests
# Run all tests
pytest
# Run with coverage
pytest --cov=evo
# Run specific test file
pytest tests/test_settings.py
Code Quality
# Format code
ruff format .
# Run linter
ruff check .
# Type checking (if mypy is configured)
mypy evo
Troubleshooting
Worktree Creation Fails
- Ensure you're in a Git repository
- Check for existing worktree with same name
- Verify branch name is valid
Claude Not Found
- Install Claude CLI: Follow instructions at claude.ai
- Verify installation:
which claude - Restart terminal after installation
Devcontainer Issues
- Ensure Docker is running
- Install devcontainer CLI:
npm install -g @devcontainers/cli - Check Docker permissions
Permission Errors
- Check directory permissions
- For devcontainers, ensure Docker socket access
- On macOS/Linux, may need to run Docker commands with proper group
License
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Write tests for new functionality
- Ensure all tests pass
- Submit a pull request
Please read our contributing guidelines for more details.
Roadmap
- Support for additional AI assistants
- Remote development environments
- Team collaboration features
- Enhanced usage analytics
- Worktree templates
- Plugin system
Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: This README and code comments
Built with 🧬 by developers, for developers.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file evo_tool-0.1.1.tar.gz.
File metadata
- Download URL: evo_tool-0.1.1.tar.gz
- Upload date:
- Size: 40.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ab977a63a6546ae3eb308f8c6c85f25891f88123632e6155406e9e15c6f9e12
|
|
| MD5 |
89bdb52106d33a0cf63d019ef42e3f7b
|
|
| BLAKE2b-256 |
5af8cdacaa7aa888ea9c046e5115a55352a6241bd5a59eab41ba9f28c5fa3cbf
|
File details
Details for the file evo_tool-0.1.1-py3-none-any.whl.
File metadata
- Download URL: evo_tool-0.1.1-py3-none-any.whl
- Upload date:
- Size: 18.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b437095780193ea857e45428973733010664e03d2b6db78b51745add6f0fda68
|
|
| MD5 |
6574d628d529256539dcee9e67414d23
|
|
| BLAKE2b-256 |
d7a40118e5bce5b5d77f8a3527107d7ee74ebdd201d598428b41b48a32725c6f
|