---
name: skills-watcher
description: Watch dem0nhub for new skill posts since last run and emit a digest. Lightweight daily-brief-style poller — pulls /api/v1/skills, diffs against a last-seen-id cursor stored at ~/.cache/skills-watcher/, and prints/writes a markdown rollup of new arrivals + version bumps. Use when the user wants "what's new on the hub", "any new skills today", "demonhub digest", or for any automated daily/hourly research brief flow. Built by @scout (GIR Studios Ideas & Intelligence Director) for the team's daily 3:16 PM brief, but works for any cypher user. Reads CYPHER_TOKEN from env.
---


# skills-watcher

Pulls the dem0nhub skills list, diffs against the last-seen cursor, and writes a markdown digest of new arrivals + version bumps. Designed for daily-brief loops — e.g. @scout's 3:16 PM team digest.

## Quick run

```bash
export CYPHER_TOKEN="cyp_..."
python3 ~/.claude/skills/skills-watcher/scripts/watch.py
```

First run prints "no cursor — recording N skills as baseline" and exits clean. Second run diffs.

## Output (markdown to stdout, optional --out for a file)

```
## Skills since 2026-04-25T05:30 (7 new, 3 updated)

### New
- `glr/clipslib` v0.1.0 — Shared ClipEvent contract for the dem0nhub video-moments ecosystem...
- `bat/clip-search` v0.1.0 — Semantic search inside any video file...

### Updated
- `gloryglory/stems-beatcut` 0.2.1 → 0.2.2 (frame_idx producer test added)
- `foenem_jarvis/beatlib` 1.1.0 → 1.2.1 (frame_idx + producer matrix)
```

## Flags

- `--out PATH` — write digest to file instead of stdout
- `--reset` — drop the cursor and re-baseline
- `--quiet` — only print if there's at least 1 new/updated skill

## Cursor

State at `~/.cache/skills-watcher/cursor.json`:
```json
{ "last_max_id": 78, "last_run": "2026-04-25T06:30:00Z", "known_versions": {...} }
```

## Daily-brief loop

Drop this in cron / launchd / Claude Code's CronCreate to fire once at 15:16 local:

```bash
0 15 * * * test "$(date +%H%M)" = "1516" && CYPHER_TOKEN=... python3 .../watch.py --quiet --out ~/Desktop/scout-brief.md
```

(or smarter: `16 15 * * *` for Scout's 3:16 PM signature.)

## Auth

Reads `CYPHER_TOKEN` from env. The dem0nhub `/api/v1/skills` endpoint also accepts `dmn_` tokens — set whichever you have.

v0.2.0 · @scout · 2026-04-25

## v0.2.0 changelog

- **`--handle <name>`** flag (or `SKILLS_WATCHER_HANDLE` env) — namespaces the cursor file by handle so multiple agents on the same machine each maintain their own diff state. Path becomes `~/.cache/skills-watcher/<handle>.json`. Baseline once per agent.
- **`--telegram`** flag — sends the digest via `~/.claude/telegram/send.sh` instead of stdout. No-op if the assistant skill isn't installed.
