job-babysitter
This skill should be used to watch a long-running background job (ffmpeg/media encode, qmd or other embedding/vector-DB run, batch agent/LLM pipeline, or a real-browser/agent-browser daemon) until it finishes or wedges, then deliver a verdict (done, needs-attention, or blocked) plus the exact next command, without burning dozens of manual poll commands. Triggers on "babysit this job", "watch this until it's done", "ping me when the encode/embed/batch finishes", "is this background process stuck", "monitor this ffmpeg/qmd run", or any request to wait on a long-running process and be told when it's complete or hung.
What this skill does
# Job Babysitter
## Purpose
Stop manually polling long-running background jobs. Instead of dozens-to-hundreds of
`ls -lh` / `ps` checks while guessing at completion, start one background watcher that
detects the terminal state via plateau heuristics, then routes a verdict — done,
needs-attention, or blocked — with the exact next command.
A night-shift nurse for background jobs: it checks vitals on a schedule and escalates
only when something is actually wrong.
## When to use
Use when a job will run long enough that babysitting it by hand wastes attention:
- Media encodes / transcodes (ffmpeg, video-transcribe, audio extraction)
- Embedding or vector-DB builds (qmd embed, index builds)
- Batch agent / LLM pipelines run in the background
- Browser / scrape daemons (real-browser, agent-browser) prone to hanging
Do NOT use for jobs that finish in seconds, or where a single `Bash` call already
returns the result.
## Core principle: stay thin, lean on the harness
This skill orchestrates Claude Code's own primitives — do not reimplement them:
- Start the watcher with **`run_in_background: true`**. When it exits, the harness
re-invokes the agent automatically — no manual polling loop needed.
- The watcher (`scripts/watch_job.py`) owns the deterministic part: poll with backoff,
detect plateau, distinguish done from stuck, emit a verdict JSON.
- The skill's value is the **per-job-type heuristics**, the **safe-recovery playbook**,
and **notification routing** — all in `references/playbook.md`.
## Workflow
### 1. Identify the job's signals
Determine what can be watched, in order of reliability:
- **PID** — the process ID (most reliable completion signal). Get it from the job's
launch, `pgrep`, or `ps`.
- **Output file** — a file that grows as the job progresses (e.g. ffmpeg target).
- **Log file** — a log that gets appended (e.g. an embed progress log).
Read `references/playbook.md` § "Completion heuristics by job type" to pick flags for
the specific job type (ffmpeg, embed, batch, browser).
### 2. Launch the watcher in the background
Run with `run_in_background: true`. Always pass `--pid` when known; add file/log
signals as corroboration. Write the verdict to a known path.
```bash
scripts/watch_job.py \
--label "lab05 stream encode" \
--pid <PID> \
--output-file /path/to/output.mp4 \
--plateau-bytes 65536 --plateau-polls 5 --stuck-after 120 \
--max-wait 7200 \
--verdict-out /tmp/job-babysitter-<label>.json
```
The watcher prints a one-line JSON heartbeat per poll (tail it for live progress) and
writes the final verdict JSON to `--verdict-out` on exit.
Tuning lives in the playbook; sensible defaults: `--interval 10` (backs off to 60),
`--plateau-polls 4`, `--stuck-after 300`, `--max-wait 7200`.
### 3. On watcher exit, read the verdict and route it
The harness re-invokes the agent when the background watcher finishes. Read the
verdict JSON. It has `status` ∈ {done, needs-attention, blocked}, a `reason`,
`suggested_next`, elapsed time, and final size.
- **done** → verify the output is real (see the job-type "Done check" in the playbook,
e.g. `ffprobe` for media, count match for embeds), then proceed with the original task.
- **needs-attention** → the job plateaued while still alive (possibly wedged). Follow
the recovery playbook: diagnose read-only FIRST. **Never kill or run destructive
recovery (pkill, WAL checkpoint, VACUUM) without asking the user.**
- **blocked** → the watcher gave up after `--max-wait`. Report honestly: "gave up
waiting" ≠ "failed". Offer to re-check or extend the ceiling.
### 4. Notify per the chosen channel
Default to in-session resume. If the user picked a channel (Telegram, voice/TTS,
desktop notification), route per `references/playbook.md` § "Notification routing".
Always include the status emoji, label, elapsed time, and the exact next command.
## Guardrails (non-negotiable)
- **Never act on a single slow poll.** "Stuck" requires plateau AND elapsed past
`--stuck-after` — the watcher already enforces this before returning needs-attention.
- **Ask before any destructive recovery** — `pkill`, `kill`, WAL checkpoint, `VACUUM`,
daemon restart. Diagnose read-only first.
- **Report honestly.** Distinguish done from "gave up waiting" from "wedged". Never
imply a success the watcher did not observe.
- **Poll with backoff, not tight loops** — the watcher handles this; never wrap it in
a manual fast-polling loop.
## Resources
- `scripts/watch_job.py` — background watcher: plateau detection, stuck-vs-done logic,
verdict JSON. Stdlib only, Python 3.11+.
- `references/playbook.md` — per-job-type completion heuristics, the safe-recovery
table, and notification routing. Load when picking watcher flags or handling a
needs-attention/blocked verdict.
Related in AI Agents
skill-development
IncludedComprehensive meta-skill for creating, managing, validating, auditing, and distributing Claude Code skills and slash commands (unified in v2.1.3+). Provides skill templates, creation workflows, validation patterns, audit checklists, naming conventions, YAML frontmatter guidance, progressive disclosure examples, and best practices lookup. Use when creating new skills, validating existing skills, auditing skill quality, understanding skill architecture, needing skill templates, learning about YAML frontmatter requirements, progressive disclosure patterns, tool restrictions (allowed-tools), skill composition, skill naming conventions, troubleshooting skill activation issues, creating custom slash commands, configuring command frontmatter, using command arguments ($ARGUMENTS, $1, $2), bash execution in commands, file references in commands, command namespacing, plugin commands, MCP slash commands, Skill tool configuration, or deciding between skills vs slash commands. Delegates to docs-management skill for official documentation.
reprompter
IncludedTransform messy prompts into well-structured, effective prompts — single or multi-agent. Use when: "reprompt", "reprompt this", "clean up this prompt", "structure my prompt", rough text needing XML tags and best practices, "reprompter teams", "repromptception", "run with quality", "smart run", "smart agents", multi-agent tasks, audits, parallel work, anything going to agent teams. Don't use when: simple Q&A, pure chat, immediate execution-only tasks. See "Don't Use When" section for details. Outputs: Structured XML/Markdown prompt, quality score (before/after), optional team brief + per-agent sub-prompts, agent team output files. Success criteria: Single mode quality score ≥ 7/10; Repromptception per-agent prompt quality score 8+/10; all required sections present, actionable and specific.
adaptive-compaction
IncludedAdaptive add-on policy and recovery layer that decides WHEN to compact, prune, snapshot, or fork -- replacing fixed-percent auto-compaction across Claude Code, Codex, and MCP-capable hosts. Trigger on auto-compact timing or damage: "when should I compact", "is it safe to compact now or start a fresh session", "auto-compact fires too early/mid-task", "switching to an unrelated task but the window still has space", "context rot", "answers get worse the longer the session runs", "the agent forgot the plan or my decisions after it summarized", "add a layer on top that manages context without changing the agent", raising autoCompactWindow to give the policy room, or installing/tuning a cross-tool compaction policy or PreCompact hook -- even when "compaction" is never said but the problem is context-window pressure or post-summarization memory loss. Do NOT use to summarize a conversation, build RAG, write a summarization prompt (decides WHEN not HOW), or answer max-context-length trivia.
agent-skill-creator
IncludedCreate cross-platform agent skills from workflow descriptions. Activates when users ask to create an agent, automate a repetitive workflow, create a custom skill, or need advanced agent creation. Triggers on phrases like create agent for, automate workflow, create skill for, every day I have to, daily I need to, turn process into agent, need to automate, create a cross-platform skill, validate this skill, export this skill, migrate this skill. Supports single skills, multi-agent suites, transcript processing, template-based creation, interactive configuration, cross-platform export, and spec validation.
llm-wiki
IncludedUse when building or maintaining a persistent personal knowledge base (second brain) in Obsidian where an LLM incrementally ingests sources, updates entity/concept pages, maintains cross-references, and keeps a synthesis current. Triggers include "second brain", "Obsidian wiki", "personal knowledge management", "ingest this paper/article/book", "build a research wiki", "compound knowledge", "Memex", or whenever the user wants knowledge to accumulate across sessions instead of being re-derived by RAG on every query.
skill-master
IncludedAgent Skills authoring, evaluation, and optimization. Create, edit, validate, benchmark, and improve skills following the agentskills.io specification. Use when designing SKILL.md files, structuring skill folders (references, scripts, assets), ingesting external documentation into skills, running trigger evals, benchmarking skill quality, optimizing descriptions, or performing blind A/B comparisons. Keywords: agentskills.io, SKILL.md, skill authoring, eval, benchmark, trigger optimization.