Cycle with shift+tab: default → acceptEdits → plan → auto, plus bypassPermissions.
- Auto mode runs autonomously. Read-only and in-project actions run immediately, known-dangerous commands are hard-blocked, and anything else is screened by an LLM safety classifier. The classifier sees only what you typed and the proposed action, never tool output or the files you mention, so prompt injection can't talk it into approving. Only what you type into a frontend (the TUI, the REPL, the web UI or phone, an ACP client,
-p) counts as your request. Every other prompt is shown to it as the agent's task, not as your request: a subagent's task, a goal, team or outcome step, a background run, a scheduled task, a slash command's expansion, a request from an MCP client. After 3 blocks in a row, the decision falls back to you. Optional, experimental:permissions.fast_path = trueclears routine shell commands with a small built-in model in microseconds instead of a model call (it can only allow, never block, and never clears inline code such asnode -eorpython -c, packages fetched to run such asnpx github:…orgo run …@latest, orcurl -K/wget -eoption files; see classifier/ for how it's measured). Shell writes to protected paths (.git/,.chanto/,.claude/settings and hooks,.mcp.json,.husky/,.vscode/settings and tasks) ask in every mode but bypass, as edits of them do, and so does a write whose target the shell computes ($var,$(…)). In auto mode, extracting an archive or applying a patch asks too. - Always a human's call, in every mode but
bypassPermissions: reading secret files (.env, keys,~/.ssh,~/.aws), writing files outside the project or ones that make git or Chanto run commands (.git/hooks, hooks config), turning the command sandbox off, and fetching cloud instance metadata, this machine's own services (localhost,127.0.0.1,::1) or local files outside the project. An allow rule you write still covers its case, for exampleWebFetch(domain:localhost)for your dev server.