From signal-loom
Build a grouped markdown digest of recent signals from the index, with optional HEAD-check link verification. Use on "/brief", "show me the digest", "what's new", "morning brief", "summarize recent signals".
How this skill is triggered — by the user, by Claude, or both
Slash command
/signal-loom:briefThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Reads the signal-loom index, groups entries by their controlled-vocabulary `topics.primary` field, and renders a scannable markdown digest. With `--verify`, each link is HEAD-checked and annotated live / stale / dead — the key differentiator over a plain listing.
Reads the signal-loom index, groups entries by their controlled-vocabulary topics.primary field, and renders a scannable markdown digest. With --verify, each link is HEAD-checked and annotated live / stale / dead — the key differentiator over a plain listing.
Don't compute a config path manually — the core resolver discovers it. Order:
--config <path> if the user supplied one$CLAUDE_PLUGIN_OPTION_CONFIG_PATH (set by Claude Code userConfig)$SIGNAL_LOOM_CONFIG (legacy; deprecated)$CLAUDE_PROJECT_DIR (or cwd) looking for signal-loom.yaml,
.signal-loom.yaml, .signal-loom/config.yaml, or config/signal-loom.yamlbrief is a read-only query: if the resolver finds nothing, core.brief falls
back to index.json in the cwd so ad-hoc inspection still works. Don't write a
default config from this skill — if there's no project config, suggest the user
run the init skill (or python -m core.init --to .).
Optional CLI override when the user explicitly names a config:
CONFIG_ARG=""
[ -n "${CONFIG:-}" ] && CONFIG_ARG="--config $CONFIG"
Run the brief:
uv run --project "${CLAUDE_PLUGIN_ROOT}" python -m core.brief \
$CONFIG_ARG \
--since 7d
For link verification (recommended for sharing or archiving):
uv run --project "${CLAUDE_PLUGIN_ROOT}" python -m core.brief \
$CONFIG_ARG \
--since 7d \
--verify
Present the digest to the user. It contains:
## <primary topic> group headers (controlled vocabulary — entries sharing a topic genuinely collide)[title](url) · source · published date + one-line summary snippet--verify: each link annotated ✓ live / ⚠ stale / ✗ deadOffer to save the digest to content/briefs/<date>.md if the user wants a persistent copy:
uv run --project "${CLAUDE_PLUGIN_ROOT}" python -m core.brief \
$CONFIG_ARG \
--since 7d --verify > content/briefs/$(date +%F).md
| Flag | Default | Notes |
|---|---|---|
--since | (none) | ISO date (2026-05-01) or relative (7d, 30d) |
--until | (none) | ISO date upper bound |
--verify | off | HEAD-check every unique URL; adds ~1–3s per URL |
--limit | 50 | Cap on entries included |
--index | index.json | Path to the index file |
| Tier | Trigger | Annotation |
|---|---|---|
| live | 2xx or 3xx HTTP status | ✓ live |
| stale | network error, timeout, 5xx | ⚠ stale |
| dead | 404 or 410 | ✗ dead |
uv run --project "${CLAUDE_PLUGIN_ROOT}" python -m core.brief — skills run from the user's cwd, so --project is required for the right environment.brief is a read-only consumer: it never writes the corpus or modifies the index.--verify, warn the user that each unique URL incurs a HEAD request; on large windows (--limit 200+) this adds noticeable latency./pipeline first.npx claudepluginhub dwroblewski/signal-loom --plugin signal-loomCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.