otto
Health Uyari
- No license — Repository has no license file
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Community trust — 63 GitHub stars
Code Basarisiz
- fs module — File system access in .github/workflows/release-please.yml
- exec() — Shell command execution in extension/public/distill-libs/readability.js
- network request — Outbound network request in extension/src/commands/google.com/get-search-results.ts
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
Automate web workflows on real browser tabs without hosting a browser farm.
![]()
Otto
Automate web workflows on real browser tabs without hosting a browser farm.
📖 Docs · 🇺🇸 English · 🇨🇳 简体中文 · 🇩🇪 Deutsch
Otto is a secure remote browser automation platform that lets you control real browser tabs from your CLI or scripts — no browser farm, no infrastructure overhead. Send commands over WebSocket to a relay daemon, which routes them to a Chrome extension that executes actions on live tabs.
Built for developers and automation teams who need real browser context for testing, monitoring, and agent-driven workflows without managing headless infrastructure.
Features
- Real browser tabs, not headless farms — Execute commands on live Chrome tabs via a lightweight extension node. No Docker, no Puppeteer farm, no cloud browser rental.
- Remote CLI control — Send commands from your laptop to a browser running anywhere. The relay handles routing and auth so controller and node don't need to be on the same host.
- Code drives the browser. The LLM just decides what to do. — Otto handles clicks, typing, navigation, and DOM interaction with deterministic code. Your agent only burns tokens on strategy, not on every interaction.
- Secure by default — Token auth, replay protection, per-node ACL grants, and pre-ingress log redaction. Secrets stored in OS keychain.
- Live debugging — Stream logs by
requestIdwithotto logs follow --source all. Correlate relay, controller, and node events in real time. - Network interception — Subscribe to HTTP traffic from managed browser tabs. Stream responses back for inspection, validation, or data extraction.
- Site-scoped command bundles — Author custom, reusable commands for any domain that run inside the extension. Versioned, shareable, testable.
- Agent and CI ready — Non-interactive setup,
--jsonoutput, MCP server, streaming test harness, and agent runtime registration.
Quick Start
Requirements: Node.js 20+, Chrome, and an npm installation.
- Install the CLI globally:
npm install -g @telepat/otto
- Run guided setup:
otto setup
Load the unpacked extension into Chrome (the exact path is printed by
otto setup).Register a controller identity:
otto client register --name "my-laptop" --description "Local controller"
otto client login
- Verify the stack:
otto commands list
For the full walkthrough, see the Installation and Quickstart guides.
Available Commands
Use otto commands list --site <site> to inspect the live command surface for your connected node.
Site Commands
| Site | Available commands |
|---|---|
reddit.com |
getPosts, getUserInfo, sendChatMessage, getChatMessages, commentOnPost |
linkedin.com |
getPosts, commentOnPost |
news.ycombinator.com |
getFrontPage |
google.com |
getSearchResults |
Primitives (Universal)
| Category | Available primitives |
|---|---|
| Tab | open, close, navigate, query |
| DOM extraction | extract_text, extract_markdown, extract_clean_html, extract_distilled_html, extract_html |
| Page | screenshot (viewport or full-page) |
| High-level | otto extract-content [url] (recommended for markdown/HTML extraction) |
Supported Sources
Both Reddit and LinkedIn getPosts commands support configurable sources:
| Site | Source | Description |
|---|---|---|
reddit.com |
home (default) |
Personalized home feed |
reddit.com |
subreddit |
Subreddit listing (requires subreddit param) |
reddit.com |
user |
User's submitted posts (requires username param) |
linkedin.com |
home (default) |
Personalized home feed |
linkedin.com |
search |
Keyword search results (requires keyword param, supports sort and t) |
Reddit getPosts supports sort (best, hot, new, top, rising) and t (hour, day, week, month, year, all) on home and subreddit sources. LinkedIn getPosts supports sort (top, latest) and t (day, week, month) on search source.
For command payloads, behavior notes, and examples, see the Commands Reference.
Requirements
- Node.js 20+
- npm 10+
- Chrome (latest stable)
- macOS, Linux, or Windows
How It Works
Controller (otto CLI / script)
| WebSocket (authenticated)
v
Relay daemon (:8787)
| WebSocket (authenticated, node)
v
Extension node (Chrome)
| chrome.tabs / chrome.scripting
v
Browser tab (managed, site-scoped)
- Controller sends command envelopes over WebSocket to relay.
- Relay authenticates, authorizes by action scope, and routes by
targetNodeId. - Node executes the action and returns terminal
resultorerror. - Relay forwards terminal outcome back to the originating controller.
Execution guarantees:
targetNodeIdis required for all commands.- Per-tab execution is serial; cross-tab execution is parallel.
- Replay protection is enforced (
replayNonceplus timestamp window). - Sensitive fields are redacted before log persistence and streaming.
Using With AI Agents
Otto is designed for headless automation and agent-driven workflows:
- Non-interactive setup —
otto setup --non-interactiveemits deterministic JSON output with no TTY prompts. - Machine-readable output — Append
--jsonto most CLI commands (otto commands list,otto test,otto logs list) for structured consumption. - Programmatic API — The relay exposes HTTP and WebSocket endpoints for direct integration. See the Protocol docs for message schemas.
- Live log streaming —
otto logs follow --source allstreams structured events byrequestIdfor real-time agent debugging. - Agent docs — For Agents provides automation runbooks, command development guides, and curl snippets.
Security And Trust
- Controller authentication uses client-secret token exchange; secrets are stored in the OS keychain when available.
- Node-side ACL grants are required before a controller can route commands to a given node.
- Replay protection and timestamp windows prevent command replay.
- Sensitive fields are redacted from logs and streams before persistence.
- Otto never automates credential submission; users authenticate manually and rerun.
To report a security issue, open a private report through the repository security flow.
Documentation And Support
- Documentation site
- Installation
- Quickstart
- Architecture
- Protocol
- CLI reference
- Security
- For Agents
- Repository
- npm package
Contributing
Contributions are welcome. See Development for local setup, build commands, and test workflows.
License
MIT. See LICENSE.
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi