Skip to main content
When one opinion is not enough, ask several at once. This file has a Claude seat implement a brief, runs the test with Node, and then has two reviewers from two other model families read the change at the same time. The change passes when at least threshold of them accept. A panel below the threshold sends the work back to the implementer, once.

The file

The third seat runs through the OpenCode command line tool, which is a path you give it.

What a run printed

From one real run of this file. The Codex reviewer accepted. The OpenCode seat, on a free preview model, answered with no decision object in its reply, so it counts as not accepting and the panel records it as a finding. With threshold: 1 the change still passed. Set the threshold to two and the same run would have sent the work back to the implementer.
The implementer wrote src/double.mjs:
and test/double.test.mjs:

The team’s shape

The reviewers run concurrently, one job each. threshold is a whole number from one to the number of reviewers. A panel below the threshold is a revision request aimed at implement, bounded by maxKickbacks.

Gotchas

  • The implementer and every reviewer are different families. Two reviewers in one family are refused too. The point of a panel is a second opinion, and two seats of one model are one opinion twice.
  • A reviewer’s decision is its reply, not a file. The panel counts the JSON decision each reviewer returns, and it takes the first object in the reply even when prose surrounds it. A reply with no object is a non-acceptance with the reason recorded, which is what the run above shows for scope. A reviewer may also write notes in the workspace, and the Codex seat did.
  • A threshold equal to the reviewer count means unanimity. Set it lower when you want a majority.
  • A writing seat can write anywhere the process can. The files above start their Claude and Codex seats with permission prompts off, which is what lets a model write files. Run them in a directory you are willing to let a model change, and give a reviewing seat a read-only mode if its plugin has one.

Source

The file is examples/teams/threshold-panel.ts. The teams package page lists every input.