crossreview · v1.0.0 · 2026-09-30 · sha256 3552816d74dfdde0
crossreview v1.0.0A
Immutable. This exact content never changes and is served at /api/v1/blob/3552816d74dfdde0.
---
name: crossreview
metadata:
version: 1.0.0
description: >
Run when the user invokes /crossreview or asks for a quorum review: fan a code review out
to several external console code agents (claude, codex, coddy, opencode, cursor, devin, koda)
and/or internal reviewers, then merge the findings into one verdict. First run detects the
installed CLIs and asks which agents and models to use; the roster is stored for reuse.
---
# Crossreview — quorum code review
Drives the bundled `crossreview` subagent, which orchestrates the actual fan-out. This skill
is the interactive front-end: detection, the questions about agents and models, and writing the
roster happen here, because a subagent cannot ask the user questions.
**Agent mode required.** Setup writes files and the coordinator spawns and shells out; in plan
or ask mode none of that works. If the session is not in agent mode, tell the user to switch to
it first and stop.
## Step 1 — the roster
The roster lists the reviewers. Read `${CODDY_HOME}/crossreview.json` first — it is the
preferred location. If it is absent, look for `.coddy/crossreview.json` in the workspace.
A **workspace** roster is executable configuration that arrived with the checkout, so it is
honoured only after the user approves exactly this file: compute its sha256, check
`${CODDY_HOME}/crossreview-trust.json` for an entry with this workspace's canonical path and
that digest. Without one, show the user the reviewer commands the file declares and `question`
them whether to trust it; on approval append `{"workspace": "<canonical path>", "sha256":
"<digest>"}` to that JSON file (create it if needed). On refusal, ignore the workspace roster.
If the roster is missing entirely, or the user asked `/crossreview setup`, run setup:
1. Run `detect-agents.sh` next to this SKILL.md (`run_command`, `sh <skilldir>/detect-agents.sh`;
on Windows use `detect-agents.ps1` via `powershell -File`). If the script is gone, fall back
to probing `command -v` (or `where`) for `claude codex coddy opencode cursor-agent agent cursor
devin koda` yourself. The output is one line per detected agent:
`agent <TAB> binary_path <TAB> models_cmd <TAB> run_template`.
2. `question` with `multiple: true` — which **detected** agents to use as reviewers. Never offer
an agent the detection did not find.
3. For each chosen agent whose `run_template` contains a `{model}` placeholder, pick the
models. When the line carries a `models_cmd`, run it (`run_command`) and offer its output
as `question` options (`multiple: true`). When it does not — claude and coddy (whose models
live in `models[].model` of its config; read them with `config_get models` when the user
wants the local coddy as a reviewer) — ask with `custom: true`; even a custom question
needs at least one option, so offer "Enter model id manually". One reviewer entry per
(agent, model) pair the user picks. An agent whose `run_template` has no `{model}`
placeholder — koda's default is `koda "$(cat {brief})" > {out}` — contributes one reviewer
entry with no model question; if that CLI takes a model flag, the user edits it into the
stored `command` by hand.
4. Write the roster to `${CODDY_HOME}/crossreview.json`:
```json
{"version": 1, "min_reviewers": 2, "reviewers": [
{"kind": "cli", "agent": "codex", "binary": "codex", "model": "gpt-5.6-luna",
"command": "codex exec -m gpt-5.6-luna --sandbox read-only - < {brief} > {out}",
"prompt_via": "stdin"},
{"kind": "internal", "definition": "explore",
"model": "vendor/model-id", "reasoning": "off"}
]}
```
Substitute the chosen model into the template's `{model}` placeholder so the stored
`command` is fully resolved — the coordinator only replaces `{brief}` and `{out}`. `kind:
"internal"` entries run as `explore` children of the coordinator on a model Coddy already
knows; set `reasoning` only when the user picked a level. `min_reviewers` defaults to 2 —
raise it if the user asks for a stricter quorum. To also use the workspace roster location,
write `.coddy/crossreview.json` instead (it will ask for approval on the next run).
## Step 2 — the review
1. Resolve the scope from the user's message: a git ref range, a file list, a document or plan
path — whatever they named. Default: the uncommitted work in progress (`git diff HEAD` plus
untracked files) in the current workspace.
2. `spawn_agent` with `agent: "crossreview"` (foreground — do not detach it). The prompt names
the scope, the roster path, and the skill directory (the coordinator finds
`detect-agents.sh` there when no roster exists).
3. When it returns, restate the verdict and the deduplicated findings in your reply — the
coordinator's final message is the whole review.