apomesh-vertical-deep-research
apomesh-vertical-deep-research is a substrate-coupled vertical: a
use-case that sits beside the substrate and drives it, rather than living
inside it. It implements the orchestrator’s SessionStrategy seam to
specialize the VMAO loop for
verified-citation research reports — plan sub-topics, fan out grounded web
workers, verify each worker’s citations, gate on coverage, and synthesize a
typed report. It also re-expresses the research domain as three tier-keyed
skills so the same discipline rides the substrate’s skill carrier into any
coordination skeleton. Touch it when you change how deep research plans,
grounds, verifies, or writes its reports. The reverse-pipeline posture
holds: a shape here migrates into the substrate only when a second
vertical needs the same thing — until then it stays vertical-side, and the
substrate gains no knowledge of any one vertical.
Position in the workspace
Section titled “Position in the workspace”- Layer: vertical (substrate-coupled use-case). See
Coordination loops for the
SessionStrategyseam it plugs into. - Depends on: apomesh-orchestrator
(the
SessionStrategyseam + VMAO hooks), apomesh-substrate (agent, predicate, skill, and coordinator primitives), and apomesh-protocol (the wire types). Plus the dependency-lightapomesh-vertical-deep-research-projectionsibling (below). - Consumed by: only apomesh-orchestrator-bin — the assembly point that registers the strategy and its skills at boot. The heavy runtime crate enters no other crate by design; the console, worker, and orchestrator library depend on the projection sibling instead.
What it owns
Section titled “What it owns”- The research strategy —
DeepResearchStrategy, theSessionStrategyimpl that wires VMAO’s four extension points: planner prompt, planner-response parsing (into aDeepResearchPlan), a post-execute validator-pairing hook, a post-verify coverage check, and synthesis. - The research skills — the domain re-expressed as three tier-keyed
Skills (research-worker, research-synthesizer, research-validator), bound per role so the same framing runs under any skeleton. - Two-mode verification — mechanical: one Validator paired per Worker
runs
Predicate::URLContentMatchagainst each claim’s cited URLs inside the tool sandbox; LLM-judge: a session-level coverage check runs aPredicate::LLMJudgewhose rubric is derived one-to-one from the planner’s sub-topics, and the validator skill carries a citation-grounding rubric. - The tuning surface —
DeepResearchConfig, deserialized from the opaquevertical_configlaunch bytes the substrate ferries but never interprets (see Agent configuration). - The typed report —
DeepResearchReport/ReportSection/ResearchClaim, with a JSON schema pinned to the Rust type. - The memory-ablation eval harness (
eval) — cassette record/replay and a memory-mode ablation corpus that measures grounded fact-recall across episodic / semantic / full-context injection.
The dependency-light apomesh-vertical-deep-research-projection sibling
holds deep research’s tier-4 open-vocabulary consumer surfaces — the pure
coverage-audit ExtensionHandler and the sandboxed coverage-schema
verification unit — split into their own crate so the light Tauri console
and the worker can register them without pulling this heavy runtime. This
crate re-exports them verbatim, so its public API is unchanged; that sibling
is documented on its own page.
Public surface
Section titled “Public surface”Verified against HEAD. This is a curated map, not the full rustdoc.
DeepResearchEntry— the composition the loop engine runs for this kind. This replaced theDeepResearchStrategyimpl that plugged into VMAO’s fixed hook positions: the phase sequencing, cap arithmetic, checkpointing and convergence are the engine’s now, and what stays here is the planner-response parser plus the mapping from config and goal to a definition.DeepResearchConfig— per-launch tuning (synthesis depth, coverage/citation strictness, sub-topic breadth, min-claims floor); every field defaulted, malformed bytes fall back to shipped defaults.deep_research_skills()— the three tier-keyedSkills in stable id order.RESEARCH_WORKER_SKILL_ID/RESEARCH_SYNTHESIZER_SKILL_ID/RESEARCH_VALIDATOR_SKILL_ID— operator-stable skill ids under theio.descoped/namespace.register_deep_research_skills()— upserts the pack into a tenant’sSkillRegistryat boot.deep_research_report_schema()— the JSON schema forDeepResearchReport, pinned to the Rust type by a drift-guard test.DeepResearchReport— the typed report the synthesizer emits (title,sections,summary).register_deep_research_extension_handlers()/register_deep_research_verification_units()— re-exported from the projection sibling; register deep research’s tier-4 consumer surfaces.
The strategy is not called directly — the orchestrator daemon binary wires
it in at boot. It wraps DeepResearchStrategy in a VmaoCoordinator,
registers it in the SessionStrategyRegistry, and registers the skill pack
for the tenant:
use apomesh_vertical_deep_research::{DeepResearchStrategy, register_deep_research_skills};
// Plug the strategy into the VMAO skeleton and register it as a coordinator.let deep_research: Arc<dyn SessionEntry> = Arc::new( VmaoCoordinator::with_strategy(session.clone(), router.clone(), DeepResearchStrategy) .with_prompt_processor_registry(prompt_processor_registry.clone()),);let registry = Arc::new(SessionStrategyRegistry::with_deep_research( generic, evaluator_optimizer, parallel_sample, debate, deep_research,));
// Register the three tier-keyed research skills for the tenant.register_deep_research_skills(skill_registry.as_ref(), &tenant_ctx).await?;To launch a deep-research session against a running stack, see Deep research.
Related
Section titled “Related”- Build: Deep research — launch a session and read its verified report.
- Concepts: Coordination loops
(the
SessionStrategyseam), Agent configuration (the launch-time tuning plane). - Reference: apomesh-orchestrator (the seam it implements), apomesh-orchestrator-bin (the assembly point that registers it).