Skip to main content
Version: latest

kas daemon

Manage the kasmos multi-repo background orchestration daemon. The daemon watches registered repositories for agent lifecycle signals and drives FSM transitions automatically.

kas daemon <subcommand> [flags]

Alias: kas d

persistent flags

flagdefaultdescription
--socketsee belowpath to the daemon unix domain socket

Default socket path — the daemon uses a Unix domain socket whose location is determined at startup:

  1. $XDG_RUNTIME_DIR/kasmos/kas.sock (preferred, when $XDG_RUNTIME_DIR is set)
  2. /tmp/kasmos-<uid>/kas.sock (fallback)

The kas daemon status, add, and remove subcommands connect to this socket to communicate with the running daemon.

subcommands

start

Start the kasmos daemon.

Note for persistent installs: long-running user installations should manage the daemon via the systemd user service (systemctl --user start kasmos) rather than this command. kas daemon start and kas daemon stop are primarily intended for foreground use, debugging, and CI environments where a service manager is not available.

kas daemon start [--foreground] [--config <path>]
# daemonize (default) — forks, detaches, writes PID to ~/.config/kasmos/daemon.pid
kas daemon start

# foreground mode — useful for systemd or direct supervision
kas daemon start --foreground

# use a custom config file
kas daemon start --foreground --config /etc/kasmos/daemon.toml
flagdescription
--foregroundrun in foreground instead of daemonizing (suitable for systemd Type=simple)
--configpath to daemon TOML config file (default: ~/.config/kasmos/daemon.toml)

When daemonizing, the PID is written to ~/.config/kasmos/daemon.pid.


stop

Stop the running daemon by sending SIGTERM to the PID recorded in ~/.config/kasmos/daemon.pid.

kas daemon stop

status

Show the current daemon status: registered repos, active plans per repo.

kas daemon status [--socket <path>]
kas daemon status

Connects to the daemon control socket and calls GET /v1/status. Prints daemon not running if the socket is unreachable.


add

Register a repository with the running daemon so it is included in signal scans.

kas daemon add <repo-path> [--socket <path>]
kas daemon add /home/user/myproject

Sends POST /v1/repos with the resolved absolute path. Returns an error if the daemon is not running.


remove

Unregister a repository from the running daemon.

kas daemon remove <repo-path> [--socket <path>]
kas daemon remove /home/user/myproject

Derives the project name from the basename of the path and sends DELETE /v1/repos/<project>.


reload

Reload the daemon configuration by sending SIGHUP to the daemon process.

kas daemon reload

Reads the PID from ~/.config/kasmos/daemon.pid and sends SIGHUP.

configuration file

The daemon reads ~/.config/kasmos/daemon.toml on startup. All fields are optional — missing keys use the defaults shown below.

# how often the daemon scans for signals (seconds)
poll_interval_sec = 2.0

# repositories to manage on daemon startup
repos = ["/home/user/project-a", "/home/user/project-b"]

# automatically transition planning→ready after planner_finished signal
auto_advance = false

# automatically advance between waves when all tasks in a wave complete
auto_advance_waves = true

# automatically start a fixer after review_changes_requested
auto_review_fix = true

# master agent readiness gate after reviewer approval (enabled by default)
auto_readiness_review = true

# maximum review-fix loop iterations (0 = unlimited)
max_review_fix_cycles = 0

# master agent self-fix ceiling: net lines that may be changed in one attempt (default 80)
readiness_self_fix_max_lines = 80

# verify-round cap: force-promote verify_failed to verify_approved after this many attempts (default 2)
# project-local config.toml overrides this value per-repo
readiness_max_verify_cycles = 2

# unix socket path (overrides XDG_RUNTIME_DIR-based default)
socket_path = ""

[pr_monitor]
# enable GitHub PR polling
enabled = false
# how often to poll open PRs (seconds)
poll_interval_sec = 60.0
# GitHub reactions to add to unprocessed review comments
reactions = ["eyes"]

systemd service example

[Unit]
Description=kasmos daemon
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/kasmos daemon start --foreground
Restart=on-failure

[Install]
WantedBy=default.target