01 — Position
Developer Bot reads a Jira ticket, writes an implementation plan with its reasoning attached, and then stops. A named engineer approves the plan in Slack. Only then does it write code and open a merge request.
It is never granted merge scope. Not as a policy — as a token. The constraint is visible in the install output below.
$ docker compose up -d
✓ postgres ready :5432
✓ webhook listening POST /jira/webhook
✓ approvals → #eng-approvals
✓ gitlab scope project 4471 · mr:write
# merge scope not requested — by designRunning inside engineering teams at
02 — Method
01
Jira fires a webhook. Before a single token is spent, the ticket is sanitised — injected instructions, pasted secrets, and junk are stripped out.
PAY-1187sanitised
Add idempotency keys to refund endpoint
Duplicate refunds fire when clients retry on timeout. Refunds must be safe to replay.
02
Your workspace files — conventions, endpoint notes, patterns learned from past reviews — go in before the model writes anything. The plan cites which ones it used.
PLANreasoning attached
Matches the pattern in workspace/endpoints/payments.md — refunds already dedupe on charge_id upstream.
03
The plan and its reasoning post to your approval channel. Nothing becomes code until a person presses Approve. The gate is in the architecture, not a settings toggle.
#eng-approvalsSlack
Plan ready for PAY-1187. Approve to open the merge request.
sara.eng approved · 07:41
04
It writes the branch and opens the MR against the one project you named. Your engineers still review and still merge. It has no merge rights at all.
!482 · feat: idempotent refundsOPEN
def create_refund(req):
+ key = req.headers["Idempotency-Key"]
+ if prior := refunds.by_key(key):
+ return prior.response+118 −12 · 6 files · pipeline passed
0
merges without a human approval
4 min
median ticket to reviewable plan
100%
runs on infrastructure you own
1
project it can open MRs against
The plan cited our payments doc, not a generic pattern. That is when I stopped reviewing it like a stranger's code.
03 — Constraints
04 — Beginning
Put it on one repository for thirty days. If the merge requests it opens do not earn the reviews they cost, walk away — we would rather you learn that in four weeks than four quarters.
For the team evaluating it
30-day pilot · one repository · no merge access granted
For the engineer trying it
git clone git@gitlab:platform/developer-bot && docker compose up -dRuns on your infrastructure. Postgres and a webhook URL are the only prerequisites.