Merge Rules
Complete reference for how configuration fields are merged across global profiles, local overrides, and CLI flags
Field Merge Strategies
| Field | Strategy | Description |
|---|---|---|
image | Replace | Later value wins |
runner | Replace | "docker", "compose", or "custom" |
agent_type | Replace | "claude", "aider", "copilot-cli", "kilocode-cli", or "generic" |
provider | Replace | "anthropic", "thirdparty", "copilot", or "kilocode" |
volumes | Replace | Entire array is replaced |
env | Shallow merge | Keys are merged, later wins on conflict |
workdir | Replace | |
command | Replace | |
interactive | Replace | |
tty | Replace | |
extra | Shallow merge | Top-level keys merged; ports/capabilities replace; labels shallow-merge |
compose | Deep merge | Recursive object merge |
ssh | Shallow merge | Individual fields override |
mcp | Replace | Entire array is replaced |
mcp_file | Replace | Path to MCP JSON file |
mcp_override | Replace | Boolean |
git | Shallow merge | Individual fields override |
dind | Replace | Boolean |
secrets | Shallow merge | Keys are merged, later wins on conflict |
claude_settings | Replace | Path to Claude Code settings.json |
opencode_settings | Replace | Path to OpenCode settings.json (Kilocode) |
kilocode_mcp_settings | Replace | Path to Kilocode MCP settings.json |
Strategy Definitions
Replace
The later value completely overwrites the earlier one. If the local override sets image, the global profile's image is ignored.
Shallow Merge
Top-level keys are merged. If both layers define the same key, the later value wins. Nested objects are not recursively merged.
# Global profile
env:
NODE_ENV: production
API_URL: https://api.example.com
# Local override
env:
NODE_ENV: development
DEBUG: "app:*"
# Result
env:
NODE_ENV: development # Local wins
API_URL: https://api.example.com # Kept from global
DEBUG: "app:*" # Added from local
Deep Merge
Objects are recursively merged at all levels. Used only for compose.
Claude Settings Merge
Claude settings follow their own merge rules:
| Type | Strategy |
|---|---|
| Arrays (permissions.allow, permissions.deny) | Union (combined, deduplicated) |
| Objects (env) | Shallow merge (local overrides global) |
| Primitives | Local replaces global |