atomr-agents-deep-research-shell
Two-tier outer shell for the
deep-research harness. An
IntentClassifier routes each ResearchRequest to either a fast
shallow path (one WebSearch call rendered as a numbered markdown
report) or the full deep harness. The shell itself implements
atomr_agents_callable::Callable, so it slots into agents, workflows,
and tool registries exactly like the underlying harness.
ResearchRequest
│
▼
┌──────────────────┐ ┌────────────────────────┐
│ IntentClassifier │ Shallow │ DirectSearchShallow │
│ (default: ├────────►│ (one WebSearch call, │──┐
│ Heuristic…) │ │ numbered references) │ │
└──────────────────┘ └────────────────────────┘ │ ResearchResult
│ Deep │
▼ │
┌────────────────────────────────────────────────┐ │
│ DeepResearchHarnessRef (full clarify→plan→…) │───────┘
└────────────────────────────────────────────────┘
Defaults
HeuristicIntentClassifier— deterministic, LLM-free. Classifies shallow when the query is short (< 80chars), has at most one?,depth <= 1, and contains no comparative markers ("compare","versus"," vs ","trade-off","analyze","deep dive","research","contrast","differences between","how do "). Every threshold is tunable viawith_*builders.DirectSearchShallow— issues oneWebSearch::search(...)withmax_results = req.breadth.max(3), honoursreq.scope.allowed_domains/blocked_domains, builds a numbered markdown report, and emits citations markedCitationStatus::Verified.
Usage
use Arc;
use Callable;
use ;
use ResearchRequest;
use ;
use ;
use MockWebSearch;
# async
Extending
- Drop in your own
IntentClassifier(e.g. an LLM-backed one once theagentfeature on the deep-research-harness lands). - Replace
DirectSearchShallowwith a more elaborate shallow path (cache hits, retriever-only search, …). - Compose the shell behind
with_retry/with_timeout/with_fallbacksfromatomr-agents-callable.
Verification
cargo test -p atomr-agents-deep-research-shell
cargo check --workspace