--remote-debugging-port flag. Without that flag, the daemon has no channel into the V8 heap and cannot probe JavaScript apps at all. This guide walks you through launching Chrome correctly, verifying the connection, and keeping the setup persistent across reboots.
Why Chrome Needs the Remote Debugging Port
When the--remote-debugging-port=9222 flag is present, Chrome opens a local HTTP server on that port that speaks the CDP wire protocol. NSP’s V8 probe connects to this server to:
- Enumerate open browser tabs and identify supported apps by URL pattern
- Inject the
__axon_aso_snapshotJavaScript snippet to read the application’s data model from the V8 heap directly (the fast-path, returning in 5–50 ms) - Fall back to a full heap snapshot when the fast-path is unavailable
GET /substrate/v1/apps.
Launch Chrome with Remote Debugging
1
Close all existing Chrome windows
Make sure every Chrome window is fully closed before proceeding. Check your system tray as well — Chrome sometimes continues running in the background after the last visible window closes. Right-click the Chrome icon in the tray and choose Exit if it appears.
2
Relaunch Chrome with the debugging flag
Open a new terminal and run one of the commands below. Both launch the same Chrome binary; choose whichever shell you prefer.Chrome will open a normal browser window. The debugging port is active as long as this Chrome process is running.
3
Open a supported app in a tab
Navigate to any NSP-supported JavaScript app in one of your Chrome tabs. Supported apps include:
- Gmail —
mail.google.com - Slack —
app.slack.com - VS Code (web) —
vscode.dev - Notion —
notion.so - GitHub —
github.com - HubSpot, Salesforce, Shopify, and most Electron apps
4
Verify NSP detects the app
Query the apps endpoint to confirm the daemon has picked up Chrome and is actively probing your tab:You should see a response that includes at least one entry with Take note of the
"runtime": "v8" and "probe_status": "active":pid — you will use it when reading state or opening a WebSocket watch stream.Verify Chrome is Accessible on the Debug Port
Before involving NSP at all, you can confirm Chrome is listening correctly by hitting its built-in CDP tab listing endpoint directly:Persistent Setup
Typing the launch command every time Chrome restarts is tedious. Instead, create a persistent launcher so Chrome always opens with the debug flag.Windows .bat launcher
Create a file namedchrome-debug.bat in a convenient location (for example, your Desktop or C:\Tools\):
chrome-debug.bat
taskkill line handles the “close all windows first” requirement automatically.
Desktop shortcut
Alternatively, create a Windows shortcut to Chrome and append the flag to the Target field:Multiple Chrome Profiles
Each Chrome user profile can only bind one debugging port. If you need to probe Chrome under multiple profiles simultaneously, launch each profile on a separate port:v8_debug_ports list in axon.toml:
Troubleshooting
Chrome not detected in /substrate/v1/apps
Chrome not detected in /substrate/v1/apps
The most common cause is that an existing Chrome process was already running when you launched with the flag. The new instance attached to the old process, which has no debug port.Fix: Close every Chrome window — including any background instances in the system tray — then relaunch using the bat launcher or shortcut. After Chrome restarts, wait 5–10 seconds before querying the apps endpoint.
Port 9222 is already in use
Port 9222 is already in use
Another process is already bound to port 9222, preventing Chrome from opening its debug server.Run the following command to identify what is using the port:If the output shows a
LISTENING entry, find the owning process in Task Manager (or with netstat -ano | findstr 9222) and terminate it, or switch Chrome to a different port such as 9223.Chrome is detected but no apps appear
Chrome is detected but no apps appear
The daemon found Chrome’s debug port but did not identify any supported app in the open tabs.Check: Make sure you have at least one supported app (Gmail, Slack, etc.) open in a tab and fully loaded before querying. A tab that is still loading or is showing an error page will not match any app signature.If the app is open but still not appearing, refresh the tab and wait another 10 seconds. The process scanner runs on a 5-second cycle by default.
Confidence is stuck below 0.80
Confidence is stuck below 0.80
A confidence value below 0.80 means the ASO fast-path is still initializing its semantic labels. This is normal for the first 5–10 seconds after a new tab is detected.Wait 5–10 seconds and re-query
GET /substrate/v1/apps. Confidence for V8 apps typically settles between 0.95 and 0.99 once the fast-path completes its first full pass.If confidence stays low after 30 seconds, try refreshing the tab in Chrome and waiting again. A fully loaded page gives the probe more objects to label.