Skip to main content
Version: 2.5.0

daemon.toml

Path: ~/.config/kasmos/daemon.toml

This is the user-level daemon configuration file. It controls how the background daemon polls for signals, which repositories it manages, and whether it should automatically advance task lifecycle states without interactive confirmation.

Unlike config.toml, this file is not created automatically. Create it only when you want to customize daemon behavior beyond the defaults.

The file is loaded by daemon.LoadDaemonConfig(). If the file is absent, all defaults apply and the daemon starts in auto-advancing mode (auto_advance, auto_advance_waves, and auto_review_fix all default to true).

top-level fields

fieldtypedefaultdescription
poll_interval_secfloat2.0how often (in seconds) the daemon scans for signals
repos[]string[]list of absolute repo root paths to manage on daemon startup
auto_advancebooltruewhen true, the daemon automatically transitions a task from planning to implementing after the planner finishes
auto_advance_wavesbooltruewhen true, the daemon automatically starts the next wave after all tasks in the current wave complete
auto_review_fixbooltruewhen true, the daemon automatically dispatches a fixer agent when a review comes back with change requests
max_review_fix_cyclesint0 (unlimited)cap on automatic review→fix iterations; 0 means no cap
auto_readiness_reviewbooltruewhen true, reviewer approval transitions the task to verifying status and the daemon spawns the master agent for a holistic readiness check before done. When false, review_approved flows directly to done — no master agent is spawned and no verifying status is entered.
readiness_self_fix_max_linesint80maximum number of net lines the master agent may change in a single self-fix attempt; findings that require more are escalated via verify_failed
readiness_max_verify_cyclesint2maximum number of verify-round attempts before the daemon force-promotes verify_failed to verify_approved; project-local config.toml overrides this value when set
socket_pathstringsee belowUnix domain socket path for the control API; overrides the runtime default when set

Default socket path — when socket_path is not set in daemon.toml, the daemon and all CLI clients resolve the path at runtime using the same two-tier logic (see daemon/daemon.go defaultSocketPath and config/taskstore/unix_client.go ResolvedDaemonSocketPath):

  1. $XDG_RUNTIME_DIR/kasmos/kas.sock — preferred; used when $XDG_RUNTIME_DIR is set (standard on systemd-based Linux desktops)
  2. /tmp/kasmos-<uid>/kas.sock — fallback when $XDG_RUNTIME_DIR is not set

When you set socket_path explicitly, that value is used by both the daemon and every kas daemon subcommand instead of the runtime default.

[pr_monitor] — pull request monitoring

The PR monitor subsystem polls open pull requests on GitHub and automatically records review comments so kasmos can dispatch fixer agents without requiring the user to be present.

fieldtypedefaultdescription
enabledboolfalseenable the PR monitor goroutine
poll_interval_secfloat60.0how often (in seconds) to poll open PRs
reactions[]string["eyes"]GitHub reactions to add to unprocessed review comments

The reactions list uses GitHub reaction identifiers: +1, -1, laugh, confused, heart, hooray, rocket, eyes.

[pr_monitor]
enabled = true
poll_interval_sec = 30.0
reactions = ["eyes", "rocket"]

examples

minimal — enable auto-advance and PR monitor

# ~/.config/kasmos/daemon.toml

auto_advance = true
auto_advance_waves = true
auto_review_fix = true
max_review_fix_cycles = 5
auto_readiness_review = true # pause in verifying status and spawn master agent after reviewer approval
readiness_self_fix_max_lines = 80 # master agent self-fix ceiling (net lines changed)
readiness_max_verify_cycles = 2 # force-promote after this many failed verify rounds

[pr_monitor]
enabled = true

multi-repo setup

# ~/.config/kasmos/daemon.toml

poll_interval_sec = 2.0
repos = [
"/home/alice/projects/backend",
"/home/alice/projects/frontend",
"/home/alice/projects/infra",
]

auto_advance = true
auto_advance_waves = true
auto_review_fix = true

[pr_monitor]
enabled = true
poll_interval_sec = 60.0
reactions = ["eyes"]

custom socket path

socket_path = "/tmp/kasmos-dev.sock"

This is useful when running multiple daemon instances for different environments. The CLI commands (kas daemon status, kas monitor) must be pointed at the same socket path.

relationship to config.toml

The daemon.toml fields auto_advance, auto_advance_waves, auto_review_fix, max_review_fix_cycles, auto_readiness_review, readiness_self_fix_max_lines, and readiness_max_verify_cycles overlap with the [ui] section of config.toml.

Effective value resolution: per-repo overrides are resolved for a subset of these fields only — the rest come from daemon.toml unchanged.

  • Per-repo overrideable (two-tier priority):

    1. Project-local config.toml (<repo-root>/.kasmos/config.toml) — wins when the field is explicitly set.
    2. User-level daemon.toml (~/.config/kasmos/daemon.toml) — fallback when no project-local override is present.

    Fields: auto_advance, auto_readiness_review, readiness_self_fix_max_lines, readiness_max_verify_cycles.

  • Daemon-global only (from daemon.toml): auto_advance_waves, auto_review_fix, max_review_fix_cycles. These are resolved from daemon.toml only; project-local config.toml values are ignored by the daemon for these fields, even when set.

This means you can set conservative global defaults in daemon.toml (e.g. readiness_max_verify_cycles = 3) and tighten or loosen the per-repo overrideable settings in config.toml (e.g. readiness_max_verify_cycles = 1 for a fast-moving repo). For daemon-global-only fields, edit daemon.toml and restart the daemon. Keep the values in sync across files when you want consistent behavior in both interactive TUI and headless daemon mode.

starting the daemon

# foreground (for debugging)
kas daemon start --foreground

# check status
kas daemon status

# stop
kas daemon stop

The daemon reads ~/.config/kasmos/daemon.toml on startup. Reload it by restarting the daemon.