[Bug] classifyHandoffIfNeeded is not defined in agent handoff logic
Bug Description
classifyHandoffIfNeeded is not defined is a Claude Code runtime error in the agent
orchestration layer — the code that manages Task tool subagents. It's a bug in Claude Code
itself, not in Squad's codebase. Here's the evidence:
- It only hits background agents — specifically agents launched via the Task tool with
run_in_background: true or long-running agents
- It's not deterministic — the same agent type succeeds sometimes, fails other times (our 5
explore agents all succeeded, but the software-engineer agent crashed)
- The error message references an internal function (classifyHandoffIfNeeded) that doesn't
exist anywhere in our codebase — it's part of Claude Code's agent handoff/classification
logic
- The agents do real work before crashing — the split pane spec agent wrote 1007 lines of
content before the error killed it. The crash happens at agent completion/handoff, not during
execution.
Impact this session
Agent: 3 early agents (ContextRecap removal, HeroView relocation, unwired props)
Type: software-engineer
Result: ❌ Failed
────────────────────────────────────────
Agent: 5 explore agents (sidebar discovery)
Type: Explore
Result: ✅ All succeeded
────────────────────────────────────────
Agent: 7 software-engineer agents (settings, P0 fixes, P1 fixes)
Type: software-engineer
Result: ✅ All succeeded
────────────────────────────────────────
Agent: Split pane spec agent
Type: software-engineer
Result: ❌ Failed (but wrote full file before crash)
The pattern suggests it's more likely to hit agents that run longer or that complete after a
certain number of tool calls. Explore agents tend to be shorter-lived and complete faster,
which may be why they're less affected.
Workaround
There's nothing we can do about it — it's upstream in Claude Code. The practical workaround
is:
- Check if the agent wrote its output before crashing (like we just did with the spec)
- Re-run failed agents if they didn't produce output
- Prefer shorter, focused agent tasks over long-running ones
You could report it at https://github.com/anthropics/claude-code/issues if you want — the
repro is: launch a software-engineer subagent via the Task tool that does 15+ tool calls, and
it intermittently crashes with classifyHandoffIfNeeded is not defined at completion.
Environment Info
- Platform: darwin
- Terminal: iTerm.app
- Version: 2.1.29
- Feedback ID: 5fce8ab9-170d-4982-97e3-0f0f21475804
Errors
[{"error":"Error: Request was aborted.\n at i5R (/$bunfs/root/claude:1522:23441)\n at vpB (/$bunfs/root/claude:4717:7450)\n at processTicksAndRejections (native:7:39)","timestamp":"2026-02-02T00:17:42.043Z"},{"error":"Error: Request was aborted.\n at makeRequest (/$bunfs/root/claude:360:3940)\n at processTicksAndRejections (native:7:39)","timestamp":"2026-02-02T00:17:43.398Z"},{"error":"Error: Cannot send notification to LSP server 'plugin:typescript-lsp:typescript': server is error\n at J (/$bunfs/root/claude:2142:26975)\n at J (/$bunfs/root/claude:2142:27189)\n at O (/$bunfs/root/claude:2142:33848)\n at processTicksAndRejections (native:7:39)","timestamp":"2026-02-02T00:22:22.196Z"},{"error":"Error: Failed to sync file open /Users/danialhasan/dev/squad/apps/desktop/ui/src/composables/useComponentMeta.ts: Cannot send notification to LSP server 'plugin:typescript-lsp:typescript': server is error\n at O (/$bunfs/root/claude:2142:34013)\n at processTicksAndRejections (native:7:39)","timestamp":"2026-02-02T00:22:22.196Z"},{"error":"Error: Failed to sync file open /Users/danialhasan/dev/squad/apps/desktop/ui/src/composables/useComponentMeta.ts: Cannot send notification to LSP server 'plugin:typescript-lsp:typescript': server is error\n at O (/$bunfs/root/claude:2142:34013)\n at processTicksAndRejections (native:7:39)","timestamp":"2026-02-02T00:22:22.197Z"},{"error":"Error: Request was aborted.\n at makeRequest (/$bunfs/root/claude:360:3940)\n at processTicksAndRejections (native:7:39)","timestamp":"2026-02-02T03:10:15.644Z"},{"error":"Error: Cannot send notification to LSP server 'plugin…
Note: Content was truncated.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗