This is project-manager, a small terminal user interface (TUI) application for managing sequential execution of coding agents, built with Bubble Tea. This tool streamlines the process of running multiple AI agents against a codebase, with automatic file detection, visual progress tracking, and intelligent error handling.
- Multi-project support with folder-based organization
- Automatic detection of specification files
- Interactive file picker for missing files
- Agent selection (claude or custom command)
- Sequential ticket execution with configurable delays
- Real-time progress tracking with status indicators
- Flexible ticket parsing (supports various markdown formats)
- Shows ticket count during file validation
- Exponential backoff for API errors
- Visual countdown between agent executions
- Kill file mechanism for non-terminating agents
go install github.com/stefanmunz/project-manager@latest- Clone the repository:
git clone https://github.com/stefanmunz/project-manager.git
cd project-manager- Install dependencies:
go mod download- Build the application:
go build -o project-manager project-manager.goThis creates an executable project-manager file that you can run directly.
- (Optional) Install development tools for contributing:
make install-toolsThis installs golangci-lint and other development tools needed for linting and code quality checks.
- Go 1.21 or later (CI and development use Go 1.23)
- Terminal with UTF-8 support
To ensure consistency between local development and CI environments, the following versions are used:
- Go: 1.23
- golangci-lint: v1.62.2
These versions are configured in:
- CI:
.github/workflows/ci.yml - Local:
Makefile(viamake install-tools)
- Run the application:
./project-manager- The TUI will guide you through:
- Selecting a project from available folders
- Checking for required input files
- Selecting missing files via an interactive file picker
- Choosing your preferred coding agent
- Confirming before execution
- Monitoring real-time progress
There is a small example in the input folder that makes three agents contribute to a party script. If you have Claude installed (and you are YOLO enough to run it with --dangerously-skip-permissions), you can just check out the repository, build the tool and run it with the defaults. You can then watch the party script file and see how it is enhanced by each agent. Here is how it should look like:
- Project Selection: Choose from available project folders in the
input/directory - File Detection: Automatically checks for required files in the selected project
- Interactive Selection: If files are missing, presents an intuitive file picker
- Ticket Count Display: Shows the number of tickets found during validation
- Agent Configuration: Choose between Claude or a custom command
- Confirmation: Review your configuration before execution
- Sequential Execution: Runs agents one by one with configurable delays
- Progress Tracking: Real-time status updates with visual indicators
Projects are organized in folders within the input/ directory:
input/
├── initial-implementation/
│ ├── specification.md
│ ├── tickets.md
│ └── standard-prompt.md
├── feature-x/
│ ├── specification.md
│ ├── tickets.md
│ └── standard-prompt.md
└── bugfix-y/
├── specification.md
├── tickets.md
└── standard-prompt.md
Each project folder must contain:
specification.md- Project specificationtickets.md- Individual tickets for agentsstandard-prompt.md- Base prompt for all agents
The ticket parser is flexible and supports various markdown formats:
# Ticket 1: Single hash
## Ticket 2: Double hash
### ticket 3: Lowercase
#### TICKET 4: Uppercase
## Ticket #5: With hash symbol
### Ticket 6 - With dash separator
# Ticket 7 No separator
## Ticket: Without number (auto-assigned)All of these formats are recognized. Tickets are automatically numbered if no number is provided, and sorted by ticket number.
↑/↓orj/k- Navigate optionsEnter- Select/ConfirmTab- Focus text input (when selecting custom agent)qorCtrl+C- Quit
For testing without relying on AI agents, you can use a simple shell script as the "agent". When prompted to select an agent, choose "Other" and enter one of these commands:
bash -c 'echo "echo \"Agent worked on ticket\"" >> example-output.sh'First create a mock agent script:
cat > mock-agent.sh << 'EOF'
#!/bin/bash
# Extract ticket number from the prompt
TICKET=$(echo "$1" | grep -o "ticket [0-9]" | grep -o "[0-9]")
echo "echo \"Agent $TICKET was here\"" >> example-output.sh
EOF
chmod +x mock-agent.shThen use ./mock-agent.sh as your custom agent command.
bash -c 'sleep 1 && echo "Task completed"'This allows you to test the full flow of the project manager without depending on external AI services.
The project manager ensures agents run sequentially with a configurable delay between executions:
- Default delay: 2 seconds between agents
- Exponential backoff: Delay doubles on API errors (max 30 seconds)
- Visual countdown shows remaining wait time
- Prevents API rate limiting issues
Use the included timestamp agent to verify sequential execution:
./timestamp-agent.shThis script:
- Logs timestamps to
agent-execution.log - Shows exact start/end times for each agent
- Helps verify agents aren't running concurrently
Check the log after running:
cat agent-execution.logYou should see timestamps at least 2 seconds apart between agent completions and the next agent starting.
The project includes a comprehensive test suite in the test-scripts/ directory:
- Mock Agents: Simulate different agent behaviors (success, failure, debug)
- Test Scripts: Automated tests for various features
- Kill File Testing: Verify the agent termination mechanism
Available test agents:
- Debug Agent (
test-scripts/debug-agent.sh): Shows exactly what arguments are received - Stdin Test (
test-scripts/stdin-test.sh): Tests reading prompt from stdin - Failing Agent (
test-scripts/failing-agent.sh): Simulates API errors - Mock Agent (
test-scripts/mock-agent.sh): Full-featured mock agent with kill file support
Run tests with:
./test-scripts/test-kill-mechanism.sh
./test-scripts/test-party-flow.shUse the failing agent to test error handling and exponential backoff:
./project-manager
# Select "Other" and enter: ./test-scripts/failing-agent.shThis script simulates API overload errors. You should see:
- Failed tickets marked with ❌
- Delay increases after each failure (2s → 4s → 8s → 16s → 30s max)
- All tickets are attempted despite failures
- Visual countdown between retries
The project manager handles non-terminating agents (like Claude) using a "kill file" mechanism:
- Agent prompts include: "As your final task, create a file named 'killmenow.md' containing either 'success' or 'failure'"
- Async execution: Agents run asynchronously while the manager monitors for the kill file
- Auto-termination: When
killmenow.mdis detected, the agent process is killed and the file is deleted - Status tracking: Tickets are marked as completed/failed based on the file content
This ensures agents like Claude Code that don't auto-exit can still be managed effectively.
The project includes unit tests for the ticket parsing functionality:
# Run all tests
go test -v
# Run tests with coverage
go test -v -cover
# Run benchmarks
go test -bench=. -benchtime=10sThe test suite covers:
- Various ticket formats (different hash levels, case sensitivity, separators)
- Edge cases (empty files, missing numbers, duplicates)
- File checking functionality
- Error handling
The application is built using:
- Bubble Tea: Terminal UI framework
- Lipgloss: Styling and layout
- Bubbles: Pre-built TUI components
Key design decisions:
- Single-file architecture for simplicity
- Asynchronous agent execution with kill file mechanism
- Exponential backoff for API error handling
- Model-View-Update pattern for UI state management
We welcome contributions! Please see our Contributing Guidelines for details on:
- Code style and standards
- Testing requirements
- Pull request process
- Development setup
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Charm libraries
- Inspired by the need for better AI agent orchestration
- Thanks to all contributors and users
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Wiki

