OmniScout CLI: local-first multi-browser automation, semantic search, and research for AI agents
Project description
OmniScout
Local-first browser automation, semantic search & research for AI agents.
No cloud APIs. No hosted sessions. No lock-in. Just a fast, local HTTP daemon in your terminal.
pip install omniscout
omniscout install --skill
omniscout install --probe-0-mini
What It Is
OmniScout is a self-contained terminal-native interface for the web. Think of it as a local browser brain for AI agents — enabling them to search, browse, extract structured data, and remember everything without ever leaving your laptop.
A long-lived daemon at 127.0.0.1:7720 provides sub-second browser actions, a warm embedding model, and a local vector store. It communicates entirely over HTTP/JSON and works with your existing Chromium browser (Chrome, Brave, Edge, Vivaldi, etc.).
Why OmniScout?
| Feature | Status |
|---|---|
| Local First | No API keys, no remote browsers, no data leaving your laptop |
| Semantic Search | Searches the web and re-ranks results using local sentence-transformers embeddings |
| Long-lived Daemon | Sub-second per-action latency with persistent sessions |
| Real Browser | Drives your real Chrome/Brave; keeps cookies, logins, and extensions |
| Semantic Memory | Remember and search your browsing history with vector embeddings |
| Rich Extraction | Pull structured data from any URL with zero LLM calls |
| Agent-Ready | Every command speaks JSON — hook it up to any AI framework |
Install
# One-liner: installs pip, browser, models, and agent skill
curl -fsSL https://omniscout.xyz/install.sh | bash
Quick Start
After running all the commands, just type /omniscout into any agent—such as Codex, Claude, Code, Cursor, or any other coding agent—and type away in natural language. It will use Omniscout to search, extract, and close the browser, with no technical knowledge needed. That’s it.
If you want to know how it works and how to use it manually without AI agents, you can read below.
Core Commands
1. Search & Research
# Semantic web search
omniscout search "state of local AI agents 2026"
# Summarized one-sentence answer (no LLM)
omniscout answer "Who is the president?" --depth balanced
# Full research pipeline (search → crawl → extract → rerank → summarize)
omniscout research "emerging quantum computing startups 2026"
2. Browser Automation
# Navigate and identify elements with accessibility tree refs
omniscout browser navigate https://news.ycombinator.com
omniscout browser snapshot --refs-only
omniscout browser click '@e3'
# Screenshots (full page, delayed, or centered)
omniscout browser screenshot --full-length --out state.png
omniscout browser screenshot --delay 2 --out after-load.png
# Capture network and console logs
omniscout browser network list
omniscout browser console tail
3. Content Extraction
# Clean Markdown or structured JSON from any page
omniscout extract https://example.com
omniscout extract -q "SpaceX founder" --format structured --fields founder
# Exa-style schema-driven extraction (no LLM)
omniscout extract https://stripe.com/pricing \
--schema-inline '{"type":"object","properties":{"pricing":{"type":"string"}}}'
4. Knowledge Graphs
# Map a company or person into a structured Unicode tree
omniscout graph "Cursor" # search web and extract
omniscout graph "Cursor" -w cursor.com --data # crawl site directly
omniscout graph "Cursor" --llm # optional LLM overlay on evidence
5. Browser Memory
# Remember and semantically search your browsing history
omniscout remember https://example.com/blog/post
omniscout memory "neural networks in production"
Architecture
The tool is split between a thin CLI (Typer + Rich) and a robust HTTP daemon that handles the heavy lifting.
┌──────────────────┐ ┌────────────────────────────────────┐
│ OmniScout CLI │ ┌──────────────────────────────────┤ OmniScout Daemon │
│ (typer + rich) │-------│ HTTP POST /command │ (127.0.0.1:7720) │
└──────────────────┘ │ │ ┌─ Playwright Backend │
│ │ │ ├─ Extension Backend (opt-in)│
v │ │ └─ Embed Service (warm model)│
Search / Extract -------│ └────────────────────────────────────┘
/ Research engines ----─┘
For contributors:
cli/omniscout/
app.py # Typer root
commands/ # CLI subcommands
daemon/ # HTTP server, backends, replay
engines/ # browser, search, research, extractor, crawler
store/ # SQLite cache, sessions, workflow, memory
models.py # Pydantic JSON contracts
JSON & Agent Integration
Every command speaks JSON. Set OMNISCOUT_JSON=1 and stdout becomes a structured payload.
export OMNISCOUT_JSON=1
omniscout search "robotics simulators"
Or talk to the daemon directly:
curl -X POST http://127.0.0.1:7720/command \
-H 'Content-Type: application/json' \
-d '{"action":"navigate","args":{"url":"https://example.com"},"session":"demo"}'
Configuration
Create a config.toml in your config directory (e.g. ~/.config/omniscout/config.toml on Linux, ~/Library/Application Support/omniscout/config.toml on macOS):
default_source = "ddg"
search_limit = 10
research_results = 8
request_throttle_seconds = 1.0
embedding_model = "sentence-transformers/all-MiniLM-L6-v2"
browser = "chrome" # chrome | edge | brave | vivaldi | opera | arc | chromium | custom
# browser_executable = "/path/to/browser" # only needed for 'custom'
Or configure via CLI:
omniscout settings browsers
omniscout settings set browser brave
omniscout settings show
Environment Variables
| Variable | Purpose |
|---|---|
OMNISCOUT_JSON=1 |
Force JSON output on every command |
OMNISCOUT_DAEMON_AUTO_START=0 |
Don't auto-start the daemon |
OMNISCOUT_DAEMON_PORT |
Daemon port (default: 7720) |
OMNISCOUT_DATA_DIR |
Override the default data directory |
OMNISCOUT_BROWSER |
Browser ID (overrides config) |
OMNISCOUT_EMBED_LOCAL_ONLY=0 |
Allow runtime Hugging Face fetches |
TWOCAPTCHA_API_KEY |
CAPTCHA solver API key |
Legacy HARNESS_* equivalents accepted.
On-disk State
| Path | Purpose |
|---|---|
profiles/ |
Persistent Chrome user-data-dirs |
qdrant/ |
Embedded vector index |
models/sentence-transformers/ |
Prefetched embedding model |
memory.sqlite |
Browser memory (visits + notes) |
sessions.sqlite |
Long-lived browser session registry |
cache/pages/ |
Content-hashed HTML cache |
daemon/ |
PID, port, logs, action history, session restore |
License
Modified MIT — see LICENSE. Products built on OmniScout must prominently display Powered by OmniScout on the user interface.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file omniscout-0.3.1.2.tar.gz.
File metadata
- Download URL: omniscout-0.3.1.2.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a7ce0399ab8b46b9f05bb71fb717c6d0cc260ffba935aaa217ce626f35fc273
|
|
| MD5 |
c96ad54da6845b87229de7d723dbd92e
|
|
| BLAKE2b-256 |
e2de900aaf582f04f7095b5b89726fbaee67d5511033ce356d52df9e18e6b25f
|
Provenance
The following attestation bundles were made for omniscout-0.3.1.2.tar.gz:
Publisher:
pypi-publish.yml on sriramramnath/omniscout
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
omniscout-0.3.1.2.tar.gz -
Subject digest:
7a7ce0399ab8b46b9f05bb71fb717c6d0cc260ffba935aaa217ce626f35fc273 - Sigstore transparency entry: 2078484861
- Sigstore integration time:
-
Permalink:
sriramramnath/omniscout@730975d3418b19e564ab1e56bb55936f27251afc -
Branch / Tag:
refs/heads/main - Owner: https://github.com/sriramramnath
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@730975d3418b19e564ab1e56bb55936f27251afc -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file omniscout-0.3.1.2-py3-none-any.whl.
File metadata
- Download URL: omniscout-0.3.1.2-py3-none-any.whl
- Upload date:
- Size: 274.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1902b4f96cec4640a186ce58e5103970444b6bf491640d5116de5cff7e4ab3e
|
|
| MD5 |
ed5a9230a213b7b02e47632d020649f8
|
|
| BLAKE2b-256 |
c235ccdbccae06f552be642aa15140be330133a0e97d537a1e8b47a4d052cc3d
|
Provenance
The following attestation bundles were made for omniscout-0.3.1.2-py3-none-any.whl:
Publisher:
pypi-publish.yml on sriramramnath/omniscout
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
omniscout-0.3.1.2-py3-none-any.whl -
Subject digest:
d1902b4f96cec4640a186ce58e5103970444b6bf491640d5116de5cff7e4ab3e - Sigstore transparency entry: 2078484938
- Sigstore integration time:
-
Permalink:
sriramramnath/omniscout@730975d3418b19e564ab1e56bb55936f27251afc -
Branch / Tag:
refs/heads/main - Owner: https://github.com/sriramramnath
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@730975d3418b19e564ab1e56bb55936f27251afc -
Trigger Event:
workflow_dispatch
-
Statement type: