plugins/dev/skills/research-curate/SKILL.md
Walk thoughts/shared/research/ and thoughts/shared/plans/, score each doc's staleness, regenerate INDEX.md, and append LLM-surfaced contradictions to CONTRADICTIONS.md (append-only). Source docs are never modified. Classification: current (age<90d AND refs valid), needs-review (age>=90d OR broken refs), likely-stale (age>=180d AND no recent activity). Inventory is deterministic; contradiction detection runs one LLM call per cluster (CTL-467 + CTL-468 / Initiative 4 Phase 1+2).
npx skillsauth add coalesce-labs/catalyst research-curateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Regenerates INDEX.md inventories for thoughts/shared/research/ and
thoughts/shared/plans/, then clusters docs by topic and asks an LLM to
identify contradicting claims, appending findings to CONTRADICTIONS.md.
Source markdown is never modified — only INDEX.md (overwritten) and
CONTRADICTIONS.md (appended) are written.
date, topic,
tags), counts words, extracts file:line references (file.ext:N pattern).HEAD, and counts last-30d git log hits for the doc's top-3 tags.current — age < 90d AND all refs resolve at HEADneeds-review — age >= 90d OR at least one broken reflikely-stale — age >= 180d AND zero recent topic activity<dir>/INDEX.md with three sections sorted by
date descending. Output is fully deterministic.tags ∪ topic, computes
pairwise Jaccard similarity, unions docs with score ≥ 0.4 via union-find.
Clusters of size 3–10 are kept (smaller dropped, larger capped at 10).
For each cluster, one LLM call (default claude -p) receives a
token-bounded prompt (1500 chars/doc) asking for contradictions. New
findings are appended to <dir>/CONTRADICTIONS.md under a
## YYYY-MM-DD — <topic> heading. Existing entries are never modified.# Curate both directories in-place (inventory + contradictions)
bash plugins/dev/scripts/research-curate/run.sh thoughts/shared/research
bash plugins/dev/scripts/research-curate/run.sh thoughts/shared/plans
# Inventory only — skip the LLM-driven contradiction pass
bash plugins/dev/scripts/research-curate/run.sh --skip-contradictions \
thoughts/shared/research
# Dry run — INDEX written to /tmp; contradictions never touched
bash plugins/dev/scripts/research-curate/run.sh --dry-run thoughts/shared/research
Each invocation prints summary lines:
thoughts/shared/research: current=42 needs-review=83 likely-stale=80 → thoughts/shared/research/INDEX.md
thoughts/shared/research: contradictions clusters=5 appended=3 → thoughts/shared/research/CONTRADICTIONS.md
Projected cost for the weekly Routine: ~$0.38/run (75K input tokens × $5/M), ~$1.50/month.
When invoked as /catalyst-dev:research-curate, run both directories
sequentially and report the summary lines back to the user.
set -euo pipefail
SCRIPT="${CLAUDE_PLUGIN_ROOT:-.}/scripts/research-curate/run.sh"
[[ -x "$SCRIPT" ]] || SCRIPT="plugins/dev/scripts/research-curate/run.sh"
bash "$SCRIPT" thoughts/shared/research
bash "$SCRIPT" thoughts/shared/plans
Source-doc immutability is enforced by inventory.sh (which only ever reads
source markdown), run.sh (which writes exclusively to INDEX.md or a
/tmp/ dry-run path), and append-contradictions.sh (which opens
CONTRADICTIONS.md in append-mode only). The test suite asserts this
property against fixture repos via before/after hash comparisons.
bash plugins/dev/scripts/__tests__/research-curate-inventory.test.sh
bash plugins/dev/scripts/__tests__/research-curate-contradictions.test.sh
testing
Phase-agent that fixes a failing verify verdict so the pipeline self-heals instead of stalling to needs-human (CTL-653). Reads `${ORCH_DIR}/workers/<ticket>/verify.json`, fixes the `findings[]` (every severity:"high" plus the regression_risk drivers) directly via Edit/Write, commits the remediation, and emits `phase.remediate.complete.<ticket>`. The scheduler's router then re-dispatches `verify` to re-check (the verify⇄remediate cycle, cap 3). Dispatched as a `claude --bg` job by `phase-agent-dispatch`, which invokes it via slash command — hence `user-invocable: true`.
development
Phase agent for the verify step of the 9-phase orchestrator pipeline (CTL-450). NEW skill — has no canonical wrapper. Runs read-only adversarial verification against the implement-phase diff: tsc, tests, lint, security scan, reward-hacking scan, code review, test coverage, silent-failure hunt. Writes ${ORCH_DIR}/workers/<TICKET>/verify.json then emits phase.verify.complete.<ticket>. Reads phase-implement.json as its prior-phase artifact. NEVER writes application code — only test files allowed. Spawned via phase-agent-dispatch via slash command — hence `user-invocable: true`.
tools
--- name: phase-triage description: Phase agent that triages a Linear ticket — expands acronyms, classifies (feature/bug/docs/refactor/chore), identifies dependencies, estimates scope, writes triage.json, and posts a triage analysis comment to Linear. Triage completion is signaled by that comment plus the local triage.json — there is no `triaged` label. Emits phase.triage.complete.<TICKET> on success and phase.triage.failed.<TICKET> on error. Dispatched by the phase-agent orchestrator (CTL-452)
testing
Phase agent for the review step of the 9-phase orchestrator pipeline (CTL-450). Wraps the /review skill (gstack) — explicitly skips /ultrareview per user decision. Reads verify.json from the prior phase, runs /review against the diff, writes ${ORCH_DIR}/workers/<TICKET>/review.json, and creates a remediation commit for any HIGH-severity finding that has a deterministic fix. Emits phase.review.complete.<ticket>. Spawned via phase-agent-dispatch via slash command — hence `user-invocable: true`.