Skip to main content
Working with an agent? Give them a link to this page as markdown.

Graders

A grader is a versioned grading rubric. It has prompt text plus a set of score dimensions. An LLM applies these to a trajectory. Running a grader produces a grade. This includes one value per score dimension, plus optional explanation text. Grades are what you review in the Analyzer and query through the API.

What a grader defines​

  • Prompt text. A header before the score definitions and an optional footer after them. Watcher composes the full grading prompt from these parts. It adds a response-format section it generates from the grader's configuration. The rubric text and the output contract cannot drift apart.
  • Score dimensions. Each dimension has a key, a display name, and a type. The type is integer, float, boolean, or string. It also has a description and rubric text that becomes part of the prompt. The built-in graders score each dimension from 1 to 10, where higher is worse. A grader may also define no dimensions. It can produce only prose output, such as a title and summary.
  • A default model. The LLM the grader runs on. The caller can override it. It includes optional reasoning-effort settings.
  • Output options. Whether a grade includes the grading model's thinking, a written explanation, and a summary. These are in addition to the dimension values.

What a grade records​

A grade is one grader version applied to one trajectory. It stores the value of each score dimension. It also stores the optional thinking, explanation, and summary text. It records the model that produced it and the exact grader version used. You can always recover the configuration behind a score. The same trajectory can hold many grades. They come from different graders, from different models, or from re-grading. See what a grade covers for how grades attach to trajectories.

Versioning​

Grader versions are immutable. Editing a grader never changes an existing version. It creates a new version and archives the previous one. Existing grades keep pointing at the version that produced them. Anything configured to run a grader by its ID picks up the latest version automatically.

Where graders run​

  • Trailing review grades a session's latest trajectory while the session runs and after it ends. It runs on the Watcher server with the built-in Summarize and Deep Review graders. There is nothing to configure on developer machines.
  • Blocking review uses graders to score a proposed tool call before it runs. The pipeline stages read a single integer dimension keyed decision_score from their grader.
  • On demand, through the API or the Python SDK. A grade call runs any grader against stored trajectories.

Custom graders run when called through the API or SDK. They do not run in blocking review, which always uses the managed monitors below, nor in server-side trailing review.

Monitors​

Watcher manages monitor prompts and models. It updates them with releases. Before upgrading, check the release pages for required model-access or configuration steps. Clients address monitors by role. The roles are triage and gateway. summarize and deep_review run server-side on a schedule. The Watcher client sends each gated call to the gateway hook endpoint, which runs triage and gateway by role. Other clients can use GET /v1/monitors and POST /v1/monitors/{role}/grade rather than grader UUID.

Their customization surface is custom instructions, shared across the organization. Use them to add policies such as "Never allow AWS calls by the agent." An admin sets them in the Analyzer's Custom Instructions editor or through the monitor customization API.

Instructions apply when the managed triage and gateway monitors run, including through gateway hooks. They do not affect custom graders or the scheduled summarize and deep_review monitors. They add organization policy without replacing a monitor's rubric or output format. Calls resolved by deterministic checks do not reach these monitors.

Built-in graders​

Watcher ships built-in graders. They cannot be edited or deleted, but you can copy one as the starting point for your own.

GraderRole
SummarizeProse only. A title and short summary of the trajectory, surfacing any security concerns. No score dimensions. The default trailing-review grader.
Default - SecurityScores a trajectory across nine security failure-mode dimensions. Examples are secret exposure, data exfiltration, and prompt injection.
Agent ReliabilityScores a trajectory across nine reliability dimensions. Examples are premature completion claims, fabricated information, and ignoring user corrections.
Policy TriageBlocking review's fast pre-filter. Scores a proposed tool call cheaply and can only auto-approve it.
Policy GatewayBlocking review's deep evaluator. Its decision score is compared against per-tool thresholds to allow, deny, or escalate the call.

Custom graders​

The Analyzer marks Legacy & custom monitors as deprecated. Custom graders remain available through the API and SDK, but blocking review no longer runs them: a grader still pinned in policy_monitors.policy_triage_grader_id or policy_gateway_grader_id is ignored. For organization policy in blocking review, use custom instructions above. They do not replace bespoke score dimensions or on-demand graders.

The Analyzer's Monitors page can create a grader from scratch. It can also copy an existing one as a starting point. You can edit its prompt, model, and score dimensions. This includes adding and removing dimensions. New dimensions created in the page are integer or string typed. Float and boolean dimensions are created through the API or SDK. They offer the same authoring otherwise. The custom grader prompt is a runbook. It walks a coding agent through the API route. A custom grader is either visible to your whole organization or unlisted. If unlisted, only its creator sees it in grader lists. It still runs, and its scores are visible like any grader's.