Skip to main content

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.

Terminal

Python 3.11+ License

Docs · Website

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

omniscout-0.3.1.1.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

omniscout-0.3.1.1-py3-none-any.whl (274.7 kB view details)

Uploaded Python 3

File details

Details for the file omniscout-0.3.1.1.tar.gz.

File metadata

  • Download URL: omniscout-0.3.1.1.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

Hashes for omniscout-0.3.1.1.tar.gz
Algorithm Hash digest
SHA256 2f6e72aa299432da254b5ac16e7a8e96cf3002c1a4b2d2f5db485ac25b462d3a
MD5 09425c10cef3e115ac231d267fcecb2d
BLAKE2b-256 1d491e091f1ec4c91f13447904aae56300783605351b07a4fbd77dbae389d58d

See more details on using hashes here.

Provenance

The following attestation bundles were made for omniscout-0.3.1.1.tar.gz:

Publisher: pypi-publish.yml on sriramramnath/omniscout

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file omniscout-0.3.1.1-py3-none-any.whl.

File metadata

  • Download URL: omniscout-0.3.1.1-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

Hashes for omniscout-0.3.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 338bdc6108ce56fbb0ef6dffad330e7a43e146573afb846e0cf2910de0e02d28
MD5 621922a5b4da686a2e371cefd1e48a01
BLAKE2b-256 a45306b16131250f5ce10e77c0f8425ba3fa70c671f9e30e4d6527d33ba6ebd0

See more details on using hashes here.

Provenance

The following attestation bundles were made for omniscout-0.3.1.1-py3-none-any.whl:

Publisher: pypi-publish.yml on sriramramnath/omniscout

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page