Note
This addresses the concern of "how to get Xcode's agent support to reach outside of itself without asking for permission" but does not address the reverse of "how to get a terminal agent to talk to Xcode without prompting."
This is basically the equivalent of running something like claude --dangerously-skip-permissions, so... probably this is a bad idea.
defaults write com.apple.dt.Xcode IDEChatAgenticChatSkipPermissions -bool YES
When you set this flag, after you initiate a session with Claude Agent in Xcode, if you go to terminal and run ps -ax | grep danger you will see the claude agent process has --dangerously-skip-permissions passed directly to it from Xcode.
By running strings and nm on the IDEIntelligenceAgents.framework and IDEIntelligenceChat.framework binaries inside Xcode 26.3.0 RC:
/Applications/Xcode-26.3.0-Release.Candidate.app/Contents/PlugIns/IDEIntelligenceAgents.framework/
/Applications/Xcode-26.3.0-Release.Candidate.app/Contents/PlugIns/IDEIntelligenceChat.framework/
From ps -ax output, the full invocation looks like:
claude -p --output-format=stream-json --input-format=stream-json --verbose \
--mcp-config /tmp/mcp-config-<UUID>.json \
--permission-prompt-tool stdio \
--settings {"env":{"ANTHROPIC_MODEL":"opus",...}} \
--allowedTools <comma-separated list of mcp__xcode-tools__* tools> \
--dangerously-skip-permissions # only present when IDEChatAgenticChatSkipPermissions=YES
Key details:
- The temp MCP config (
/tmp/mcp-config-<UUID>.json) only includesxcode-tools(Xcode's built-in MCP server viaxcrun mcpbridge). Third-party MCP servers (e.g.,ios-simulator) are loaded by Claude Code from.claude.json, not from Xcode's temp config. - The
--allowedToolslist only includesmcp__xcode-tools__*tools. Third-party MCP tools are not included regardless of what's in.claude.json. - With
--dangerously-skip-permissions, all tools bypass approval regardless of the--allowedToolslist. - The agent binary is at
~/Library/Developer/Xcode/CodingAssistant/Agents/Versions/26.3/claude. - Xcode validates the code signature on the binary at launch. You can swap it with another signed Mach-O binary (e.g., a newer Claude Code build), but replacing it with a shell script wrapper fails with: "The code signing identity for the agent did not match expectations."
The allowedTools array in project entries within ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/.claude.json is read by Claude Code but is not used by Xcode's --allowedTools CLI flag. It has no effect on which tools require approval. The only thing that controls tool approval is IDEChatAgenticChatSkipPermissions.
Note
For the reverse, IDEAllowUnauthenticatedAgents is the "Allow external coding agents" checkbox in Xcode Settings. It controls whether external agents can connect to Xcode's MCP server at all -- setting it to NO disables the MCP server entirely. But setting it to YES still shows a per-launch approval dialog.
IDEChatInternalAllowUntrustedAgentsWithoutUserInteraction is the key that should bypass the external agent approval dialog, but it appears to only work in Apple-internal Xcode builds. Setting it to YES has no effect in release/RC builds.
No known bypass exists for the per-launch "The agent 'claude-code' wants to use Xcode's tools" dialog in shipping Xcode as of 26.3.0 RC.
Found via strings on the IDEIntelligenceChat.framework binary:
| Default | Type | Effect |
|---|---|---|
IDEChatAgenticChatSkipPermissions |
bool | Passes --dangerously-skip-permissions to internal agent |
IDEAllowUnauthenticatedAgents |
bool | Master toggle for external agent MCP access (UI setting) |
IDEChatInternalAllowUntrustedAgentsWithoutUserInteraction |
bool | Apple-internal only, no effect in release builds |
IDEChatSkipPermissionsForTools |
bool/? | Per-tool skip (may need tool names, not bool) |
IDEChatSkipPermissionsForTrustedTools |
bool/? | Skip for "trusted" tools (unclear what qualifies) |
IDEChatOverrideAllEnabledMCPTools |
? | Possibly overrides entire tool list |
IDEChatAgentAllowsInternetAccessTools |
bool | Controls web access tools |
IDEChatHiddenMCPTools |
? | Hides specific MCP tools |
IDEChatAddEnabledMCPTools |
? | Possibly adds tools to enabled list |
IDEChatRemoveEnabledMCPTools |
? | Possibly removes tools from enabled list |
IDEChatClaudeAgentModelConfigurationAlias |
string | Model selection (e.g., "opus") |
IDEChatOverrideAgenticHomeDirectory |
string | Override home dir for agent |
IDEChatAgenticChatClaudeStreaming |
bool | Controls streaming mode |
IDEChatAllowAgents |
bool | General agent toggle |
IDEChatAutoApplyEnabled |
bool | Auto-apply code changes |
IDEChatSendTelemetryOverride |
? | Override telemetry settings |