Chrome side-panel assistant backed by a Rust Native Messaging host.
Read docs/v2-plan.md first for architecture and implementation notes.
extension/- WXT + React Chrome extension.native-host/- Rust Native Messaging host.docs/- planning and handoff notes.
cd native-host
cargo check
cargo build --releasecd extension
npm install
npm run generate:icons
npm run typecheck
npm run buildUse the release packager from the repository root:
python scripts\package_release.py --version 0.1.0The script runs extension typecheck/build/zip, runs native-host tests, builds
the release native host, and writes release assets to .output/release/:
brosdk-assistant-v0.1.0-windows.zip- Windows install package.brosdk-assistant-extension-v0.1.0-chrome.zip- standalone extension zip.
The Windows install package contains only extension/chrome-mv3 for unpacked
extension loading. The standalone extension zip is kept as a separate asset to
avoid duplicate extension payloads inside the package.
- Build the native host:
cd native-host
cargo build --release-
Build or run the extension, then load
extension/dist/chrome-mv3or the WXT dev output inchrome://extensions. -
Copy the loaded extension id.
-
Register the native host for that extension id:
native-host\scripts\install-windows.ps1 -ExtensionId <chrome-extension-id>The script writes native-host/native-host-manifest.json and registers:
HKCU\Software\Google\Chrome\NativeMessagingHosts\com.browsersdk.assistant
Reload the extension after registration.
The side panel Settings panel stores these values through the Rust native host:
- browser tools source: MCP Server, Chrome Extension, or Off
- MCP URL, required only when browser tools source is MCP Server
- model API type
- model base URL
- model name
- model API key
- temperature
- workspace folder
On Windows, native-host settings are saved under:
%APPDATA%\BrosdkAssistant\settings.json
Browser tools source controls how the assistant reads or acts on browser pages:
MCP Serveruses the configured MCP URL and is best when a CDP-backed MCP server is running.Chrome Extensionuses extension APIs and injected scripts, so it can read page text, list tabs, snapshot actionable elements, extract links, navigate, click, and type without CDP.Offdisables browser page tools while keeping model chat and workspace tools available.
The Rust host can be tested without Chrome by sending length-prefixed JSON to
stdin. The extension background uses the same framing through
chrome.runtime.connectNative("com.browsersdk.assistant").