Three-tier configuration files, merge priority, and common configuration items in Qoder CLI
The behavior of Qoder CLI can be customized through JSON configuration files (
Qoder CLI reads configuration files from three levels:
The default configuration directory is
When the same configuration item appears at multiple levels, Qoder CLI merges them in the following order of precedence from lowest to highest, where higher precedence overrides lower precedence:
Configurations use deep merge rather than wholesale replacement:
For security reasons, Project-Level and Local Level configurations are only applied when the current working directory is trusted. If the working directory is not trusted, Qoder CLI only loads User Level configurations and ignores
Configuration files are in JSON format (supporting
Notes:
The following lists the most frequently adjusted configuration items, organized by group. Items marked with "requires restart" require a restart to take effect after modification.
The following configuration items are written directly at the top level of the configuration file and do not belong to any group:
For more UI and Shortcuts configurations, see UI and Shortcuts.
There are two ways to modify configurations:
settings.json). The configuration uses a hierarchical design: the same setting can be defined at different levels and is ultimately merged into an effective value based on a fixed precedence. Understanding this hierarchy and merging rules is fundamental to managing personal preferences and team conventions.
This page covers the locations of configuration files, merge precedence, and common configuration items. For a complete list of configuration items and environment variables, see Configuration Item Reference.
Configuration File Locations
Qoder CLI reads configuration files from three levels:
~/.qoder, which can be modified via the environment variable QODER_CONFIG_DIR. For the complete structure of the .qoder/ directory, see .qoder directory.
Merge Precedence
When the same configuration item appears at multiple levels, Qoder CLI merges them in the following order of precedence from lowest to highest, where higher precedence overrides lower precedence:
- Built-in defaults (Schema defaults)
- User Level settings (
~/.qoder/settings.json) - Project-Level settings (
<project>/.qoder/settings.json) - Local Level settings (
<project>/.qoder/settings.local.json) - Configurations specified via command-line
--settings(Highest precedence)
Merge Behavior
Configurations use deep merge rather than wholesale replacement:
- Objects: Recursively merged field by field; only present fields are overridden, while the rest retain lower-precedence values.
- Single values (strings, numbers, booleans): Directly overridden by higher precedence.
- Arrays: Some configuration items (such as disable lists and exclude lists) use "union merge" to combine and deduplicate values across levels; other arrays are overridden by default.
Impact of Folder Trust
For security reasons, Project-Level and Local Level configurations are only applied when the current working directory is trusted. If the working directory is not trusted, Qoder CLI only loads User Level configurations and ignores settings.json and settings.local.json within the project. Folder Trust is controlled by security.folderTrust.enabled (enabled by default).
File Format
Configuration files are in JSON format (supporting // comments, see below). The top level is an object, and most configuration items are nested by group, with a few items located directly at the top level (such as outputStyle, language, and agent). For example:
- Configuration files can contain comments (ignored during parsing), making it easy to add explanations for team conventions.
- Environment variables can be referenced in values and will be resolved and replaced at runtime.
- Modifying certain configuration items requires restarting Qoder CLI to take effect (see notes below).
Common Configuration Items
The following lists the most frequently adjusted configuration items, organized by group. Items marked with "requires restart" require a restart to take effect after modification.
Top-Level Configuration Items
The following configuration items are written directly at the top level of the configuration file and do not belong to any group:
| Configuration Item | Type | Default | Description |
|---|---|---|---|
outputStyle | string | None | Name of the active Output Style (requires restart). Compatible with the general.outputStyle syntax, with top-level taking precedence. See Output Style. |
language | string | None | Preferred language for AI responses (requires restart). |
agent | string | None | Name of the Agent used for the main thread (requires restart). |
ui (UI)
| Configuration Item | Type | Default | Description |
|---|---|---|---|
ui.language | enum | en | Interactive interface language: auto / zh-CN / en. Takes effect immediately; see UI and Shortcuts. |
ui.theme | string | None | Color Theme name. |
ui.autoThemeSwitching | boolean | true | Automatically switch between Light and Dark Themes based on the terminal background color. |
ui.maxTurns | enum | 1000 | Maximum model/tool-loop turns for one submitted prompt in the interactive TUI: 1000 / 2000 / 3000 / unlimited. Does not affect -p/--print. |
ui.customThemes | object | {} | Custom theme definitions. |
ui.hideBanner | boolean | false | Hide the Startup banner. |
ui.showLineNumbers | boolean | true | Display line numbers in conversations. |
ui.loadingPhrases | enum | off | Content to display during loading: tips / witty / all / off. |
ui.accessibility.screenReader | boolean | false | Screen Reader Mode, outputs plain text (requires restart). |
model (Model)
| Configuration Item | Type | Default | Description |
|---|---|---|---|
model.name | string | None | Model used for conversations. |
model.reasoningEffort | enum | None | Reasoning Effort Level: low / medium / high, etc. |
tools (Tools)
| Configuration Item | Type | Default | Description |
|---|---|---|---|
tools.useRipgrep | boolean | true | Use ripgrep for content search. |
tools.shell.inactivityTimeout | number | 300 | Timeout in seconds for shell commands with no output. |
tools.core | string[] | None | Allowlist for built-in tools; only listed tools are permitted (requires restart). |
tools.exclude | string[] | None | Tool names to exclude from discovery (requires restart). |
security (Security)
| Configuration Item | Type | Default | Description |
|---|---|---|---|
security.folderTrust.enabled | boolean | true | Whether to enable Folder Trust (requires restart). |
security.disableYoloMode | boolean | false | Disable the bypass_permissions (YOLO) permission mode (requires restart). |
security.blockGitExtensions | boolean | false | Block installing and loading extensions from Git (requires restart). |
security.environmentVariableRedaction.enabled | boolean | false | Mask environment variables that may contain keys (requires restart). |
mcp (MCP Servers)
| Configuration Item | Type | Default | Description |
|---|---|---|---|
mcpServers | object | {} | MCP server configurations (requires restart). See MCP. |
mcp.allowed | string[] | None | Allowlist of MCP servers (requires restart). |
mcp.excluded | string[] | None | Exclude list of MCP servers (requires restart). |
statusLine (Status Bar)
Editing Configurations
There are two ways to modify configurations:
- In the Interactive interface: Run
/settingsto open the Settings Panel to directly view and adjust common configuration items. - Manually editing files: Open the
settings.jsonfor the corresponding level in an editor, and add or modify fields according to the tables above.
Next Steps
- View all configuration items and environment variables: Configuration Item Reference.
- Add custom models through the
/modelwizard: Custom Models. - Customize UI and shortcuts: UI and Shortcuts.
- Troubleshoot configuration issues: Configuration Troubleshooting.


