Skip to content

submit io.pilot.otto v0.20.0 (Otto — remote browser automation)#43

Merged
Alexgodoroja merged 1 commit into
mainfrom
submit-io.pilot.otto
Jun 24, 2026
Merged

submit io.pilot.otto v0.20.0 (Otto — remote browser automation)#43
Alexgodoroja merged 1 commit into
mainfrom
submit-io.pilot.otto

Conversation

@Alexgodoroja

Copy link
Copy Markdown
Collaborator

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

  • CLI adapter, keyless — backend: {type: "cli", command: ["otto"]}. No HTTP key, no managed broker. Free, no per-call limit, MIT.
  • Staged self-contained binary — the otto CLI 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 in install.json; the daemon verifies the hash on stage.
  • 15 methods — 14 curated (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) plus otto.exec passthrough for the full verbatim otto argv. otto.help is 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} errorotto.status is 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 installsha256 OK, installed.
  • Daemon staged the ~64 MB self-contained binary from R2 and supervised the adapter.
  • 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 in docs/samples/otto-ab-cases.json). Vanilla otto vs 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).

@Alexgodoroja Alexgodoroja merged commit 41d419b into main Jun 24, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant