What happens
When a fullsend agent spawns subagents (via Claude Code's Agent tool or workflows), all subagents run inside the parent agent's sandbox. They share the same filesystem, policy, providers, and network access. This requires widening the parent's policy to cover everything any subagent might need.
For example, an orchestrator agent that spawns three subagents to explore different repositories must grant all three subagents read access to all three repositories, plus any credentials each subagent needs — even though each subagent only operates on one repository.
What should happen
Each subagent should run in its own sandbox with:
- A scoped policy covering only what that subagent needs
- Its own set of providers, defined by the subagent's harness
- A defined input/output contract (parameters in, schema-validated result out)
- Independent filesystem isolation
The parent agent should be able to discover available subagent profiles, understand their parameters and expected output, and spawn them with specific inputs. Results should be returned as schema-validated JSON, with optional file downloads from the child sandbox before it is destroyed.
Context
ADR 0020 (composable single-responsibility agents with individual sandboxes) established that each step within a stage gets its own agent, harness, and sandbox. Today this is only implemented at the inter-stage level (triage → code → review as separate pipeline stages). Within a stage, subagents still share the parent's sandbox, violating the least-privilege principle ADR 0020 prescribes.
What happens
When a fullsend agent spawns subagents (via Claude Code's Agent tool or workflows), all subagents run inside the parent agent's sandbox. They share the same filesystem, policy, providers, and network access. This requires widening the parent's policy to cover everything any subagent might need.
For example, an orchestrator agent that spawns three subagents to explore different repositories must grant all three subagents read access to all three repositories, plus any credentials each subagent needs — even though each subagent only operates on one repository.
What should happen
Each subagent should run in its own sandbox with:
The parent agent should be able to discover available subagent profiles, understand their parameters and expected output, and spawn them with specific inputs. Results should be returned as schema-validated JSON, with optional file downloads from the child sandbox before it is destroyed.
Context
ADR 0020 (composable single-responsibility agents with individual sandboxes) established that each step within a stage gets its own agent, harness, and sandbox. Today this is only implemented at the inter-stage level (triage → code → review as separate pipeline stages). Within a stage, subagents still share the parent's sandbox, violating the least-privilege principle ADR 0020 prescribes.