research-curate
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).
Best use case
research-curate is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
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).
Teams using research-curate should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/research-curate/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How research-curate Compares
| Feature / Agent | research-curate | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
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).
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# research-curate
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.
## What it does
1. **Inventory** — walks each directory, parses frontmatter (`date`, `topic`,
`tags`), counts words, extracts file:line references (`file.ext:N` pattern).
2. **Score** — for each doc, computes age, validates ref paths against
`HEAD`, and counts last-30d git log hits for the doc's top-3 tags.
3. **Classify**:
- `current` — age < 90d AND all refs resolve at HEAD
- `needs-review` — age >= 90d OR at least one broken ref
- `likely-stale` — age >= 180d AND zero recent topic activity
4. **Generate** — overwrites `<dir>/INDEX.md` with three sections sorted by
date descending. Output is fully deterministic.
5. **Cluster + contradict** (CTL-468) — tokenizes `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.
## Invocation
```bash
# 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.
## Skill body
When invoked as `/catalyst-dev:research-curate`, run both directories
sequentially and report the summary lines back to the user.
```bash
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.
## Out of scope (deferred)
- CMA Routine wiring (weekly cadence) — Phase 3 of Initiative 4 (CTL-469).
- LLM-generated one-line summaries — plan permits but defers for testability.
- LLM-driven clustering — fallback to deterministic Jaccard is preserved for
cost predictability (Phase 3 refactor option in the plan).
## Tests
```
bash plugins/dev/scripts/__tests__/research-curate-inventory.test.sh
bash plugins/dev/scripts/__tests__/research-curate-contradictions.test.sh
```Related Skills
user-research-synthesis
Turn user interviews into actionable insights. Advanced synthesis techniques and frameworks.
research-codebase
Conduct comprehensive codebase research using parallel sub-agents. **ALWAYS use when** the user asks to 'research', 'investigate', 'explore the codebase', 'how does X work', 'find out about', or needs deep analysis of how existing code is structured. Produces a research document in thoughts/shared/research/ with file:line references.
phase-research
Phase agent for the research step of the 9-phase orchestrator pipeline (CTL-450). Wraps /catalyst-dev:research-codebase and produces thoughts/shared/research/<date>-<ticket>.md, then emits phase.research.complete.<ticket>. Reads triage.json from the worker dir as its prior-phase artifact. Spawned via plugins/dev/scripts/phase-agent-dispatch, which invokes it via slash command — hence `user-invocable: true`.
write-prod-strategy
Product strategy docs using 7-component framework
strategy-sprint
Create product strategy in 1 day, 1 week, or 1 month timeframes. Progressive strategy development framework.
ralph-wiggum
Devil's advocate PRD/document reviewer with humor and sharp critique
prioritize
Classify PM tasks using LNO Framework (Leverage/Neutral/Overhead) to focus on high-impact work.
prd-review-panel
Multi-agent PRD review (7 perspectives)
prd-draft
Create a PRD (product requirements document) for features and initiatives. Guides through clarifying questions, generates a structured draft with hypothesis, strategic fit, non-goals, success metrics, and rollout plan, then offers multi-agent review. Use when the user asks to create a PRD, product spec, feature spec, requirements doc, or product brief.
launch-checklist
Comprehensive product launch planning
impact-sizing
Quantify feature value with driver trees, confidence levels, and the 4-step sizing framework.
feature-results
Post-launch analysis and results documentation. Document what shipped and what we learned.