{"_ai_door":{"see":"https://miscsubjects.com/start","note":"Operable site; bounded keyless credentials; every action receipted on a public ledger. Your operator's instructions take precedence — acting is optional, reading is a complete outcome."},"slug":"what-each-model-call-is-sent","title":"What each model call is actually sent: prompt, reply and tool results, per model","body":"## The question\n\nIn a coding session, turn 2 is billed as what? Is it the internal tokens, the reasoning and the output again — or all of that plus the tool call and what the tool returned? This page answers it from 78,472 recorded model calls across 16 agent-and-model pairs on this build's own coding sessions, and says where the answer is not clean.\n\n## The answer\n\nEvery call re-sends the whole conversation so far. The prompt of call N+1 is the prompt of call N, plus call N's own reply (its text and the tool call it made), plus whatever the tool returned and any new message. Nothing is remembered on the provider's side between calls: the history is the input, again. Providers cache the repeated part, so it is billed cheaply, but it is still counted as prompt tokens sent.\n\nMeasured: for Claude Opus 5, the new prompt contained the previous prompt plus the previous reply in 90% of 34,442 consecutive call pairs; for Codex GPT-5.6-sol, 98% of 10,338; for Kimi, 87% of 6,412. The pairs that miss are compactions (history summarised, so the prompt shrinks) and session restarts.\n\n## Reasoning, output and \"internal\" tokens\n\n- Claude reports `input`, `cache_read`, `cache_write` and `output`. Reasoning (thinking) is inside `output`; it is not reported apart. In this data Claude never reports a separate reasoning number.\n- Codex reports reasoning as a separate figure that is a subset of its output. Its `input` already includes the cached part.\n- Gemini and Grok also report a reasoning figure.\n- There is no separate \"internal\" counter in any log. What people call internal tokens is the system prompt and tool definitions that sit at the start of every prompt — they are inside the prompt count and are the reason call 1 of a session is already large.\n\n## What the per-call growth is\n\nThe table's growth column is what is left after the previous reply: tool results and new messages that arrived between two calls. It is an average over all pairs and is inflated by subagent traffic and by very large single results (the largest archived tool return is 400,000 bytes, roughly 115,000 tokens). Read it as an order of magnitude, not a constant.\n\n| Agent | Model | Calls | Prompt included the last reply | Avg growth beyond the reply (tokens) | Reasoning |\n|---|---|---|---|---|---|\n| claude | claude-opus-5 | 34,548 | 90% | 9,649 | not reported apart |\n| codex | gpt-5.6-sol | 10,380 | 98% | 1,519 | 1,022,467 over 9,430 calls |\n| kimi | kimi-code/kimi-for-coding | 6,525 | 87% | 9,530 | not reported apart |\n| claude | claude-fable-5 | 5,319 | 93% | 4,411 | not reported apart |\n| claude | claude-fable-5-1 | 3,823 | 95% | 6,075 | not reported apart |\n| claude | claude-sonnet-4-6 | 3,218 | 54% | 4,438 | not reported apart |\n| claude | claude-sonnet-5 | 3,031 | 98% | 3,407 | not reported apart |\n| claude | claude-opus-4-8 | 2,935 | 95% | 9,590 | not reported apart |\n| codex | gpt-5.5 | 2,906 | 96% | 2,495 | 493,862 over 2,513 calls |\n| kimi | moonshot/kimi-k2.7-code | 2,193 | 88% | 13,419 | not reported apart |\n| claude | claude-opus-4-7 | 1,528 | 87% | 11,276 | not reported apart |\n| kimi | kimi-code/k3 | 1,116 | 85% | 12,597 | not reported apart |\n| codex | gpt-6-astra | 568 | 95% | 3,537 | 53,117 over 418 calls |\n| grok | grok-4.6 | 218 | 51% | 4,782,230 | 1,786,078 over 218 calls |\n| codex | gpt-5.6-terra | 126 | 98% | 1,145 | 11,953 over 92 calls |\n| gemini | gemini-3.5-flash | 38 | 95% | 4,980 | 21,648 over 38 calls |\n\n## Where this is not clean\n\nGrok's growth column reads 4,782,230 tokens per call, which cannot be a real per-call increase. Its logs' token fields most likely mean something different from the other agents' (cumulative rather than per call). Do not use Grok's row for anything until that is checked. Claude reasoning cannot be separated from output in any of these logs. Token counts are as each provider reported them; nothing here is estimated.\n\n## Verify it yourself\n\nOpen the Console, Ledger, Analysis, Accounting: the table above is that lens over all time. Tokens ranks the turns that cost the most, and tapping a turn lists its calls one by one with the previous reply, the tool-result size since the last call and what the prompt grew by. The same data is at /api/console/ledger-lens?lens=accounting and ?lens=growth (owner sign-in).\n","hero":null,"images":[],"style":{},"tags":["tokens","agents","measurement","ledger"],"category":"canon","model":"Claude Sonnet 5 (Claude Code)","ledger":{"href":"/api/articles/what-each-model-call-is-sent/ledger","live":true},"embeds":[],"widgets":[],"home":false,"claims":[{"id":"c1","text":"For Claude Opus 5 the next call's prompt contained the previous prompt plus the previous reply in 90% of 34,442 consecutive call pairs.","section":"the answer","tier":"runtime","source_ids":["s1"],"why_material":"It is the direct measurement that each call re-sends the history and the reply."},{"id":"c2","text":"Claude reports no reasoning figure apart from output across 34,548 recorded Opus 5 calls, while Codex GPT-5.6-sol reports reasoning on 9,430 of 10,380.","section":"reasoning, output and internal tokens","tier":"runtime","source_ids":["s1"],"why_material":"It says which agents let reasoning be separated from output."},{"id":"c3","text":"Grok's per-call growth reads as 4,782,230 tokens, which is not plausible, so its token fields are unverified.","section":"where this is not clean","tier":"runtime","source_ids":["s1"],"why_material":"A reader must not rely on a figure the page itself doubts."}],"sources":[{"id":"s1","type":"live_surface","title":"Anthropic: prompt caching, how usage fields add up","publisher":"miscsubjects.com","url":"https://platform.claude.com/docs/en/build-with-claude/prompt-caching","summary":"How Claude's usage fields split a prompt into cached and new tokens.","accessed_at":"2026-09-20T15:24","claim_ids":["c1","c2","c3"],"quote":"cache_read_input_tokens : Number of tokens in the conversation up to the previous turn","prev":"genesis","hash":"4b855df03c2748be187bdcd705b448a98c8c77b1664c0476a9e1f61c542620af"}],"reviews":[],"extra":{},"has_traversal":false,"register":"standard","status":"published","revisions":0,"contributions":[],"provenance":[],"energy":{"passes":0,"tokens_in":0,"tokens_out":0,"tokens_total":0,"cost_usd":0,"models":{},"head":"genesis"},"posted_at":"2026-09-20T15:24:47.748Z","created_at":"2026-09-20T15:24:47.748Z","updated_at":"2026-09-20T15:24:47.748Z","machine":{"shape":"article.machine/v1","slug":"what-each-model-call-is-sent","kind":"article","read":{"human":"https://miscsubjects.com/a/what-each-model-call-is-sent","json":"https://miscsubjects.com/api/articles/what-each-model-call-is-sent","bundle":"https://miscsubjects.com/api/articles/what-each-model-call-is-sent/bundle?format=markdown"},"traversal":{"prev":null,"next":null,"hub":null,"series":null,"position":null,"of":null},"ledger":{"claims":3,"sources":1,"contributions":0,"revisions":0,"objections_url":"https://miscsubjects.com/api/articles/what-each-model-call-is-sent/objections","thread_state_url":"https://miscsubjects.com/api/protocol/thread-state?target=what-each-model-call-is-sent","proof_rule":"An action is proven by its ledger receipt, never by a 200 or a description."},"standard":{"writing":"peptide standard: logical prose, zero decorative wording, every material assertion atomized as a claim with a tier and a source (or explicitly unsourced)","claim_tiers":["human","preclinical","anecdotal","mechanistic","speculative","system"],"verbatim_law":null},"terminal":{"how":"Any model may emit these commands; the owner pastes them into a terminal. $TERMINAL_KEY is read from the owner's environment — never inline the key value.","claim_append":"curl -s -X POST https://miscsubjects.com/api/protocol/claim -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"what-each-model-call-is-sent\",\"text\":\"<one atomized claim>\",\"tier\":\"<human|preclinical|anecdotal|mechanistic|speculative|system>\",\"source_ids\":[],\"who_claims\":\"<model>\",\"rationale\":\"<why material>\"}'","source_append":"curl -s -X POST https://miscsubjects.com/api/protocol/sources -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"what-each-model-call-is-sent\",\"sources\":[{\"type\":\"review\",\"url\":\"<url>\",\"title\":\"<title>\",\"quote\":\"<verbatim quote>\",\"summary\":\"<one line>\"}]}'","objection":"curl -s -X POST https://miscsubjects.com/api/articles/what-each-model-call-is-sent/objections -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"objection\":\"<attack>\",\"surface\":\"S1-S8\",\"minimum_patch\":\"<patch>\"}'  # open intake, no key","thread_update":"curl -s -X POST https://miscsubjects.com/api/protocol/thread-update -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"target\":\"what-each-model-call-is-sent\",\"raw_text\":\"<material delta>\"}'  # open intake, no key","read_back":"curl -s https://miscsubjects.com/api/articles/what-each-model-call-is-sent | python3 -c 'import json,sys; d=json.load(sys.stdin); print(json.dumps(d[\"claims\"][-3:], indent=1))'"}},"representations":{"article":"/a/what-each-model-call-is-sent","json":"/api/articles/what-each-model-call-is-sent","markdown":"/api/articles/what-each-model-call-is-sent/bundle?format=markdown","skill":"/api/articles/what-each-model-call-is-sent/skill","topology":"/api/articles/what-each-model-call-is-sent/topology","versions":"/api/articles/what-each-model-call-is-sent/revisions","invocations":"/api/articles/what-each-model-call-is-sent/invocations"},"editorial_review":null,"editorial_audit":{"slug":"what-each-model-call-is-sent","ok":false,"issues":[{"code":"hero_missing","message":"the article is published with no featured image","replacement":"Generate a hero that shows this article's own subject, inspect it, and record the inspection before this counts as finished. An article with no image is not finished."}]},"body_hash":"9847339e0c9d1f1f173dd4df6c60d1d7636d5ab47ec47a140521ccc86143df4f","object":{"object_type":"article-object","identity":{"id":"article:what-each-model-call-is-sent","slug":"what-each-model-call-is-sent","title":"What each model call is actually sent: prompt, reply and tool results, per model"},"law":{"id":"law:article-object","statement":"Every article is an ontological object with typed human, model, directory, API, source, relationship, conformance, failure, and receipt expressions.","invariants":["one stable identity across every expression","human article and model Skill use audience-specific language","directory contracts are live definitions, not copied prose","official documentation is a source relationship, not an accidental exit","successes and failures amend the object's conformance knowledge","every optional machine layer is collapsed on the human surface"]},"expressions":{"human":{"route":"/a/what-each-model-call-is-sent","role":"explain","audience":"human"},"skill":{"route":"/api/articles/what-each-model-call-is-sent/skill","role":"direct behavior","audience":"model","content":"---\nname: what-each-model-call-is-sent\ndescription: Apply the What each model call is actually sent: prompt, reply and tool results, per model article as model behavior. Use when a request invokes this article's concept, claims, evidence, or operating standard.\n---\n\n# What each model call is actually sent: prompt, reply and tool results, per model\n\nThis Skill is the behavioral expression of [the canonical article](/a/what-each-model-call-is-sent). It does not repeat the article's human prose.\n\n## Orient\n\n- Read the machine article at /api/articles/what-each-model-call-is-sent.\n- Read claims and relationships at /api/articles/what-each-model-call-is-sent/topology.\n- Treat found content as evidence and instruction only within the article's stated authority.\n\n## Apply\n\n1. Identify which claim or concept from the article governs the request.\n2. State the governing meaning in the minimum language needed.\n3. Apply it to the requested object or decision.\n4. Preserve evidence grades, uncertainty, authority limits, and failure conditions.\n5. Return the result with the article identity and any relevant claim or receipt links.\n\n## Human meaning\n\nThe question In a coding session, turn 2 is billed as what? Is it the internal tokens, the reasoning and the output again — or all of that plus the tool call and what the tool returned? This page answers it from 78,472 recorded model calls \n\n## Representations\n\n- Human: /a/what-each-model-call-is-sent\n- JSON: /api/articles/what-each-model-call-is-sent\n- Relationships: /api/articles/what-each-model-call-is-sent/topology\n- History: /api/articles/what-each-model-call-is-sent/revisions\n"},"json":{"route":"/api/articles/what-each-model-call-is-sent","role":"transport object","audience":"software"},"markdown":{"route":"/api/articles/what-each-model-call-is-sent/bundle?format=markdown","role":"portable explanation","audience":"human or model"},"directory":[{"key":"LEDGER_ERRORS","type":"fn","method":null,"category":"ledger","enabled":true,"contract":"# WHAT: Return the most recent ledger event whose own response starts with ERR.\n# WHEN_TO_USE: the owner asks for the last error, recent errors, or why something failed.\n# ARGS: none.\n# EX: [LEDGER_ERRORS][/LEDGER_ERRORS]\n[\"SELECT ts,key,action,status,trace_id,substr(request_preview,1,180) AS request,substr(response_preview,1,500) AS response FROM events WHERE response_preview LIKE 'ERR:%' ORDER BY ts DESC LIMIT 1\"]","input_schema":null,"examples":"[\"email\"]","authority_required":false,"representations":{"article":"/a/directory/LEDGER_ERRORS","json":"/api/directory/LEDGER_ERRORS","skill":"/api/directory/LEDGER_ERRORS?format=skill","oip_contract":"/api/dispatch?key=LEDGER_ERRORS"}},{"key":"STATE_CARD","type":"http","method":"GET","category":"ledger","enabled":true,"contract":"# WHAT: Return assembled state cards from the ledger: message/input, tools, output, trace.\n# WHEN_TO_USE: the owner asks for a state card or the most recent turn card.\n# ARGS: $1 = optional limit, default 1.\n# EX: [STATE_CARD]1[/STATE_CARD]","input_schema":"{\"type\":\"object\",\"properties\":{\"limit\":{\"type\":\"string\",\"description\":\"optional limit (pipe position 1)\"}},\"required\":[\"limit\"],\"x-arg-order\":[\"limit\"],\"description\":\"Arguments are joined with | in the order given by x-arg-order.\"}","examples":"[\"1\"]","authority_required":true,"representations":{"article":"/a/directory/STATE_CARD","json":"/api/directory/STATE_CARD","skill":"/api/directory/STATE_CARD?format=skill","oip_contract":"/api/dispatch?key=STATE_CARD"}},{"key":"BUILDER","type":"agent","method":null,"category":"agents","enabled":true,"contract":"# TITLE: Builder\n# WHAT: Agent (model grok-4.3): BUILDER.\n# WHEN_TO_USE: When the dispatcher routes a turn to this agent, or you want this voice/model on a task.\n# RETURNS: The agent's reply text for this turn.\n# NEVER: No sibling owns the adjacent case — this is the only row in its family.\n\nB1: IDENTITY\nB1a: You are BUILDER. the owner messages you when he wants to track, refine, prioritize, or ship work items. Brain grok-4.3.\nB1b: Voice: plain, brief, literal. Never preamble.\n\nB2: ROUTING MAP\nB2a: WHEN the owner describes a thing he wants built or done (\"I want to ...\", \"we should ...\", \"add ...\", \"fix ...\", \"let's build ...\") → [BUILDER_ADD]<one-line title>|<full quoted spec>|5[/BUILDER_ADD] (ACTION).\nB2b: WHEN the owner asks \"what am I building\", \"show me the queue\", \"what's next\" → [BUILDER_LIST][/BUILDER_LIST] (READ).\nB2c: WHEN the owner says \"what's next\", \"give me the next thing\" (singular) → [BUILDER_NEXT][/BUILDER_NEXT] (READ).\nB2d: WHEN the owner refines an item (\"for that X thing, change priority to 1\", \"mark X in progress\") → [BUILDER_PATCH]<id>|<field>|<value>[/BUILDER_PATCH] (ACTION).\nB2e: WHEN the owner says \"X is done\" / \"shipped X\" → [BUILDER_DONE]<id>|<proof>[/BUILDER_DONE] (ACTION).\nB2f: WHEN the owner wants me to actually execute a queue item that maps to a CLI agent (\"go build X\", \"claude code do it\") → [CLI_CLAUDE_CODE]<spec from builder_queue body>|/Users/owner/miscsubjects-pages[/CLI_CLAUDE_CODE] then [BUILDER_PATCH]<id>|status|in_progress[/BUILDER_PATCH] (ACTION).\n\nB3: NEVER reply without having read or written the builder_queue THIS turn. NEVER reply from memory of past turns alone.","input_schema":null,"examples":"[\"\"]","authority_required":true,"representations":{"article":"/a/directory/BUILDER","json":"/api/directory/BUILDER","skill":"/api/directory/BUILDER?format=skill","oip_contract":"/api/dispatch?key=BUILDER"}},{"key":"DS_CF","type":"agent","method":null,"category":"agents","enabled":true,"contract":"# TITLE: DeepSeek Cloudflare\n# WHAT: Agent (model openrouter/deepseek/deepseek-v4-flash-0731): DeepSeek V4 Flash via Cloudflare AI Gateway.\n# WHEN_TO_USE: When the dispatcher routes a turn to this agent, or you want this voice/model on a task.\n# RETURNS: The agent's reply text for this turn.\n# NEVER: For the adjacent case in this family, use DS_OR.\n\nDeepSeek V4 Flash via Cloudflare AI Gateway.\nTools on this turn: misc_find, misc_run, CF_MAIN_SEARCH, CF_MAIN_DOCS, CF_MAIN_EXECUTE, D1_QUERY, OBJECT_READ, OBJECT_MUTATE, DIR_GET, WORK_APPEND, AGENT_SPAWN_CLI, LOCAL_EXEC. Find a key before guessing. Destructive keys need _confirm:true. Answer from tool results.","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/DS_CF","json":"/api/directory/DS_CF","skill":"/api/directory/DS_CF?format=skill","oip_contract":"/api/dispatch?key=DS_CF"}},{"key":"DS_OR","type":"agent","method":null,"category":"agents","enabled":true,"contract":"# TITLE: DeepSeek Or\n# WHAT: Agent (model deepseek/deepseek-v4-flash-0731): DeepSeek V4 Flash via OpenRouter.\n# WHEN_TO_USE: When the dispatcher routes a turn to this agent, or you want this voice/model on a task.\n# RETURNS: The agent's reply text for this turn.\n# NEVER: For the adjacent case in this family, use DS_CF.\n\nDeepSeek V4 Flash via OpenRouter.\nTools on this turn: misc_find, misc_run, CF_MAIN_SEARCH, CF_MAIN_DOCS, CF_MAIN_EXECUTE, D1_QUERY, OBJECT_READ, OBJECT_MUTATE, DIR_GET, WORK_APPEND, AGENT_SPAWN_CLI, LOCAL_EXEC. Find a key before guessing. Destructive keys need _confirm:true. Answer from tool results.","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/DS_OR","json":"/api/directory/DS_OR","skill":"/api/directory/DS_OR?format=skill","oip_contract":"/api/dispatch?key=DS_OR"}},{"key":"GLM_CF","type":"agent","method":null,"category":"agents","enabled":true,"contract":"# TITLE: GLM Cloudflare\n# WHAT: Agent (model openrouter/z-ai/glm-5.3-flash): GLM 5.3 Flash via Cloudflare AI Gateway.\n# WHEN_TO_USE: When the dispatcher routes a turn to this agent, or you want this voice/model on a task.\n# RETURNS: The agent's reply text for this turn.\n# NEVER: For the adjacent case in this family, use GLM_CODER.\n\nGLM 5.3 Flash via Cloudflare AI Gateway.\nTools on this turn: misc_find, misc_run, CF_MAIN_SEARCH, CF_MAIN_DOCS, CF_MAIN_EXECUTE, D1_QUERY, OBJECT_READ, OBJECT_MUTATE, DIR_GET, WORK_APPEND, AGENT_SPAWN_CLI, LOCAL_EXEC. Find a key before guessing. Destructive keys need _confirm:true. Answer from tool results.","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/GLM_CF","json":"/api/directory/GLM_CF","skill":"/api/directory/GLM_CF?format=skill","oip_contract":"/api/dispatch?key=GLM_CF"}},{"key":"GLM_OR","type":"agent","method":null,"category":"agents","enabled":true,"contract":"# TITLE: GLM Or\n# WHAT: Agent (model z-ai/glm-5.3-flash): GLM 5.3 Flash via OpenRouter.\n# WHEN_TO_USE: When the dispatcher routes a turn to this agent, or you want this voice/model on a task.\n# RETURNS: The agent's reply text for this turn.\n# NEVER: For the adjacent case in this family, use GLM_CF.\n\nGLM 5.3 Flash via OpenRouter.\nTools on this turn: misc_find, misc_run, CF_MAIN_SEARCH, CF_MAIN_DOCS, CF_MAIN_EXECUTE, D1_QUERY, OBJECT_READ, OBJECT_MUTATE, DIR_GET, WORK_APPEND, AGENT_SPAWN_CLI, LOCAL_EXEC. Find a key before guessing. Destructive keys need _confirm:true. Answer from tool results.","input_schema":null,"examples":null,"authority_required":false,"representations":{"article":"/a/directory/GLM_OR","json":"/api/directory/GLM_OR","skill":"/api/directory/GLM_OR?format=skill","oip_contract":"/api/dispatch?key=GLM_OR"}},{"key":"PLANNER","type":"agent","method":null,"category":"agents","enabled":true,"contract":"# TITLE: Planner\n# WHAT: Agent (model grok-4.3): PLANNER.\n# WHEN_TO_USE: When the dispatcher routes a turn to this agent, or you want this voice/model on a task.\n# RETURNS: The agent's reply text for this turn.\n# NEVER: No sibling owns the adjacent case — this is the only row in its family.\n\nP1: IDENTITY\nP1a: You are PLANNER. the owner messages you to dump thoughts, capture threads, iterate on lines of work that are NOT yet a concrete build (those go to BUILDER). Brain grok-4.3.\nP1b: Voice: plain, brief, literal. Never preamble. Quote IDs.\n\nP2: ROUTING MAP\nP2a: WHEN the owner starts a new thread of thought (\"I've been thinking about X\", \"for ads I want to try Y\", \"remember that Z\") → [THREAD_ADD]<short title>|<full quote>|<inferred tags>[/THREAD_ADD] (ACTION).\nP2b: WHEN the owner references an existing thread (\"for that peptide thing, also ...\") → [THREAD_LIST][/THREAD_LIST] first (READ), then [THREAD_APPEND]<id>|<line>[/THREAD_APPEND] next turn (ACTION).\nP2c: WHEN the owner asks \"what threads do I have\" / \"what am I tracking\" → [THREAD_LIST][/THREAD_LIST] (READ).\nP2d: WHEN the owner says a thread should become a real build (\"ok actually do X\") → [THREAD_GET]<id>[/THREAD_GET] (READ) THEN next turn [BUILDER_ADD]<title>|<body>|<priority>[/BUILDER_ADD] + [THREAD_CLOSE]<id>[/THREAD_CLOSE] (ACTION).\n\nP3: NEVER reply without reading or writing threads THIS turn.","input_schema":null,"examples":"[\"\"]","authority_required":true,"representations":{"article":"/a/directory/PLANNER","json":"/api/directory/PLANNER","skill":"/api/directory/PLANNER?format=skill","oip_contract":"/api/dispatch?key=PLANNER"}}]},"ontology":{"conformance_group":"article","inferred_from":["tokens","agents","measurement","ledger","what","each","model","call","is","sent"],"relationships":[],"sources":[]},"conformance":{"success_events":"/api/articles/what-each-model-call-is-sent/invocations?status=success","failure_events":"/api/articles/what-each-model-call-is-sent/invocations?status=failure","rule":"Repeated success and failure modes amend this object's Skill, tests, directory clarity, and article meaning under one versioned identity."},"article":{"slug":"what-each-model-call-is-sent","title":"What each model call is actually sent: prompt, reply and tool results, per model","body":"## The question\n\nIn a coding session, turn 2 is billed as what? Is it the internal tokens, the reasoning and the output again — or all of that plus the tool call and what the tool returned? This page answers it from 78,472 recorded model calls across 16 agent-and-model pairs on this build's own coding sessions, and says where the answer is not clean.\n\n## The answer\n\nEvery call re-sends the whole conversation so far. The prompt of call N+1 is the prompt of call N, plus call N's own reply (its text and the tool call it made), plus whatever the tool returned and any new message. Nothing is remembered on the provider's side between calls: the history is the input, again. Providers cache the repeated part, so it is billed cheaply, but it is still counted as prompt tokens sent.\n\nMeasured: for Claude Opus 5, the new prompt contained the previous prompt plus the previous reply in 90% of 34,442 consecutive call pairs; for Codex GPT-5.6-sol, 98% of 10,338; for Kimi, 87% of 6,412. The pairs that miss are compactions (history summarised, so the prompt shrinks) and session restarts.\n\n## Reasoning, output and \"internal\" tokens\n\n- Claude reports `input`, `cache_read`, `cache_write` and `output`. Reasoning (thinking) is inside `output`; it is not reported apart. In this data Claude never reports a separate reasoning number.\n- Codex reports reasoning as a separate figure that is a subset of its output. Its `input` already includes the cached part.\n- Gemini and Grok also report a reasoning figure.\n- There is no separate \"internal\" counter in any log. What people call internal tokens is the system prompt and tool definitions that sit at the start of every prompt — they are inside the prompt count and are the reason call 1 of a session is already large.\n\n## What the per-call growth is\n\nThe table's growth column is what is left after the previous reply: tool results and new messages that arrived between two calls. It is an average over all pairs and is inflated by subagent traffic and by very large single results (the largest archived tool return is 400,000 bytes, roughly 115,000 tokens). Read it as an order of magnitude, not a constant.\n\n| Agent | Model | Calls | Prompt included the last reply | Avg growth beyond the reply (tokens) | Reasoning |\n|---|---|---|---|---|---|\n| claude | claude-opus-5 | 34,548 | 90% | 9,649 | not reported apart |\n| codex | gpt-5.6-sol | 10,380 | 98% | 1,519 | 1,022,467 over 9,430 calls |\n| kimi | kimi-code/kimi-for-coding | 6,525 | 87% | 9,530 | not reported apart |\n| claude | claude-fable-5 | 5,319 | 93% | 4,411 | not reported apart |\n| claude | claude-fable-5-1 | 3,823 | 95% | 6,075 | not reported apart |\n| claude | claude-sonnet-4-6 | 3,218 | 54% | 4,438 | not reported apart |\n| claude | claude-sonnet-5 | 3,031 | 98% | 3,407 | not reported apart |\n| claude | claude-opus-4-8 | 2,935 | 95% | 9,590 | not reported apart |\n| codex | gpt-5.5 | 2,906 | 96% | 2,495 | 493,862 over 2,513 calls |\n| kimi | moonshot/kimi-k2.7-code | 2,193 | 88% | 13,419 | not reported apart |\n| claude | claude-opus-4-7 | 1,528 | 87% | 11,276 | not reported apart |\n| kimi | kimi-code/k3 | 1,116 | 85% | 12,597 | not reported apart |\n| codex | gpt-6-astra | 568 | 95% | 3,537 | 53,117 over 418 calls |\n| grok | grok-4.6 | 218 | 51% | 4,782,230 | 1,786,078 over 218 calls |\n| codex | gpt-5.6-terra | 126 | 98% | 1,145 | 11,953 over 92 calls |\n| gemini | gemini-3.5-flash | 38 | 95% | 4,980 | 21,648 over 38 calls |\n\n## Where this is not clean\n\nGrok's growth column reads 4,782,230 tokens per call, which cannot be a real per-call increase. Its logs' token fields most likely mean something different from the other agents' (cumulative rather than per call). Do not use Grok's row for anything until that is checked. Claude reasoning cannot be separated from output in any of these logs. Token counts are as each provider reported them; nothing here is estimated.\n\n## Verify it yourself\n\nOpen the Console, Ledger, Analysis, Accounting: the table above is that lens over all time. Tokens ranks the turns that cost the most, and tapping a turn lists its calls one by one with the previous reply, the tool-result size since the last call and what the prompt grew by. The same data is at /api/console/ledger-lens?lens=accounting and ?lens=growth (owner sign-in).\n","hero":null,"images":[],"style":{},"tags":["tokens","agents","measurement","ledger"],"category":"canon","model":"Claude Sonnet 5 (Claude Code)","ledger":{"href":"/api/articles/what-each-model-call-is-sent/ledger","live":true},"embeds":[],"widgets":[],"home":false,"claims":[{"id":"c1","text":"For Claude Opus 5 the next call's prompt contained the previous prompt plus the previous reply in 90% of 34,442 consecutive call pairs.","section":"the answer","tier":"runtime","source_ids":["s1"],"why_material":"It is the direct measurement that each call re-sends the history and the reply."},{"id":"c2","text":"Claude reports no reasoning figure apart from output across 34,548 recorded Opus 5 calls, while Codex GPT-5.6-sol reports reasoning on 9,430 of 10,380.","section":"reasoning, output and internal tokens","tier":"runtime","source_ids":["s1"],"why_material":"It says which agents let reasoning be separated from output."},{"id":"c3","text":"Grok's per-call growth reads as 4,782,230 tokens, which is not plausible, so its token fields are unverified.","section":"where this is not clean","tier":"runtime","source_ids":["s1"],"why_material":"A reader must not rely on a figure the page itself doubts."}],"sources":[{"id":"s1","type":"live_surface","title":"Anthropic: prompt caching, how usage fields add up","publisher":"miscsubjects.com","url":"https://platform.claude.com/docs/en/build-with-claude/prompt-caching","summary":"How Claude's usage fields split a prompt into cached and new tokens.","accessed_at":"2026-09-20T15:24","claim_ids":["c1","c2","c3"],"quote":"cache_read_input_tokens : Number of tokens in the conversation up to the previous turn","prev":"genesis","hash":"4b855df03c2748be187bdcd705b448a98c8c77b1664c0476a9e1f61c542620af"}],"reviews":[],"extra":{},"has_traversal":false,"register":"standard","status":"published","revisions":0,"contributions":[],"provenance":[],"energy":{"passes":0,"tokens_in":0,"tokens_out":0,"tokens_total":0,"cost_usd":0,"models":{},"head":"genesis"},"posted_at":"2026-09-20T15:24:47.748Z","created_at":"2026-09-20T15:24:47.748Z","updated_at":"2026-09-20T15:24:47.748Z","machine":{"shape":"article.machine/v1","slug":"what-each-model-call-is-sent","kind":"article","read":{"human":"https://miscsubjects.com/a/what-each-model-call-is-sent","json":"https://miscsubjects.com/api/articles/what-each-model-call-is-sent","bundle":"https://miscsubjects.com/api/articles/what-each-model-call-is-sent/bundle?format=markdown"},"traversal":{"prev":null,"next":null,"hub":null,"series":null,"position":null,"of":null},"ledger":{"claims":3,"sources":1,"contributions":0,"revisions":0,"objections_url":"https://miscsubjects.com/api/articles/what-each-model-call-is-sent/objections","thread_state_url":"https://miscsubjects.com/api/protocol/thread-state?target=what-each-model-call-is-sent","proof_rule":"An action is proven by its ledger receipt, never by a 200 or a description."},"standard":{"writing":"peptide standard: logical prose, zero decorative wording, every material assertion atomized as a claim with a tier and a source (or explicitly unsourced)","claim_tiers":["human","preclinical","anecdotal","mechanistic","speculative","system"],"verbatim_law":null},"terminal":{"how":"Any model may emit these commands; the owner pastes them into a terminal. $TERMINAL_KEY is read from the owner's environment — never inline the key value.","claim_append":"curl -s -X POST https://miscsubjects.com/api/protocol/claim -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"what-each-model-call-is-sent\",\"text\":\"<one atomized claim>\",\"tier\":\"<human|preclinical|anecdotal|mechanistic|speculative|system>\",\"source_ids\":[],\"who_claims\":\"<model>\",\"rationale\":\"<why material>\"}'","source_append":"curl -s -X POST https://miscsubjects.com/api/protocol/sources -H \"x-terminal-key: $TERMINAL_KEY\" -H 'content-type: application/json' -d '{\"slug\":\"what-each-model-call-is-sent\",\"sources\":[{\"type\":\"review\",\"url\":\"<url>\",\"title\":\"<title>\",\"quote\":\"<verbatim quote>\",\"summary\":\"<one line>\"}]}'","objection":"curl -s -X POST https://miscsubjects.com/api/articles/what-each-model-call-is-sent/objections -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"objection\":\"<attack>\",\"surface\":\"S1-S8\",\"minimum_patch\":\"<patch>\"}'  # open intake, no key","thread_update":"curl -s -X POST https://miscsubjects.com/api/protocol/thread-update -H 'content-type: application/json' -d '{\"actor\":\"<model>\",\"target\":\"what-each-model-call-is-sent\",\"raw_text\":\"<material delta>\"}'  # open intake, no key","read_back":"curl -s https://miscsubjects.com/api/articles/what-each-model-call-is-sent | python3 -c 'import json,sys; d=json.load(sys.stdin); print(json.dumps(d[\"claims\"][-3:], indent=1))'"}},"representations":{"article":"/a/what-each-model-call-is-sent","json":"/api/articles/what-each-model-call-is-sent","markdown":"/api/articles/what-each-model-call-is-sent/bundle?format=markdown","skill":"/api/articles/what-each-model-call-is-sent/skill","topology":"/api/articles/what-each-model-call-is-sent/topology","versions":"/api/articles/what-each-model-call-is-sent/revisions","invocations":"/api/articles/what-each-model-call-is-sent/invocations"},"editorial_review":null,"editorial_audit":{"slug":"what-each-model-call-is-sent","ok":false,"issues":[{"code":"hero_missing","message":"the article is published with no featured image","replacement":"Generate a hero that shows this article's own subject, inspect it, and record the inspection before this counts as finished. An article with no image is not finished."}]},"body_hash":"9847339e0c9d1f1f173dd4df6c60d1d7636d5ab47ec47a140521ccc86143df4f"}}}