Skip to content
AI & Agents
Skill

/yao-job

Background job management — start, monitor, wait, stop long-running commands. ALWAYS invoke this skill when the user asks to run background tasks, check job status, read job output, or manage long-running commands.

BOOST
From plugin
yao
8.1k14 skills1 agent
Install
$ npx -y skills add YaoApp/yao --skill yao-job --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/yao-job

Context preview

The summary Claude sees to decide when to auto-load this skill.

Background job management — start, monitor, wait, stop long-running commands. ALWAYS invoke this skill when the user asks to run background tasks, check job status, read job output, or manage long-running commands.

SKILL.md

yao-job.SKILL.md
name: yao-job
description: "Background job management — start, monitor, wait, stop long-running commands. ALWAYS invoke this skill when the user asks to run background tasks, check job status, read job output, or manage long-running commands."

Background Jobs

Tools

  • `yao_job_start` — Start a command. `background false` (default) blocks until done and returns `output_tail`; `background true` returns `job_id` immediately.
  • `yao_job_list` — List jobs. Supports `--status` filter and `--limit`/`--offset` pagination.
  • `yao_job_get` — Get full details for a job (or daemon by ID).
  • `yao_job_output` — Read process output (works for both job and daemon IDs).
  • `yao_job_wait` — Block until a background job finishes or timeout expires. Jobs only, not daemons.
  • `yao_job_stop` — Kill a running job.

Parameters

yao_job_start

| Param | Required | Default | Description | |-------|----------|---------|-------------| | `command` | yes | — | Shell command to execute | | `description` | yes | — | Concise 5–10 word summary | | `background` | no | `false` | `true` returns immediately; `false` blocks until done | | `args` | no | — | Additional arguments (rarely needed; prefer inline in `command`) | | `working_dir` | no | workspace | Working directory | | `max_duration_ms` | no | — | Kill the job after this many milliseconds |

yao_job_list

| Param | Default | Description | |-------|---------|-------------| | `status` | all | Filter: `running`, `stopping`, `completed`, `failed`, `cancelled`, `all` | | `limit` | 20 | Max items per page | | `offset` | 0 | Skip first N items |

yao_job_output

| Param | Required | Description | |-------|----------|-------------| | `job_id` | yes | Job or daemon ID | | `offset` | no | Byte offset to read from (0 = beginning) |

**Output read behavior:**

  • Returns all available content from `offset` in a single read (no `limit` parameter).
  • Ring buffer caps at **10 MB**; older content beyond this is discarded.
  • When content has been discarded, `lossy=true` in the response.
  • `size` = total bytes the process has produced; `offset` = earliest readable byte position.
  • Example: a 20 MB output has `size=20000000, offset≈10000000, lossy=true` — the first ~10 MB was discarded.

yao_job_wait

| Param | Required | Default | Description | |-------|----------|---------|-------------| | `job_id` | yes | — | Job ID | | `timeout_ms` | no | 60000 | Timeout in milliseconds |

Response Fields

All responses are JSON. Job objects contain:

id, kind, session_id, status, description, background,
command, command_argv, command_line, pid, pgid, user,
started_at, finished_at, duration_ms, exit_code, signal, detail, seq

Foreground start (background=false)

Returns the job object plus `output_tail` (≤4KB tail of stdout+stderr):

{ "id": "job_...", "status": "completed", "exit_code": 0, ..., "output_tail": "hello world\n" }

List (paginated)

{ "jobs": [...], "total": 130, "offset": 0, "limit": 20, "has_more": true }

Wait

{ "job": { ... }, "timed_out": false }

Stop (already terminal)

{ "job": { ... }, "detail": "already in terminal state (failed); no action taken" }

Errors

Structured JSON with `code` and `message`:

{ "error": { "code": "invalid_argument", "message": "job_id is required" } }

Codes: `invalid_argument`, `not_found`, `internal`.

Usage Rules

1. **Use `background true`** (not bare `--background`) for commands expected to run longer than 30 seconds. 2. **Always provide a `description`**. 3. **Foreground is default** — the result and output come back in one call. 4. **Monitor background output** with `yao_job_output` to check progress. 5. **Use `yao_job_wait`** to block until a background job completes rather than polling.

BackgroundJobReceipt

When a background job finishes, the system delivers a `<BackgroundJobReceipt>` XML message. Upon receiving it:

1. Review the `status`, `exit_code`, `cause`, and `output_tail`. 2. If `status=failed`, investigate and take corrective action. 3. If `status=completed`, acknowledge and continue the task.

Read more
Ships withyao

✨ All your agents and workspaces in one place, on every device you own. Track tasks on a board, accessible from desktop, mobile, browser, or API. Self-hosted.

Get the whole plugin
Stats
8,079
Stars
721
Forks
Active
Maintenance
Go
Language
18h ago
Last commit
5y ago
Created
2d ago
Added

Repo: YaoApp/yao

Other skills on yao.