DSCC
home / reference / config-schema

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:

  1. ~/.dscc.json
  2. ~/.dscc/settings.json
  3. ./.dscc.json
  4. ./.dscc/settings.json
  5. ./.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"]
  }
}