peerd-preview-v0.2.0
This release restructures peerd's agent. It lands the staged backlog of
open PRs on one verified branch. Three things get better:
- Less context on the main agent. Each environment's operating
details (VM shell quirks, notebook isolation rules, app iframe gotchas,
whether to fetch or render a page) used to sit in the main prompt on
every turn, mostly unused. Now they live with the sub-agent that uses
them and load only when work is handed off. The main agent also drops
the web tools it no longer needs: web_search, read_article, call_api,
and submit_form all fold into the web actor. - Fewer tool calls. actor_list replaces five separate list tools with
one. The agent makes one call and carries one list instead of five.
message_actor's oneShot skips a whole model turn when one round of work
is enough. - Enforced isolation. The tools that operate environments are no
longer on the main agent at all, so even a confused or prompt-injected
agent can't reach them. It has to send a permission-gated message. Page
text, fetch bodies, and command output stay inside the sub-agent and
come back as a quoted, untrusted reply, never as raw text the agent
could be steered by.
Added
- The actor architecture (DESIGN-17 / DESIGN-18). The main agent now
acts as an orchestrator. It opens an environment (a WebVM, a notebook, a
built app, or the open web) and hands the work to that environment's own
sub-agent, called an actor, which holds only that environment's tools.
There is one way to delegate, message_actor. The web actor is the single
entry point for all web work and picks per task between a sessionless
fetch (fetch_url) and driving a real tab. Delegations run in the
background and in parallel. They show up as cards in the chat that you
can watch and stop, and they report their own cost. They survive a
service-worker restart because pending work is written to storage. - API integrations (origin actors). Send a message to a bare origin
like api.github.com and peerd forms a fetch-only, keyless,
origin-locked actor for it. The actor remembers what it learns about
that API across messages. - actor_list. One tool that lists everything you can message: every
WebVM, notebook, app, open tab, and API integration, each with its type
and the handle to pass to message_actor. Replaces five separate list
tools. - message_actor oneShot. Set it when one round of work settles the
request, like a specific command or a read. The actor does the action
and hands back the raw result instead of spending an extra model turn to
restate it. - PDF reading (
read_pdf). pdf.js text-layer extraction in the
offscreen document for born-digital PDFs. Runner-only, with output
wrapped as untrusted web content. - On-device OCR for scanned PDFs. The render→recognize pipeline is
wired (Tesseract).autoescalates when a PDF looks scanned and the
opt-in engine is installed. Fail-closed: it falls back to the text
layer until the driver is vendored and the asset SRIs are pinned. See
docs/PDF-READING.md. - Browser-native VM networking. Full HTTP, multi-host
git clone,
npm/pip/gem install via host-side resolution, and a response cache. - Session robustness. Auto-resume after a service-worker restart, a
per-message session store, and a provider failover chain. - Whole-extension type coverage.
// @ts-checkacross the
extension (100% of eligible files), enforced by a coverage floor. - Verbose VM diagnostics. The
devModesetting wires shell tracing
into the WebVM bridge.
Changed
- The main agent's browser tools are now just actor_list, open_tab, and
message_actor (plus capture). The low-level page tools and the tools
that write to an environment moved to the actors. - WebVM self-heal. When the browser freezes a backgrounded VM tab, peerd
now checks it and reloads it before a command lands on a dead shell. The
terminal output stripping was also fixed so output is not eaten when it
splits across a chunk. - The thinking and boot spinner is now the brand orb ring, one rainbow
sweep masked to a hollow ring. - The prose docs were removed. The code is the spec, and CLAUDE.md is the
short orientation map. - Service worker restructured into per-route modules with injected
per-module state stores; handlers stay thin. - README reordered to lead with install + project conventions; Tesseract
/ pdf.js / Gemma credited in the open-source list.
Fixed
- Settings normalizer now persists the web-write confirm + robustness
keys that were dropped during the route extraction.
Install (preview): Firefox: click the .xpi on this page. Chrome: drag the .crx into chrome://extensions with Developer mode on. Most users want the store packages (see the README). The auto-update feeds are attached here and served at peerd.ai/updates/.