Configuration Layers
From highest to lowest priority:| Priority | Source | Notes |
|---|---|---|
| 1 (highest) | Organization / Team Settings | Cannot be overridden |
| 2 | Session (interactive approvals) | In-memory only |
| 3 | Project Local (.cognition/config.local.json) | Personal, gitignored |
| 4 | Project (.cognition/config.json) | Shared with team |
| 5 (lowest) | User (~/.config/cognition/config.json) | Your defaults |
When to Use Each Level
User config
User config
Path:
~/.config/cognition/config.jsonUse for personal preferences that apply everywhere:- Default model preference
- Theme preference
- Personal MCP servers (e.g., your own API keys)
- Global permission grants
Project config
Project config
Path:
.cognition/config.jsonUse for team standards committed to the repository:- Shared MCP servers (with non-secret config)
- Team permission policies
- Import settings
Project local config
Project local config
Path:
.cognition/config.local.jsonUse for personal overrides that shouldn’t be committed:- API keys and secrets
- Personal tool preferences for this project
- Permission overrides
Organization settings
Organization settings
Managed by your enterprise admin through the team settings dashboard. These settings cannot be overridden by individual users and enforce organization-wide policies like model restrictions and MCP server allowlists.
How Merging Works
Permissions
Permission lists are merged (combined) across levels. A denial at a higher level cannot be overridden by an allow at a lower level. For example, if your organization deniesExec(sudo), adding Exec(sudo) to your user allow list has no effect — the organization denial always wins. However, other permissions like Read(**) at the project level are applied normally.
MCP Servers
MCP server configs are merged by name. A server defined at a higher level overrides the same-named server at a lower level. For example, if both your user config and project config define a “github” server, the project config version wins because it has higher priority than user config.Scalar Values
Simple values (model, theme, booleans) use the highest priority source that defines them.Project Root Detection
Devin for Terminal finds your project root by looking for a.git directory, walking up from your current working directory. Project config (.cognition/) is loaded from the project root.
If you have nested
.cognition/ directories (e.g., in a monorepo), subdirectory configs take precedence over ancestor configs.File Discovery Summary
| File | Found by | Shared? |
|---|---|---|
~/.config/cognition/config.json | XDG path | No |
~/.config/cognition/config.local.json | XDG path | No |
.cognition/config.json | Walking up from cwd | Yes (committed) |
.cognition/config.local.json | Walking up from cwd | No (gitignored) |
.cognition/skills/*/SKILL.md | Project root | Yes (committed) |
~/.config/cognition/skills/*/SKILL.md | XDG path | No |
AGENTS.md | Project root | Yes (committed) |

