name: research-tick description: Run one iteration of the research loop — search, read, or synthesize based on current coverage
Research Tick
Execute one iteration of the research loop. This skill is called repeatedly — either by the daemon, by /loop, or manually.
Process
- Read the active research brief from
.loop/briefs/(the most recent research-* brief with status "running") - Read the research module config from
.loop/modules/research/config.json - Dispatch a research worker using the Agent tool:
- Use
subagent_type: "general-purpose" - Pass the research worker agent prompt from the module
- Include paths to: brief, findings.md, sources.json, coverage.json, search-log.jsonl
- The worker performs one action and updates state files
- Use
- Check if evaluation is due (every
eval_intervaliterations):- If yes, dispatch the evaluator agent
- Evaluator updates coverage.json and writes to eval-log.jsonl
- If evaluator says STOP, mark the brief as "complete"
- Check iteration count against max_iterations
- If exceeded, mark brief as "complete" with note "max iterations reached"
- Update HANDOFF.md if the brief completes (summary of findings)
State paths
All state lives in .loop/modules/research/state/:
findings.md— accumulated findingssources.json— sources examinedcoverage.json— per-question coveragesearch-log.jsonl— search historyeval-log.jsonl— evaluator decisions
Completion
When the brief is complete (evaluator STOP or max iterations):
- Write a completion summary to HANDOFF.md
- Mark the brief status as "complete" in progress tracking
- Send notification if ntfy is configured