Workflow
Every change I ship goes through the same chain of commands. Coding agents run most of the steps: they write the design doc, plan the issue, build it test-first and review it with a new context. I approve the design and the plan before any code exists, and I invoke anything that has an audience: opening the PR, merging it, deploying it. Positive control is an air traffic term. No aircraft moves without explicit clearance. Here, no change ships without one.
The chain
- 01
- 02/feature_plancommand · Agent · Todo
Design doc drafted in docs/plans/.
Defined in.claude/commands/feature_plan.md
- 03/segue → /segue_mergeoptional · Human · Todo
Findings merged back. Workstream clean.
Defined in.claude/commands/segue.md.claude/commands/segue_merge.md
- 04G1 · Design approvedhuman gate · Human · Todo
Approved. Sub-issues created on the board.
- 05/task_plancommand · Agent · Todo
Task file, plan and branch ready.
Defined in.claude/commands/task_plan.md
- 06G2 · Plan approvedhuman gate · Human · In Progress
Approved. Board moves to In Progress.
- 07/implementcommand · Agent · In Progress
Code and tests committed, one logical unit at a time.
Defined in.claude/commands/implement.md
- 08/pr_review --localcommand · Agent · In Progress
Self-review finished in two rounds or fewer.
Defined in.claude/commands/pr_review.md
- 09/pr_submitcommand · Human · Up for Review
PR open. Board moves to Up for Review.
Defined in.claude/commands/pr_submit.md
- 10G3 · Deterministic gatesautomated gate · CI · Up for Review
Every gate green.
- 11Human reviewcommand · Human · Up for Review
Review comments posted.
- 12/pr_comment_resolvercommand · Agent · Up for Review
Every conversation answered and resolved.
Defined in.claude/commands/pr_comment_resolver.md
- 13G4 · Comments resolvedhuman gate · Human · Up for Review
Clear to merge.
- 14Mergecommand · Human · Done
Merged. Issue closed, board Done.
- 15Deploycommand · Human · Done
Shipped.
- command
- human gate
- automated gate
- optional
- main
- feature branch
- side thread
- target on scope
The gates
Four gates stand between an idea and main. At G1 I read the design doc and approve it, send it back, or cut it down; nothing becomes an issue until I do, because the doc is a proposal and issues are a commitment. At G2 I read the implementation plan before any code exists. G3 is the machine's: an agent will eventually miss a rule, so the rules a machine can check are checked, from banned patterns and foreign-key indexes to the security scans and the test suite, and none of them depend on the agent cooperating. At G4 nothing merges with an open conversation; the reviewer and I clear it together. I hold the first two alone because they come before the work is committed: a wrong design or plan costs a reread there, and much more after the code is written.
Working with coding agents
An agent's work is held to a plan, a size and a second reader. Before it writes code, the plan is approved and the rules that apply are routed to it by the files it will touch, each rule showing the right version beside the wrong one. Every slice is small: an issue fits in five testable bullets, a pull request in 1,500 added lines and 25 files, and when the forecast passes that, the agent stops, splits off a sub-issue and lands what it has clean. While it writes, hooks run RuboCop on every Ruby edit and refuse force-pushes, hard resets and reads of secrets. Before any PR exists, another agent reviews the branch in a new context; it has not seen the implementation conversation, so it reads the diff cold. Two rounds at most, every fix lands with a test that failed first, and I rule on disputes.