feat(search): P3.1 filters and multi-query merge

Native include/exclude domains, time_range, topic, exact_match, min_score,
and up to 4 queries fused with RRF. Honesty notes stay off the Warn/fail
path. Tavily keeps include_answer false and sets auto_parameters false.
Cache key is canonical JSON. CLI flags and skill recipe included.
This commit is contained in:
2026-09-29 15:30:19 -07:00
parent 5c6a4a40ec
commit 8b26776cdd
21 changed files with 1606 additions and 195 deletions
+31 -3
View File
@@ -21,7 +21,9 @@ markdown, JSON → JSON), optionally **digested** for your question by a local m
**what the fleet already knows** attached from Honcho — so you read 1k tokens, not 20k.
`sift search` is the first step for web search. Use `web_search` only if sift is
unreachable. Then `sift fetch` the URLs you need. Restricted callers use the same path.
unreachable. Hermes `web_search` hits `/v2/search` and does **not** get native
filters. Then `sift fetch` / `sift batch` the URLs you need — do not fetch every
hit. Restricted callers use the same path.
## Rule: sift is the explicit first step
@@ -38,8 +40,9 @@ Whenever you need the content of a URL:
## Commands
```bash
# Web search (native). Then sift fetch the URLs you need.
sift search "HBM wafer share 2026" --k 8
# Web search (native). Then score/filter, then batch-fetch — not every hit.
sift search "HBM wafer share 2026" --k 8 --json
sift search "OpenAI" --include-domain openai.com --topic news --time-range month --json
# Page or document → cleaned content. Add --question to get a focused digest.
sift fetch "https://example.com/article" --question "what does it say about HBM wafer share?"
@@ -55,6 +58,31 @@ Useful flags: `--mode digest|clean|raw` (default `digest` when `--question` is g
else `clean`), `--no-context` (skip Honcho lookup), `--recover` (server-side archive ladder
for blocked pages), `--json` (full envelope: content, source, context, sizes, warnings).
## Search
```bash
sift search "<query>" [--k n] [--json]
[--include-domain host]... [--exclude-domain host]...
[--domains-mode restrict|prefer]
[--time-range day|week|month|year]
[--start-date YYYY-MM-DD] [--end-date YYYY-MM-DD]
[--topic general|news|finance]
[--exact-match]
[--min-score 0.5]
[--queries-file path]
```
Product News Tracker shape (official domain + news + last month):
```bash
sift search "product launch" --include-domain openai.com --topic news --time-range month --json
```
**Recipe:** after `sift search --json`, do not `sift fetch` every URL. Drop hits below a
Tavily score you care about (`--min-score`, Tavily's 0–1 scale) or take top N, then
`sift batch submit`. `web_search` is only the fallback when sift is unreachable, and it
still hits `/v2/search` with no filters.
## Batch
When you will read the content of several URLs later (a shortlist to compare), submit them once