A composable library for building and evaluating deep-research agents over your own corpus. Sieve is its Boolean search–inspect–fetch method: the agent skims before it reads.
Against the BM25 Search–Visit baseline under identical budgets (k=5, 12,000-token reads, 100 steps). Skimming structure before reading is not an accuracy-for-cost trade: on all three collections it wins on both axes.
| collection | accuracy (baseline → Sieve) | tokens / episode |
|---|---|---|
| HotpotQA (7,343) | 43.7 → 45.3 EM | 19.9k → 13.9k (−30.4%) |
| MuSiQue (2,409) | 26.1 → 29.2 EM | 43.0k → 21.3k (−50.6%) |
| BrowseComp-Plus (830) | 34.7 → 37.2 judge | 68.1k → 46.0k (−32.4%) |
The effect transfers across agent backbones (Qwen-AgentWorld, OpenResearcher), with the largest savings where the baseline burns the most context. Full tables, ablations and statistics are in the paper.
A deep-research agent that reads whole documents burns its context window on text it never needed. Sieve composes four separable stages on top of one shared agent loop, so the agent narrows before it spends.
The agent writes a BQL Boolean query: field-scoped terms (title, section, date…) with AND/OR/NOT, phrases and prefixes that carve the corpus down to candidates.
Candidates are ranked by relevance, with graceful soft fallback when a strict filter over-narrows to zero hits.
Each result is a structure-rich card: title, section headings, matched fields, a query-biased snippet. Enough to judge a document without reading it.
The agent reads only the named section it chose from the card, a slice rather than the whole document, and answers from grounded evidence.
One agent loop drives every condition. Corpora, models, retrievers, and toolsets are pluggable behind five small protocols; the paper's 15+ conditions (BM25, dense, hybrid, Indri, DCI, BQL variants, over documents and code) are one registry line each.
Drop a file, decorate a builder with @register("my_method"), and the evaluation harness picks it up with no edits anywhere else.
A CLI harness with per-step token accounting, LLM-judge scoring, and released corpora. The paper's tables regenerate from one command.
A tiny structured query language with a reference executor and Lucene backend. Parse errors come back as observations the agent can learn from, never crashes.
Every control the paper compares against ships in the box (retrieve-then-read, whole-document visiting, dense retrieval, agentic grep), all under the same loop.
# quickstart pip install -e ".[api]" python run.py dataset=fixture strategy=sieve_bm25 # one episode, no GPU
Ask anything over 102 real BrowseComp-Plus documents. The little agent hops between its tools, the collection wall lights up as documents are surfaced and read, and a live meter counts every token and fraction of a cent. Race Sieve against Search-Visit and watch the paper's claim play out on your screen.
pip install -e ".[demo-live]"
python demo/server.py # → http://localhost:8008
@misc{wang2026sieve,
title = {Search, Inspect, Fetch: Exploiting Boolean Retrieval
for Deep-Research Agents},
author = {Wang, Shuai and Chen, Haodong and Yin, Yu and
Zhuang, Shengyao and Koopman, Bevan and Zuccon, Guido},
year = {2026},
eprint = {2608.02751},
archivePrefix = {arXiv},
primaryClass = {cs.IR},
url = {https://arxiv.org/abs/2608.02751}
}