[BUG] SendMessage tool referenced but not available — agent continuation broken since resume parameter removal
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
The Agent tool's resume parameter was removed (around v2.1.77). The documented replacement is SendMessage, but this tool does not exist at runtime. This breaks multi-round sub-agent conversations — there is no working mechanism to continue a previously spawned agent with its context preserved.
The system actively tells you to use SendMessage:
- The Agent tool description says: "To continue a previously spawned agent, use SendMessage with the agent's ID or name as the
tofield." - Every agent result prints:
"use SendMessage with to: 'agentId' to continue this agent" - The
claude-code-guideagent type description references it: "check if there is already a running or recently completed claude-code-guide agent that you can continue via SendMessage"
But SendMessage is not a built-in tool, not a deferred tool (ToolSearch returns nothing), and calling it directly errors.
What Should Happen?
Either SendMessage should be available as a tool at runtime, or the resume parameter should be restored on the Agent tool. Multi-round sub-agent conversations (sparring, expert sub-agents for complex research, iterative review) need a working continuation mechanism.
Error Messages/Logs
Calling SendMessage directly:
Error: No such tool available: SendMessage
Searching via ToolSearch:
> ToolSearch("select:SendMessage")
No matching deferred tools found
The Agent tool schema has `additionalProperties: false`, so the old `resume` parameter cannot be passed either — it would be rejected.
Steps to Reproduce
- Spawn a sub-agent:
````
Agent(description: "Test agent", prompt: "Remember the phrase 'purple elephant'. Say 'Ready'.")
- Note the returned agent ID (e.g.,
a09a8b95659e9120e) and the message saying"use SendMessage with to: 'a09a8b95659e9120e' to continue this agent". - Attempt to call SendMessage:
````
SendMessage(to: "a09a8b95659e9120e", message: "What was the phrase?")
- Observe error:
"No such tool available: SendMessage" - Search for it via ToolSearch — not found.
- The agent has no way to continue the sub-agent.
Claude Model
Opus
Is this a regression?
Yes, this worked in a previous version
Last Working Version
Unknown exactly. The resume parameter worked in sessions from earlier in 2026. The claude-code-guide agent suggests the change happened around v2.1.77 (March 17, 2026).
Claude Code Version
2.1.81
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Other
Additional Information
- The
resumeparameter on the Agent tool was confirmed working via session history logs in~/.claude/projects/. SendMessagehas never successfully executed — all past attempts in session logs also show"No such tool available: SendMessage".- Workflows that relied on multi-round agent conversations (e.g., a
/sparskill that goes 2-3 rounds with the same sub-agent, or research workflows using sub-agents as persistent "experts") are broken. - The only workaround is spawning fresh agents each round and manually re-passing context in the prompt, which is wasteful and loses deep context from file reads.
24 Comments
This is happening to me. I work on agent definitions for my company and when they don't work I need to I need to be able to talk to them about what happened. I went on vacation for a week and my whole process broke. I can no longer resume agents.
Same issue. 2.1.84 on macOS.
Bump.
Problem
Cause & Solution
Related: https://github.com/anthropics/claude-code/issues/44080
Bump to prevent auto-closing.
https://code.claude.com/docs/en/sub-agents#resume-subagents
Definitely happening here too, raised https://github.com/anthropics/claude-code/issues/50622 initially.
Happened here as well. It messed up my custom setup and drastically increased my token usage.
This is really painful. It's been more than a month since claude could resume an agent. You guys ever going to fix this?
I had this error today too:
That's not good. Why does it say
SendMessageis a thing?I'm using Claude Code through VSCode. I have the desktop app too. Should I be using that?
I'm on Windows 11 25H2.
Still present:
Predominantly using Claude Code 20x (across 2 different subscriptions and 2 days) -- NOT RESOLVED.
Dear Antropic Team: PLEASE FIX.
+1, this is still biting external orchestrators hard as of 2.1.143. A few data points from running Claude Code as a subprocess from a separate scheduler that needs multi-round subagent conversations:
Confirming
rebeccasofiab-stack's observation:SendMessageis documented, referenced in result strings, named in agent-type descriptions, and ToolSearch/Agent additionalProperties: falseboth reject it. There is no working "continue this agent" mechanism anywhere on the surface. The product behaves like it has one; it doesn't.Concrete operational impact for orchestrator-of-Claude patterns:
resume:.SendMessagewas supposed to abstract over.Adjacent issues that are the same family:
Suggested resolution: either (a) restore the
resume: <agent-id>parameter on the Agent tool — the additionalProperties:false schema change can keep the rest of the strictness and just whitelist resume — or (b) actually shipSendMessageas a non-deferred tool with a stable address space for agent IDs. Half-shipped is the worst of both worlds: the docs train users (and the model) to depend on a primitive that doesn't exist, and the failure mode is silent regression to expensive respawns.This has been broken since v2.1.77 (March 2026). Two months of orchestrators worldwide quietly burning 2-3x token budget on workaround respawns adds up.
I see the following description in the official documentation:
The SendMessage tool is only available when agent teams are enabled via CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1.After setting the
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMSenvironment variable, I can indeed see the SendMessage tool. It seems this issue can be temporarily resolved this way.hitting this a lot more lately here - i have the teams var unset too. But the docs and code seem to imply this is the 'new' resume agent path, and the model always tries to use it that way!
I'm also regularly facing this issue. Seems like a commercial decision not to fix it and force us to recreate subagents.
Duplicates of this are being filed and closed every week, and yet _nothing ever happens_ on this one.
I am (like others here) finding it harder and harder to believe that this isn't being ignored purposefully because it's a token-burner. This is a truly embarrassing mistake to have made its way into Claude Code in the first place, but it's downright _baffling_ that such important functionality (main agents being able to communicate with subagents beyond the first message without enabling an unrelated experimental flag, and therefore needing to wastefully kill and respawn/reorient a new subagent in their place instead) has been left fundamentally broken for >3 months while duplicate issues are filed (and auto-closed) over and over and over again.
Every day hundreds if not thousands of sessions kick off subagents, but anytime a subagent halts before finishing its work, for any reason whatsoever, the main agent has no way to resume or re-task it unless the user has enabled agent teams, because
SendMessage, the method that the harness is still told is the way to communicate with and resume subagents (and which does in fact succeed in doing so, when unlocked by the agent teams flag) got incorrectly locked behindCLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1. As a result, standard subagent routing workflows are quite broken unless the user knows to enable the agent teams flag. Anyone who doesn't will frequently have the main agent reporting thatSendMessageisn't found, contrary to their instructions, and will see that it is forced to kill and recreate any subagents that don't finish their work in one shot - sometimes repeatedly. Obviously this can pointlessly burn a _lot_ of tokens vs simply being able to useSendMessage(as documented) to instruct the halted subagent to resume or try something different.Despite how utterly trivial it should be to fix this gross blunder and make
SendMessagegenerally available again, it being erroneously gated behind the agent-teams functionality remains stubbornly uncorrected. _Why?_thanks for elaborating on this @dysangelist-1 - how do we get more attention on this issue?
I've seen it less often but also seen similar ish ones after compact (forgets tool call schema requirements etc) if that helps...
I have two max accounts, and had this problem after switching accounts and resuming a session with subagents.
I'm also seeing this issue more often now
interns at anthropic who made this DO SOMETHING
It looks like we may soon be forced into teams by default: https://github.com/anthropics/claude-code/issues/68721#issuecomment-4738437180
I get this often.
I use about 200 million tokens a week. It's disgraceful that this has not been fixed. I run 6-7 agents in parallel at times (always on 1M context). Even my subagents and agent teams are configures to run on Opus. I used to be annoyed. Now I am genuinely angry this has not been resolved. I have posted THREE (3) times about this issue + in the Anthropic Discord as well. Some months we spend thousands on tokens. It is NOT ok!
Found a concrete cause for this in one environment — measured, not inferred. It may not be the cause for everyone in this thread, but it is cheap to rule in or out, and it was invisible from inside the session.
The Claude Desktop app launches its Code-tab sessions with
SendMessageexplicitly denied.I hit the exact symptom described in the report (ToolSearch finds nothing, direct call errors) and went looking at the actual process command line instead of at settings. The bundled binary is started with, among other flags:
All five concurrent Code-tab sessions on the machine carried the same
--disallowedTools SendMessage. Environment: Claude Desktop 1.49585.0.0 on Windows 11, bundled Claude Code 2.1.260 (CLAUDE_CODE_ENTRYPOINT=claude-desktop,CLAUDE_CODE_CHILD_SESSION=1).Why this is worth checking before assuming a runtime bug:
No such tool available: SendMessage. SendMessage is disabled for this session, in subagents as well as here.The cross-session-messaging docs state that denyingSendMessage"also removes messaging to subagents and agent-team teammates, since the same tool serves both" — which is precisely the "in subagents as well as here" clause.SendMessageis denied, notListAgents.ListAgentsworks fine in the same session and returns the full peer list. The documented way to turn messaging off names both tools; denying exactly one of the two looks deliberate rather than accidental. (This is also what distinguishes it from #90481, whereListAgentsis the one that disappeared.)--setting-sources=user,project,localis passed, and none of those files mention tool permissions — so checkingsettings.jsonfor a deny rule (the documented remedy) finds nothing, and the CLI flag can't be overridden from a settings file anyway.How to check whether this is your case:
``
powershell
``Get-CimInstance Win32_Process |
Where-Object { $_.CommandLine -like '*claude-code*claude.exe*' } |
ForEach-Object { if ($_.CommandLine -match '--disallowedTools\s+(\S+)') { $Matches[1] } else { '(none)' } }
ps -eo args | grep -- '--disallowedTools'One caveat on the Windows snippet: it will also match the PowerShell process running the query itself, since the search string appears in its own command line. Ignore that row.
The part that seems worth fixing regardless of whether the deny is intentional:
When
SendMessageis denied, the harness still tells the model to use it — repeatedly and authoritatively. TheAgenttool description says to useSendMessageto continue an agent;ListAgentssays names are "the address" forSendMessage; and every single agent result ends withuse SendMessage with to: '<id>' ... to continue this agent. So a session is instructed, in three places, to call a tool that its own launcher removed. The failure mode that produces isn't just a wasted call — a workflow built on multi-round agent conversations degrades silently to "spawn a fresh agent with empty context", and nothing in the transcript marks where that happened.In our case this had a measurable cost: a review protocol that depends on later rounds reaching the same reviewer had been quietly falling back to new reviewers with no memory of earlier rounds, and the metric built to detect repeated findings across rounds was therefore undercounting. We only found it because someone tried the call by hand.
Suggestion: when
SendMessageis unavailable in a session, suppress the continuation hint in agent results and in theAgent/ListAgentstool descriptions — or replace it with the fallback that actually works. A tool description that promises a mechanism the session cannot use is worse than no mention at all, because it reads as authoritative and is never contradicted.