| Phase | Status | Description |
|---|---|---|
| Phase 1 | Complete | Core infrastructure & libraries |
| Phase 2 | Complete | Running daemon & management |
| Phase 3 | Complete | Claude Code integration |
| Phase 4 | In Progress | Polish & refinement |
Goal: Build rock-solid foundation with well-tested primitives.
Libraries Implemented:
pkg/config- Path configuration and directory managementinternal/daemon- PID file managementinternal/state- JSON state persistence with atomic savesinternal/tmux- tmux session/window managementinternal/worktree- Git worktree operationsinternal/messages- Message filesystem operationsinternal/socket- Unix socket client/serverinternal/logging- Structured logginginternal/cli- Command routing framework
Testing:
- 67 tests passing
- Real tmux integration tests (creates actual sessions)
- Real git worktree tests (creates actual repos)
- Symlink-aware path resolution for macOS compatibility
Key Commits:
- a5a4b43 - Add development log
- e399ff4 - Add config package
- 94fef7e - Add daemon PID management
- e05ff0c - Add state management
- a80e8ed - Add tmux library
- 0479613 - Add worktree library
- a942fc7 - Add message operations
- 6d79399 - Add socket and logging
- 69f2b5b - Add CLI framework
- d66fa65 - Add comprehensive unit tests
Goal: Fully functional daemon with repo/worker management (plain shells before Claude).
Daemon Features:
- Main loop with context cancellation
- Socket server for CLI communication
- Health check loop (every 2 minutes)
- Message router loop (every 2 minutes)
- Wake/nudge loop (every 2 minutes)
- State persistence and recovery
- Graceful shutdown
Commands Implemented:
multiclaude start/stop/status/logs- Daemon controlmulticlaude repo init <github-url>- Repository initializationmulticlaude worker create <task>- Worker creationmulticlaude worker list/rm- Worker managementmulticlaude repo list- List tracked reposmulticlaude message send/list/read/ack- Messagingmulticlaude agent complete- Signal completion
Testing:
- 73+ unit tests passing
- 2 comprehensive e2e integration tests
- Real tmux and git operations tested
Goal: Replace plain shells with autonomous Claude Code instances.
Features Implemented:
- Claude startup in tmux with UUID session IDs
- Role-specific prompts (supervisor, worker, merge-queue)
- Embedded markdown prompts via
//go:embed - Custom prompt loading from
.multiclaude/directory - Hooks configuration support
- PID tracking and health monitoring
- Autonomous operation (
--dangerously-skip-permissions) - Initial task messages to workers
Key Commits:
- f76458d - Add prompts package
- ef4755e - Add Claude startup integration
- 7549680 - Add hooks configuration
- 8e10cb2 - Add stop-all command
- 75f5701 - Fix UUID v4 format
- d7b5846 - Add skip-permissions flag
- 694f659 - Convert to embedded markdown prompts
- e40594d - Add PID tracking
- 33bf5f3 - Mark Phase 3 complete
- 50536a5 - Fix critical bugs and improve agent communication
Status: In Progress
Planned:
- Enhanced error messages
- Better attach command with read-only mode
- Rich list commands with status info
- Edge case handling
- Performance optimization
- GitHub auth verification
Why tmux?
- Human observable at all times
- Standard tool, no new UIs to learn
- Detachable sessions survive disconnects
- Easy to attach for debugging
Why git worktrees?
- True isolation between agents
- No branch switching conflicts
- Clean cleanup via
git worktree remove - Standard git, no special tooling
Why filesystem messages?
- Simple to debug (just cat the files)
- No database dependencies
- Easy to inspect and modify
- Survives daemon restarts
Why single daemon?
- Single source of truth for state
- Centralized coordination
- Simple CLI communication via socket
- Easy to reason about
# Run all tests
go test ./...
# Run with verbose output
go test ./... -v
# Run specific package
go test ./internal/daemon -v
go test ./internal/tmux -v
# Build
go build ./cmd/multiclaude# Check daemon status
multiclaude daemon status
# View daemon logs
tail -f ~/.multiclaude/daemon.log
# List tmux sessions
tmux list-sessions
# Attach to repo session
tmux attach -t mc-<repo>
# Check state file
cat ~/.multiclaude/state.json | jq
# List messages for an agent
ls ~/.multiclaude/messages/<repo>/<agent>/