- Build the extension:
pnpm ext - Build the native messaging stub:
pnpm build:stub - Go to
chrome://extensions - Enable "Developer mode"
- Click "Load unpacked"
- Select the
extension/dist/folder - Note the Extension ID shown (should be
ddkjmfghdikcpfnemhpecpmiajjhghoi) - Start the Electron app to register the native messaging host
The extension communicates with the backend via Chrome's native messaging API:
Extension → Native Host (thin C binary) → Python stub → Backend (Unix socket)
The native host manifest is automatically installed when the Electron app starts. It registers:
- macOS:
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.think.native.json - Windows:
%LOCALAPPDATA%\Google\Chrome\User Data\NativeMessagingHosts\com.think.native.json - Linux:
~/.config/google-chrome/NativeMessagingHosts/com.think.native.json
The extension uses a stable key in manifest.json so all team members get the same Extension ID: ddkjmfghdikcpfnemhpecpmiajjhghoi
This ID is pre-configured in app/scripts/install-native-host.js.