Config Schema
Full schema for .dscc.json /
.dscc/settings.json /
.dscc/settings.local.json. Source of truth:
crates/runtime/src/config.rs (1294 lines).
Top-level keys
| Key | Type | Default | Purpose | Cite |
|---|---|---|---|---|
model |
string | — | Override default model | config.rs:552–557 |
env |
object | {} |
Environment variables to inject | config.rs |
hooks.PreToolUse |
string[] | [] |
Shell commands before each tool call | config.rs:568 |
hooks.PostToolUse |
string[] | [] |
Shell commands after each tool call | config.rs:570 |
permissions.defaultMode |
string | "default" |
One of: default / plan /
read-only, acceptEdits / auto /
workspace-write, dontAsk /
danger-full-access |
config.rs:618 |
permissionMode |
string | — | Flat alias for permissions.defaultMode |
config.rs:611 |
mcpServers.<name> |
object | — | Per-server MCP config (see below) | config.rs:531–550 |
plugins.enabled |
{[id]: bool} |
{} |
Per-plugin enable state | config.rs:590–591 |
plugins.externalDirectories |
string[] | [] |
Extra plugin search directories | config.rs:593–595 |
plugins.installRoot |
string | — | Install directory override | config.rs:596–597 |
plugins.registryPath |
string | — | Registry file override | config.rs:598–599 |
plugins.bundledRoot |
string | — | Bundled plugins directory | config.rs:600–601 |
enabledPlugins |
object | {} |
Alternative flat enable map | config.rs:581–582 |
sandbox.enabled |
bool | true |
Enable sandbox | config.rs:651 |
sandbox.namespaceRestrictions |
bool | true |
Namespace isolation | config.rs:652–655 |
sandbox.networkIsolation |
bool | false |
Block network | config.rs:657 |
sandbox.filesystemMode |
"off"|"workspace-only"|"allow-list" |
"workspace-only" |
Filesystem mode | config.rs:647–649 |
sandbox.allowedMounts |
string[] | [] |
Filesystem mount allowlist | config.rs:659–660 |
oauth.clientId |
string | — | OAuth client id | config.rs:683 |
oauth.authorizeUrl |
string | — | Auth endpoint | config.rs:684 |
oauth.tokenUrl |
string | — | Token endpoint | config.rs:685 |
oauth.callbackPort |
number | — | Callback port | config.rs:686 |
oauth.manualRedirectUrl |
string | — | Manual redirect fallback | config.rs:687–688 |
oauth.scopes |
string[] | [] |
OAuth scopes | config.rs:689 |
mcpServers.<name>
fields
Struct definitions at config.rs:75–127, loader at
config.rs:700–735.
| Field | Applies to | Purpose |
|---|---|---|
type |
all | stdio | sse | http |
ws | sdk | managed-proxy |
command |
stdio | executable |
args |
stdio | command-line args |
env |
stdio | environment variables |
url |
sse / http / ws / managed-proxy | endpoint |
headers |
remote | HTTP headers |
headersHelper |
remote | script path for dynamic headers |
oauth.clientId |
remote | per-server OAuth client id |
oauth.callbackPort |
remote | callback port |
oauth.authServerMetadataUrl |
remote | OIDC metadata URL |
oauth.xaa |
remote | extended attributes flag |
name |
sdk | SDK server id |
id |
managed-proxy | proxy server id |
Precedence
Lowest to highest:
~/.dscc.json~/.dscc/settings.json./.dscc.json./.dscc/settings.json./.dscc/settings.local.json
Later files override earlier ones key-by-key.
Complete example
{
"model": "claude-opus-4-6",
"env": {
"DSCC_WEB_SEARCH_BASE_URL": "https://search.internal.example.com"
},
"hooks": {
"PreToolUse": [
"echo \"$(date -Iseconds) pre $DSCC_TOOL_NAME\" >> .dscc/hook.log"
],
"PostToolUse": [
"echo \"$(date -Iseconds) post $DSCC_TOOL_NAME exit=$DSCC_TOOL_EXIT\" >> .dscc/hook.log"
]
},
"permissions": {
"defaultMode": "workspace-write"
},
"mcpServers": {
"local-fs": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-server-filesystem", "--root", "./"],
"env": { "LOG_LEVEL": "info" }
},
"gh-api": {
"type": "http",
"url": "https://api.github.com/mcp",
"headers": { "Authorization": "Bearer $GITHUB_TOKEN" },
"oauth": {
"clientId": "dscc-gh",
"callbackPort": 4546,
"authServerMetadataUrl": "https://github.com/.well-known/oauth-authorization-server"
}
}
},
"plugins": {
"enabled": { "dscc-git-plus": true, "dscc-sandbox-linux": false },
"externalDirectories": ["~/code/dscc-plugins"],
"installRoot": "~/.dscc/plugins",
"registryPath": "~/.dscc/plugins/registry.json",
"bundledRoot": "/usr/local/share/dscc/plugins"
},
"sandbox": {
"enabled": true,
"namespaceRestrictions": true,
"networkIsolation": false,
"filesystemMode": "workspace-only",
"allowedMounts": ["/tmp/dscc-scratch"]
},
"oauth": {
"clientId": "dscc-cli",
"authorizeUrl": "https://auth.anthropic.com/authorize",
"tokenUrl": "https://auth.anthropic.com/token",
"callbackPort": 4545,
"manualRedirectUrl": "https://auth.anthropic.com/manual",
"scopes": ["model.invoke", "user.read"]
}
}