with one click
deep-research
// Research the problem domain before coding. Web search for techniques, save raw sources, write structured findings, update the index.
// Research the problem domain before coding. Web search for techniques, save raw sources, write structured findings, update the index.
Organize the shared notes directory when it becomes hard to navigate. Restructure within research/ and experiments/, deduplicate, update index.md.
Autonomously create, test, and optimize skills by detecting reusable patterns in your own work. Use when you notice repeated tool sequences, recurring code patterns across attempts, or insights that should be captured as a packaged skill. Also use to benchmark and iterate on existing skills.
Verify and debug changes to CORAL itself — smallest reproduce loop per area (grader / daemon / CLI / hooks / manager / workspace / hub / template / config / web), where to look when something breaks (hung graders, agent restart loops, stalled agents, missing heartbeat actions, corrupted shared state, broken worktree symlinks, grader import errors, wrong-task resume), how to inspect a live or finished run under `.coral/public/`, and the canonical lint/test commands. Use when editing code under `coral/` or chasing a CORAL bug, NOT when adding a new task or extending the framework.
Add a new component to the CORAL framework itself — a new agent runtime under `coral/agent/builtin/` (claude_code/codex/cursor_agent style), a new CLI command in `coral/cli/`, a new bundled skill or subagent template under `coral/template/skills/` or `coral/template/agents/`, a new hook in `coral/hooks/`, a new field in `coral/config.py`, or a framework-level extension to the grader stack under `coral/grader/`. NOT for writing a per-task grader or adding an example task — use `coral-new-task` for that. NOT for debugging existing code — use `coral-debug`.
End-to-end recipe for adding a new task under `examples/` — the three pieces that have to line up (`task.yaml`, `seed/`, and `grader/` or legacy `eval/grader.py`), what to put in each, the `TaskGrader` API surface, the `coral validate` → smoke-test loop, and the common mistakes (repo_path pointing at the wrong dir, score direction backwards, hidden answer keys leaking into seed/, grader writing to codebase_path which the daemon force-removes, private-vs-public confusion, missing `run()` signature). Use whenever the user wants to add a new CORAL task, port an existing benchmark into CORAL, or migrate an old `eval/grader.py` example to the packaged grader form.
| name | deep-research |
| description | Research the problem domain before coding. Web search for techniques, save raw sources, write structured findings, update the index. |
Research the problem thoroughly before writing code. Understand what's known, what's been tried, and what approaches exist.
notes/
├── index.md ← table of contents for research/ and experiments/
├── raw/ ← saved web pages, paper excerpts (immutable, never edit)
├── research/ ← your synthesized findings (link back to raw/)
└── experiments/ ← eval reflections and results (written by reflect heartbeat)
Read the task description and key files. Identify what's being optimized, what the constraints are, and what makes it hard. Check coral log and {shared_dir}/notes/ for prior work.
Broad survey — search for the problem class:
"[problem domain] state of the art methods""[problem domain] survey paper""[problem domain] benchmark comparison"Specific techniques — once you identify promising approaches:
"[technique name] vs [alternative] comparison""[technique name] implementation details""[technique name] python library"Practical implementations — find code and libraries:
"[problem] python implementation github""[problem] open source solution"Do 3-5 focused searches. When reading papers and articles, focus on methodology and results tables — how did they solve it, and what performance did they achieve?
For every useful source, save the raw content so it can be verified later:
{shared_dir}/notes/raw/source-name.md
Use WebFetch to get the full page, then write it to notes/raw/. These are immutable — never edit raw sources, only reference them from research notes.
When the source is not a plain web article (paper PDF, GitHub repo, video, conference talk, internal docs, chat log…), see references/source-types.md for capture procedure, what to extract, and the right frontmatter fields per type. Generic WebFetch only handles ~half of real research inputs cleanly.
When WebFetch fails, sources contradict, search returns nothing useful, or you find an existing-but-stale note covering your topic, see references/failure-modes.md for diagnosis and recovery procedures.
Identify 2-4 candidate approaches. For each, document:
notes/raw/ entryPick your approach based on strength of evidence, implementation feasibility, and iteration potential. Proven methods beat novel ideas for first attempts.
Summarize your findings in {shared_dir}/notes/research/. For each technique or approach, note:
see [raw/paper-name.md](../raw/paper-name.md))Keep notes specific and actionable. "X might work" is weak. "X reduces Y by 30% when Z > 10 (see raw/paper-name.md)" is useful. See references/research-note-template.md for a structured format.
After writing or substantially updating a note, optionally spawn the Synthesis Reviewer subagent to verify grounding before adding the note to the index. The reviewer reads the note alongside its linked raw sources and returns a per-claim verdict (grounded / partially-grounded / inferred / contradicted / unverifiable) — useful because the author of a synthesis cannot objectively grade its own grounding. See agents/synthesis-reviewer.md for inputs and output schema. Spawn it especially when:
confidence field will be set to high and you want to back that up.Create or update {shared_dir}/notes/index.md. The index only lists research notes and experiment notes — not raw sources:
# Notes Index
## Research
- [technique-a](research/technique-a.md) — one-line summary
- [technique-b](research/technique-b.md) — one-line summary
## Experiments
- (none yet)
## Open Questions
- What hasn't been tried?
Raw sources are accessed by following links inside research notes, not through the index.
After writing a new note, run the link resolver so existing notes pick up cross-references to it:
python .coral/public/skills/organize-files/scripts/resolve_links.py {shared_dir}/notes/ --new <new-slug>
The --new flag scans every existing note for plain-text mentions of the new title and wraps them as [[wikilinks]] — without this, manual cross-referencing decays as the notes directory grows.
Research notes evolve as new raw sources arrive and old ones decay. A few rules keep the synthesis honest as the corpus grows.
When 2+ raw sources inform the same topic, the research note must draw from every linked source, not just the most recent one. On a follow-up research pass that finds a new source covering an existing topic:
research/topic-v2.md is wrong — there should be one note per topic.## References section.If you only re-synthesize from the new source, you silently drop evidence from the old ones — which means re-research can quietly reduce the note's grounding instead of strengthening it.
When a raw source becomes invalid (link rot, retraction, supersession by a newer paper):
needs-reverification: [list of claims] to the frontmatter and move on.superseded: true rather than deleting the file — it preserves the audit trail for future agents who might rediscover the topic.If a note synthesizes A + B + C and you only have time to re-verify against B, leave the note body alone. A partial rewrite that keeps only B's perspective drops the synthesis from A and C. Either re-verify against the full source set or note the partial check in the frontmatter (partially-verified: [B]) without touching the body.
notes/raw/