watch/loop/start tie the squad_state MCP config to --yolo
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 58/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- typescript
Research direction
Start with packages/squad-cli/src/cli/core/copilot-invocation.ts and trace buildAdditionalMcpConfigArgs() and withAdditionalMcpConfig() into the watch, loop, start, and copilot-bridge entry points listed in the issue. Compare those paths with watch/index.ts handling of copilotFlags. Done means MCP configuration can be loaded without implicit --yolo, blanket access is explicit or caller flags take precedence, and the requested argument-splitting limitation has a defined resolution.
Written by the indexing model from the issue text.
Description
Summary
squad watch --execute, squad loop and squad start add --yolo to every Copilot they spawn whenever the repository has a .mcp.json, regardless of --copilot-flags. Because squad init writes .mcp.json, this applies to effectively every Squad repo. A host that deliberately runs a narrower tool policy (deny lists, no allow-all, a human approving tool calls) cannot keep it without bypassing Squad's spawn path entirely via --agent-cmd.
Where (v0.13.1, unchanged since at least v0.11.0)
packages/squad-cli/src/cli/core/copilot-invocation.ts→buildAdditionalMcpConfigArgs()returns['--yolo', '--additional-mcp-config', '@<teamRoot>/.mcp.json'];withAdditionalMcpConfig()prepends it.- Called from
commands/watch/agent-spawn.ts(buildCopilotCommand, used by theexecuteandwave-dispatchcapabilities),commands/watch/index.ts(buildAgentCommand),commands/loop.ts,commands/start.ts,commands/copilot-bridge.ts. - Separately,
watch/index.tsdefaultscopilotFlagsto'--yolo'when--executeis set and no flags are given.
Why it matters
--yolo is --allow-all-tools --allow-all-paths --allow-all-urls. Loading the squad_state MCP server does not need any of them; --additional-mcp-config @.mcp.json works on its own. Coupling them means the only way to get Squad's state tools is to also grant blanket permission. That conflicts with the threat model in Squad's own features/security-hardening.md, and it is invisible to the caller: --copilot-flags looks like it controls the policy, but it doesn't.
We hit this in swigerb/squad-on-aca (swigerb/squad-on-aca#112), which runs squad watch in Azure Container Apps with a resolved deny list and documents that --yolo is never emitted. The watcher was getting it anyway.
Ask
- Pass
--additional-mcp-config @<teamRoot>/.mcp.jsonwithout--yolo. - Make blanket allow an explicit opt-in (keep today's behaviour behind a flag or
watch.yolo: truein config if you want backward compatibility), or at least do not inject it when the caller passed--copilot-flags. - Related:
--copilot-flagsand--agent-cmdare split with.trim().split(/\s+/), so a deny rule containing a space (--deny-tool "shell(git push)") cannot be expressed. A JSON-array form (for example--copilot-args-json '["--deny-tool","shell(git push)"]') would fix both.
Happy to send a PR if the direction sounds right.
- Dominant language
- TypeScript
- Stars
- 3.3k
- Forks
- 510
- Avg merge
- 1d 10h
- Merged PRs (30d)
- 113
Getting set up
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from bradygaster/squad
-
In-app coordinator/Ralph never reads .squad/ralph-instructions.md; only `squad watch --execute` doesOpen
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
bradygaster/squad#2233 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
bradygaster/squad#2205 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
bradygaster/squad#2181 ·
Maintainers usually reply within 1 day
-
homebrew warningsOpen
Difficulty 1/5 Under an hour Newbie friendliness 88/100
bradygaster/squad#2082 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 85/100
bradygaster/squad#2071 ·
Maintainers usually reply within 1 day
All issues in bradygaster/squad
Similar issues
-
"Contains" page watch never matches when its text has a trailing spacePossibly taken @RaphaelFakhri claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 77/100
CopilotKit/openmuse#184 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
bootstrap-vue-next/bootstrap-vue-next#3357 ·
Maintainers usually reply within 1 day
-
[quality] tide.ts: six mutation survivors in the merge-queue gate, draft refusal, fork-403 workflow-file diagnosis and getPull's fork flag are unpinned by any testPossibly taken @hivecommons-hive claimed this today. Openagent/quality needs-kind stage/040-covered-by-pr testing
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
cncf/prow-github-actions#517 · 1 comment ·
Maintainers usually reply within 2 days
-
Unsampled pageload span is profiled when profileLifecycle is 'trace' (browser UI profiling)Possibly taken @Jxxunnn claimed this today. OpenBrowser Waiting for: Product Owner
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
getsentry/sentry-javascript#25497 · 1 comment ·
Maintainers usually reply within 1 day