_ _ _
| |__ _ _| | |_ __ ___ _ __
| '_ \| | | | | | '_ \ / _ \ '_ \
| |_) | |_| | | | |_) | __/ | | |
|_.__/ \__,_|_|_| .__/ \___|_| |_|
|_|
autonomous tdd pipeline for your codebase
WHAT
bullpen takes a ticket and ships a branch. 5 AI agents work sequentially in an isolated git worktree — researching, planning, writing tests, implementing, and reviewing. The output is a single squashed commit on a feature branch, ready for a human to look at.
No magic. Just Claude Code CLI, git, and a pipeline.
THE PIPELINE
Reads your codebase. Finds the files, patterns, and conventions relevant to the ticket.
Breaks the ticket into concrete implementation steps using what step 1 found.
Writes failing tests first. TDD, not vibes.
Makes the tests pass. Commits checkpoint.
Reviews the actual git diff. Approves or rejects with feedback. Up to 3 retry loops.
HOW IT WORKS
ticket claimed worker dispatches orchestrator runs pipeline
in browser to orchestrator in git worktree
─────────── ───────────────── ────────────────────────
│ │ │
│ websocket │ websocket / http │ spawns claude
├───────────────────────►├─────────────────────────►│ code cli per step
│ │ │
│ progress updates │ step callbacks │ checkpoint commits
│◄───────────────────────┤◄─────────────────────────┤ with [ao:step] tags
│ │ │
│ done │ pipeline-done │ squash + cleanup
│◄───────────────────────┤◄─────────────────────────┤ keep branch
ARCHITECTURE
worker
Cloudflare Durable Object. Coordinates state, routes tickets to orchestrators, handles WebSocket connections. SQLite-backed.
orchestrator
Runs on your machine. Spawns Claude Code CLI, manages git worktrees, talks to JIRA. Multiple instances across machines.
client
React + PixiJS. Gamified office visualization — watch agents sit at desks and work through your tickets in real-time.
agents
Prompt builders and tool definitions for each pipeline role. Configurable per-repo via claudefiles.
DETAILS THAT MATTER
- Git worktree isolation — each ticket gets its own worktree. Your working directory is untouched.
- Crash recovery — checkpoint commits with
[ao:step]markers. Orchestrator restarts resume where they left off. - Multi-machine — connect orchestrators from any machine. Worker routes tickets by repo.
- JIRA integration — optional. Pulls tickets, transitions workflows, posts completion comments.
- Review retry loop — if the reviewer rejects, implementation retries with feedback. Up to 3 rounds.
- Tool scoping — research and review steps are read-only. Only test writing and implementation can modify files.
RUN IT
# clone git clone https://github.com/giancarlopetrini/bullpen.git cd bullpen # install pnpm install # start the orchestrator (runs on your machine) pnpm --filter orchestrator dev # start the client (watch agents work) pnpm --filter client dev
Requires Claude Code CLI and a Claude API key or Max subscription.
BRING YOUR OWN LLM
The orchestrator runs locally. It spawns Claude Code CLI on your machine with your API key. bullpen doesn't proxy, meter, or touch your tokens. Your codebase never leaves your machine.
The only hosted piece is the worker — a lightweight state coordinator on Cloudflare. It sees ticket metadata and pipeline progress, not your code.