Write a ticket.
Get a pull request.
Pitwall drives headless Claude Code agents through a fixed pipeline on your own machines, and only asks you when a human is needed.
$ curl -fsSL https://get.pitwall.dev/docker-compose.yml -o docker-compose.yml \
&& docker compose up -d- ✓plan2m 10s · 41k tok
- ✓implement18m 02s · 312k tok · 4 files
- ✓code-reviewsent back once · passed on attempt 2
- ✓releasepull request #48 opened
- ✓qa-notes7 test steps written
- ●manual testswaiting for you
Four stages, every ticket.
No prompts to babysit. Each step has one job, a gate it has to pass, and a limit on how often it can send work back.
- 01ticket → enrich → plan
Write a ticket
Say what you want and attach the files the agents should read. The plan writes the acceptance criteria.
- 02pitwall-runner · linux-01
A runner picks it up
A small Go binary on the machine that holds the repo checks out a branch and starts Claude Code headless.
- 03implement → code-review → qa-code
Agents run the pipeline
Implement, review, check every criterion. A failed check sends the run back, up to its limit, then the run blocks and tells you.
- 04manual tests → PR #48
You test and merge
Pitwall writes the manual test steps, you tick them off, and the pull request is ready to merge.
Small to run. Quiet until it needs you.
One image plus Postgres
The core is a single Docker image and a Postgres database. The web UI, the pipeline and the runner gateway all live in it.
Runners on your machines
Your code is checked out and changed only on your runners. A runner is a small Go binary that dials out; no inbound ports.
A deterministic pipeline
Same steps, same order, same gates. Every step is logged with its tokens and its time.
Questions only when needed
Agents ask when a fact is missing; a loop limit blocks the run. Everything else waits in the log, not your inbox.
An inbox that fits a phone
Answer a question, tick off a test or merge a PR from your phone. Telegram pings are optional.
No telemetry
Pitwall phones home to nobody. The only outbound calls are the ones you configure: GitHub and Telegram from the core, Claude from your runners.
Every ticket, every step, one screen.
Run it on a box you already have.
One image plus Postgres for the core, and a runner on the machine that holds your code.