This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Summary
AI summaryBroad release touches Post-action change_report, Multi-agent runtime, run_task lifecycle hardening, and UI / observability.
Full changelog
Milestone: Multi-Agent Tab Concurrency
The Chrome extension now hosts a full multi-agent contract on top of the existing single-agent surfaces (popup, sidepanel, autopilot). MCP clients can run concurrently against the same browser without stepping on each other.
What's new
Multi-agent runtime
- Per-session
agent_idminted viacrypto.randomUUID(). MCP callers cannot supply IDs; the extension issues them on first dispatch. - Configurable concurrency cap (default 8, range 1-64), persisted to
chrome.storage.localunderfsbAgentCap. - Tab-ownership gate on every MCP dispatch with typed errors:
TAB_NOT_OWNED,TAB_INCOGNITO_NOT_SUPPORTED,TAB_OUT_OF_SCOPE,AGENT_CAP_REACHED,NO_OWNED_TAB,AMBIGUOUS_TAB. - Per-bindTab
ownership_token(fresh UUID per binding) defends against Chrome tab-ID reuse. - Forced-new-tab pooling via
chrome.tabs.onCreated + openerTabId(pool tabs don't count against cap). - Lock release on task end, session end, 10s grace after MCP disconnect, or user closes the tab. No idle timeout.
- Service-worker eviction recovery: registry mirrors to
chrome.storage.session; on wake,hydrate()reconciles againstchrome.tabs.query()and reaps ghosts before serving any request.
New tools
backbrowser-history tool: ownership-gated, returns{ status, resultingUrl, historyDepth }where status is one ofok | no_history | cross_origin | bf_cache | fragment_only.pageshow-based 2s settle verification; cross-origin BF-cache resilience reuses the v0.9.11 path. Background-tab compatible.
run_task lifecycle hardening
- Returns when automation actually completes (via
fsbAutomationLifecycleBus), not at an arbitrary timer ceiling. - 600s safety net (was 300s).
- 30s heartbeat ticks via MCP
notifications/progresscarryingalive,step,elapsed_ms,current_url,ai_cycles,last_actionunderparams._meta-- MCP host clients no longer hit per-tool timeouts on long tasks. - Lifecycle persisted in
chrome.storage.sessionkeyed bytask_id. On SW eviction, server emitspartial_outcomewithdisposition: 'sw_evicted'if the bridge can't recover.
Post-action change_report
- Every action tool returns a compact
change_reportdescribing what mutated, so the agent doesn't need to follow up withread_page/get_dom_snapshot. - Shape:
{ url: { before, after, changed }, title_changed, dialogs_opened, nodes_added, nodes_removed, attrs_changed, inputs_changed, focus_shift, mutation_count, settle_ms, truncated }. Cross-origin emits URL-only withcross_origin: true. - MutationObserver scoped to the nearest stable ancestor, with noise filters (style-only, animation classes, scroll position, aria-hidden subtrees, sub-3-char text). 2400-byte cap (~600 tokens) with top-N truncation.
- Read-only/info/wait tools EXCLUDED.
scroll,scroll_at,hover,focusopt out. - Global toggle: Advanced Settings -> "Return action change reports" (default ON). When OFF the dispatcher skips instrumentation entirely.
- Performance budget: <5ms observer overhead, <10ms serialization, <25ms p95 added latency.
Agent-scoped tab resolution
- New
extension/utils/agent-tab-resolver.jsis the single resolution chokepoint for read tools, visual session, and action tools. - Branches: legacy popup/sidepanel/autopilot use active tab. Non-legacy MCP agents resolve via registry: 1 owned tab -> use it, 0 ->
NO_OWNED_TAB, 2+ ->AMBIGUOUS_TAB. - Resolved tabId folded back into
routeParamsso the ownership gate fires for every non-creating MCP tool call. - Optional
tab_idadded to all 6 read tools,start_visual_session, and 35 action-tool input schemas. open_tabnow defaults to background. Foreground requires explicitactive: true.
UI / observability
- Background-tab badge extended with short
agent_idsuffix on overlay and dashboard mirror (e.g.Claude / agent_a3f1). - Sidepanel + popup show read-only "owned by Agent X" chip on owned tabs.
- Advanced Settings: Agent Concurrency card (numeric input 1-64, default 8, current-active counter, helper text, Reset button) with 3-layer numeric clamping.
Background-tab execution
- Audited 25+ tools for
chrome.tabs.update({active: true})andchrome.windows.update({focused: true}). Tools that need focus opt in via_forceForeground. Defaultfalse; onlyswitch_tabopts in. webNavigation.onCommitteddetects user-initiated navigation on agent-owned tabs and emits a pause signal so in-flight automation doesn't race manual user action.
Install
Available on the Chrome Web Store:
https://chromewebstore.google.com/detail/badgafnfchcihdfnjneklogedcdkmjfk?utm_source=item-share-cp
Or load unpacked: download fsb-extension-v0.9.60.zip below, unzip, and load the extension/ directory via chrome://extensions -> Developer mode -> Load unpacked.
Compatibility
- Chrome 88+ / Chromium-based browsers (Edge, Brave, Opera, etc.)
- Pairs with
[email protected](released separately)
Full per-feature changelog: see mcp/CHANGELOG.md.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About LakshmanTurlapati/FSB
All releases →Related context
Beta — feedback welcome: [email protected]