Argument, April 27, 2026
Anthropic shipped Auto Mode in April 2026. A Mac agent built on the same Claude Code SDK does the opposite, on purpose.
Auto Mode is the headline new Claude feature of April 2026. A classifier sits between Claude and your shell, low-stakes tool calls run silently, high-stakes ones pause for a human. The release notes are mostly about agent terminals.
Fazm, the macOS agent that talks to Claude through the same Agent Client Protocol, made the inverse choice. The bridge auto-approves every session/request_permission request that comes back from Claude. The argument for that choice is the rest of this page, and it has one anchor fact: TCC has been the gate on macOS since 2012, and a fresh LLM classifier on top of TCC is paying twice.
“Auto-approving permission for tool (id=...). The bridge writes that line every time Claude asks for permission, on purpose, because the OS already drew the line.”
acp-bridge/src/index.ts, lines 573 to 585
What Auto Mode actually is
The shape of the feature, in three sentences. A small classifier rates every tool call Claude wants to dispatch. Calls that look low-stakes run without a prompt. Calls that look high-stakes pause for a human, and every decision is logged with reasoning so you can audit later. The rollout window was March 24 to April 16, 2026: research preview to Team, then to Enterprise and the API, then to Max users with the beta flag dropped.
The product framing in the launch coverage is consistent. TechCrunch wrote about Anthropic handing Claude Code more control while keeping it on a leash. The independent guides describe a security reviewer that sits between Claude and your system, making approval decisions at machine speed. The defaults: rename, reformat, comment, all proceed. Delete, network, commit and push, all pause.
That description fits a process that has unrestricted shell power. Claude Code in your terminal can rm -rf, git push --force, or pipe a curl into bash with the same uid as you. There is no operating-system permission boundary between Claude and your filesystem, your network, or your environment variables. Auto Mode is filling a real hole there. The agent terminal is the place Anthropic chose, correctly, to put the gate.
The question this page is asking is what to do with that primitive when the agent is not running in a terminal. When it is running inside a sandboxed Mac process whose every dangerous capability already routes through a 14-year-old kernel-enforced permission system. The answer Fazm picked is: nothing. Don't add a second gate. The reasons are below.
Auto Mode versus the Fazm bridge, on the same JSON-RPC method
// roughly what Auto Mode does inside Claude Code, April 2026
// classifier sits between every tool call and the host
async function runTool(call: ToolCall) {
const verdict = await classify(call, {
history: session.history,
cwd: process.cwd(),
branch: gitBranch(),
})
if (verdict === "safe") {
// rename a variable, reformat code, add a comment
return executeImmediately(call)
}
if (verdict === "risky") {
// delete files, network call, push to remote
return await askHuman(call)
}
// logged either way, with reasoning
}The left panel is pseudocode that follows the public descriptions of how Auto Mode classifies tool calls. The right panel is real code from github.com/m13v/fazm, with the line numbers cited inline.
Where the gate actually lives on macOS
Claude is the brain. The bridge is the wire. The Swift app is the hand. None of those three is the gate. The gate on macOS is TCC, the Transparency Consent Control system, and it has been doing exactly this job since OS X Mountain Lion in 2012.
When Fazm starts, the user is asked once for Accessibility, once for Screen Recording, once for Microphone, once for Notifications. Each grant is a user-visible toggle in System Settings. Each one is enforced by the kernel, not by code we wrote. Revoke any of them and the corresponding capability disappears immediately, no app restart, no LLM in the path. That is the boundary an Auto Mode classifier would have to be smarter than to be additive, and the kernel is hard to be smarter than.
One tool call, four actors, no LLM-side gate
The orange self-loop on the bridge is the auto-approval. The kernel-enforced gate is the green response from TCC. There is no row in this diagram for an LLM classifier rating the tool call, by design.
The auto-approve handler, in 13 lines
The relevant code lives in acp-bridge/src/index.ts. The bridge speaks JSON-RPC to the Claude Code agent process over stdio, and the agent sends a session/request_permission request whenever it needs the user to allow or deny a tool action.
The bridge picks the option id off the request. It prefers allow_always, then allow_once, then the literal string "allow", and writes back { outcome: "selected", optionId }. The comment on the line above the handler reads matches agent-bridge's bypassPermissions behavior. There is a logErr call that emits Auto-approving permission for tool (id=...) for every grant, so the log is auditable in /tmp/fazm-dev.log.
The whole handler is the right-hand panel of the comparison above. It is small on purpose. Anything more would be a second permission system and we would have to maintain it forever.
Two ways to gate a tool call, one of them runs in the kernel
A small Claude rates every tool call. Cheaper than a human, slower than a syscall, and it has to be smarter than every prompt-injection payload that reaches the parent agent. When it pauses a tool call it is correct. When it lets one through it inherits whatever the agent inherited from the page that injected the prompt.
- Adds latency on every tool dispatch
- Non-deterministic gate, retrains over time
- Right answer for terminal agents with shell power
- Lives at the same trust altitude as the thing it is gating
When you would still want Auto Mode on top
The honest counterargument. There is a class of attack where the OS gate is not enough: prompt injection that talks the agent into using a capability the user did grant in a way the user did not intend. A poisoned email convinces Claude to forward your inbox. A poisoned web page convinces Claude to read your clipboard and post it to a discord webhook. Neither requires an unsanctioned syscall, both stay inside the granted-capability envelope. TCC is silent on intent.
Auto Mode would help here, in principle, by classifying the dispatched action against the prior turn of conversation and pausing if the intent shifted suddenly. We have not added that to Fazm and the reason is empirical, not theoretical. Two things we did add do most of the work cheaper. First, Claude is reading an accessibility tree, not a screenshot, so when the LLM names what it wants to click it is naming a stable element ref. The space of available actions is structurally smaller than click anywhere. Second, the tools surface is hand-written in ChatToolExecutor.swift and code-reviewed; there is no exec_shell tool to subvert. Auto Mode would still catch some prompt-injection attacks. The marginal capture rate has not justified the per-tool latency tax.
That calculation could change. If we shipped a richer toolset (a real run_command tool, an unscoped network fetcher), the calculation flips. The bridge already has the hook point: six lines above the auto-approve write would be the place to call a classifier. We would add it the same week we added the dangerous tool. We have not added the dangerous tool.
What the rest of April 2026's Claude features mean for a Mac agent
One-liner per April release
- April 7, Claude Mythos Preview, security-tuned model and Project Glasswing. Different lane, intended for code audit and critical software hardening, not a generalist computer-use replacement.
- April 11, Claude Code /team-onboarding command. Claude Code surface, not exposed inside Fazm. Useful if you are spinning up a team on the CLI; not a Mac agent feature.
- April 16, Auto Mode out of beta on Max. The feature this whole page is arguing about. Right answer for the CLI; we did not bolt the same primitive on the Mac path.
- April 16, Claude Opus 4.7 GA. Drops into Fazm's Smart slot the next time the bridge re-pulls models. Better long-horizon reasoning over the AX tree, which is where we put our budget.
- April 16, Computer Use in CLI v2.1.86, multi-monitor. Screenshot-based path, complementary to Fazm's AX-based path. Auto Mode is most additive on this surface.
- April 17, Claude Design. Anthropic Labs product on claude.ai for prototypes and slides. Orthogonal to a desktop agent.
- Vision resolution lifted from roughly 1.15 MP to roughly 3.75 MP, about 3.3x. Helps screenshot-based agents disproportionately. Fazm sends accessibility text in the chat path, so the win is mostly in our optional capture_screenshot tool.
Want to watch the auto-approve fire on a real session?
Book 20 minutes. We screenshare a Fazm run with /tmp/fazm-dev.log open next to it, walk through the bridge code at lines 573 to 585, and toggle Accessibility off and on so you can see the OS-side gate hold the line.
Questions readers actually ask
What was Anthropic's headline new Claude feature in April 2026?
Auto Mode in Claude Code. It started as a research preview earlier in the spring and finished landing across Team, Enterprise, API, and Max users between late March and April 16, 2026, when the beta flag was dropped. The feature is a classifier that sits between Claude and the host: every tool call is rated by a smaller model, low-stakes calls (rename a variable, reformat code, add a comment) run silently, high-stakes calls (delete files, network requests, git push) pause for a human. Opus 4.7 going generally available on April 16 and Computer Use becoming a CLI primitive on macOS and Windows in v2.1.86 are the other two banner items, but Auto Mode is the one that changes the shape of how a Claude agent behaves on someone's machine. It is the new feature with the most architectural weight.
Why does a desktop AI agent like Fazm auto-approve every Claude tool call instead of using Auto Mode?
Because the gate is in a different place on macOS. Claude Code, in the terminal, has unrestricted shell access. There is no operating-system permission boundary between Claude and your filesystem, your git history, your network, or your environment variables. Auto Mode is filling a real hole there. Fazm runs Claude inside a sandboxed Mac process. Every dangerous capability we expose to Claude (read the foreground app's accessibility tree, dispatch a click, save audio, capture a screen) routes through TCC, the Transparency Consent Control system, which has been doing exactly this job since 2012. The user clicks Allow on Accessibility once, on Screen Recording once, on Microphone once. After that, the boundary is enforced by the kernel, not by an LLM. Putting an LLM classifier on top of that is paying twice for the same gate, and the second payment is the worse one because it is non-deterministic.
Where exactly in the Fazm source does the auto-approval happen?
In acp-bridge/src/index.ts, lines 573 through 585. The bridge speaks JSON-RPC to the Claude Code agent process. When the agent emits a session/request_permission request (the same request that Claude Code's Auto Mode classifies), the bridge picks the optionId from allow_always, falls back to allow_once, falls back to the literal string "allow", and writes back outcome: "selected". A logErr line emits Auto-approving permission for tool (id=...) so we can see every grant. The behavior comment, on line 574, reads matches agent-bridge's bypassPermissions behavior, which is the SDK-side equivalent. Anyone can clone github.com/m13v/fazm and run grep -n "session/request_permission" acp-bridge/src/index.ts to confirm.
Is the auto-approve a safety regression compared to Claude Code Auto Mode?
No, because the threat model is different. In Claude Code, the worst case is rm -rf, git push --force, curl piped to bash, all from a process that has user permissions on every file. Auto Mode pulls those into a human-in-the-loop step. In Fazm, the worst Claude can ask the bridge to do is dispatch a click, type into a field, or run a tool we have explicitly written into the executor, and only inside the apps the user has already granted access to via TCC. If the user revokes Accessibility, the click tool fails at the OS layer, not at a classifier. If they revoke Screen Recording, capture_screenshot returns ERROR: Screen Recording permission is not granted (you can see the exact string in Desktop/Sources/Providers/ChatToolExecutor.swift, line 909). Auto Mode is solving terminal-shaped problems. Our problems are app-shaped.
What about prompt injection? Could a malicious page trick Claude into asking the bridge to do something destructive?
Prompt injection is real, and it is the strongest argument for keeping a classifier somewhere. Two things blunt it on Fazm. First, the tool surface Claude can call from the bridge is small and code-reviewed (the cases in ChatToolExecutor.swift around line 60), and every tool maps to a TCC-gated capability. There is no exec_shell. Second, the side effects that worry you (sending money, posting to social, writing files outside the home directory) require the user to have already granted a specific app access. A poisoned page asking Claude to wire money cannot reach a banking app that has not been opened, focused, and given Accessibility permission to be controlled. Auto Mode gives you a soft second layer, but the OS layer is the one that holds when the prompt-injection content is well crafted enough to fool the classifier itself.
Could Fazm bolt Auto Mode on top of the bridge anyway?
Mechanically, yes. The bridge already handles every session/request_permission, so a classifier hook is six lines of TypeScript away. We have not, on purpose. The classifier costs latency (an extra Claude or sub-Claude call per tool dispatch) and adds a non-deterministic gate to a flow whose failure modes are usually something the OS already caught. The April 16 release that matters most for us was not Auto Mode, it was Opus 4.7 going GA, because better reasoning over an accessibility tree makes Claude pick the right element on the first try. That is where we put the budget.
Does Computer Use in the Claude Code CLI change this analysis?
Computer Use shipped as a Claude Code CLI primitive on macOS and Windows in v2.1.86, with multi-monitor support. It is screenshot-based, the agent ships pixels back to the model and gets pixel coordinates back. That is the path that benefits the most from Auto Mode, because the action surface is now click anywhere on the screen, type anything anywhere, with very little in the way of structural typing of what dangerous looks like. Fazm goes the other way: we send Claude the focused window's accessibility tree, with named elements like [Button] "Send" x:1184 y:712, and the dispatch is back through AX, not synthetic mouse events. The class of dangerous actions Auto Mode would be classifying is narrower because Claude is naming buttons, not coordinates.
What is the three-layer permission probe that gates this whole pipeline?
It is testAccessibilityPermission and probeAccessibilityViaEventTap in Desktop/Sources/AppState.swift, lines 431 through 504. Layer 1 is a real AXUIElementCopyAttributeValue against the focused window, so we are not trusting the cached AXIsProcessTrusted answer that macOS hands back. Layer 2, on cannotComplete, retries against Finder, because Qt and OpenGL apps return that error even when our permission is fine. Layer 3, when Finder is not running, creates a listen-only CGEvent tap, which consults the live TCC database and bypasses the per-process cache that goes stale on macOS 26 Tahoe after re-signs. That probe is the load-bearing piece for the auto-approve story. Without it, a user with a stale cache would see the Claude UI work, the AX calls fail silently, and the agent would feel broken with no obvious cause. With it, we know the OS gate is real before we let Claude past it.
Where do the other April 2026 Claude features land in Fazm?
Opus 4.7 GA on April 16 (TechCrunch, Anthropic news) lands in the Smart slot of the Fazm model picker, no app rebuild needed, because the bridge populates models from a live ACP event and the Swift side maps substrings (haiku, sonnet, opus) onto Scary, Fast, Smart. The vision resolution jump from roughly 1.15 megapixels to roughly 3.75 megapixels (a 3.3x increase) does not change much for us in the chat path because we send accessibility text, not screenshots. Claude Design (April 17) is a Pro/Max/Team/Enterprise product on claude.ai, orthogonal to a desktop agent. Claude Mythos Preview (April 7), the security-tuned model, sits in a different lane. The /team-onboarding command (April 11) is a Claude Code command, not exposed in Fazm. Auto Mode is the only April feature with a direct architectural counterpart inside the app, which is why it gets the whole page.
How do I run Fazm and watch the auto-approval fire?
Build or download Fazm, start a session, then tail /tmp/fazm-dev.log in another terminal and look for Auto-approving permission for tool. Each line corresponds to one tool call Claude wanted to dispatch. If you also want to see what Claude is asking for, tail the same log for tool_call lines, the bridge logs both the request and the auto-approval together. Revoke Accessibility for Fazm in System Settings while it is running and you will instead see ACCESSIBILITY_CHECK lines from AppState.swift, the OS-side gate doing its job.
Same month, different cross-sections of the same shipping Mac agent
More from the April 2026 Claude cycle
Anthropic Claude latest news, April 2026, read from a Mac that feeds Claude accessibility trees
The same April timeline (Sonnet 4.6, Opus 4.7, ACP 0.25.0 to 0.29.2) read through the screen-context pipeline instead of the permissions pipeline.
Anthropic Claude new model, April 2026, what the Opus 4.7 ID rename actually broke downstream
Opus 4.7 arrived under the model ID `default` in the ACP SDK, and that one rename produced a real preference-loss bug worth two patch releases.
Claude Code update April 2026, what shipped in the agent SDK from a consumer app's vantage
The April Claude Code SDK changes, written from the perspective of a consumer Mac app that ships on top of it.