Judge Agent as a Service

A verdict on what your agents just said.

Send Screwtape a task and an agent’s output. It returns pass, fail, or retry, a confidence score, and the reasons. Give it several answers to the same task and it scores agreement, including the risk that the agents only agree with each other.

Screwtape.ai is this API. An unrelated arXiv paper is also called Screwtape.

Judge

POST /v1/judge takes a task, one agent output, and optional evidence and criteria. The verdict is for your framework to branch on: keep the result, discard it, or run the agent again.

Consensus

POST /v1/consensus takes several agents’ answers to the same task. You get a consensus answer, an agreement score, and a false-consensus risk when the agreement looks copied or thin.

Call it from CrewAI, LangGraph, or AutoGen

There is no special SDK. When a step finishes, POST the output the same way any HTTP client would. The curl below is the real request shape.

curl -s https://screwtape.ai/v1/judge \
  -H "Authorization: Bearer $SCREWTAPE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"task":"State the crew size and launch site.","agent_output":"The crew size was 4. The mission launched from Cape Canaveral.","evidence":["The mission launched on 2024-03-01 from Cape Canaveral.","The crew size was 4."],"criteria":["crew size","Cape Canaveral"]}'

What that input returns with no model key

{
  "verdict": "pass",
  "score": 0.9,
  "reasons": [
    "2 of 2 claims are grounded in the supplied evidence.",
    "2 of 2 criteria matched the output.",
    "Deterministic string checks only. No model was called."
  ],
  "engine": "deterministic",
  "retention": {
    "retained": false
  },
  "request_id": "8d0c2f1e-6b4a-4e3a-9c1d-2f6a0b7e5d44"
}

A consensus call

curl -s https://screwtape.ai/v1/consensus \
  -H "Authorization: Bearer $SCREWTAPE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"task":"State the crew size.","answers":[{"agent_id":"alpha","output":"The crew size was 4."},{"agent_id":"beta","output":"The crew size was 4."},{"agent_id":"gamma","output":"The crew size was 4."}]}'
{
  "consensus_answer": "The crew size was 4.",
  "agreement_score": 1,
  "false_consensus_risk": "high",
  "reasons": [
    "Answers are nearly verbatim. High agreement may be copied rather than independent.",
    "Agreement is token overlap, not a model judgment."
  ],
  "clusters": [
    {
      "size": 3,
      "agent_ids": [
        "alpha",
        "beta",
        "gamma"
      ],
      "representative": "The crew size was 4."
    }
  ],
  "engine": "deterministic",
  "retention": {
    "retained": false
  },
  "request_id": "8d0c2f1e-6b4a-4e3a-9c1d-2f6a0b7e5d44"
}

Pricing

Free

$0

100 calls per day, per key. Resets at midnight UTC.

Starter

$30

10,000 prepaid calls, used after the daily free calls.

Builder

$100

50,000 prepaid calls, used after the daily free calls.

x402

$0.005

Per call, no API key. USDC on Base, paid to 0x028Bb9A57B8C27c22f6B39dd00e7eFF1FB60344B.

Card checkout is Stripe test mode only in this version. Live keys are refused. The free key does not need Stripe.

Works with no model key

If LLM_API_KEY is unset, Screwtape stays inside the worker: schema checks, claim-versus-evidence token grounding, criteria matching, and agreement scoring. Set a key for Groq, Gemini’s OpenAI-compatible endpoint, or any other no-card free tier, and the same routes call that model instead.

Judged text is not stored unless you set retain to true with an API key. See the privacy policy.