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
| field | type | default | description |
|---|---|---|---|
poll_interval_sec | float | 2.0 | how often (in seconds) the daemon scans for signals |
repos | []string | [] | list of absolute repo root paths to manage on daemon startup |
auto_advance | bool | true | when true, the daemon automatically transitions a task from planning to implementing after the planner finishes |
auto_advance_waves | bool | true | when true, the daemon automatically starts the next wave after all tasks in the current wave complete |
auto_review_fix | bool | true | when true, the daemon automatically dispatches a fixer agent when a review comes back with change requests |
max_review_fix_cycles | int | 0 (unlimited) | cap on automatic review→fix iterations; 0 means no cap |
auto_readiness_review | bool | true | when 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_lines | int | 80 | maximum 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_cycles | int | 2 | maximum 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_path | string | see below | Unix 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):
$XDG_RUNTIME_DIR/kasmos/kas.sock— preferred; used when$XDG_RUNTIME_DIRis set (standard on systemd-based Linux desktops)/tmp/kasmos-<uid>/kas.sock— fallback when$XDG_RUNTIME_DIRis 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.
| field | type | default | description |
|---|---|---|---|
enabled | bool | false | enable the PR monitor goroutine |
poll_interval_sec | float | 60.0 | how 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):
- Project-local
config.toml(<repo-root>/.kasmos/config.toml) — wins when the field is explicitly set. - 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. - Project-local
-
Daemon-global only (from
daemon.toml):auto_advance_waves,auto_review_fix,max_review_fix_cycles. These are resolved fromdaemon.tomlonly; project-localconfig.tomlvalues 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.