Librarian
The "external grep" sibling of Explore. Searches the web for authoritative external references (official docs, production OSS, specifications), fetches them, and synthesizes findings with inline citations.
Designed to be delegated to by Sisyphus — typically
fanned out 1-3 in parallel alongside explore agents whenever an unfamiliar
library, API, or framework is involved.
Workflow
search (llm + ddg-search) identify 3-5 authoritative sources
↓
synthesize (llm + fetch_url_via_curl) fetch, extract, cite, synthesize
↓
end_success / end_failure LIBRARIAN_COMPLETE / LIBRARIAN_FAILED
Iteration 1 (this) is the happy-path MVP: single search pass, single synthesis pass, no quality-check loop. Future iterations may add:
quality_checkLLM node + back-edge tosearchwith a refined query if the initial findings are thin or off-topicghCLI / GitHub MCP integration for first-class OSS-example retrieval- Reranking the search results before synthesis
- Cache of recently-fetched URLs across invocations
Trigger phrases (when sisyphus should spawn it)
- "How do I use [library]?"
- "What's the best practice for [framework feature]?"
- "Why does [external dependency] behave this way?"
- "Find examples of [library] usage"
- Any unfamiliar npm/pip/cargo/crate package surfaced by the user
Source priority
- Official documentation (docs.X.org, readthedocs.io, MDN, vendor docs)
- Production OSS examples (1000+ stars on GitHub)
- Specifications (RFCs, W3C, ECMA, IEEE)
- Credible secondary references — only when 1-3 are sparse
Explicitly excluded: random blog posts, marketing pages, stale tutorials, "what is X" beginner articles (unless that is literally the user's question).
Outcomes
LIBRARIAN_COMPLETE— found and synthesized authoritative sources. Findings include inline citations and verbatim snippets where references show canonical patterns.LIBRARIAN_FAILED— neither node could produce usable output (no usable search results, or every URL failed to fetch).
Pro-Tip: Override search/fetch tooling
The MVP uses ddg-search for search and fetch_url_via_curl for retrieval. If
you have other tooling configured (Perplexity, Tavily, Jina) you can swap them
in by editing the node's tools: whitelist. Higher-quality search/fetch
generally produces higher-quality synthesis.