Skip to content

Benchmark: run the paired premise-checking A/B on Claude (Copilot SDK and Claude Agent SDK) #2449

Open

Description

@bradygaster

Summary

Run Squad's paired premise-checking A/B benchmark (scripts/premise-checking-ab.mjs, on branch bradygaster-premise-checking-plan) on Claude. That gives Claude users a measured "Claude alone vs. Claude + Squad" comparison. Related: #2438 (Claude Code projection).

Claude users will ask two separate questions:

  1. Model: does Squad help when the model is Claude?
  2. Harness: does Squad help inside Claude Code itself?

Results from Copilot alone answer neither.

Design: one fixture, varying only the host

Copilot SDK (existing driver) Claude Agent SDK (new driver)
Claude model Phase A (done for calibration, below) Phase B
gpt-5.3-codex existing results n/a

The fixture, oracle criteria, arms, prompt sources, budgets, blinding and adjudication all stay frozen. Pin one Claude model ID across both phases.

Phase A: Claude model through the Copilot SDK

Implemented on branch squad/claude-ab-pilot (commit fae48038):

  • --model <id>: recorded in the run manifest. Resuming a campaign under a different model is refused. The default stays gpt-5.3-codex, so existing manifests still validate.
  • --reviewer-check: a scripted truth-first run that is told to dispatch the Fact Checker once. It verifies reviewer accounting end to end. It is not a measured arm.
  • --revalidate-pilot: accepts a pilot with no Fact Checker dispatch only if a reviewer check passed on the same model.
  • Dispatch counts: pilot and paired validation now report Fact Checker dispatches per arm instead of failing when there are none.

Phase B: Claude Agent SDK driver (to do)

  • Driver interface: put the harness's Copilot SDK calls behind a HostDriver interface (preflight, createSession, sendAndWait, abort, normalized message/usage/tool events). Re-run one frozen paired row and match its protocol hashes to prove the Copilot driver is unchanged.
  • Claude driver: add --host claude using query().
    • Custom tools go through an in-process MCP server.
    • allowedTools is limited to read_evidence and task, and settingSources: [] keeps user and project config out.
    • canUseTool rejects everything else.
    • Usage comes from assistant messages plus total_cost_usd on the result.
  • Fact Checker dispatch: keep it as a separate query() session, as it is today. Native Agent-tool dispatch can come later as an optional fourth arm (truth-first-native).
  • Ledger: record cache-read and cache-write input separately, but charge budgets on all input classes combined.
  • Verify the mapping: check it against current Claude Agent SDK docs before building.

Results so far (2026-11-09, claude-sonnet-5.5 through Copilot)

Pilot (revenue-midflight-agent, all 3 arms):

  • 2 coordinator calls per episode.
  • About 78K input tokens per episode, roughly half of them cache reads, and about 310 output tokens.
  • 7–20 s per episode.
  • Claude made no Fact Checker dispatch. That failed the original gate until the reviewer check passed (2 reviewer calls, about 17K input tokens, every evidence read traced).

Paired calibration (16 runs: 8 families × baseline/truth-first):

  • 16 of 16 completed, and the instrumentation check passed.
  • 927,615 input tokens (340K cache reads, 587K cache writes) and 5,743 output tokens, in 125 s altogether.
  • About $1.60 at API rates on Sonnet 5.5 and about $3.10 on Opus 5.5.
  • Fact Checker dispatches: 0 of 8 in baseline and 0 of 8 in truth-first.
  • Before blinded adjudication:
    • Both arms refused every unsupported premise and kept authorized work going.
    • Truth-first answers state more often what wasn't checked or dispatched.
  • Blinded human adjudication is still to do.

Takeaway: on this fixture, Claude handles the premises carefully at baseline without a reviewer call. A Claude write-up shouldn't promise a large truth-first gain here. Instead it should:

  • report the reviewer cost Claude avoids;
  • add harder episodes, with ambiguous evidence or claims that would trigger an action, where review should matter.

Projected cost (Claude API rates, plus about 50% for retries)

Campaign Sonnet 5.5 Opus 5.5
Paired calibration (16) ~$2–4 ~$4–8
Full plan (20 episodes × 3 arms) ~$8–15 ~$16–30

Through Copilot, runs use premium requests instead. Phase B adds Claude Code's own system prompt when using the claude_code preset, so measure that in its pilot.

Scope

This is a prompt-behavior evaluation on a synthetic fixture, not a coding benchmark. Pair it with a separate coding benchmark, for example a SWE-bench Verified subset comparing Claude Code alone with Claude Code + Squad.

Tasks

  • Land squad/claude-ab-pilot (or rebase it onto the harness branch once that is on dev)
  • Blinded adjudication of the Sonnet 5.5 paired calibration
  • Harder fixture episodes where review should change the outcome
  • Extract HostDriver; prove the Copilot driver unchanged
  • Claude Agent SDK driver (--host claude): pilot, then paired calibration
  • Optional truth-first-native arm
  • Publish the write-up: per-family tables, tokens/cost/time, manifests, raw JSONL, and a one-command rerun
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    type:spikeResearch/investigation — produces a plan, not code

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions