Configuration

Configuration files, environment variables, ignore patterns, and all configurable options.

Stoa uses a layered configuration system: environment variables take highest priority, followed by project-level config, then global config.

Configuration Hierarchy

  1. Environment variables (highest priority)
  2. Project config: .intent/config.json
  3. Global config: ~/.intent/config.json

Project Configuration

Located at .intent/config.json in your project root:

{
  "version": "1.0",
  "projectRoot": "/path/to/project",
  "debug": false,
  "disableMaterializer": false,
  "rename": {
    "pendingCreateTTLMillis": 500,
    "pendingDeleteTTLMillis": 500
  },
  "crdtDebug": {
    "enabled": false,
    "includeContent": true,
    "prettyPrint": true
  },
  "remote": {
    "enabled": false,
    "url": "intent://server.example.com/project-id"
  }
}
FieldTypeDescription
versionstringConfig schema version
projectRootstringAbsolute path to project root
debugbooleanEnable debug logging
disableMaterializerbooleanGit Mode: don't write files, passive tracking only
rename.pendingCreateTTLMillisnumberTime to wait for rename detection on creates
rename.pendingDeleteTTLMillisnumberTime to wait for rename detection on deletes
crdtDebug.enabledbooleanEnable Automerge debug logging
crdtDebug.includeContentbooleanInclude file content in debug logs
crdtDebug.prettyPrintbooleanPretty-print debug output
remote.enabledbooleanEnable remote sync
remote.urlstringRemote server URL

LLM Configuration

Configure the Anthropic API key used for decision enrichment:

# Interactive setup
intent configure llm

# Set directly
intent configure llm --api-key sk-ant-...

# Set model
intent configure llm --model claude-sonnet-4-5-20250929

# Show current config
intent configure llm --show

# Use team's API key
intent configure llm --from-org

Configuration is stored in .intent/config.json (project) or ~/.intent/config.json (global):

{
  "llm": {
    "anthropicApiKey": "sk-ant-...",
    "anthropicModel": "claude-sonnet-4-5-20250929"
  }
}

Fallback: If no API key is configured, the CLI will use the Claude CLI binary if available on your PATH.

Slack Configuration

Send decision notifications to Slack channels:

# Interactive setup
intent configure slack

# Direct configuration
intent configure slack --oauth-token xoxb-... --channel "#intent-decisions"

# Enable/disable
intent configure slack --enable
intent configure slack --disable

# Project or global scope
intent configure slack --scope project
intent configure slack --scope global

# Show current config
intent configure slack --show
{
  "slack": {
    "enabled": true,
    "channel": "#intent-decisions",
    "postExchangeDetails": true,
    "docSync": {
      "enabled": true,
      "watchedDirs": ["docs/", "README.md"]
    }
  }
}

Shell Configuration

Located at ~/.intent/shell-config.yaml:

theme: auto                    # auto, dark, light
editor: vim                    # Default editor
maxHistorySize: 100            # Shell history limit
autocompleteEnabled: true      # Tab completion
showTimestamps: false          # Show timestamps in output
markdownTheme: auto            # Markdown rendering theme

Configure interactively:

intent configure shell

Ignore Patterns

.intentignore

Project-specific ignore file using .gitignore syntax:

# Dependencies
node_modules/
vendor/
.venv/

# Build output
dist/
build/
*.o
*.pyc

# IDE files
.idea/
.vscode/
*.swp

# Large files
*.zip
*.tar.gz
*.dmg

# Secrets
.env
.env.local

Global Ignore

Located at ~/.config/intent/ignore. Applies to all projects.

Built-in Patterns

These are always excluded regardless of configuration:

  • .git/
  • .intent/
  • node_modules/
  • __pycache__/
  • *.pyc
  • .DS_Store

Manage via CLI

intent ignore add "*.log"
intent ignore remove "*.log"
intent ignore list
intent ignore test path/to/file.log

Environment Variables

Core

VariableDescription
INTENT_DEBUGEnable debug logging
INTENT_SOCKET_PATHOverride daemon socket path
INTENT_LOG_FILEOverride log file location
NO_COLORDisable colored output

LLM

VariableDescription
ANTHROPIC_API_KEYAnthropic API key (overrides config)
ANTHROPIC_MODELModel to use (overrides config)

Slack

VariableDescription
SLACK_OAUTH_TOKENSlack bot token (xoxb-...)
SLACK_CHANNELDefault Slack channel
INTENT_SLACK_DISABLEDSet to 1 to disable Slack

Web Platform

VariableDescription
INTENT_API_URLOverride API URL (default: https://intent.specstory.com)
INTENT_WEB_URLOverride web URL

Actor Identity

Configure your identity for attribution:

intent configure actor

This sets the name and email used for provenance tracking and commit attribution.

Global Daemon Registry

All running daemons are tracked in ~/.intent/daemons.json. Manage them with:

intent service daemon list       # See all daemons
intent service daemon kill-all   # Stop all daemons
intent service daemon clean-all  # Remove stale entries