Agent skill
refresh-research
TRIGGER — /refresh-research invoked or bulk research update requested. Inventories ./research/ entries, detects stale entries by review date or age, runs RT-ICA pre-flight, spawns research-curator agents in waves of 5, collects per-wave results, updates README, produces summary report, lints and commits. All targeted entries re-verified with updated Freshness Tracking. Supports --all, --stale, --category, --layer, --dry-run flags.
Install this agent skill to your Project
npx add-skill https://github.com/Jamie-BitFlight/claude_skills/tree/main/.claude/skills/refresh-research
SKILL.md
<scope_args>$ARGUMENTS</scope_args>
Refresh Research
Orchestrate parallel research-curator agents to bulk-refresh research entries in ./research/. Detects staleness, skips fresh entries, updates only what qualifies. Safe to run repeatedly.
Arguments
<scope_args/> controls scope:
--all— Refresh every entry regardless of staleness--stale(default) — Refresh entries past their review date--category <name>— Refresh all entries in one category (e.g.,--category agent-frameworks)--layer <0|1|2>— Refresh entries with matching SDLC layer metadata (0=process, 1=language, 2=stack). See plugins/development-harness/docs/sdlc-layers/.--dry-run— Report what would be refreshed; do not spawn agents
Workflow
Step 1: Inventory and Staleness Detection
Glob ./research/**/*.md (exclude README.md). For each entry, parse:
- YAML frontmatter — extract
metadata.layervalue (string"0","1", or"2";nullif absent). - Freshness Tracking section — extract Last Verified and Next Review dates.
flowchart TD
Start([Read entry]) --> ParseFM[Parse YAML frontmatter<br>Extract metadata.layer]
ParseFM --> HasFreshness{Freshness Tracking section present?}
HasFreshness -->|No| Stale1[STALE: no tracking]
HasFreshness -->|Yes| ComputeDays[Compute Days Old = today minus Last Verified]
ComputeDays --> PastDue{Next Review Recommended < today?}
PastDue -->|Yes| Stale2[STALE: past review date]
PastDue -->|No| TooOld{Last Verified > 6 months ago?}
TooOld -->|Yes| Stale3[STALE: too old]
TooOld -->|No| Fresh[FRESH: N days until next review]
Build inventory table:
| File | Category | Layer | Last Verified | Next Review | Days Old | Stale? |
The Days Old column holds an integer: today's date minus the Last Verified date in days.
If Last Verified is absent or unparseable, render as —.
The Layer column holds the metadata.layer value or — if absent.
Step 2: Apply Scope Filter
Apply filters sequentially. Filters combine with AND logic — each filter narrows the set from the previous step.
- Base set: Start with all inventoried entries.
- Staleness filter (default unless
--all):--all— keep all entries (no staleness filter)--stale(default) — keep only entries marked STALE in Step 1
- Category filter (optional):
--category <name>— keep only entries whose category directory matches<name>. - Layer filter (optional):
--layer <0|1|2>— keep only entries wheremetadata.layerequals the requested value. Entries withoutlayermetadata (—in inventory) are excluded. - Dry-run check:
--dry-run— display the filtered target list and stop without spawning agents.
If zero entries remain after all filters: report "No entries match the applied filters." and stop. When --layer was specified and zero entries match, additionally report: "No entries found for layer {N}. Entries need metadata.layer in their YAML frontmatter to be targeted by --layer."
When the --stale filter excludes entries because they are FRESH, list each excluded entry
before continuing to Step 3:
Skipped (fresh):
./research/{category}/{name}.md — N days until next review (last: YYYY-MM-DD, vX.Y.Z)
./research/{category}/{name}.md — N days until next review (last: YYYY-MM-DD, vX.Y.Z)
This listing appears regardless of whether --dry-run is active. Under --all (no staleness
filter), no entries are excluded by staleness, so this block does not appear.
Step 3: RT-ICA Pre-Flight
RT-ICA: Research Refresh
Goal: Refresh {N} research entries with current data from primary sources
Conditions:
1. mcp__Ref and mcp__exa available in session (primary data gathering)
2. gh CLI authenticated (GitHub repo metadata)
3. Outbound network access (fetch fresh data)
4. ./research/ writable (update entry files)
5. Entry files parseable markdown (determine what changed)
Decision: {APPROVED | BLOCKED}
If BLOCKED: report missing tools/access, suggest workarounds, stop.
Step 4: Spawn Agents in Waves
Split target entries into sequential waves of 5. Within each wave spawn agents in parallel; wait for wave completion before starting the next.
For each entry:
Agent(subagent_type: "research-curator", prompt: "--rerun ./research/{category}/{name}.md", model: "sonnet")
After each wave, collect and log results:
Wave {N} complete: {M}/{total} succeeded
updated -- ./research/agent-frameworks/agno.md (v0.3→v0.5, +2k stars)
unchanged -- ./research/mcp-ecosystem/narsil-mcp.md (no changes detected)
failed -- ./research/developer-tools/orbstack.md -- error: [reason]
Outcome categories: Updated (content changed), Unchanged (re-verified, no changes), Failed (agent could not complete).
Step 5: Update README
After all waves complete, update ./research/README.md:
- Refresh freshness dates for updated and unchanged entries
- Add new categories if agents created them
- Regenerate category counts
Step 6: Summary Report
# Research Refresh Report
**Date**: {YYYY-MM-DD}
**Scope**: {--all | --stale | --category X | --layer N}
**Total scanned**: {N} | **Targeted**: {M} | **Skipped (fresh)**: {K} ({min}–{max} days until next review)
## Results
| Outcome | Count | Notes |
|---------|-------|-------|
| Updated | {N} | |
| Unchanged | {N} | |
| Failed | {N} | |
| Skipped (fresh) | {K} | {min}–{max} days until next review |
When K = 0, omit the Skipped (fresh) row. When K = 1, Notes column: `{N} days until next review`.
When K = 0 in the header: `**Skipped (fresh)**: 0`. When K = 1: `**Skipped (fresh)**: 1 ({N} days until next review)`.
## Updates
| Entry | Category | Change Summary |
|-------|----------|----------------|
| {name} | {category} | {version bump, stat update, etc.} |
## Failures
| Entry | Error |
|-------|-------|
| {name} | {reason} |
## Next Actions
- Due for review in 30 days: {list}
- Categories with no recent updates: {list}
- Failed entries to retry: {list}
Step 7: Post-Actions
Lint modified files before committing to prevent malformed entries reaching git history:
uv run prek run --files ./research/
Commit with a format that identifies the refresh scope for audit purposes:
git add ./research/ && git commit -m "docs(research): refresh {N} entries ({date})"
git push -u origin HEAD
Error Handling
- No entries match filter — report "All entries are fresh. Nothing to refresh." and stop
- No entries match
--layerfilter — report "No entries found for layer {N}. Entries needmetadata.layerin their YAML frontmatter to be targeted by--layer." and stop - Agent failures — continue remaining waves; include in summary Failures table
- Network issues mid-wave — complete current wave, report partial results, suggest retry with
--stale - README update conflict — re-read README and retry update once
Related
/research-curator— single-entry and batch research operations; this skill wraps it with staleness detection and RT-ICA@research-curatoragent —.claude/agents/research-curator.md— executes individual entry reruns
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
ccc
This skill should be used when code search is needed (whether explicitly requested or as part of completing a task), when indexing the codebase after changes, or when the user asks about ccc, cocoindex-code, or the codebase index. Trigger phrases include 'search the codebase', 'find code related to', 'update the index', 'ccc', 'cocoindex-code'.
agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.
delegate
Quick delegation template for sub-agent prompts. Use when assigning work to a sub-agent, before invoking the Agent tool, or when preparing prompts for specialized agents. Provides the WHERE-WHAT-WHY framework. For comprehensive delegation guidance, activate the agent-orchestration how-to-delegate skill.
swarm-spawning
Spawn agents and teammates in Claude Code swarms. Use when choosing between subagents vs teammates, selecting agent types (Explore, Plan, general-purpose, plugin agents), configuring spawn backends (in-process, tmux, iterm2), or setting environment variables for spawned agents.
knowledge-explorer
Manage the research/ knowledge base (KB) of tool and library research entries. Use when browsing KB topics, adding new research entries, updating existing entries with dated revisions, fetching GitHub repo metadata into a draft KB entry, or migrating old-format entries to skill-spec frontmatter. Triggers on tasks like "what do we have on X", "add this to the KB", "update the KB entry for Y", "fetch github info for owner/repo", or "migrate old entries".
design-anti-patterns
Enforce anti-AI UI design rules based on the Uncodixfy methodology. Use when generating HTML, CSS, React, Vue, Svelte, or any frontend UI code. Prevents "Codex UI" — the generic AI aesthetic of soft gradients, floating panels, oversized rounded corners, glassmorphism, hero sections in dashboards, and decorative copy. Applies constraints from Linear/Raycast/Stripe/GitHub design philosophy: functional, honest, human-designed interfaces. Triggers on: UI generation, dashboard building, frontend component creation, CSS styling, landing page design, or any task producing visual interface code.
Didn't find tool you were looking for?