Lookout is a local-first web instrument for agents and apps: search, fetch, extract, cache with citeable excerpts — no required API key, tiny default install, same API on SDK · CLI · MCP.
Primary competitive anchor: wigolo (learn multi-surface + honesty; do not require multi-GB browser/model warmup).
| Doc | Purpose |
|---|---|
| docs/POSITIONING.md | Strategic positioning |
| docs/COMPETITIVE.md | Peer anchors and wedge |
| docs/EVIDENCE_CONTRACT.md | Evidence = result contract |
| docs/TOOL_SURFACE.md | Few clear tools policy |
| docs/PRODUCT_INDEPENDENCE.md | This repo is SSOT |
| docs/IPPB.md | Independent public product bar |
| docs/PUBLISH.md | npm/git publish status |
| Typical agent web path | Lookout |
|---|---|
| Paid search API keys | Default public adapters, $0/query |
| Multi-GB browser + model warmup | Tiny default — HTML search/fetch/extract |
| Opaque snippets | Cite spans + extract route + warnings |
| One mega-tool | Clear tools: search · fetch · extract · cache (+ advanced crawl) |
Primary competitive anchor: wigolo — learn multi-surface honesty; do not require heavy browser/model installs on the default path.
Evidence is a result contract (spans, routes, warnings) — not a tool named evidence_first.
npm install -g @sylphx/lookout
# brand bin
lookout doctor
lookout search "model context protocol"Claude Code:
claude mcp add lookout -- npx @sylphx/lookoutgit clone https://github.com/SylphxAI/lookout.git
cd lookout
bun install
./bin/lookout tools
./bin/lookout extract # via engine with -- see CLI# CLI
./bin/lookout doctor
./bin/lookout tools
./bin/lookout search "local-first agents"
./bin/lookout fetch https://example.com
./bin/lookout extract https://example.com
./bin/lookout cache stats
./bin/lookout crawl https://example.com --depth 0 --pages 2
# MCP (stdio)
bun src/mcp.ts
# or: ./bin/lookout mcpimport { Lookout } from '@sylphx/lookout'
const lookout = Lookout.create()
const search = await lookout.search('model context protocol')
const page = await lookout.fetch('https://example.com')
const extracted = await lookout.extract({ url: 'https://example.com' })| Tool | Job |
|---|---|
web_search |
Public adapters (DuckDuckGo HTML + Wikipedia + npm registry + HN Algolia), rank fusion, query-term boost, host filters |
web_fetch |
SSRF-safe HTTP(S) fetch, redirects, size limits, cite spans |
web_extract |
Title, description, JSON-LD, tables, spans from HTML/URL |
web_cache (advanced) |
Local disk cache query/stats/clear/prune (LOOKOUT_CACHE_DIR, optional max age) |
web_crawl (advanced) |
Same-origin, depth-limited crawl (not a full-site crawler) |
web_research (advanced) |
Search then fetch/extract top pages with citeable excerpts |
| Var | Purpose |
|---|---|
LOOKOUT_CACHE_DIR |
Cache directory (default ~/.cache/lookout) |
LOOKOUT_CACHE_MAX_AGE_MS |
Optional max age for search/fetch cache hits |
LOOKOUT_LIVE=1 |
Enable optional live network tests |
LOOKOUT_USER_AGENT |
Optional User-Agent override for fetch |
LOOKOUT_FETCH_TIMEOUT_MS |
Optional fetch timeout (ms) |
LOOKOUT_FETCH_MAX_BYTES |
Optional max response body bytes |
- Private IPv4/IPv6, localhost, link-local metadata hosts denied
- Only
http/https - Redirect cap + response size cap
Citra · Iris · Cue · Prism · Spine · Lookout
Company portfolio knowledge (docs only — not a product monorepo): This repository is product SSOT. Sibling agent tools are separate repositories and are not vendored here.
MIT