submit io.pilot.otto v0.20.0 (Otto — remote browser automation)#43
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
io.pilot.otto v0.20.0 — Otto (remote browser automation)
Submits Otto by Telepat: drive real Chrome tabs from an agent — extract page content (markdown/HTML/text), run registered site commands (Reddit/LinkedIn/Hacker News/Google), screenshot pages, and inspect relay/node status — over a relay to a browser extension, no headless farm.
Adapter shape
backend: {type: "cli", command: ["otto"]}. No HTTP key, no managed broker. Free, no per-call limit, MIT.ottoCLI is a bun-compiled, self-contained executable (runs with no node). Shipped for 4 platforms (darwin + linux, arm64 + amd64), each hosted on the Pilot R2 artifact registry and sha256-pinned ininstall.json; the daemon verifies the hash on stage.otto.status,otto.commands,otto.extract,otto.extract.format,otto.screenshot,otto.test,otto.cmd,otto.logs,otto.logs.status,otto.client.status,otto.authcode,otto.extension.info,otto.agent.status) plusotto.execpassthrough for the full verbatim otto argv.otto.helpis auto-generated, so the live surface is 15.Prerequisite stack
Page commands (
otto.extract/otto.screenshot/otto.test/otto.cmd) need the full stack up: a running relay (otto start), Chrome with the Otto extension loaded and paired as a node, and a logged-in controller. Until that's up they return a structured{stdout,stderr,exit}error —otto.statusis the right preflight. This mirrors how a cluster-backed app behaves without its cluster.Local end-to-end verification
Ran the full install → stage → run path against a local signed catalogue:
appstore install→ sha256 OK, installed.otto.exec {"args":["--version"]}→{"stdout":"0.20.0","exit":0}— the staged binary actually ran.otto.help→ clean envelope, 15 methods.otto.status/otto.client.status→ clean structured JSON (relay not running / not logged in, as expected with no stack).A/B report
See
docs/samples/ab-report-otto.html(cases indocs/samples/otto-ab-cases.json). Vanillaottovs the Pilot adapter, 4 cases; the 3 stack-independent cases match byte-for-byte. Adapter overhead is the small fixed IPC + supervisor cost (a few hundred ms per call).