File Locations
On Windows, the user config paths are
%APPDATA%\devin\config.json and %APPDATA%\devin\mcp_config.json (e.g. C:\Users\<you>\AppData\Roaming\devin\config.json), not ~\.config\devin\.MCP servers moved to the dedicated
mcp_config.json files in v3000.3 (the Local 3.6 release). Older versions store them in the mcpServers key of the main config files instead; newer versions migrate any mcpServers entries found there automatically on startup. See mcpServers.Full Config Reference
- User config
- Project config
Options Reference
Options marked with User only can only be set in the user config (
~/.config/devin/config.json; %APPDATA%\devin\config.json on Windows). Only permissions, read_config_from, and hooks are available in project configs. mcpServers can also be set at both levels, but lives in the dedicated mcp_config.json files (see mcpServers).agent (user only)
theme_mode (user only)
permissions
See Permissions for full documentation.mcpServers
Map of server name to server configuration. Supports both local command (stdio) and remote HTTP servers. See MCP Configuration. Since v3000.3 (the Local 3.6 release), MCP servers live in dedicated files:~/.config/devin/mcp_config.json (%APPDATA%\devin\mcp_config.json on Windows), .devin/mcp_config.json, and .devin/mcp_config.local.json. In older versions, the mcpServers key lives directly in the main config files; newer versions migrate it to the dedicated files automatically on startup.
show_path (user only)
Show the current working directory path in the input border. When enabled, the top border of the input box displays your prettified CWD (e.g.~/projects/my-app).
unicode_mode (user only)
Controls whether the terminal UI uses Unicode symbols or ASCII-safe fallbacks. Set to"ascii" if your terminal or font does not render Unicode glyphs correctly (e.g. the ⏺ symbol appearing as a box).
show_hints (user only)
Show occasional tips between turns (e.g. “Did you know: Use /model to switch between available models”). Useful for discovering CLI features; set tofalse to suppress them once you’re familiar.
include_gitignored_files (user only)
Include gitignored files in@ tab completion results. When enabled, files matching .gitignore patterns will appear in @ mention completions. This is useful if you store documentation or other files in gitignored directories that you want to reference.
respect_gitignore (user only)
Control whether the agent respects.gitignore when reading or writing files via tools. When enabled, tool calls that access gitignored paths are blocked. This is separate from include_gitignored_files, which only affects @ tab completion.
attribution (user only)
Control whether the agent adds Devin attribution to the commits and pull requests it creates. When enabled, commit and PR bodies include aGenerated with [Devin] line and a Co-Authored-By: Devin trailer. Set to false to omit both so no Devin attribution is added.
subagents_enabled (user only)
Control whether the agent can delegate work to subagents. When disabled, therun_subagent and read_subagent tools are removed, so the agent does all the work itself. Changing this setting applies live — a running session picks it up without restarting.
Organization policy takes precedence: if an admin has disabled subagents for your org (via the Default subagent model setting), subagents stay off regardless of this setting.
keymap (user only)
Override the CLI’s built-in keyboard shortcuts. The section is a table of contexts (global, editor, input, list, …), each mapping action names to the key(s) that trigger them. Actions you don’t list keep their built-in defaults.
A key spec is a
--separated list of modifiers (ctrl, alt, shift) followed by one key name (a character, or a named key like enter, esc, tab, home, page-up, f5). Modifier order does not matter and matching is case-insensitive, except that a single uppercase character binds the shifted key ("K" is the same as "shift-k").
global.cancel (Ctrl+C) cannot be unbound, so you can always interrupt a running agent. Invalid entries, unknown contexts or actions, and overrides that would collide with another shortcut in the same context are reported at startup and fall back to the built-in default.auto_update (user only)
Control background auto-update on macOS and Linux. When enabled, new releases are downloaded and activated while Devin CLI runs, so the next invocation ofdevin picks up the latest version automatically. The currently running session is unaffected — a swap of the current symlink only takes effect on the next launch.
The update is designed to be safe against interruption: every filesystem step is staged to a temp path and promoted with an atomic rename, and concurrent updaters are serialized with a file lock. Quitting mid-update cannot leave the installation in a broken state — you’ll just come back up on the old version.
Only applies to self-managed installations (curl | bash on macOS/Linux). Installations bundled with another product (e.g. Windsurf) ignore this setting and update through their parent application.
keymap (user only)
Override keyboard shortcuts. Overrides are keyed by context, then action — thecontext.action identifier shown for each shortcut in /shortcuts (e.g. editor.insert_newline):
Overrides fully replace the built-in defaults for that action; unlisted actions keep their defaults.
Ctrl+C (cancel) cannot be unbound. Invalid entries (unknown names, bad key specs, wrong-typed values, or overrides that conflict with another binding in the same context) are reported as warnings at startup and skipped — the rest of the config still applies.
A key spec is zero or more --separated modifiers followed by one key name (e.g. ctrl-shift-p, alt-enter, f5, K). Modifiers: ctrl/control/c, alt/meta/option/opt/m, shift/s. Named keys: enter, esc, tab, backspace, delete, insert, up, down, left, right, home, end, page-up, page-down, space, f1–f24. Any other single character binds that character key (case-sensitive: K binds Shift+K); use - for the minus key (ctrl--).
You can also rebind interactively: in /shortcuts, press Enter on a shortcut row, then press the new key — the change is saved to this keymap section. See Customizing Keybindings.
notify
Control terminal notifications when the agent finishes or needs user input. The CLI writes a BEL character (triggers terminal bell / visual bell), an OSC 9 escape sequence (triggers a system notification in iTerm2 and compatible terminals), and an OSC 777 sequence (desktop notification in rxvt-unicode and other terminals). Terminals that do not recognize these sequences safely ignore them.read_config_from
Control importing from other AI tool configurations:
Set to
false to disable a specific import. null is treated as true.
proxy (user only)
Configure how the CLI routes its own outbound HTTP/HTTPS traffic (API calls, updates, MCP servers, etc.). This does not affect sandbox child-process networking (seesandbox below).
The mode field selects the proxy strategy:
Example — corporate proxy:
Administrators can set the same
proxy block in the machine-wide system configuration file. The enterprise setting takes precedence, and configuring a proxy in both files is an error — remove the proxy section from your user config if your organization manages it.sandbox (user only)
Configure domain-level network filtering for the sandbox. When--sandbox is active and domain filtering is configured, a managed network proxy starts on loopback and the sandbox restricts all child traffic to route through it.
For a complete overview of how the sandbox works — including enterprise enforcement and how enterprise and user settings interact — see the Sandbox documentation.
--sandbox flag enforces writable paths and deny rules at the OS level. Writable roots are derived from granted Write(...) scopes plus workspace directories; everything else is readable except paths hidden by Read(...) deny rules. Write(...) scopes granted mid-session dynamically expand the sandbox for subsequent commands.
If
--sandbox is passed but sandbox resolution fails (e.g., sandboxing tools are unavailable on the current platform), the CLI will refuse to start rather than running unsandboxed. This fail-closed behavior ensures the security intent of --sandbox is never silently bypassed.
Domain pattern syntax:
Example:
Domain filtering applies when the sandbox is active (
--sandbox). Without --sandbox, the sandbox section is ignored.For enterprise teams, admins can override domain lists via Team Settings. Enterprise allowlists are authoritative (they replace your local
allowed_domains), while enterprise denylists are additive (merged with your local denied_domains).
