[Feature Request] Subagents should inherit Task* tools for native multi-agent coordination

Resolved 💬 4 comments Opened Jan 31, 2026 by odysseus0 Closed Mar 1, 2026

Bug Description
Title: Subagents should inherit Task* tools for native multi-agent coordination

Summary:
When spawning subagents via the Task tool to work on tasks created by the main agent, the subagents don't have access to TaskGet/TaskUpdate/TaskList tools. This makes the "native Ralph" pattern (main agent creates task graph → spawns parallel workers → workers complete tasks) unnecessarily clunky.

What I tried:

  1. Main agent creates tasks with dependencies using TaskCreate
  2. Main agent spawns background subagents via Task(run_in_background=true)
  3. Subagents try to use TaskGet to read their assigned task

What happened:
Subagents don't have Task* tools. They had to:

  • Explore ~/.claude/tasks/ to find the session directory
  • Manually read JSON files via Read tool
  • Manually write JSON files to update status

This works but is fragile (guessed wrong paths initially, no validation, potential race conditions).

Expected behavior:
Subagents spawned via Task tool should either:

  1. Inherit Task* tools from parent session, OR
  2. Have CLAUDE_CODE_TASK_LIST_ID passed automatically so they know where to look

Why this matters:
The Tasks announcement described spawning subagents to work on a shared task list as a core use case. But currently, standalone claude processes with CLAUDE_CODE_TASK_LIST_ID env var have better task access than subagents spawned from inside Claude Code. The "native" path is worse than the external bash loop path.

Environment Info

  • Platform: darwin
  • Terminal: ghostty
  • Version: 2.1.27
  • Feedback ID: 1d1aef95-00d3-4fc1-81ff-88f6c2648d6f

Errors

[{"error":"Error: NON-FATAL: Lock acquisition failed for /Users/tengjizhang/.local/share/claude/versions/2.1.27 (expected in multi-process scenarios)\n    at DUR (/$bunfs/root/claude:3589:2098)\n    at jPA (/$bunfs/root/claude:3589:1209)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-01-31T18:49:47.802Z"},{"error":"Error: Request was aborted.\n    at n5R (/$bunfs/root/claude:1522:23441)\n    at vpB (/$bunfs/root/claude:4719:7450)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-01-31T18:50:32.260Z"},{"error":"Error\n    at Tb (/$bunfs/root/claude:41:1143)\n    at <anonymous> (/$bunfs/root/claude:46:10080)\n    at emit (node:events:92:22)\n    at endReadableNT (internal:streams/readable:861:50)\n    at processTicksAndRejections (native:7:39)\n    at request (/$bunfs/root/claude:48:2147)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-01-31T18:55:51.917Z"},{"error":"Error\n    at Tb (/$bunfs/root/claude:41:1143)\n    at <anonymous> (/$bunfs/root/claude:46:10080)\n    at emit (node:events:92:22)\n    at endReadableNT (internal:streams/readable:861:50)\n    at processTicksAndRejections (native:7:39)\n    at request (/$bunfs/root/claude:48:2147)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-01-31T18:56:22.802Z"},{"error":"Error\n    at Tb (/$bunfs/root/claude:41:1143)\n    at <anonymous> (/$bunfs/root/claude:46:10080)\n    at emit (node:events:92:22)\n    at endReadableNT (internal:streams/readable:861:50)\n    at processTicksAndRejections (native:7:39)\n    at request (/$bunfs/root/claude:48:2147)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-01-31T18:56:39.692Z"},{"error":"Error\n    at Tb (/$bunfs/root/claude:41:1143)\n    at <anonymous> (/$bunfs/root/claude:46:10080)\n    at emit (node:events:92:22)\n    at endReadableNT (internal:streams/readable:861:50)\n    at processTicksAndRejections (native:7:39)\n    at request (/$bunfs/root/claude:48:2147)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-01-31T19:04:48.566Z"},{"error":"Error\n    at Tb (/$bunfs/root/claude:41:1143)\n    at <anonymous> (/$bunfs/root/claude:46:10080)\n    at emit (node:events:92:22)\n    at endReadableNT (internal:streams/readable:861:50)\n    at processTicksAndRejections (native:7:39)\n    at request (/$bunfs/root/claude:48:2147)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-01-31T19:04:48.631Z"},{"error":"Error: Request was aborted.\n    at makeRequest (/$bunfs/root/claude:360:3940)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-01-31T19:08:09.898Z"}]

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗