From signal-loom
Run the full signal-loom ingestion loop interactively — scrape configured sources, enrich new articles, rebuild the index. Use on "/pipeline", "refresh sources", "check for new content", "run the pipeline".
How this skill is triggered — by the user, by Claude, or both
Slash command
/signal-loom:pipelineThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Drives the scrape → enrich → index loop interactively (the headless equivalent is `python -m core.pipeline`, run on a schedule). Use this for on-demand runs and retries.
Drives the scrape → enrich → index loop interactively (the headless equivalent is python -m core.pipeline, run on a schedule). Use this for on-demand runs and retries.
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.yamlIf the resolver finds nothing it errors with a "run init" hint — do NOT try to
write a default config from this skill. Tell the user to run the init skill
or python -m core.init --to . and stop.
Optional CLI override when the user explicitly names a config:
CONFIG_ARG=""
[ -n "${CONFIG:-}" ] && CONFIG_ARG="--config $CONFIG"
Scrape + index (skip enrich for now) so we can report what's new before spending on enrichment:
uv run --project "${CLAUDE_PLUGIN_ROOT}" python -m core.pipeline --once --no-enrich $CONFIG_ARG
Report: how many new files per source, any fetch warnings (e.g. a source needing uv sync --extra browser), total new.
If the command errors with "No signal-loom config found", do NOT auto-create one. The error now scans the project and lists any existing configs it found in nested/non-standard locations (e.g. config/<name>/signal-loom.yaml) — if it lists any, prefer re-running with --config <that path> rather than scaffolding. Only if it finds none, tell the user to run /signal-loom init (or python -m core.init --to .) and stop.
If there are unenriched files, ask the user whether to enrich now (enrichment costs API tokens — see the cost table in the README). Offer: enrich now / skip / show the files first.
If yes, invoke the enrich skill — it dispatches parallel enricher sub-agents and routes results through core.enrichment_writeback. (Interactive enrichment uses the sub-agent path; the scheduled python -m core.pipeline uses the Anthropic API path. Both share one spec, schema, and writeback module.)
Rebuild the index:
uv run --project "${CLAUDE_PLUGIN_ROOT}" python -m core.index $CONFIG_ARG
Report final counts and surface the re-run queue (failed-enrichments.jsonl) if any enrichment failed.
Offer to commit the new content/ files and index.json if the user keeps signal-loom output under version control.
/pipeline --dry-run → ... --dry-run (preview scrape, no writes)/pipeline --no-enrich → scrape + index onlyuv sync --extra browser (the engine emits the actionable message, never a silent skip).uv run --project ${CLAUDE_PLUGIN_ROOT} python -m core.<module> — skills run from the user's cwd, so --project is required for the right environment.core.enrichment_writeback; this skill only orchestrates and reports.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.