Configuration

Every setting is configured at instance creation via CLI flags, or edited directly in the instance's config.yaml file at ~/.system0/instances/<name>/config.yaml.

Brain Configuration

The brain is the LLM backend that powers analysis.

Claude Code (Default)

brain:
  type: claude-code
  binary: claude         # Path to claude CLI
  model: claude-opus-4-6 # Model name
  budget_usd: "2.00"     # Per-call budget
  effort: high           # high | medium | low

Generic CLI

Use any LLM with a CLI interface:

brain:
  type: generic-cli
  binary: /path/to/your/llm-cli
  args_before:           # Arguments before prompt
    - "--model"
    - "gpt-4"
  args_after: []         # Arguments after prompt
  prompt_via_stdin: true # Send prompt via stdin
  has_execute: false     # Can the CLI modify files?

Budget Configuration

Four independent spending ceilings:

budget:
  per_cycle_usd: 10.0    # Max per single pass
  per_action_usd: 5.0    # Max per single fix action
  session_usd: 50.0      # Max per daemon session
  instance_usd: 500.0    # Lifetime cap

The --budget CLI flag sets session_usd. Edit config.yaml directly for the other three.

Triage Configuration

Controls which findings get fixed and how:

triage:
  severity_threshold: 0.6    # Min severity to plan a fix
  risk_threshold: 0.7        # Max risk to auto-execute
  max_actions_per_cycle: 3   # Max fixes per pass
  max_refinements: 2         # Max times to refine a risky plan
  min_passes: 2              # Maturity gate: passes before fix planning
  min_dimensions: 3          # Maturity gate: dimensions before auto-exec

Orchestrator Configuration

The orchestrator automatically spawns focused child instances when it detects complex, multi-faceted issues:

orchestrator:
  enabled: true
  max_children: 3         # Max child instances per cycle
  max_depth: 2            # Max nesting depth
  child_cycles: 3         # Passes for each child
  child_budget_usd: 20.0  # Budget per child
  spawn_severity_threshold: 0.7  # Min severity to spawn

Disable with --no-orchestrator at init time or set enabled: false in config.

Notification Configuration

Get notified of findings via files, logs, or webhooks:

notifiers:
  - type: file
    path: /path/to/reports/
    min_severity: 0.5

  - type: log
    path: /path/to/findings.jsonl
    min_severity: 0.3

  - type: webhook
    url: https://hooks.slack.com/your-webhook
    headers:
      Content-Type: application/json
    min_severity: 0.7

The webhook URL supports ${ENV_VAR} expansion for secrets.

Instance Storage

Each instance stores its data at ~/.system0/instances/<name>/:

FilePurpose
config.yamlAll configuration (mode, brain, budget, triage, orchestrator)
state.jsonRuntime state (cycle count, status, spending)
goal.yamlCurrent analysis goal
ledger.jsonlAppend-only event log
questions/Analysis dimensions (JSON files)
queue.jsonActions pending approval (supervised mode)
checkpoints/Temporal verification checkpoints
daemon.pidPID file (daemon mode)
daemon.logDaemon output log