Skip to main content
Version: latest

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 to verifying and the daemon spawns an independent master review that binds task HEAD and default-branch SHA. When false, approval flows directly to done with verified_by = "auto". Movement of either bound ref makes approval stale and reopens verification.
auto_create_prbooltruecreate or adopt a GitHub pull request after terminal approval
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_cyclesint2deprecated compatibility setting; verify_failed is never promoted to approval
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"]

[pr_creator] — pull request creation retries

The PR creator retries transient failures left by automatic PR creation. It only considers completed tasks whose persisted outcome is failed; blocked and skipped outcomes require operator or configuration action.

fieldtypedefaultdescription
enabledbooltrueenable the background retry sweep
retry_interval_secfloat120.0how often to scan completed tasks for retryable failures
max_attemptsint5maximum persisted creation attempts per task
[pr_creator]
enabled = true
retry_interval_sec = 120.0
max_attempts = 5

Retries use bounded exponential backoff and stop when a PR URL is persisted, the outcome is no longer failed, or max_attempts is reached. See automatic PR creation.

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
auto_create_pr = true # create or adopt a PR after terminal approval
readiness_self_fix_max_lines = 80 # master agent self-fix ceiling (net lines changed)
readiness_max_verify_cycles = 2 # deprecated compatibility setting

[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 overridable (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, max_review_fix_cycles, auto_readiness_review, readiness_self_fix_max_lines, readiness_max_verify_cycles.

  • Daemon-global only (from daemon.toml): auto_advance_waves, auto_review_fix. 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 (for example, max_review_fix_cycles = 5) and tighten or loosen those settings per repository in config.toml (for example, [ui].max_review_fix_cycles = 3). An explicit project value of 0 disables the review-fix cap for that repository. readiness_max_verify_cycles is accepted only for compatibility. For daemon-global-only fields, edit daemon.toml and restart the daemon.

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.