Spin up and command a fleet of AI developer agents from your terminal
Project description
ai-fleet ๐
"Spin up and command a fleet of AI developer agents from your terminal."
Table of Contents
- Quick Start
- Installation
- Core Features
- Commands Reference
- Configuration
- Development Setup
- Examples
- Troubleshooting
- Product Requirements
Quick Start
# Install from PyPI (when published)
pipx install ai-fleet
# Or install from source (see Development Setup)
uv pip install -e .
# Set up your API key
export ANTHROPIC_API_KEY=sk-...
# Navigate to your project
cd /path/to/your/project
# Initialize AI Fleet in your project
fleet init
# Create your first agent
fleet create fix-auth --prompt "Fix the authentication bug in login.py"
# List running agents
fleet list
# Check logs
fleet logs fix-auth
# Send additional instructions
fleet prompt fix-auth "Make sure to add tests"
# Attach to see live output
fleet attach fix-auth
# Clean up when done
fleet kill fix-auth
Installation
From PyPI (when published)
# Using pipx (recommended)
pipx install ai-fleet
# Or using pip
pip install ai-fleet
From Source (Development)
See Development Setup section below.
Key Concepts
Project-Based Configuration
AI Fleet works on a per-project basis. Each git repository you want to use AI Fleet with needs to be initialized:
- One config per project: Configuration lives in
.aifleet/config.tomlwithin your project - Automatic detection: Commands work from any subdirectory within your project
- Isolated state: Each project maintains its own agent state and worktrees
- Team friendly: Configuration can be committed and shared with your team
Core Features
๐ฏ Single Agent Management
- Create individual agents with custom prompts
- Each agent runs in an isolated git worktree
- Full tmux session management
- Real-time CPU/memory monitoring
๐ Parallel Agent Orchestration
- Fanout: Launch N agents with the same prompt
- Multi: Launch multiple agents with different tasks
- Batch management and cleanup
- Pattern-based operations (glob support)
๐ง Project Integration
- Automatic credential file copying
- Custom setup commands per project
- Git worktree isolation
- Branch naming conventions
๐ Monitoring & Control
- Real-time agent status with CPU/RAM usage
- Log tailing and session attachment
- Interactive prompt sending
- Batch operations
Commands Reference
Core Commands
fleet create <branch> [--prompt PROMPT]
Create a new agent on a specific branch.
fleet create fix-auth --prompt "Fix the login authentication bug"
Options:
--prompt, -p: Initial prompt to send to the agent--agent, -a: AI agent to use (default: claude)--quick: Skip setup commands for faster creation
fleet list [--grouped]
List all running agents with their status.
fleet list # Simple table view
fleet list --grouped # Group by batch ID
Shows:
- Branch name
- Session status
- CPU/memory usage
- Runtime duration
- Batch ID (if applicable)
fleet prompt <branch> "<message>"
Send additional instructions to a running agent.
fleet prompt fix-auth "Add unit tests for the changes"
fleet attach <branch>
Attach to an agent's tmux session interactively.
fleet attach fix-auth
# Press Ctrl+B, D to detach
fleet logs <branch> [-n LINES]
View the output logs of an agent.
fleet logs fix-auth # Last 50 lines (default)
fleet logs fix-auth -n 200 # Last 200 lines
fleet kill <pattern>
Terminate agents matching the pattern.
fleet kill fix-auth # Kill specific agent
fleet kill "auth-*" # Kill all matching pattern
fleet kill --batch batch123 # Kill entire batch
Options:
--batch: Treat pattern as batch ID--force: Skip confirmation prompt
Parallel Execution Commands
fleet fanout <count> [prefix] --prompt PROMPT
Create multiple agents with the same prompt.
# Auto-generated batch ID
fleet fanout 5 --prompt "Refactor the authentication module"
# Creates: fanout-a7b9c2d4-A, fanout-a7b9c2d4-B, ...
# Custom branch prefix
fleet fanout 5 auth-refactor --prompt "Refactor the authentication module"
# Creates: auth-refactor-A, auth-refactor-B, ...
Options:
--agent, -a: AI agent to use--quick: Skip setup commands
fleet multi <branch:prompt> [branch:prompt ...]
Create multiple agents with different prompts.
fleet multi \
fix-auth:"Fix login bug" \
add-tests:"Add unit tests for auth" \
update-docs:"Update API documentation"
Each agent gets:
- Its own branch
- Its own worktree
- Its own tmux session
- A different initial prompt
Configuration Commands
fleet init [--type TYPE] [--migrate-legacy]
Initialize AI Fleet in the current project.
fleet init # Auto-detect project type
fleet init --type rails # Initialize as Rails project
fleet init --migrate-legacy # Import from old global config
fleet config [--edit] [--validate] [--show-origin]
Manage AI Fleet configuration.
fleet config # Show current project config
fleet config --edit # Edit project config in $EDITOR
fleet config --validate # Check configuration validity
fleet config --show-origin # Show where each setting comes from
fleet update [--check] [--force]
Check for and install updates to AI Fleet.
fleet update # Check and install updates
fleet update --check # Only check for updates
fleet update --force # Force check (bypass cache)
The update command automatically detects your installation method (pipx, pip, uv, or source) and uses the appropriate update mechanism.
Configuration
AI Fleet uses project-based configuration. Each project has its own .aifleet/config.toml file.
Initializing a Project
# Navigate to your git repository
cd /path/to/your/project
# Initialize AI Fleet
fleet init
# Or initialize with a specific project type
fleet init --type rails # Rails project with sensible defaults
fleet init --type node # Node.js project
fleet init --type python # Python project
Configuration Structure
# .aifleet/config.toml - Project configuration
[project]
name = "my-awesome-project"
worktree_root = "~/.aifleet/worktrees/my-awesome-project"
[agent]
default = "claude"
claude_flags = "--dangerously-skip-permissions"
[setup]
credential_files = [
"config/master.key",
".env",
".env.local"
]
commands = [
"bundle install",
"npm install",
"bundle exec rails db:create db:migrate"
]
Development Setup
Prerequisites
- Python 3.9+
- Git
- tmux
- uv (recommended) or pip
Setting Up From Source
-
Clone the repository
git clone https://github.com/your-org/ai-fleet.git cd ai-fleet
-
Install with uv (recommended)
# Install uv if you haven't already curl -LsSf https://astral.sh/uv/install.sh | sh # Create virtual environment and install dependencies uv venv source .venv/bin/activate # On Windows: .venv\Scripts\activate uv pip install -e ".[dev,test]"
Or with pip
python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate pip install -e ".[dev,test]"
-
Run tests
# Run all tests with coverage pytest # Run specific test file pytest tests/test_cli.py # Run with verbose output pytest -v
-
Run linting and type checking
# Linting with Ruff ruff check . ruff check . --fix # Auto-fix issues # Type checking with mypy mypy src/
-
Install pre-commit hooks (optional)
lefthook install
Project Structure
ai-fleet/
โโโ src/
โ โโโ aifleet/
โ โโโ cli.py # Main CLI entry point
โ โโโ commands/ # Command implementations
โ โ โโโ create.py
โ โ โโโ list.py
โ โ โโโ prompt.py
โ โ โโโ attach.py
โ โ โโโ logs.py
โ โ โโโ kill.py
โ โ โโโ fanout.py
โ โ โโโ multi.py
โ โโโ config.py # Configuration management
โ โโโ state.py # Agent state tracking
โ โโโ tmux.py # Tmux integration
โ โโโ worktree.py # Git worktree management
โ โโโ utils.py # Utility functions
โโโ tests/ # Test suite
โโโ pyproject.toml # Project configuration
โโโ README.md # This file
Making Changes
-
Create a new branch
git checkout -b feature/your-feature
-
Make your changes and add tests
-
Run tests and linting
pytest ruff check . mypy src/
-
Commit with descriptive message
git add . git commit -m "Add feature: description"
Examples
Example 1: Working on a Bug Fix
# Create agent for bug fix
fleet create fix-login-bug --prompt "Fix the bug where users can't login with email addresses containing '+' symbol"
# Monitor progress
fleet logs fix-login-bug -n 100
# Add clarification
fleet prompt fix-login-bug "Make sure to handle URL encoding properly"
# Review the changes
fleet attach fix-login-bug
# Clean up
fleet kill fix-login-bug
Example 2: Exploring Multiple Solutions
# Launch 3 agents to explore different approaches
fleet fanout 3 refactor-auth --prompt "Refactor the authentication system to use JWT tokens instead of sessions"
# Monitor all agents
fleet list --grouped
# Check specific agent
fleet logs refactor-auth-B
# Keep the best solution, kill the rest
fleet kill refactor-auth-A
fleet kill refactor-auth-C
Example 3: Parallel Sprint Work
# Work on multiple tickets simultaneously
fleet multi \
fix-432:"Fix user profile image upload bug" \
feat-433:"Add dark mode toggle to settings" \
test-434:"Add integration tests for payment flow" \
docs-435:"Update API documentation for v2 endpoints"
# Check progress on all
fleet list
# Focus on one that needs help
fleet attach feat-433
fleet prompt feat-433 "Use CSS variables for theme colors"
# Clean up completed tasks
fleet kill fix-432
fleet kill test-434
Example 4: Quick Experimentation
# Skip setup commands for faster iteration
fleet create experiment --prompt "Try using Redis for session storage" --quick
# Quick cleanup of all experimental branches
fleet kill "experiment*"
Migration Guide
Migrating from Global Configuration
If you've been using an older version of AI Fleet with global configuration (~/.ai_fleet/config.toml), follow these steps:
-
Navigate to your project
cd /path/to/your/project
-
Run migration
fleet init --migrate-legacy
-
Review the migrated configuration
fleet config -
Remove old global config (optional)
rm ~/.ai_fleet/config.toml.backup # After verifying everything works
What's Changed
- Old: Single global config at
~/.ai_fleet/config.toml - New: Per-project config at
.aifleet/config.toml - Benefit: Work on multiple projects without config switching
Troubleshooting
Common Issues
"No agent found for branch"
- Check if the agent is running:
fleet list - Ensure you typed the branch name correctly
- The agent might have crashed - check
tmux ls
"Failed to create worktree"
- Ensure
repo_rootin config points to a valid git repository - Check if the branch name already exists:
git branch -a - Verify you have write permissions to
worktree_root
"Command not found: fleet"
- Ensure the package is installed:
pip show ai-fleet - Check if the scripts directory is in your PATH
- Try using
python -m aifleet.cliinstead
Setup commands failing
- Run
fleet config --validateto check configuration - Try creating an agent with
--quickto skip setup commands - Check setup command output in logs:
fleet logs <branch>
Debug Mode
For verbose output, set the environment variable:
export AI_FLEET_DEBUG=1
fleet create test-branch --prompt "Test"
Manual Cleanup
If agents get orphaned:
# List all tmux sessions
tmux ls | grep ai_
# Manual cleanup
tmux kill-session -t ai_branch-name
rm -rf ~/.ai_fleet/worktrees/branch-name
# Reconcile state file
fleet list --repair # Coming in next version
Product Requirements Document
0 ยท Elevator pitch
One CLI lets you launch N Claude Code, Codecs, or future LLM agents on isolated git work-trees, stream their logs, and kill them when done.
Perfect for parallel idea exploration (same prompt) or shotgun ticket tackling (different prompts).
Core Building Block: Every agent runs in its own isolated environment:
- 1 agent = 1 git worktree + 1 branch + 1 tmux session
- Automatic setup of credentials and dependencies
- Full isolation between agents (no conflicts)
1 ยท Problem
- Manual setup of
git worktree + tmux + agentis slow and error-prone. - Juggling many branches/ panes breaks flow.
- No lightweight tool tracks which agent is on which task.
2 ยท Goal (MVP scope)
| โ Must-have | โ Out-of-scope for MVP |
|---|---|
create <branch> [--prompt] |
Any GUI / dashboard |
prompt <branch> "<msg>" |
Docker / Nomad orchestration |
attach <branch> (tmux) |
Prometheus / alerting |
logs <branch> tail |
Winner-picking, auto-merge |
kill <branch> |
Fine-grained RBAC |
list with CPU/RAM % |
Multiple machines |
fan-out: fanout N --prompt |
Deep Linear automation (phase 2) |
multi: multi branch:prompt... |
Issue tracker integration (phase 2) |
State is persisted in ~/.ai_fleet/state.json.
3 ยท CLI design
| Command | Action |
|---|---|
fleet create fix-42 --prompt "write failing test" |
new work-tree, new tmux session, send prompt |
fleet fanout 5 --prompt "refactor auth" |
spin 5 agents (auto-generates unique batch ID), creates branches fanout-<UUID>-A1..A5, each with own worktree + tmux session |
fleet fanout 5 auth-refactor --prompt "refactor auth" |
spin 5 agents with custom branch prefix, creates branches auth-refactor-A1..A5, each with own worktree + tmux session |
fleet multi fix-auth:"Fix login bug" add-tests:"Add auth tests" refactor-db:"Clean up DB layer" |
spin 3 agents with different tasks, creates branches fix-auth, add-tests, refactor-db each with own prompt |
fleet prompt fix-42 "green it" |
send extra instruction |
fleet logs fix-42 [-n 1000] |
tail last lines |
fleet attach fix-42 |
attach interactive |
fleet kill fix-42 |
terminate session & delete work-tree |
fleet list [--grouped] |
show table, optionally group by batch |
Alias: flt executes the same entry-point for muscle-memory speed.
3.1 ยท Fanout Command Details
The fleet fanout command is the core building block for parallel agent orchestration. It supports two modes:
Mode 1: Auto-generated batch ID (default)
fleet fanout 5 --prompt "refactor auth"
- Generates a unique batch ID (e.g.,
a7b9c2d4) - Creates branches:
fanout-a7b9c2d4-A1throughfanout-a7b9c2d4-A5
Mode 2: Custom branch prefix
fleet fanout 5 auth-refactor --prompt "refactor auth"
- Uses your specified prefix
- Creates branches:
auth-refactor-A1throughauth-refactor-A5
Both modes:
- Create N independent agents, each with:
- A dedicated git worktree
- A new branch with the appropriate naming pattern
- A separate tmux session named after the branch
- Send the same prompt to all agents simultaneously
- Track all agents as a batch for easy management
Benefits:
- Auto-generated IDs prevent branch naming conflicts
- Custom prefixes allow meaningful batch names
- Easy batch identification with
fleet list --grouped - Simple cleanup of entire batches with pattern matching
3.2 ยท Multi Command - Working on Different Tasks in Parallel
The fleet multi command is designed for when you have multiple distinct tasks, each requiring its own agent and prompt:
fleet multi fix-auth:"Fix the login bug" add-tests:"Add unit tests for auth module" refactor-db:"Refactor database connections"
This single command:
- Parses branch:prompt pairs from your input
- Spins up one agent per task, each with:
- Its own git worktree
- A branch with your specified name (e.g.,
fix-auth) - A separate tmux session
- Your custom prompt as its initial instruction
- Manages all agents from one CLI
Key Difference: Fanout vs Multi
| Mode | Use Case | Prompts | Example |
|---|---|---|---|
| fanout | Same task, multiple approaches | All agents get the SAME prompt | 5 agents all trying different ways to "refactor auth" |
| multi | Different tasks in parallel | Each agent gets a DIFFERENT prompt | Agent 1 fixes bug, Agent 2 adds feature, Agent 3 writes tests |
Why Multi Mode?
Perfect for:
- Working through a sprint backlog
- Tackling multiple bug fixes simultaneously
- Exploring different features in parallel
- Letting agents work independently while you review/guide them
The tool handles all the plumbing (worktree setup, credentials, tmux sessions) so you can focus on managing the agents and their progress.
4 ยท Internal file layout
(all paths are overridable in config.toml)
~/.ai_fleet/
โโ config.toml # global settings (generated on first run)
โโ state.json # live agent registry (CLI updates atomically)
โโ worktrees/ # default parent dir for auto-created worktrees
4.1 ยท config.toml keys
| Key | Default | Purpose |
|---|---|---|
repo_root |
~/code/my-project |
Monorepo root for worktree creation |
worktree_root |
~/.ai_fleet/worktrees |
Where branches are checked out |
tmux_prefix |
ai_ |
All tmux sessions are named <prefix><branch> |
default_agent |
claude |
claude | codecs (future runtimes) |
claude_flags |
--dangerously-skip-permissions |
Extra flags appended to claude |
credential_files |
[] |
Files to copy from main repo to each worktree |
setup_commands |
[] |
Commands to run after worktree creation |
Create or edit this file by running:
fleet config edit
4.1.1 ยท Worktree Setup Configuration
For projects that need credentials or setup steps (like Rails apps), configure in config.toml:
# Copy credential files from main repo to each worktree
credential_files = [
"config/master.key",
"config/credentials/development.key",
".env",
".env.local"
]
# Run these commands in each new worktree (executed in order)
setup_commands = [
"bundle install",
"npm install",
"bundle exec rake db:create db:migrate",
"bundle exec rake assets:precompile"
]
# Optional: Quick setup mode (skip heavy commands)
quick_setup = true # When true, only copies files, skips setup_commands
Note: Setup commands run in the worktree directory. Use && to chain commands or check success.
4.2 ยท state.json schema (MVP)
[
{
"branch": "fix-42",
"worktree": "/home/nacho/.ai_fleet/worktrees/fix-42",
"session": "ai_fix-42",
"pid": 12345,
"batch_id": "manual-2025-05-31",
"agent": "claude",
"created_at": "2025-05-31T23:05:00Z"
}
]
CLI commands never rely solely on this file: fleet list --repair reconciles real tmux sessions against disk if the file gets out of sync.
5 ยท Tech stack snapshot (MVP)
| Layer | Choice | Rationale |
|---|---|---|
| Language | Python 3.11 + Click | fast to iterate, easy to refactor |
| Proc supervisor | tmux | ubiquitous, allows send-keys |
| Data store | Flat JSON + TOML | no DB dependency |
| Metrics | psutil | per-PID CPU/RAM collection |
| Packaging | PyPI ai-fleet | installs fleet + flt binaries |
6 ยท Key interactions / happy-path demo
# install
pipx install ai-fleet
export ANTHROPIC_API_KEY=sk-...
# explore 3 versions of the same idea
fleet fanout 3 auth-refactor --prompt "refactor auth flow"
# parallel sprint - work on different tasks
fleet multi fix-auth:"Fix login bug" add-tests:"Add auth module tests" update-docs:"Update API documentation"
# monitor
fleet list --grouped # see CPU/RAM per agent
fleet logs fix-auth -n 200 # tail
fleet prompt fix-auth "run tests"
# manual dive-in
fleet attach auth-refactor-A2
# clean everything from a batch
fleet kill auth-refactor-A* # glob supported
7 ยท Success metrics
| KPI | Target |
|---|---|
| fleet create โ first agent reply | โค 10 s |
| Fan-out launch (N=5) | โค 20 s |
| Orphaned worktrees after kill | 0 % |
| CLI memory footprint | ~0 MB |
| Test suite โ on CI | 100 % |
8 ยท Roadmap after MVP
- Ticket integration โ fetch task descriptions from Linear/GitHub/Jira for
fleet multi - REST/WebSocket shim โ expose same ops for a SwiftUI dashboard.
- Cost tracking โ poll /cost (Claude) & usage logs; Prometheus exporter.
- Linear / GitHub webhooks โ auto-spawn agents on ticket creation.
- Container mode โ optional Docker/Nomad backend for hard CPU/RAM caps.
- Winner-picker โ batch command to run tests, rank branches, highlight best.
- Merge-assistant โ create PRs automatically and comment results.
9 ยท Open questions
| Area | Question |
|---|---|
| Concurrency | Hard cap on simultaneous Claude/Codecs sessions per org? |
| Isolation | When to require Docker to avoid RAM blow-ups? |
| Auth | Stick with env vars or integrate doppler/1Password secrets? |
| Branch hygiene | Enforce prefix patterns (fix-, feature-), auto-delete merged? |
10 ยท Namespace & packaging
| Thing | Value |
|---|---|
| PyPI | ai-fleet |
| Import path | aifleet.* |
| Executables | fleet, flt |
| GitHub repo | github.com/your-org/ai-fleet |
Tip: publish a 0.0.0 stub to reserve the PyPI name before going public.
11 ยท Project-Specific Setup Examples
Rails Project
credential_files = [
"config/master.key",
"config/credentials/development.key"
]
setup_commands = [
"bundle install",
"RAILS_ENV=test bundle exec rails db:create db:migrate",
"RAILS_ENV=test bundle exec rails assets:precompile"
]
Node.js Project
credential_files = [".env", ".env.local"]
setup_commands = [
"npm install",
"npm run build"
]
Python Project
credential_files = [".env", "secrets.json"]
setup_commands = [
"uv sync", # or "pip install -r requirements.txt"
"python manage.py migrate" # for Django
]
Tip: Use fleet config validate to check your setup configuration before creating agents.
12 ยท License
MIT โ do what you want, just don't sue. (Change if you prefer Apache-2.0 or GPL.)
Project details
Release history Release notifications | RSS feed
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 ai_fleet-0.1.0.tar.gz.
File metadata
- Download URL: ai_fleet-0.1.0.tar.gz
- Upload date:
- Size: 93.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.4.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0503a313b1452643f4b2f0a8753955fd5379566ee568c2b06bec5419c1a087fb
|
|
| MD5 |
15b7cfaf1bad9b244e780c86be206073
|
|
| BLAKE2b-256 |
a4a991b5a6a21ed2d97fe94bb4918813f3bfc31dc47e342406cd7d38bca3696c
|
File details
Details for the file ai_fleet-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ai_fleet-0.1.0-py3-none-any.whl
- Upload date:
- Size: 39.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.4.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
815f6f620ff4ebab9329b96a8419d7a67e872e526720557e2fb4e880399890de
|
|
| MD5 |
003b1e92d20b6e7814e01fe173c6aa73
|
|
| BLAKE2b-256 |
6c1bd82743aefda87d10ff0bb5569abc5d0afda8f8444a6e75951bb24ff44bc2
|