Skip to main content

yao-daemon

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.

Informations de source

Dépôt
YaoApp/yao
Dernière activité de la source
5 octobre 2026 à 12:11
Langue détectée de SKILL.md
anglais
Étoiles
8 130
Forks
722

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
yao-daemon
description
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.
# Daemon Management ## Tools - `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`). ## Parameters ### yao_daemon_start | 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 | ### yao_daemon_list | 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 | ### yao_daemon_restart / yao_daemon_status / yao_daemon_stop | Param | Required | Description | |-------|----------|-------------| | `daemon_id` | yes | The daemon ID | ## Response Fields 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, seq ``` - `daemon_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). - **No `--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`. ### List (paginated) ```json { "daemons": [...], "total": 5, "offset": 0, "limit": 20, "has_more": false } ``` ### Stop (already terminal) ```json { "job": { ... }, "detail": "already in terminal state (cancelled); no action taken" } ``` ## Errors Structured JSON with `code` and `message`: ```json { "error": { "code": "not_found", "message": "daemon \"dmn_xxx\" not found" } } ``` Codes: `invalid_argument`, `not_found`, `internal`. ## Usage Rules 1. **Always provide a `description`**. 2. **Specify `port`** when starting a server — the system confirms the port is actually listening before reporting `daemon_url`. 3. **Daemons run indefinitely** — use `yao_daemon_stop` to terminate. 4. **Use `yao_daemon_restart`** to restart a crashed or misconfigured daemon without losing its ID. 5. **Monitor output** with `yao_job_output` passing the `daemon_id` as `job_id`. ## BackgroundJobReceipt 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.
Voir sur GitHub