You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Deep Research — a Scope → Research → Write flow that fans out read-only research sub-coders and writes one cited report. Toggle it with f2 (an indicator appears below the input; the next prompt becomes the research topic) or run /deep-research <topic> directly. The flow mirrors the orchestrator-worker pattern: it asks a max-agents cap M (1–10), scopes the topic into 1–4 clarifying questions → a compressed research brief (the north star), has a lead decompose the brief into parallel subtopics, dispatches read-only research agents shown as a rectangle progress bar (not the per-child subagent view), runs a gap-analysis pass that spawns 1–2 more agents only if coverage genuinely falls short, and finally has the main agent write one cohesive, inline-cited markdown report saved to deep-research-<slug>-<timestamp>.md. The agent tree scales with M (e.g. M=6 → 1 lead + 3 wave-1 + ≤2 gap-fill); f2 is unbound by pi's app keybindings, the emacs-style editor, and every other extension, so it registers with no conflict.
Project-safety by construction. Research agents get the full read + browse toolset minus bash — with bash they were scaffolding and compiling throwaway projects (cargo new, go build) in the working tree, once leaving ~200 MB behind — and every reasoning/research child runs in an ephemeral scratch cwd (mkdtemp, removed on exit), so a research run can never write into the user's repo. The one-shot write turn additionally blocks edit/write/bash so the report is emitted as text, saved by the extension itself.
Grounding and honesty enforced in the prompts. Research children must cite the full source URL for every factual claim and end with a Sources: list, and are told an honest "not found" beats an invented fact; the writer may use only what the findings support, marks unsupported claims rather than fabricating, and lists only real URLs. A per-child watchdog (reasoning 4 min, research 10 min) kills a hung agent (e.g. a browser wedged on a page) so it can't stall the whole run, with a single automatic retry on timeout to recover a transient hang before that subtopic is lost; when an agent is still lost, the writer is instructed to add a short "Research coverage" note disclosing the gap instead of quietly shipping a thinner report.
Validated headless at scale before shipping. The Scope → Research pipeline was extracted into a UI-agnostic engine (pipeline.ts) so a gated batch harness drives the same code the interactive flow runs, across 25 full research pipelines (10 topics, then 15, at M=6) scored by mechanical heuristics + a local-model judge + hand review. The grounding work is the headline result: real, resolvable sources went from 0 per report to ~28, structure from 82→94/100, with 25/25 substantial reports and no crashes. The interactive TUI layer (dialogs, live progress bar, the main-agent write turn, ESC/abort, plan-mode coexistence) remains a manual-test surface. Tunable via LITTLE_CODER_DEEP_RESEARCH_MAX and .pi/settings.json (little_coder.deep_research.default_max_subagents, default 10); research fan-out honors LITTLE_CODER_SUBCODER_CONCURRENCY (default serial) like the rest of the sub-coder machinery.