Run it
Set the project up as Installation describes. Copy the file withbriefs/, style/ and judge.json beside it, sign in
to Claude Code and Codex, and run it from that directory. Without
JUDGE=jev the judge replays the answers in judge.json; with it, and a
TypeSafe endpoint and key in the environment, the judge is Jev:
Terminal
Output, from the offline proof
The file
The brief names the post, the style guide, the grader’s job and the editor’s:briefs/post.md
style/house.md
judge.json
workflow(): two roles from different model
families, an editor, a judge on the draft stage, and two stages:
examples/use-cases/editorial/writer-grader-cap.ts (excerpt)
reviewedBy: 'grade' puts the Codex seat on every draft. When the grader
does not pass a draft, refine: judge(judgeSeat) asks the judge before the
writer runs again. The rounds end when the judge stops them or the grader
passes the draft. There is no round limit unless you set one.
workflow() refuses the team before any model
runs if the writer and the grader share a family. The publish stage is
the editor’s question; a no goes to draft with the editor’s note as the
finding.
Full file
Full file
examples/use-cases/editorial/writer-grader-cap.ts
The team’s shape
What the run did
The proof runs the file against scripted seats and a recorded judge, and checks the loop the page describes: three writer turns, three grader reads, the judge answering continue, continue, holds, the superlative and the invented number gone from the draft on disk, and the run stopped at the editor. Obversa recorded the run as one event log, so it shows each draft, each set of findings and each answer from the judge in order, with the reasons on the record for the editor to read.When the loop stops
A count says how many rounds a draft may take. A judge says whether the next one is worth taking. After each round the grader did not pass, Jev reads the use case from the brief, the grader’s findings and every round so far, and answers whether the draft holds, whether the findings are worth acting on, and whether another round is worth it. The loop goes round again on continue, and stops when the judge chooses a reason to stop: the draft holds, the rest is polish, or the same findings keep coming back. The judge decides a finding tagged block too. To bound the rounds as well, pass a cap as a backstop:judge(judgeSeat, { cap: 3 }). It allows three
refinements, four drafts in
all. When the fourth draft does not pass, the judge is told it is the last
round. If it lets the
draft stand, the draft goes to the editor, with the open findings on the
record. Any other answer fails the run, and the reason names the cap, so
the editor is never asked.
A judge stops the loop has the questions
and the rule.
Next steps
- A writer and a reviewer: the same pair on code, with a real run.
- A judge stops the loop: the judge’s questions, and the same loop as plain graph nodes.
- A person decides: the editor’s question, and how an answer reaches a paused run.