Reviewers & Models
The reviewer catalog, explicit lineups with per-reviewer model overrides, the three-level model resolution order, and how a trial winner becomes a project pin.
A reviewer is a skill with a model behind it — every skill in the
review-agents category is one. This is the surface where you choose who reviews
a pull request, choose which model each of them runs on, and promote whatever
wins.
A lineup is not a stored object. It is the reviewers array on the review task's
own input — name one and IonWarp runs exactly it, skipping the planner:
{ "reviewers": [{ "skill": "security-review" }, { "skill": "test-holes" }] }The catalog you name reviewers from — each one's capabilities, category and
default enablement — is the reviewers resource
(IonWarp's agents collection is served under that slug, because agents is a
platform word), and the multi-agent run a lineup fans out into is
swarms. Which skills are reviewers is generated,
never listed by hand: they are the review-agents rows of the
Skills index.
Choosing the model
Resolution order, highest wins:
input.reviewers[].modelon the run — a one-off trial.ionwarp.review.model_pinsin project.md — the durable project pin.- The reviewer's own SKILL.md
execution.model— the shipped default.
A trial is that first layer, passed on the review task's own input:
{ "reviewers": [{ "skill": "security-review", "model": "moonshotai/kimi-k3" }, { "skill": "test-holes" }] }An entry with no model runs whatever pin resolves. Model ids are validated by
syntax only (org/model), so any OpenRouter model works on day one and is
priced from the provider's actual usage cost. An entry naming a skill that is not
in the catalog, or a model id that is not org/model, is reported as a warning
row — it never fails the request.
The same reviewers array is accepted on a task's runs route, which re-plans that
task's next run against the PR's current head without creating a new task.
ionwarp-planner picks the lineup whenever you do
not; benchmark is the lab that ranks candidates
against a seeded PR.
Grading a trial, then promoting the winner
GET /api/v1/tasks/{task_id}/status returns reviewers_telemetry: one row per
reviewer with the model that actually ran, its grade and verdict, findings
count, real cost, and phase timings. That is the grading source for every trial —
the PR comment is a rendering of it, never the record.
Promotion is a config edit, not a data write. Read project.md with skills_get
(skill id project), patch the frontmatter, and write the complete content back
with skills_update:
---
config:
ionwarp.review.model_pins:
security-review: moonshotai/kimi-k3
---A winner that holds up across projects graduates into the reviewer's own SKILL.md default.
Next: Reviews for what a lineup produces · Scorecards for the same model-pin mechanism on repo-wide rubrics · Control Plane for the brakes that stop a run before any reviewer starts.