IonWarp logoIonWarp
Get started
IonWarp Docs
API

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:

  1. input.reviewers[].model on the run — a one-off trial.
  2. ionwarp.review.model_pins in project.md — the durable project pin.
  3. 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.

On this page

IonWarp logoIonWarp

Ready to build? Connect an agent and go — no credit card needed to start.

Get startedSee our plans