Skip to main content
Devin for Terminal uses JSON files (with comment support) for configuration. This page documents all available options.

File Locations

FilePurpose
~/.config/devin/config.jsonUser-wide settings
.devin/config.jsonProject settings (committed)
.devin/config.local.jsonProject local overrides (gitignored)
On Windows, the user config path is %APPDATA%\devin\config.json (e.g. C:\Users\<you>\AppData\Roaming\devin\config.json), not ~\.config\devin\config.json.

Full Config Reference

// ~/.config/devin/config.json
{
  // Agent behavior
  "agent": {
    "model": "claude-opus-4-6-thinking",       // Default model
    "show_history_on_continue": true  // Show messages when resuming
  },

  // Theme
  "theme_mode": null,            // "light", "dark", "16color", "nocolor", or null (auto)

  // Permissions
  "permissions": {
    "allow": [],
    "deny": [],
    "ask": []
  },

  // MCP servers
  "mcpServers": {},

  // Display
  "show_path": false,             // Show CWD in input border
  "unicode_mode": "auto",         // "auto", "unicode", or "ascii"

  // File completion
  "include_gitignored_files": false, // Include gitignored files in @ completions

  // File access
  "respect_gitignore": false,        // Block tool access to gitignored paths

  // Notifications
  "notify": "smart",              // "never" | "smart" | "always" — terminal notifications

  // Sandbox network filtering
  "sandbox": {
    "allowed_domains": [],       // Domain allowlist (empty = no filtering)
    "denied_domains": [],        // Domain denylist (takes precedence)
    "network_mode": "full"       // "full" or "limited" (GET/HEAD/OPTIONS only)
  },

  // Import settings from other tools
  "read_config_from": {
    "cursor": true,
    "windsurf": true,
    "claude": true
  }
}

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, mcpServers, read_config_from, and hooks are available in project configs.

agent (user only)

OptionTypeDefaultDescription
modelstring"claude-opus-4-6-thinking"Default AI model
show_history_on_continuebooleantrueShow previous messages when resuming a session

theme_mode (user only)

ValueBehavior
nullAuto-detect (asks on first run)
"light"Light theme
"dark"Dark theme
"16color"Dark theme quantized to 16 ANSI colors (respects terminal color scheme)
"nocolor"No color output (monochrome, useful for VT100 terminals)

permissions

See Permissions for full documentation.
{
  "permissions": {
    "allow": ["Read(**)", "Exec(git)"],
    "deny": ["Exec(sudo)"],
    "ask": ["Write(**/.env*)"]
  }
}

mcpServers

Map of server name to server configuration. Supports both local command (stdio) and remote HTTP servers. See MCP Configuration.
{
  "mcpServers": {
    "server-name": {
      "command": "executable",
      "args": ["arg1", "arg2"],
      "env": { "KEY": "value" }
    },
    "remote-server": {
      "url": "https://mcp.example.com/mcp",
      "transport": "http"
    }
  }
}

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).
ValueBehavior
falseHidden (default)
trueShow CWD path in input border

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).
ValueBehavior
"auto"Detect Unicode support from environment (default)
"unicode"Always use Unicode symbols
"ascii"Always use ASCII-safe characters

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.
ValueBehavior
falseExclude gitignored files from completions (default)
trueInclude gitignored files in @ completions

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.
ValueBehavior
falseAgent can access all files regardless of .gitignore (default)
trueBlock tool access to gitignored paths

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.
ValueBehavior
"never"No notifications
"smart"Notify only when the terminal window is unfocused (uses OSC focus reporting) (default)
"always"Notify on every qualifying event regardless of focus

read_config_from

Control importing from other AI tool configurations:
OptionTypeDefaultDescription
cursorboolean/nulltrueImport from .cursorrules, .cursor/rules/
windsurfboolean/nulltrueImport from .windsurf/rules/
claudeboolean/nulltrueImport from .claude/
Set to false to disable a specific import. null is treated as true.

sandbox (user only)

Sandbox network filtering is currently unstable. If you need this feature, please reach out to your account representative for stability timelines.
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. The --sandbox flag enforces the active Read and Write permission scopes at the OS level. Writable roots are derived from granted Write(...) scopes plus workspace directories; readable roots come from Read(...) scopes (with platform defaults always readable). 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.
OptionTypeDefaultDescription
allowed_domainsstring[][]Domain patterns allowed through the proxy. When non-empty, only matching domains are allowed (allowlist mode)
denied_domainsstring[][]Domain patterns always blocked. Deny rules take precedence over allow rules
network_modestring"full""full" allows all HTTP methods; "limited" allows only GET/HEAD/OPTIONS
Domain pattern syntax:
PatternMatches
example.comExact match only
*.example.comAny subdomain (not the apex)
**.example.comApex domain and any subdomain
Example:
{
  "sandbox": {
    "allowed_domains": [
      "github.com",
      "**.npmjs.org",
      "**.crates.io",
      "**.pypi.org"
    ],
    "denied_domains": ["evil.example.com"],
    "network_mode": "full"
  }
}
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).

JSON with Comments

Config files support JavaScript-style comments:
{
  // Line comments
  "agent": {
    "model": "sonnet"  // Inline comments
  },
  /* Block
     comments */
  "permissions": {}
}