Skip to content

v0.209.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 06:28
· 128 commits to main since this release
d151ed7

protoAgent v0.209.0

Remote devices. Use protoAgent from your phone or tablet: pair by typing a short code, reach the agent over Tailscale HTTPS or your own public HTTPS address, and move a phone between networks without pairing again. Paired phones get a narrower access scope, and their tokens expire and rotate. Start with the new guide, Use protoAgent on your phone or tablet.

Upgrading from v0.208.0

  • New phone and tablet pairings are Limited. They can use the whole console, but can't pair devices or agents, change plugins, MCP servers, delegates, lifecycle hooks or ACP agents, read or change secrets and OAuth, restart the agent, or change auth, network, device or sandbox settings. Those requests return 403 device_scope. Phones paired before this release keep full access, labelled "Full access" in Settings ▸ Devices, with a Limit action.
  • Limited phones' tokens expire after 30 unused days (devices.idle_ttl_days, 0 = never) and rotate weekly while in use. Full-access tokens, agent hubs and the shared bearer never expire.
  • Wrong pairing codes no longer cancel pending codes. Repeated misses now get 429 with Retry-After (5 per client per 5 minutes, 30 per network class per minute), and the code isn't checked while throttled.
  • Behind a reverse proxy? Set the new network.trusted_proxies so the agent believes the proxy's X-Forwarded-For / X-Forwarded-Proto. Loopback is always trusted, and an existing FORWARDED_ALLOW_IPS is still honoured.
  • Open-mode instances now refuse *.ts.net Host headers unless PROTOAGENT_ALLOW_OPEN=1, so tailscale serve can't expose an instance with no token. Turning on Tailscale HTTPS from Devices requires an auth token first.
  • Picking an address in Settings ▸ Devices binds that interface (plus loopback) instead of every interface. Restart now applies it, except on a --host-pinned launch, where the panel shows the command to run.
  • network.public_console_url (new): declare your own HTTPS origin, for example a Cloudflare Tunnel, to pair phones without Tailscale. The agent refuses to start with it set and no auth token, and PROTOAGENT_ALLOW_OPEN does not override that. See Exposing protoAgent for the Cloudflare Tunnel plus Access recipe and the proxy requirements.
  • Pairing codes are now ten characters (XXXXX-XXXXX, valid for five minutes) for both phones and agents. /api/pairing/start on a --ui none instance returns 409 no_console.
  • /sw.js is gone. Nothing registered it. The console still installs to the home screen.
  • The secrets connection test no longer reuses the saved client secret when the form changes the host or provider; type the secret to test a new destination.
  • Known gap: removing a phone closes its open streams and WebSockets within about 12 seconds, except the terminal plugin's session and ticket-based sockets on fleet members reached through a hub, which only stop reconnecting. Tracked in #4362.

Added

  • Pair a phone by typing a short code (#4345). Settings ▸ Devices shows a code beside the QR, and the phone types it under "Have a pairing code?". protoagent pair --device prints the code, the addresses and a terminal QR for headless boxes.
  • Device identity (#4350). Rename devices inline, see which row is "This device", and get "Paired as …" on the phone. Device tokens live under their own browser key, so pairing never overwrites an operator token.
  • Tailscale HTTPS (#4351). Serve the agent at https://<machine>.<tailnet>.ts.net with tailscale serve from Settings ▸ Devices, keeping it on localhost. Pairing addresses lead with it.
  • Limited scope for paired phones (#4355). See Upgrading.
  • Pair a phone without Tailscale (#4357). "Phone without Tailscale" in Devices once network.public_console_url is set, with a standing warning to put Cloudflare Access in front.
  • Phone tokens expire and rotate (#4358). A stolen old token used after its replacement revokes the device and writes an audit entry. Removing a device closes its open streams within one keepalive.
  • Move a phone between networks in one tap (#4359). Settings ▸ Devices ▸ Move… hands the phone to another address as the same device. When its home address stops answering, a banner lists the others and what each needs.
  • Technical Writer archetype (#4338). An opt-in persona and six skills for source-grounded documentation, with a companion bundle.

Changed

  • Tablet layout (#4340). On a touch tablet in portrait, the right panel floats over a dimmed chat and never opens by itself; tabs, small buttons and the divider get finger-sized hit areas.
  • The desktop app opens right away with a fleet (#4348). The hub serves immediately and boots autostart members in the background, three at a time.
  • Chat session switcher (#4318). When the chat rail is narrow, the switcher opens a Design System menu instead of a native select. @protolabsai/ui and ui-css are at 0.68.2.
  • Claim throttle (#4354) and no service worker (#4337). See Upgrading.
  • Marketing site (#4343, #4349). Refreshed around current workflows, with real product captures.

Fixed

  • A removed phone's open WebSockets close (#4361). Core and plugin sockets, the browser view and the hub's fleet proxy. See the known gap above.
  • Secrets connection test (#4356). See Upgrading.
  • The Friction log no longer polls every fleet member when opened (#4344).
  • Documentation search prefers current task guides (#4322).
  • Chart artifacts use the design system 0.13.0 theme (#4363). Axis labels truncate at 120 px, matching the console.
  • Marketing screenshots zoom in place, and the zoom is keyboard-accessible (#4352, #4353).

Docs

  • One phone-and-tablet guide (#4360), plus a task-first reorganisation of the docs: get started, everyday chat and memory, automation, integrations, builders and operators, deployment, and media upkeep (#4316, #4317, #4321, #4323, #4328–#4331, #4333, #4347).
  • ADR 0121, device pairing over an operator-supplied public URL (#4342).

What's Changed

  • feat: web: adopt the DS Menu-based responsive TabBar switcher in the Chat rail — bump @protolabsai/ui + ui-css to ^0.68.2 (Refs protoContent#609) by @mabry1985 in #4318
  • docs(roadmap): rotate v0.161–v0.208 headline work into Shipped by @mabry1985 in #4334
  • chore(devices): drop the unregistered service worker; ADR 0113 accepted; pairing doc drift by @mabry1985 in #4337
  • feat: add Technical Writer archetype and documentation workflow skills by @mabry1985 in #4338
  • docs(adr): 0121 device pairing over an operator-supplied public URL (#4336 S6) by @mabry1985 in #4342
  • Add docs media inventory and reusable publishing slots by @mabry1985 in #4333
  • docs(marketing): refresh the site around current app workflows by @mabry1985 in #4343
  • docs(readme): re-shot Atlas plugin tile without the React Flow badge by @mabry1985 in #4347
  • feat(devices): pair a phone by typing a short code (#4336 S2) by @mabry1985 in #4345
  • fix(friction): opening the log no longer fans out to every fleet member by @mabry1985 in #4344
  • perf(fleet): the hub serves while autostart members boot, three at a time by @mabry1985 in #4348
  • feat(console): tablet layout (#4336 S5) by @mabry1985 in #4340
  • Add reviewed Brandlaunch product media to the marketing site by @mabry1985 in #4349
  • feat(devices): rename, "this device", pairing confirmation, separate device token (#4336 S3) by @mabry1985 in #4350
  • Zoom marketing screenshots on the same page by @mabry1985 in #4352
  • fix(marketing): make screenshot zoom keyboard accessible by @mabry1985 in #4353
  • feat(devices): Tailscale HTTPS addresses, bind the picked interface, restart from the panel (#4336 S4) by @mabry1985 in #4351
  • feat(devices): claim throttle replaces the pairing lockout (#4336 S7.1) by @mabry1985 in #4354
  • fix(secrets): connection test keeps the saved secret with its saved host by @mabry1985 in #4356
  • feat(devices): paired phones get a device scope that can't change who gets in (#4336 S7.2) by @mabry1985 in #4355
  • feat(devices): pair a phone without Tailscale through your own public URL (#4336 S7.4) by @mabry1985 in #4357
  • feat(devices): phone tokens expire when idle and rotate weekly (#4336 S7.3) by @mabry1985 in #4358
  • feat(devices): one home origin per phone, with a one-tap move between networks (#4336 S7.5) by @mabry1985 in #4359
  • fix(devices): a revoked phone's open WebSockets close too (#4336) by @mabry1985 in #4361
  • docs(devices): one phone-and-tablet journey; roadmap: remote devices shipped (#4336 S8) by @mabry1985 in #4360
  • fix(artifact): re-vendor design 0.13.0; changelog fragments cite their PRs by @mabry1985 in #4363

Full Changelog: v0.208.0...v0.209.0