ModelRig Quickstart Routing & reliability Route bundles Probes Bake-offs & replay How it fits Grade protocol Optimization loop Caching lifecycle Bring your traces (OTLP) Observe a pipeline Migration playbook (T0–T2) Recognition playbooks Tenants & statements Published receipts Provenance & trust Artifact content custody The MCP oracle Use-case templates Template: ticket triage Template: document extraction Template: CS next action Template: lead qualification Template: compliance review Template: catalog cleansing Template: call disposition QA Template: financial classification Template: medical classification Leaderboard

Template: CS next action

Recommend the next action a customer-success team should take on an account, grounded in the account's own signals, and hand off the ones that need a person. This page is one of the use-case templates — a starting point, not a finished route. The machine-readable source is node_modules/modelrig/templates/cs-next-action.json.

Does this task fit?

CS next-action fits the shipped teach → calibrate → grade → optimize loop when four conditions hold. (1) Your accounts and playbooks are stable enough that a recommendation that made sense last quarter still makes sense this quarter. (2) Your CS team can write down what a good next action is for a given account state, which is the grading guide below. (3) An experienced CSM can grade a batch of past recommendations against what actually happened or what they would have done. (4) You manage enough accounts that calibration and optimization pay back. This template gives you an action taxonomy shell and a grading guide to fill in. It makes no claim that a model should decide account strategy — it is a starting point for turning your playbook into a graded, improvable route, with a human on the accounts that matter.

Starter schema

Replace every TODO with your own taxonomy; the enum slots ship without values on purpose, so an unfilled template refuses to look finished.


{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$comment": "STARTER SCHEMA. Replace every TODO with your own playbook before use. Enum slots ship without values on purpose — add the actions and urgency levels your CS team actually uses.",
  "title": "CsNextAction",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "recommended_action",
    "urgency",
    "needs_human"
  ],
  "properties": {
    "recommended_action": {
      "type": "string",
      "description": "The single next action to take on this account. TODO(enum): add an \"enum\": [ ... ] listing YOUR playbook actions (e.g. the plays your team already runs), so the model chooses from your set rather than inventing one.",
      "$comment": "TODO(enum): add your playbook actions as the enum for this field."
    },
    "urgency": {
      "type": "string",
      "description": "How soon the action should happen. TODO(enum): add an \"enum\": [ ... ] with YOUR urgency levels.",
      "$comment": "TODO(enum): add your urgency levels as the enum for this field."
    },
    "rationale": {
      "type": "string",
      "description": "One or two sentences naming the account signals that motivate the action (usage trend, support load, renewal date, sentiment). The grader checks that the rationale is grounded in real signals."
    },
    "needs_human": {
      "type": "boolean",
      "description": "True when the account is high-stakes or the signals are ambiguous and a CSM should decide. Pairs with the escalation band in the grading guide."
    }
  }
}

Starter grading guide

The starter criteria run as written — sharpen each one in your team's own words as you grade. They are in the exact jsonb shape the set_task_settings write path validates — binary checks, each with a one-sentence pass and fail. There is no pass_threshold here: that lives in the route's grade: block.

action-fits-signals — Action fits the account's signals

grounded-rationale — Rationale cites real signals

stays-in-remit — Recommendation stays within CS remit

safe-default-when-unsure — Ambiguous accounts get a safe default or a human

The guide's escalation band starts at epsilon: 0.1: a grade within that distance of the route's pass threshold is treated as judge-uncertain and sent to a human. It is a starting band — tune it as your grader calibrates.

Golden checklist

Roughly twenty examples that cover:

Escalation starter

Start by escalating to a human whenever the model sets needs_human, and always for your highest-value or clearly at-risk accounts regardless of the recommended action. The machine-side band lives in starter_guide.escalation.epsilon: a grade within that distance of your route's pass threshold is treated as judge-uncertain and routed to a CSM. The 0.1 here is a starting band — keep it wide until an experienced CSM has graded enough recommendations to trust the grader, then narrow it.

Apply it

By hand: replace the TODO action taxonomy with your own playbook actions and urgency levels; sharpen each starter criterion in your team's words, keeping the in-remit guard that stops the model committing pricing or contract terms; gather the goldens the checklist describes; set the escalation band.

From a coding agent: the template feeds through the tools that already exist — create_route drafts the route bundle from the starter schema (files only, never your source), and set_task_settings (the task-settings scope) authors the grading guide as-is — the starter criteria run as written; sharpen them to your own rules as you grade. No new tool is involved. See the use-case templates overview for the full two-path walkthrough.