research-harvest
Tally which sources supported fields across research runs and write a reviewable candidate list.
Skill by eristoddle
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/eristoddle-research-harvest
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: writing, research
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/research-harvest
Tools it pre-approves 5
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
Bash,Read,Write,Glob,AskUserQuestion
What's inside
- Skill name
research-harvest- Description
- Tally which sources supported fields across research runs and write a reviewable candidate list. Hand-invoked only.
- License
- MIT
- Allowed tools
- Bash,, Read,, Write,, Glob,, AskUserQuestion
- Instructions
- 45 lines in SKILL.md · view on GitHub
Before installing
- Pre-approves some shell commands
Files (1)
- SKILL.md
SKILL.md (first lines)
# Research Harvest - Source Promotion Candidates
## Trigger
`/research-harvest [run-folder-name]`
**Never invoked automatically** by `/research-deep` or `/research-report`. Runs routinely stop before the report step, so anything hanging off `/research-report` would never fire for them; and a prompt printed after every run is one the user learns to dismiss. This skill only runs when asked.
## Workflow
### Step 1: Locate Scope
Locate the root per `skills/research/LAYOUT.md`'s discovery rule — do not restate the rule here. With no run named, the scope is the whole root. With a run named, locate that run folder (skip disambiguation if it names one directly) and narrow the scope to it alone.
### Step 2: Resolve the Script
Resolve `harvest_sources.py` in this order and use the first that exists:
1. `<project_root>/.agents/skills/research/harvest_sources.py` (Copilot project-local install)
2. `<project_root>/.claude/skills/research/harvest_sources.py` (Claude project-local install)
3. `~/.agents/skills/research/harvest_sources.py` (Copilot user install)
4. `~/.claude/skills/research/harvest_sources.py` (Claude user install)
If none exists, tell the user the skill is not fully installed and stop — do not hand-write a substitute tally.
### Step 3: Run the Tally
`python3 {harvest_script_path} --root {root}`, or `--run {run_dir}` when a run was named. The script is read-only; it prints a bounded summary and writes nothing.
### Step 4: Report the Empty Cases Plainly
Carry the script's own distinction through to the user instead of printing "no candidates found":
- All scanned runs predate source capture -> say so in those words.
- Sources were captured and none reached the threshold -> say so in those words.
- No run has been researched yet (outline only, no results to read) -> say that. It is **not** the same as predating capture, and reporting it as such tells the user the opposite of the truth.
- A mixed scan -> say each case that applies, with the counts the script reported.
### Step 5: Write `CANDIDATES.md`
Resolve the path: prefer `.agents/web-search-modules-local/CANDIDATES.md`; use `.claude/web-search-modules-local/CANDIDATES.md` instead only when that legacy directory already exists and the `.agents` one does not — the same preference order `ROUTING.md` step 0 uses for local modules. Create the directory when neither exists.
**Read the existing file first, if one exists.** Any entry under `## Candidates` that the human has ticked (`- [x]`) or struck through (`~~like this~~`) is a disposition, not an open candidate. Move each such entry, in its ticked/struck form, into `## Dispositioned` if it is not there already. This is what stops a rejected source from returning as a fresh candidate on every later harvest — never delete a dispositioned line, on this or any later run.
Then write the file whole, in this shape:
1. A header: the date, the scope scanned (whole root or the named run), the threshold used (`--min-runs` / `--min-field-runs`), and one line noting that only **parameterized** modules (D1) can absorb a source — fixed-site and open-query modules have nothing to promote into.
2. `## Candidates` — one unticked `- [ ]` line per qualifying source from Step 3's output, with its URL, run count, field-support count, and the fields it supported. **Skip any URL that already has a disposition recorded**, even if it still qualifies this time — that is the rule the previous paragraph exists to enforce.
3. `## Dispositioned` — every disposition ever recorded (carried over from the read in this step, plus anything newly moved), never trimmed.
### Step 6: No Module Attribution
This skill never attributes a candidate to a module and never edits a module file. Discovery stays automatic; which module a source serves, and whether to promote it at all, is the human's call (D17).From eristoddle/deep-research-agent, MIT.
More from eristoddle/deep-research-agent
- 0.544score
research-add-module
eristoddle
Build a new web-search strategy module for a domain the existing modules do not cover.
SkillBFreshness: B★ 1Claude Code - 0.544score
web-search-modules
eristoddle
Reference library of search-strategy modules for the web-search-agent subagent.
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
research-enumerate
eristoddle
Sweep broad and shallow to catalog what exists in a domain, writing catalog.md plus a standard outline.yaml a later /research-add-fields + /research-deep pass…
SkillBFreshness: B★ 1Claude Code
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 5, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from eristoddle
- 0.544score
research-add-module
eristoddle
Build a new web-search strategy module for a domain the existing modules do not cover.
SkillBFreshness: B★ 1Claude Code - 0.544score
web-search-modules
eristoddle
Reference library of search-strategy modules for the web-search-agent subagent.
SkillBFreshness: B★ 1Claude Code +9 - 0.544score
research-enumerate
eristoddle
Sweep broad and shallow to catalog what exists in a domain, writing catalog.md plus a standard outline.yaml a later /research-add-fields + /research-deep pass…
SkillBFreshness: B★ 1Claude Code
Cite this page
research-harvest skill. Agent Mart. https://agentmart.dev/skills/eristoddle-research-harvest (last updated 2026-10-24)