Claude Message Threads: When They Cut Agent Latency and When They Don't
Claude message threads, in public beta since November 2, 2026, let long-running agents send only new messages instead of the full conversation on every turn. They can cut time to first token on very large requests, while token usage, pricing and rate limits stay the same. This guide covers how threads work, where they can't be used, and how to adopt them with Transcript-First Threading so the speed gain never costs you reliability.
Every turn of a long Claude agent loop sends the API the entire conversation again, including each earlier message and tool result, even though the API processed all of that history one turn earlier. Claude message threads, a public beta feature of the Claude Messages API, are designed to remove that repetition.
Threads cut how much your client sends on each turn and how much the API reprocesses, which can lower time to first token on very long sessions. Token usage, cost and rate limit consumption stay where they were, and the server's copy of the conversation can disappear at any time. That combination is why we recommend an approach we call Transcript-First Threading: your side keeps the full conversation, and the server thread is a speedup you are prepared to lose.
What Message Threads Change in a Claude Agent Loop
Without a thread, every turn uploads the whole conversation again, and the API validates and tokenizes all of it again, as the official message threads documentation describes.
In agent workloads that overhead compounds. A coding agent might make hundreds of requests in one session, and each request resends every earlier message and tool result.
With a thread, the API holds the conversation in server memory between turns. Anthropic's launch announcement describes the client side plainly: instead of resending the full conversation, you send only new messages and the previous message ID.
Message threads launched in public beta on the Messages API on November 2, 2026, under the message-threads-2026-08-12 beta header, according to the Claude Platform release notes. Note that the date embedded in the header name is not the launch date.
Threads are a transport and preprocessing optimization. They change how much data travels and how much the API redoes before generation starts, but they leave the model's input alone: Claude still reads the full conversation on every turn.
How a Thread Starts, Continues and Expires
Opting in
You opt in by adding the beta header to an otherwise normal Messages API request. Field names and request shapes can shift during a beta, so take exact syntax from the official docs and recheck it when the release notes mention changes.
Expiry
A thread is best-effort. It expires 5 minutes after its last request, and each response that the API stores restarts the 5-minute timer. In practice a thread lives as long as your agent keeps a steady rhythm of requests.
Storage and deletion
The API holds a thread in memory, encrypted under a server-managed key, never writes it to durable storage, and deletes it no more than 1 hour after its last use. Your data-handling review may still need to record this short-lived retention, and nothing durable in your system should depend on it.
The missing signal
Neither the create request that starts a thread nor the continue requests that build on it say in their response whether the API stored that turn. You only find out on the next continue request. The practical consequence is easy to miss: a successful response tells you the turn completed, not that the thread will still be there when you come back, so every continue request needs a fallback path ready before it goes out.
What Gets Faster, and What Stays the Same
Anthropic's launch announcement, as covered by The New Stack, reports that with message threads on by default for most Claude Code users, requests with 500k to 1M tokens see median time to first token drop by about 35%. The New Stack defines time to first token (TTFT) as the time it takes Claude to begin generating a response.
The same pattern shows up in request size: AlphaSignal reports that median request payload in long Claude Code sessions shrank from roughly 800 KB to 1.8 KB. Our reading of that gap, rather than anything published, is that late in a long session nearly everything a threadless client puts on the wire is history the API has already processed.
Both figures need context before they go into a planning document. The latency number is Anthropic's own measurement, taken on very large Claude Code requests, and the payload number comes from secondary reporting. Together they show the effect is real at that scale. They say much less about agents with modest contexts, short sessions, or long gaps between turns, and those are exactly the workloads where the overhead threads remove is smallest. Treat the published numbers as evidence that the mechanism works, and treat your own measurements, covered in the playbook below, as the evidence that it works for you.
Smaller payloads do not mean a smaller bill, though. Token usage stays the same with threads, because the model's input is unchanged. The Next Web described the feature as one that saves time while leaving spending where it was, and Anthropic says prices and rate limits are unchanged. Any reduction in network or serialization work on your side is something to measure rather than assume.
| Dimension | Without threads | With threads |
|---|---|---|
| What the client sends each turn | The full conversation, including all tool results | New messages plus the previous message ID |
| API preprocessing | Validates and tokenizes the whole conversation every turn | Not quantified publicly; our inference is that the work shrinks toward the new turn |
| Median TTFT (Anthropic, Claude Code requests of 500k to 1M tokens) | Baseline | About 35% lower |
| Tokens, pricing and rate limits | Standard | Unchanged |
| Durability of history | Held by your client | Best-effort, short-lived server copy |
Where Threads Do Not Apply: Exclusions and Incompatibilities
Not every part of the platform works with threads. Unite.AI's coverage summarizes the main exclusions: threads do not support Message Batches, token counting, compaction on demand or most context editing, and they are unavailable to organizations with Inference hooks enabled. Beta restrictions move, so confirm each item against the official message threads documentation, which is the authoritative list.
If you handle regulated data, the official list is not the only thing to check. One developer's commentary on DEV Community advises skipping threads where turns are more than 5 minutes apart or where ZDR or HIPAA rules apply. That is a practitioner's advice, not an eligibility statement from Anthropic, so confirm your organization's status in the official documentation and with Anthropic directly.
If you have tuned prompt caching carefully, check one limit before migrating: a request with a thread can carry at most 4 cache_control breakpoints, and the top-level cache_control counts as one. Setups already near that ceiling will need their breakpoints reworked.
The last item sits outside Anthropic's platform. If your traffic passes through a gateway or proxy, confirm that it forwards the beta header and the lean continue request shape untouched, and that its retry and fallback logic doesn't assume every request carries the full history. Our Vercel AI Gateway production playbook covers the routing and provider control questions that usually come up here.
Decision Checklist: Should Your Agent Use Claude Message Threads?
The case for threads rests on three conditions holding together: sessions that run long, contexts that grow large over many requests, and turns that arrive close together. Lose any one of them and the case gets weaker, as the rows below show. Rows marked as inference reflect our reasoning from how the feature works rather than published guidance.
| Fit | Typical setup | Why |
|---|---|---|
| Good fit | Long single-path coding agent loops with many requests and very large contexts | Closest to the Claude Code requests where the published gains were measured |
| Good fit | Turns usually arrive well within the expiry window | The thread stays alive and continue requests succeed |
| Weak fit (inference) | Short sessions with small contexts | Resending history costs little, so there is less overhead to remove |
| Weak fit (inference) | Agents that fork or branch conversations | A continue request references one previous message ID, which points to a single line of conversation; confirm branching behavior in the docs |
| Poor fit | Turns often more than 5 minutes apart | The thread is likely to expire, so you end up replaying anyway |
| Blocked | Inference hooks, Message Batches, token counting, on-demand compaction, most context editing | Unsupported |
| Check first | ZDR or HIPAA workloads | Developer commentary advises skipping; confirm with Anthropic |
The Transcript-First Threading readiness check
Run each candidate agent through these questions:
- [ ] Does a typical session make many requests and build a very large context?
- [ ] Does the conversation follow a single path, without branches that each need their own history?
- [ ] Do most turns arrive well inside the expiry window, with a planned replay for each known long pause such as slow test suites or human approval steps?
- [ ] Does your local transcript capture every message and tool result, so a replay is always possible?
- [ ] Is your pipeline clear of the exclusions above, with eligibility confirmed for any regulated workload?
- [ ] Does your prompt caching fit within the breakpoint limit, counting the top-level breakpoint?
- [ ] Is time to first token on long loops a real user experience or throughput problem today?
The last question matters most. Adopt threads when latency on long loops is hurting your users or your throughput. If the motivation is a smaller bill, threads will not deliver it, and the engineering effort is better spent elsewhere.
Playbook: Adopting Transcript-First Threading
Under Transcript-First Threading, your client owns the conversation and the server thread is a temporary accelerator. The Next Web makes the same point from the other direction: because threads expire five minutes after the last request, developers must keep their own copy of each conversation.
Step 1: Keep a full local transcript
Record every message and tool result locally, regardless of thread state. That transcript is your source of truth for replay, debugging and audit, and the server thread should never hold the only copy of anything. If your agent runs on a durable workflow runtime, persist the transcript alongside the rest of the run's state; our durable AI agents runtime selection checklist covers choosing that layer.
Step 2: Send lean continue requests
Once a thread exists, send only the new turn plus the previous message ID. Leave the code that builds a full request in place and keep it under test, because your replay path depends on it.
Step 3: Assume any continue can fail
Since the API doesn't confirm storage, a continue request can fail because the thread expired or because a turn was never stored. Write the fallback first: when a continue fails for thread reasons, replay the full local transcript as a normal request and start fresh. Then test it deliberately, for example by letting a thread expire in staging, so you know the agent's output and tool behavior hold up after a replay.
Step 4: Track idle time between turns
An agent that waits on a slow test suite, or on a human approving a tool call, can come back to a dead thread. Track the time since the last stored response, and if a pending tool call or approval will probably outlast the expiry window, schedule the replay instead of hoping the thread holds.
Step 5: Audit your prompt caching
Count your cache_control breakpoints, including the top-level one, and make sure threaded requests stay within the limit of 4. Far better to find an overage in review than in a rejected production request.
Step 6: Measure on your own workload
Record time to first token and request size before and after enabling threads, split by session length. Also log whether each turn went out as a continue request or a full replay, so you can see how often threads actually survive in your loop. If you already trace model calls, our OpenTelemetry GenAI tracing playbook shows a practical place to capture these numbers. When threaded turns rarely survive, or TTFT barely moves at your real session lengths, that is a strong signal to keep threads narrow or switch them off. Billing and rate-limit forecasts can stay as they are, since threads don't change consumption.
Common Mistakes When Rolling Out Message Threads
The costliest mistake happens in the business case, before any code is written. A proposal that claims token, price or rate-limit savings from threads is wrong, and once it is approved, the project will be judged against a number it can never reach. Bandwidth or serialization gains are possible, but they belong in a plan only after you have measured them.
A close second is treating a successful response as proof of storage. It is an easy assumption to make, and the documentation is clear that it does not hold.
Most of the remaining mistakes are playbook steps skipped under deadline pressure: dropping local history because the server seems to have it, leaving slow tools and human approvals without a planned replay, or discovering an over-budget cache setup or a dependency on Batches, token counting, on-demand compaction or context editing only once traffic is live.
Caveats and Open Questions
This is a public beta. Header names, limits and behavior may change, so pin your implementation to the official documentation and keep an eye on the release notes.
A few questions deserve testing before you lean on the answers. How do threads behave when an agent branches a conversation? Which regulated configurations are eligible? How do your proxies and gateways treat the lean request shape? On regulated eligibility, the guidance cited in this article is developer commentary rather than a statement from Anthropic, so go to Anthropic directly. The other two are best answered by running your own agents with threads enabled in a staging environment.
Key Takeaways
- 1Claude message threads let an agent send only new messages plus the previous message ID, instead of resending the whole conversation every turn.
- 2Anthropic reports about 35% lower median time to first token on Claude Code requests of 500k to 1M tokens. Your own workload may differ.
- 3Token usage, pricing and rate limits are unchanged, so the benefit is lower latency alone.
- 4Threads are best-effort, expire 5 minutes after the last request, and the API never confirms whether a turn was stored.
- 5Threads don't work with Message Batches, token counting, on-demand compaction, most context editing, or organizations with Inference hooks. Confirm the current list in the official docs.
- 6Transcript-First Threading: keep a full local transcript as the source of truth, and keep a tested replay path for when a thread has expired.
- 7Adopt threads for long, single-path loops with short gaps between turns, and measure TTFT before and after on your own traffic.
Conclusion
Claude message threads fix one specific inefficiency: long agent loops that resend and reprocess the same history on every turn. For long, single-path coding agent sessions where turns come quickly, they shrink requests and can shorten the wait before Claude starts responding. They do not reduce tokens, they are best-effort by design, and the API never confirms that a turn was stored.
That is why we would adopt them transcript-first, with your local transcript as the source of truth and the server thread as an optional speedup you can lose at any moment. A tested replay path turns an expired thread into a slower turn rather than a broken session. Check your pipeline against the exclusions, keep cache breakpoints within the limit, plan replays around long pauses, and measure on your own traffic before you commit.
If you want a second pair of eyes, Optijara can walk through an agent pipeline with you against the exclusions list, mark the points where replays will happen, and set up the before-and-after TTFT and request-size logging described in Step 6.
Frequently Asked Questions
Do Claude message threads reduce my token bill or rate limit usage?
No. Requests get smaller, but the model's input is unchanged, so token usage stays the same. Anthropic says prices and rate limits are unchanged. The benefit threads offer is lower latency.
How long does a Claude message thread last?
A thread is best-effort. It expires 5 minutes after its last request, and each response the API stores restarts the 5-minute timer. The API keeps thread data in encrypted memory, never writes it to durable storage, and deletes it no more than 1 hour after last use.
Which beta header enables message threads?
The Claude Platform release notes list the message-threads-2026-08-12 beta header for the public beta that launched on November 2, 2026. Because this is a beta, check the official documentation for current field names and request shapes before you implement.
What happens if my agent waits on a slow tool or a human approval?
If more than 5 minutes pass without a stored response, the thread may have expired by the time the agent comes back. Keep a full local transcript and, when a continue request fails, replay the conversation as a normal request. If you know a pause will be long, plan the replay in advance.
Can I use threads with Message Batches, token counting, context editing, or in ZDR or HIPAA setups?
Threads don't support Message Batches, token counting, on-demand compaction or most context editing, and they aren't available to organizations with Inference hooks enabled. Developer commentary advises skipping threads where ZDR or HIPAA rules apply. Confirm your organization's eligibility with the official documentation and with Anthropic.
How many prompt caching breakpoints can a threaded request use?
A request with a thread can carry at most 4 cache_control breakpoints, and the top-level cache_control counts as one. Audit your caching setup before migrating so threaded requests stay within that limit.
Sources
- https://platform.claude.com/docs/en/build-with-claude/message-threads
- https://claude.com/resources/articles/message-threads
- https://platform.claude.com/docs/en/release-notes/overview
- https://thenextweb.com/news/anthropic-message-threads-beta-claude-api-agents
- https://www.unite.ai/anthropic-launches-message-threads-beta-for-long-running-agents/
- https://thenewstack.io/anthropic-claude-message-threads/
- https://dev.to/gabrielanhaia/claudes-api-now-holds-your-agents-conversation-for-5-minutes-keep-your-own-copy-3a1e
- https://dev.to/dishant0406/claude-message-threads-are-fast-until-your-agent-waits-5-minutes-ip2
- https://dev.to/sueun-dev/claude-message-threads-send-only-new-messages-on-long-agent-loops-4b0g
- https://alphasignal.ai/news/anthropic-s-message-threads-cut-agent-request-size-from-800-kb-to-1-8-kb
- https://x.com/ClaudeDevs/status/2117332449382510884
Written by
Hamza DiazHamza Diaz is the founder of Optijara, where he builds practical AI agents, automation systems, and Copilot workflows for service businesses. He writes about AI operations, agent strategy, and real-world implementation for teams that want usable systems instead of hype.
