The same agent, tools and scenario on the raw Messages API (hand-written harness) and on the Claude Agent SDK (Claude Code runs the harness). Same model (, effort ), same 7 turns, clean state each run.
Seven stops over two sessions. Session 2 is a brand-new agent instance that only knows what it reads from disk. Each stop shows the tools both versions called and what the turn cost.
Input-side tokens per turn, split into fresh input, cache reads and cache writes, plus output. Cache reads are cheap ($0.20/M) and cache writes are expensive ($5/M on our API, $8/M with Claude Code's 1-hour cache).
API: non-blank, non-comment lines per harness file. SDK: lines marked # replaces: <name>.
Nine pass/fail checks. Seven of them read saved state (memory.json, trips.json, tool log), not the reply text.