Release v1.2.0
Highlights
co browser is now a multi-agent browser CLI: several AI agents can share one persistent, logged-in browser without stepping on each other's pages — each task in its own tab, with a contention guard that teaches a colliding agent the tab lifecycle instead of silently corrupting a page. The daemon layer was hardened against every startup/shutdown race we could find (and reproduce), and agents can now be interrupted gracefully mid-task.
What's Changed
✨ Features
- co browser multi-agent tabs (#195):
-t/--tabtargeting for direct functions anddo;tab open / ls / closelifecycle; per-tab ownership claims with a 120s guard window; loud exit-4 teaching errors on contention; wire-v1 JSON envelope (quote-safe caller/tab names); structured exit codes0/1/2/3/4 - Graceful stop (#188): a client INTERRUPT is honored at the iteration boundary via the existing stop_signal
- Hosted-session safety + Patchright stealth (#186, #189): per-session tabs never tear down each other's context; patchright pinned to 1.61.2 with a stealth-driver integrity check
- Outlook token rotation (#187): refresh tokens on every use and persist the rotation
🐛 Bug Fixes
- Daemon startup race (#197): two terminals' simultaneous first commands could fork two daemons (the loser unlinked the winner's live socket — reproduced in practice). The daemon now holds a lifetime
flockacross probe-and-bind; a pid file distinguishes a busy daemon from a stale socket, so a longdocan never be mistaken for a dead daemon - Ownership cleanup: releasing a tab drops its page, registration, claim, and remembered URL together — a reused tab name starts blank, never on the previous owner's page
- A typo'd command no longer acquires a 120s tab claim;
close_tab()without an argument closes the caller's own tab, never the shared main tab - Clients tell "daemon busy" apart from "daemon did not start", and fail fast on a dead daemon's stale socket
📚 Documentation
- New
docs/co-browser.md: quick start, tab lifecycle, contention model, exit-code contract, everyday-function examples,doguidance, visible-vs-headless, troubleshooting - Managed key onboarding clarified (#159)
Installation
pip install --upgrade connectonionBreaking Changes
None.
Full Changelog: v1.1.0...v1.2.0