The seven steps
Run it
Set the project up as Installation describes. Sign in to Claude Code and Codex, and install OpenCode. Run the file from a Git repository. Put the ticket inbriefs/ticket.md. List the files it
changes and its test files in its front matter, and commit the tests. Put
judge.json beside the file for the offline judge. JEV=live asks Jev instead,
with TYPESAFE_ENDPOINT and TYPESAFE_API_KEY in the environment.
Terminal
approve.json beside the file, the
answer comes from it instead. To leave the approval out, run it unattended:
Terminal
A ticket
A ticket
briefs/ticket.md
The seats
One seat builds. A seat from another model family checks the goal. The three reviewers come from three model families:examples/teams/feature-delivery.ts (excerpt)
1. Build and 2. Checks
The builder reads the ticket and changes the files it names. Then the ticket’s own tests run. A red test goes back to the builder with the command’s output, and no model reads it first:examples/teams/feature-delivery.ts (excerpt)
3. Goal check
Green tests do not prove the ticket was met. A test can miss a requirement. The goal seat reads the ticket and the work, and marks each requirement met or unmet, with evidence:examples/teams/feature-delivery.ts (excerpt)
4. Review battery
Each reviewer reads the change against the ticket and changes nothing. It replies with a verdict and its findings, each taggedblock, should-fix
or nice-to-have:
examples/teams/feature-delivery.ts (excerpt)
5. Synthesis
The three reviewers run at the same time.synthesise: true makes their
reviews one list. The first reviewer’s seat merges the findings that name
the same problem. Then each reviewer votes once on the findings it did not
raise:
examples/teams/feature-delivery.ts (excerpt)
6. Judge
When a reviewer asks for changes, Jev decides each finding on the list, a block included: act on it or skip it. The builder gets only the findings Jev acts on. With no cap, the rounds end when Jev stops them or every reviewer passes. Offline,judge.json replays Jev’s answers:
examples/teams/feature-delivery.ts (excerpt)
judge(judgeSeat, { cap: 3 }).
Know when to stop shows the questions
Jev answers.
7. Approval
Attended, a person approves the exact bytes. Everything the run changes in its worktree lands, so the question names every file the run added, changed or deleted, whether the ticket names it or not.start is the
commit the worktree began at, so a file the builder committed itself is
named too. Each file shows the first 12 characters of its sha256, and the
request carries each full sha256. A yes is a yes to those bytes: after the
yes the files are read again, and if any changed while the question waited,
the run fails and nothing lands. A no fails the run, and the change does not
land:
examples/teams/feature-delivery.ts (excerpt)
--unattended leaves the
approval step out of the team, and the change lands without asking:
examples/teams/feature-delivery.ts (excerpt)
examples/teams/feature-delivery.ts (excerpt)
Work from a backlog
The runtime keeps no ticket type. Your application chooses where its work lives. The backlog example points the same team at a folder of markdown tickets,backlog/. It takes the next ticket and delivers it in its own
worktree. It keeps a record of each run in records/, moves the ticket to
backlog/done/, and takes the next one. It stops at the first ticket that
does not pass, and leaves that ticket in the backlog.
To take the work from Linear or GitHub issues instead, change two
functions. Make next ask your tracker for the next ready issue, and make
finish close it. Nothing else changes:
examples/teams/feature-team-backlog.ts (excerpt)
deliver from the team’s
file:
examples/teams/feature-team-backlog.ts (excerpt)
Terminal
Copy the files
The team isexamples/teams/feature-delivery.ts. The backlog is
examples/teams/feature-team-backlog.ts, and it imports the team’s file.
examples/teams/feature-delivery.ts
examples/teams/feature-delivery.ts
examples/teams/feature-delivery.ts
examples/teams/feature-team-backlog.ts
examples/teams/feature-team-backlog.ts
examples/teams/feature-team-backlog.ts
Next steps
- Shipping through GitHub: what happens to the change after it lands.
- Know when to stop: the questions the judge answers between a review and the next round.
- Check the brief was met: the goal check on its own.