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 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_pr | bool | true | create or adopt a GitHub pull request after terminal approval |
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 | deprecated compatibility setting; verify_failed is never promoted to approval |
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"]
[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.
| field | type | default | description |
|---|---|---|---|
enabled | bool | true | enable the background retry sweep |
retry_interval_sec | float | 120.0 | how often to scan completed tasks for retryable failures |
max_attempts | int | 5 | maximum 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):
- 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,max_review_fix_cycles,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. 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 (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.