Config Schema

Complete reference for the ~/.swarm/settings.json configuration file.

Top-Level Structure

{
  "version": 2,
  "<project_path>": { ... }
}
FieldTypeRequiredDescription
versionu64YesSchema version (must be 1 or 2)
<project_path>ProjectConfigYesProject config keyed by absolute, canonicalized path

Multiple projects can be configured in the same file. Each is keyed by its absolute path.

ProjectConfig

FieldTypeRequiredDefaultDescription
agentsAgentConfig[]YesAt least one agent definition
supervisorSupervisorConfigNonullSupervisor configuration
defaultsDefaultsConfigNonullProject-wide defaults
providersMap<String, ProviderConfig>NoImplicit "default"Named provider definitions
permissionsPermissionsConfigNonullProject-level permission rules
hooksHooksConfigNonullHook event handlers
mcpServersMap<String, McpServerConfig>NonullMCP server connections
wasm_toolsWasmToolConfig[]NonullWASM sandboxed tools
sub_agent_defaultsSubAgentLimitsNonullDefault sub-agent spawning limits

AgentConfig

FieldTypeRequiredDefaultDescription
nameStringYesUnique name ([a-z][a-z0-9-]*)
promptStringYesSystem prompt text or @path/to/file
modelStringNodefaults.model / "sonnet"Model identifier
providerStringNodefaults.provider / "default"Provider name reference
permissionsPermissionsConfigNonullAgent-level permission overrides
delegate_modeboolNofalseLegacy delegate mode flag
modeStringNoSee cascadeAgent execution mode

SupervisorConfig

FieldTypeRequiredDefaultDescription
promptStringNoBuilt-in merge promptCustom supervisor prompt or @path
modelStringNodefaults.modelModel identifier

DefaultsConfig

FieldTypeRequiredDefaultDescription
modelStringNo"sonnet"Default model
providerStringNo"default"Default provider reference
session_timeoutu64NonullSession timeout (seconds)
commit_intervalu64No300Auto-commit interval (seconds)
max_consecutive_errorsu32No5Consecutive error limit
max_total_errorsu32No20Total error limit
modeStringNonullDefault agent mode
livenessLivenessConfigNoSee belowLiveness monitoring

ProviderConfig

FieldTypeRequiredDefaultDescription
typeStringYesProvider type ("anthropic")
api_key_envStringNo"ANTHROPIC_API_KEY"API key env var name
base_urlStringNonullCustom API base URL
max_retriesu32NonullMax retries for transient errors
timeoutu64NonullRequest timeout (seconds)

PermissionsConfig

FieldTypeRequiredDefaultDescription
allowString[]No[]Allow rules (e.g., "Bash(npm run *)")
askString[]No[]Ask rules
denyString[]No[]Deny rules
default_modeStringNonullDefault permission mode

LivenessConfig

FieldTypeRequiredDefaultDescription
enabledboolNotrueEnable liveness monitoring
idle_nudge_after_secsu64No120Seconds before first nudge
idle_nudge_interval_secsu64No300Seconds between nudges
max_nudgesu32No3Max nudges per idle episode
idle_warn_after_secsu64No600Seconds before warning hook
stall_timeout_secsu64No900Seconds before stall detection
auto_interrupt_stalledboolNofalseAuto-interrupt on stall

McpServerConfig

FieldTypeRequiredDefaultDescription
transportMcpTransportYesTransport configuration
envMap<String, String>No{}Environment variables

McpTransport (tagged union)

Stdio:

FieldTypeRequiredDescription
type"stdio"YesTransport discriminator
commandStringYesCommand to execute
argsString[]NoCommand arguments

HTTP:

FieldTypeRequiredDescription
type"http"YesTransport discriminator
urlStringYesServer URL
headersMap<String, String>NoHTTP headers

SSE:

FieldTypeRequiredDescription
type"sse"YesTransport discriminator
urlStringYesSSE endpoint URL
headersMap<String, String>NoHTTP headers

WasmToolConfig

FieldTypeRequiredDefaultDescription
nameStringYesTool name ([a-z][a-z0-9_-]*)
pathStringYesPath to .wasm component file
capabilitiesString[]No[]Granted capabilities
limitsWasmLimitsConfigNonullResource limit overrides
secretsString[]No[]Secret names the tool may query
workspace_prefixesString[]No[]Readable workspace paths
endpoint_allowlistString[]No[]Allowed HTTP endpoints
tool_aliasesMap<String, String>No{}Tool name aliases

WasmLimitsConfig

FieldTypeRequiredDefaultDescription
max_memory_bytesusizeNoRuntime defaultMax memory allocation
fuel_limitu64NoRuntime defaultComputation fuel limit
execution_timeout_secsu64NoRuntime defaultExecution timeout
max_log_entriesusizeNoRuntime defaultMax log entries
max_http_requestsusizeNoRuntime defaultMax HTTP requests
max_tool_invocationsusizeNoRuntime defaultMax tool invocations
max_file_read_bytesusizeNoRuntime defaultMax file read size

Valid Capabilities

  • Logging — Write log entries
  • WorkspaceRead — Read files from workspace
  • HttpRequest — Make HTTP requests
  • ToolInvoke — Invoke other tools
  • SecretCheck — Check secret existence

Complete Example

{
  "version": 2,
  "/home/user/my-project": {
    "providers": {
      "default": {
        "type": "anthropic",
        "api_key_env": "ANTHROPIC_API_KEY"
      }
    },
    "defaults": {
      "model": "sonnet",
      "commit_interval": 300,
      "max_consecutive_errors": 5,
      "liveness": {
        "enabled": true,
        "idle_nudge_after_secs": 120
      }
    },
    "agents": [
      {
        "name": "backend",
        "prompt": "@prompts/backend.md",
        "model": "sonnet"
      },
      {
        "name": "frontend",
        "prompt": "You are a frontend engineer.",
        "permissions": {
          "allow": ["Bash(npm *)"],
          "deny": ["Bash(rm *)"]
        }
      }
    ],
    "permissions": {
      "allow": ["Read(*)", "Glob(*)"],
      "default_mode": "default"
    },
    "mcpServers": {
      "filesystem": {
        "transport": {
          "type": "stdio",
          "command": "npx",
          "args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
        }
      }
    }
  }
}