arXiv 2608.02751 · cs.IR

Search. Inspect. Fetch.

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.

1ielab, The University of Queensland 2Australian e-Health Research Centre, CSIRO
SieveBoolean search · fetch sections
$0.00000 · 0 tok · 0 steps
warming up…
🗂️
Inspect
📑
Fetch §
✍️
Answer
💭
this board is driven by a real recorded agent run · not a video
Headline results

Higher accuracy, on a third to half the tokens

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.

−32.4%
tokens per episode on BrowseComp-Plus, at +2.5 judge points
−50.6%
tokens on MuSiQue, at +3.1 EM. The saving grows where the baseline reads most
3/3
collections where Sieve improves accuracy and cuts cost
collectionaccuracy (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.

The method

Skim the structure, read only what matters

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.

01

Filter

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.

02

Rank

Candidates are ranked by relevance, with graceful soft fallback when a strict filter over-narrows to zero hits.

03

Inspect

Each result is a structure-rich card: title, section headings, matched fields, a query-biased snippet. Enough to judge a document without reading it.

04

Fetch

The agent reads only the named section it chose from the card, a slice rather than the whole document, and answers from grounded evidence.

Sieve architecture: filter, rank, inspect, fetch stages over one agent loop.
The four stages compose over one shared agent loop; each is swappable on its own.
The library

Bring the corpus, model and strategy; the harness is done

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.

🧩

Add a method in one decorator

Drop a file, decorate a builder with @register("my_method"), and the evaluation harness picks it up with no edits anywhere else.

📚

Real evaluation, reproducible

A CLI harness with per-step token accounting, LLM-judge scoring, and released corpora. The paper's tables regenerate from one command.

🔎

BQL: Boolean, forgiving

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.

⚔️

Baselines included

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.

SkimSearchAgent architecture: interchangeable corpora, models, strategies, retrievers and evaluators around one research-agent loop.
One agent loop; corpora, models, strategies, retrievers and evaluators all swap independently around it.
# quickstart
pip install -e ".[api]"
python run.py dataset=fixture strategy=sieve_bm25   # one episode, no GPU
The playground

Watch it think, with your own questions

localhost:8008 pre-recorded replay · the real thing runs on your machine
Q
$0.00000 · 0 tok · 0 ch read
💭

The live demo races two strategies on your question.

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
The team

Built at ielab

1ielab, The University of Queensland 2Australian e-Health Research Centre, CSIRO
Citation

If you use Sieve or the library

@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}
}