Configuration Reference

Complete reference for ~/.ashlr/ashlr.yaml, environment variables, and backend configuration.

Config File Location

Ashlr AO stores its configuration at ~/.ashlr/ashlr.yaml. This file is auto-created on first run with sensible defaults. You can edit it manually or update it through the dashboard settings (Cmd+,) or the PUT /api/config endpoint.

Full Config Reference

Below is the complete ashlr.yaml with all available options and their defaults:

# ~/.ashlr/ashlr.yaml

server:
  host: "127.0.0.1"                    # Bind address (use 0.0.0.0 for Docker)
  port: 5111                            # HTTP port
  log_level: "INFO"                     # DEBUG, INFO, WARNING, ERROR

agents:
  max_concurrent: 16                    # Max simultaneous agents (clamped by license)
  default_role: "general"               # Default role for new agents
  default_working_dir: "~/Projects"     # Default working directory
  output_capture_interval_sec: 1.0      # tmux capture frequency (seconds)
  memory_limit_mb: 2048                 # Per-agent memory limit (MB)
  default_backend: "claude-code"        # Default backend (claude-code|codex|aider|goose)
  backends:
    claude-code:
      command: "claude"
      args: ["--dangerously-skip-permissions"]
    codex:
      command: "codex"
      args: []
    aider:
      command: "aider"
      args: []
    goose:
      command: "goose"
      args: []

llm:
  enabled: false                        # Enable intelligence layer
  provider: "xai"                       # LLM provider
  model: "grok-4-1-fast-reasoning"      # Model name
  api_key_env: "XAI_API_KEY"            # Env var holding the API key
  base_url: "https://api.x.ai/v1"      # API base URL
  summary_interval_sec: 10.0            # Agent summary generation interval
  meta_interval_sec: 30.0               # Fleet analysis interval

voice:
  enabled: true                         # Enable push-to-talk voice input
  ptt_key: "Space"                      # Push-to-talk key binding

licensing:
  key: ""                               # JWT license key (set via API or YAML)

auto_pilot:
  auto_restart_on_stall: false          # Auto-restart stalled agents
  auto_approve_enabled: false           # Enable pattern-based auto-approve
  auto_approve_patterns: []             # Regex patterns to auto-approve
  auto_pause_on_critical_health: false  # Pause agents on critical health
  file_lock_enforcement: false          # Prevent concurrent edits to same file

display:
  theme: "dark"                         # dark or light
  cards_per_row: 4                      # Agent cards per grid row

Server Settings

OptionTypeDefaultDescription
server.hoststring"127.0.0.1"IP address to bind the HTTP server. Use "0.0.0.0" to accept connections from all interfaces (required for Docker).
server.portinteger5111HTTP port number. Can be overridden with ASHLR_PORT env var.
server.log_levelstring"INFO"Python logging level. One of: DEBUG, INFO, WARNING, ERROR.

Agent Settings

OptionTypeDefaultDescription
agents.max_concurrentinteger16Maximum number of agents that can run simultaneously. Effective limit is min(config, license) — Community tier caps at 5, Pro at up to 100.
agents.default_rolestring"general"Default role assigned to new agents. One of: frontend, backend, devops, tester, reviewer, security, architect, docs, general.
agents.default_working_dirstring"~/Projects"Default working directory for new agents. Must be under ~/ or /tmp.
agents.output_capture_interval_secfloat1.0How often (in seconds) Ashlr captures tmux pane output. Lower values mean more responsive status updates but higher CPU usage.
agents.memory_limit_mbinteger2048Per-agent memory limit in megabytes. The memory watchdog background task checks this every 10 seconds.
agents.default_backendstring"claude-code"Default backend for new agents. One of: claude-code, codex, aider, goose.

Backend Configuration

Each backend defines the CLI command and default arguments used to spawn agents:

claude-code

agents:
  backends:
    claude-code:
      command: "claude"
      args: ["--dangerously-skip-permissions"]

Claude Code supports additional per-agent options at spawn time:

codex

agents:
  backends:
    codex:
      command: "codex"
      args: []

aider

agents:
  backends:
    aider:
      command: "aider"
      args: []

goose

agents:
  backends:
    goose:
      command: "goose"
      args: []

Custom backends: You can add any CLI-based tool as a backend by adding an entry under agents.backends with a command and args. The tool must accept input via stdin and produce output on stdout.

Intelligence (LLM) Settings

OptionTypeDefaultDescription
llm.enabledbooleanfalseEnable the intelligence layer. Requires XAI_API_KEY environment variable.
llm.providerstring"xai"LLM provider identifier.
llm.modelstring"grok-4-1-fast-reasoning"Model name for the LLM API.
llm.api_key_envstring"XAI_API_KEY"Name of the environment variable containing the API key.
llm.base_urlstring"https://api.x.ai/v1"Base URL for the OpenAI-compatible API endpoint.
llm.summary_interval_secfloat10.0How often (in seconds) to generate LLM summaries for active agents.
llm.meta_interval_secfloat30.0How often (in seconds) to run fleet-wide analysis (conflict detection, stuck agents, handoff recommendations).

Voice Settings

OptionTypeDefaultDescription
voice.enabledbooleantrueEnable browser-native push-to-talk voice input using the Web Speech API.
voice.ptt_keystring"Space"Key binding for push-to-talk. Hold to activate, release to stop.

Auto-Pilot Settings

OptionTypeDefaultDescription
auto_pilot.auto_restart_on_stallbooleanfalseAutomatically restart agents that have stalled (no output for extended period).
auto_pilot.auto_approve_enabledbooleanfalseEnable automatic approval of agent questions that match safe patterns.
auto_pilot.auto_approve_patternslist[]Regex patterns to auto-approve. Example: ["proceed with.*changes", "apply.*fix"]
auto_pilot.auto_pause_on_critical_healthbooleanfalsePause agents when system health becomes critical (high memory or CPU pressure).
auto_pilot.file_lock_enforcementbooleanfalsePrevent multiple agents from editing the same file simultaneously. Agents receive a warning but are not blocked by default.

Safety: Auto-approve has a hardcoded never-approve list that blocks dangerous commands like rm -rf, git push --force, DROP TABLE, etc. There is also a rate limit of 5 auto-approvals per minute per agent.

Display Settings

OptionTypeDefaultDescription
display.themestring"dark"Dashboard color theme. Either "dark" or "light".
display.cards_per_rowinteger4Number of agent cards per row in the grid layout.

Licensing

OptionTypeDefaultDescription
licensing.keystring""Ed25519-signed JWT license key. Set via POST /api/license/activate or directly in YAML. Empty string means Community tier.

Environment Variables

Environment variables override config file values where applicable:

VariableRequiredDefaultDescription
XAI_API_KEYNoAPI key for xAI Grok. Enables all intelligence features: agent summaries, NLU command parsing, and fleet analysis.
ASHLR_PORTNo5111Override the HTTP port. Takes precedence over server.port in config.
ASHLR_HOSTNo127.0.0.1Override the bind address. Takes precedence over server.host in config.
ASHLR_ALLOWED_ORIGINSNo*CORS allowed origin. Set to your domain in production (e.g., https://ashlr.yourdomain.com).
CLAUDECODENoSet to any value to enable demo mode. Agents are simulated without real CLI backends. Useful for development and testing.

Updating Config at Runtime

You can update configuration without restarting the server:

Via the Dashboard

Open Settings (Cmd+,) to modify agent limits, backend settings, auto-pilot options, and display preferences. Changes are saved to YAML and applied to the running server immediately.

Via the API

curl -X PUT http://127.0.0.1:5111/api/config \
  -H "Content-Type: application/json" \
  -d '{
    "agents": {
      "max_concurrent": 10,
      "default_backend": "claude-code"
    },
    "auto_pilot": {
      "auto_restart_on_stall": true
    }
  }'

The server validates the update, merges it with the current config, writes to ~/.ashlr/ashlr.yaml, and applies changes to the running process. If auth is enabled, only admin users can update the config.

Note: The max_concurrent value is always clamped to the license ceiling. On Community tier, even if you set max_concurrent: 100, the effective limit will be 5.

Background Tasks

Ashlr runs 6 supervised background tasks that are configured implicitly by the settings above:

TaskIntervalPurpose
Output capture1s (output_capture_interval_sec)Captures tmux pane output, detects status, generates summaries
Metrics2sCPU, memory, per-agent resource tracking
Health check5sStall detection, hung agent detection, memory pressure
Memory watchdog10sPer-agent memory limits (memory_limit_mb), system pressure response
Meta-agent30s (meta_interval_sec)LLM fleet analysis (requires intelligence layer)
Archive cleanup1hrPurges archived agent records older than 48 hours

All background tasks are supervised with automatic restart on failure.

Edit this page on GitHub