@sylphx/lookout
v0.2.1
Published
Lookout — local-first web instrument for agents. Search, fetch, extract, cache with citeable excerpts. No required API key. SDK · CLI · MCP.
Readme
Lookout
Zero-config (no install)
npx -y @sylphx/lookoutStarts the MCP server on stdio. CLI:
npx -y @sylphx/lookout doctor
npx -y @sylphx/lookout search "local first agents"The web from your machine.
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).
Product docs
| 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 |
Agent skill surface
Why Lookout (vs multi-GB “local web” stacks)
| 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.
Install (30 seconds)
npm install -g @sylphx/lookout
# brand bin
lookout doctor
lookout search "model context protocol"Claude Code:
claude mcp add lookout -- npx @sylphx/lookoutInstall (dev)
git 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 mcpSDK
import { 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' })Tools (clear, not merged)
| 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 |
Environment
| 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 |
Safety
- Private IPv4/IPv6, localhost, link-local metadata hosts denied
- Only
http/https - Redirect cap + response size cap
Family
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.
License
MIT
