Daemon process management — start, monitor, restart, stop long-running services. ALWAYS invoke this skill when the user asks to start, check, restart, or stop background services, dev servers, or daemon processes.
66
83%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
yao_daemon_start — Start a long-running service. Always runs in background; returns daemon_id immediately.yao_daemon_list — List daemons. Supports --status filter and --limit/--offset pagination.yao_daemon_status — Get full details for a daemon (daemon_port, daemon_url, started_at, daemon_restarts).yao_daemon_stop — Stop a running daemon.yao_daemon_restart — Restart a daemon (preserves the same ID, increments daemon_restarts).yao_job_output — Read daemon output (pass daemon_id as job_id).| Param | Required | Default | Description |
|---|---|---|---|
command | yes | — | Shell command to execute |
description | yes | — | Concise 5–10 word summary |
port | no | auto-detect | Expected listen port; the system verifies the port is ready before reporting it |
args | no | — | Additional arguments |
working_dir | no | workspace | Working directory |
| Param | Default | Description |
|---|---|---|
status | all | Filter: running, stopping, completed, failed, cancelled, port_detecting, all |
limit | 20 | Max items per page |
offset | 0 | Skip first N items |
| Param | Required | Description |
|---|---|---|
daemon_id | yes | The daemon ID |
All responses are JSON. Daemon objects contain:
id, kind, session_id, status, description,
command, command_argv, command_line, pid, pgid, user,
started_at, finished_at, duration_ms, exit_code, signal, detail,
daemon_port, daemon_url, daemon_restarts, seqdaemon_port — The verified listen port (0 if not yet detected or not specified).daemon_url — http://localhost:<port> (empty until port is verified as listening by the daemon's own process tree).daemon_restarts — Number of restarts via yao_daemon_restart.started_at — Unix millisecond timestamp of the most recent start.Port detection behavior:
Both modes start by returning port_detecting with daemon_port: 0 if the port is not confirmed within the initial ~2s settle window. If the port is confirmed within ~2s, start returns running with daemon_port/daemon_url directly.
--port N (explicit): Verifies port N is listening AND owned by this daemon's process tree. If not confirmed within ~2s, returns status: "port_detecting". Poll yao_daemon_status until status changes to running — either with daemon_port: N and daemon_url (port confirmed), or with daemon_port: 0 and detail: "specified port N not detected within timeout" (~60s).--port (auto-detect): Scans the daemon's process tree for any listening TCP port. If not found within ~2s, returns status: "port_detecting". The scan continues in background (~60s); if a port is found, status changes to running with daemon_port/daemon_url and a <BackgroundJobReceipt> is delivered. If no port is found after ~60s, status changes to running with daemon_port: 0.{ "daemons": [...], "total": 5, "offset": 0, "limit": 20, "has_more": false }{ "job": { ... }, "detail": "already in terminal state (cancelled); no action taken" }Structured JSON with code and message:
{ "error": { "code": "not_found", "message": "daemon \"dmn_xxx\" not found" } }Codes: invalid_argument, not_found, internal.
description.port when starting a server — the system confirms the port is actually listening before reporting daemon_url.yao_daemon_stop to terminate.yao_daemon_restart to restart a crashed or misconfigured daemon without losing its ID.yao_job_output passing the daemon_id as job_id.When a daemon's port becomes ready, the system delivers a <BackgroundJobReceipt> XML message containing the daemon_url. Use that URL for subsequent HTTP requests to the daemon.
YaoApp/yao
22a7a2c
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.