Permission modes determine how Qoder handles tool calls — each mode balances automation and security differently.
Mode
Best for
Behavior
default
Normal interactive use
Safe reads and internal actions run automatically; sensitive actions require confirmation.
accept_edits
Routine coding tasks
Automatically approves safe file edits inside working directories. Shell commands, external actions, and sensitive paths still go through normal checks.
auto
Unattended execution
Authorization is decided by the agent.
bypass_permissions (YOLO)
Trusted local experiments only
Skips approval prompts. A small set of path-shape protections stays active — see Path Shapes.
dont_ask
Headless flows that must not prompt
Never prompts. Any action that would normally ask is denied instead.
Use --permission-mode to set the default behavior for the current session:
Copy
qoder --permission-mode defaultqoder --permission-mode accept_editsqoder --permission-mode plan # Legacy compat: translates to default + enters Plan work stateqoder --permission-mode autoqoder --permission-mode bypass_permissionsqoder --permission-mode yolo # Equivalent to bypass_permissionsqoder --permission-mode dont_ask# Shortcutsqoder --yolo # Equivalent to --permission-mode bypass_permissionsqoder --dangerously-skip-permissions # Same as above
In interactive sessions, you can also press Ctrl+Y to quickly switch to YOLO mode.Multiple naming formats are supported (case-insensitive):
Standard (snake_case)
camelCase
Alias
accept_edits
acceptEdits
—
bypass_permissions
bypassPermissions
yolo, YOLO
dont_ask
dontAsk
—
Example:
Copy
# The following are equivalentqoder --permission-mode bypass_permissionsqoder --permission-mode bypassPermissionsqoder --permission-mode yoloqoder --yoloqoder --dangerously-skip-permissions
Non-default modes only take effect in trusted directories. If the current directory is not trusted, Qoder falls back to default.
Runtime temporary rules ("Allow for this session" in prompts)
Higher-priority sources override lower ones. If organization policy enables allowManagedPermissionRulesOnly, only policy-managed rules are used.How each source is configured:
Layers 1-3 (settings files): Write permissions.allow / permissions.deny / permissions.ask arrays in the corresponding JSON file. settings.local.json is ideal for machine-local approval rules; add it to .gitignore.
Layer 4 (flagSettings): qoder --settings ./custom-settings.json specifies an additional settings file. Same format as standard settings.json.
Layer 5 (cliArg): Configured via --permission-mode, --allowed-tools, --disallowed-tools, --tools CLI arguments; applies to current session only.
Layer 6 (command): Type /allow Bash(npm test) or /deny WebFetch in-session; persisted to settings.local.json.
Layer 7 (session): Temporary rules from selecting "Allow for this session" in prompts; lost when the process exits.
Auto-approves file edits, shell commands still require confirmation
acceptEdits
plan
Read-only mode (legacy compat: maps to default + Plan work state)
—
auto
Authorization is decided by the agent
—
bypass_permissions
Skip permission prompts (YOLO)
yolo, bypassPermissions
dont_ask
Non-interactive: deny anything requiring approval
dontAsk
Case-insensitive. All aliases are accepted.Disable YOLO mode — organization admins can prevent users from entering bypass_permissions mode:
Copy
{ "security": { "disableYoloMode": true }}
When set, --yolo, --permission-mode bypass_permissions, and Ctrl+Y are all disabled, and the Shift+Tab cycle skips this mode. Sub-agents declaring bypass are also downgraded to acceptEdits.Disable Plan mode — if the Plan workflow is not needed:
Copy
{ "general": { "plan": { "enabled": false } }}
When set, the /plan command is unavailable, --permission-mode plan falls back to default, and EnterPlanMode/ExitPlanMode tools are not registered.Auto mode classifier configuration — guide the AI classifier's decisions with natural language rules:
Copy
{ "autoMode": { "allow": [ "running npm/yarn/pnpm scripts defined in package.json", "creating or editing test files" ], "soft_deny": [ "deleting files outside the test directory", "modifying CI/CD configuration" ], "environment": [ "This is a Node.js monorepo with pnpm workspaces", "The project uses Vitest for testing" ] }}
Field
Purpose
allow
Operation descriptions the classifier tends to auto-approve
soft_deny
Operation descriptions the classifier tends to deny
environment
Environment context provided to the classifier
These rules are soft guidance — injected into the classifier prompt as reference; the final decision is still made by the AI classifier. For security, autoMode configuration is read only from your own global settings. Workspace files are ignored, including the local settings file: any file under the workspace can arrive with a checkout, and a repository able to add classifier allow entries could bias auto mode toward approving dangerous actions.The user-level AGENTS.md is also injected into the classifier context, as evidence of what the session was asked to accomplish. Only the user-level file is read. Its content describes intent and does not constitute authorization: an action it appears to sanction is still blocked when it conflicts with a safety rule.Actions adjudicated without the classifier
Read-only tools (file reads, search, glob) are approved by tool name. The target path is not evaluated, so paths outside the working directory are approved as well.
Writes and edits inside the working directory, and inside directories added with /add-dir, are approved directly.
All other actions are submitted to the classifier, including writes to paths outside those directories.
The classifier runs in two stages. The first stage is a fast pass that can only approve; actions it does not approve are submitted to the second stage, which is the only stage that can conclude an action must be blocked. Adjudication latency therefore differs between tool calls.Circuit breakerIn auto mode the agent decides authorization for tool calls, without asking about each one. When consecutive block verdicts reach the limit, the circuit breaker trips: the next action becomes an authorization prompt carrying the limit warning and the most recent block reason. The mode itself remains available, and the count clears once an action is approved.The circuit breaker is the only condition under which a permission verdict produces an authorization prompt in auto mode. When the classifier is unreachable or returns no usable verdict, the action is denied rather than prompted; the message states that this is not a safety verdict on the action, the same action may be retried, and read-only tools are unaffected. When no classifier model is available, switching into auto mode is refused.Separately, tools that require user input (such as AskUserQuestion) and entering or leaving Plan always request confirmation, as does a session grown too long for the classifier to read its full context. None of these are outcomes of a permission verdict.
--allowed-tools and --disallowed-tools use the same rule syntax as settings. --tools restricts the available built-in tool set for the current run (unlisted tools are denied).
Some paths are protected because editing them can change execution behavior, credentials, or tool behavior. Examples include .git, .vscode, .idea, .husky, most .qoder configuration files, shell startup files like .bashrc/.zshrc, Git config, .mcp.json, and .ripgreprc. In normal interactive modes these paths require explicit approval.
Some path spellings can reach resources outside the local filesystem, or bypass path comparison. These are handled separately from rules, on two independent axes.
Network locations — paths beginning with two separators (\server\share, //server/share), extended UNC forms (\?\UNC\server\share), WebDAV spellings, and /net/<host>/… automount paths. Reading, searching, writing and shell access are all refused.
Local mounts — \wsl$\…, \wsl.localhost\…, \?\C:\… and \?\Volume{…}\… name local storage and follow the normal rules. A loopback host such as \127.0.0.1\share is still a network location.
Bypass-prone spellings — alternate data streams (file.txt:stream), 8.3 short names (PROGRA~1), device paths (\.\…), trailing dots or spaces, three or more consecutive dots, and reserved device names (CON, NUL, COM1) require explicit approval.
Path-scoped read rules use Read(...). Path-scoped write rules use Edit(...); they cover file editing and writing checks for Edit, Write, and NotebookEdit. An Edit(...) allow rule also implies read permission for the same path.File rules use gitignore-style matching.
Pattern
Meaning
/src/**
Rooted at the rule source's root directory. In project/local settings, relative to project root; in user settings, relative to home directory.
~/Documents/**
Home-directory-based path.
//tmp/data/**
Absolute path from system /. Use double slash for absolute paths. In a rule pattern a leading // means "absolute from the filesystem root" and is unrelated to the network-location handling above.
*.secret
Rootless filename pattern that matches at any location.
Web tools can be controlled at the tool level. Use ask when every web fetch should require confirmation, or deny when web access should be blocked for a session or project.
Agent rules control Subagent launches. The rule content is a Subagent name, matched case-insensitively. All three behaviors are supported and evaluated in the order deny > ask > allow. When no matching rule is configured, the launch proceeds without a confirmation prompt.
Triggered after the permission pipeline produces ask, before the prompt/callback. Suitable for automated approval systems or external notifications (e.g., Slack/email alerts):
Hook permission decisions have higher priority than permission modes — even in bypass_permissions mode, a PreToolUse hook returning deny will still block execution. This provides an unbypassable interception capability for organization-level security policies.Execution order:
Hook PreToolUse → if returns allow/deny, short-circuit