{"_id":"@brilliant-hq/mcp","_rev":"11-a4930149720d8bc9ab0daeb80140ac8e","name":"@brilliant-hq/mcp","dist-tags":{"latest":"0.1.9"},"versions":{"0.1.0":{"name":"@brilliant-hq/mcp","version":"0.1.0","license":"UNLICENSED","_id":"@brilliant-hq/mcp@0.1.0","maintainers":[{"name":"brilliant-hq","email":"hello@brilliant.design"}],"bin":{"brilliant-mcp":"bin/brilliant-mcp.js"},"dist":{"shasum":"0a20b455055449c23b80cdb611902ac965cca315","tarball":"https://registry.npmjs.org/@brilliant-hq/mcp/-/mcp-0.1.0.tgz","fileCount":15,"integrity":"sha512-A4VNVYqY5M/k9SaYb+lDOJ2NOBb8S48VRQYwLFtp4MQlmULsbAmwp3LXc+SbtdkrSpOsJ9EPLu9n/rrOeKCRnw==","signatures":[{"sig":"MEYCIQCIXb7Cpy20eGk8qPMm1Zv1V/Uh3Hbj+i1uQpG99qrJRAIhAKnowIJO/r+vQSj2Vbhq47y+U+pboBo3nr4AEygx0RvW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105752},"type":"module","engines":{"node":">=20"},"gitHead":"29fd3ee5afac2c029b2d9d226435b74756feb37d","private":false,"scripts":{"test":"node --test test/"},"_npmUser":{"name":"brilliant-hq","email":"hello@brilliant.design"},"_npmVersion":"10.7.0","description":"No-config local MCP bridge for brilliant.design — a dumb stdio<->loopback router. Your coding agent drives your live web tab (or the desktop app); zero bytes touch Brilliant's servers.","directories":{},"_nodeVersion":"18.20.4","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1786882180816_0.12580913841961205","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@brilliant-hq/mcp","version":"0.1.1","license":"UNLICENSED","_id":"@brilliant-hq/mcp@0.1.1","maintainers":[{"name":"brilliant-hq","email":"hello@brilliant.design"}],"bin":{"brilliant-mcp":"bin/brilliant-mcp.js"},"dist":{"shasum":"306d3d14d02383f578101ab10be24fa43a3fbc25","tarball":"https://registry.npmjs.org/@brilliant-hq/mcp/-/mcp-0.1.1.tgz","fileCount":15,"integrity":"sha512-ytA8YlPbBbkwSOkWd7xi4ro1N7LTy2Feu+ot5QXJO+PeJjuRmyAaoDOvRqHLWqf5hD78EORsxyg5cYMgYn/9zw==","signatures":[{"sig":"MEQCIF7hBvZNeeukLOLZGdEG0L/hmGVujpb1dYPLpL1qxAiqAiAmXZvCHM5cSg8DCaZFgMH4jgWHT9L1ceorw+9VuKIAAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106286},"type":"module","engines":{"node":">=20"},"gitHead":"0bc37bd68ca7e22fd26c6e00103aa5a3adf617de","private":false,"scripts":{"test":"node --test test/"},"_npmUser":{"name":"brilliant-hq","email":"hello@brilliant.design"},"_npmVersion":"10.7.0","description":"No-config local MCP bridge for brilliant.design — a dumb stdio<->loopback router. Your coding agent drives your live web tab (or the desktop app); zero bytes touch Brilliant's servers.","directories":{},"_nodeVersion":"18.20.4","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.1_1786904679869_0.41432553651064685","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@brilliant-hq/mcp","version":"0.1.2","license":"UNLICENSED","_id":"@brilliant-hq/mcp@0.1.2","maintainers":[{"name":"brilliant-hq","email":"hello@brilliant.design"}],"bin":{"brilliant-mcp":"bin/brilliant-mcp.js"},"dist":{"shasum":"875f0755efd86540aaedc3231a0c68387fa7f0f6","tarball":"https://registry.npmjs.org/@brilliant-hq/mcp/-/mcp-0.1.2.tgz","fileCount":15,"integrity":"sha512-HfXxMIVFMfp2U/6AL1hxcd5PMLhKkJURdBDAQYlIfDbSHSfmTuvQLOtZp8EYtY339TmNr/eS0KEdkCcge8YmDw==","signatures":[{"sig":"MEQCIA3Gl2HWmCVGqI0HcGNBbP2SaiVbNR7lJoiJ9GSDLB43AiBpLHo8P1snJkJMk1uyLs1FiDIcKJ7T2EEkY7y9W2wBIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106282},"type":"module","engines":{"node":">=20"},"gitHead":"db4d132b44e9edbce01f6d8c745133f78def62d3","private":false,"scripts":{"test":"node --test test/"},"_npmUser":{"name":"brilliant-hq","email":"hello@brilliant.design"},"_npmVersion":"10.7.0","description":"No-config local MCP bridge for brilliant.design — a dumb stdio<->loopback router. Your coding agent drives your live web tab (or the desktop app); zero bytes touch Brilliant's servers.","directories":{},"_nodeVersion":"18.20.4","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.2_1786910189207_0.7072480213415493","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@brilliant-hq/mcp","version":"0.1.3","license":"UNLICENSED","_id":"@brilliant-hq/mcp@0.1.3","maintainers":[{"name":"brilliant-hq","email":"hello@brilliant.design"}],"bin":{"brilliant-mcp":"bin/brilliant-mcp.js"},"dist":{"shasum":"85632dc497200244e1d5b97e6a98c59a188cd0d1","tarball":"https://registry.npmjs.org/@brilliant-hq/mcp/-/mcp-0.1.3.tgz","fileCount":15,"integrity":"sha512-h98WIsxfSU2/ehQ3RAcGzdQyq2zaHcnXDjIOpzFNYJV42jjHwLlVdkpDjNRnG/Xd7k4F9oupW8MSfrFpOxw3hg==","signatures":[{"sig":"MEYCIQD+ptLYhZzJ7oZ+h82jgM5Kl6EoilpjygD1TgorZ/w6uQIhAPTvflYAHQrr6I2Xr2teLkVxawWhzSe6NlFTY2jPk6bS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107241},"type":"module","engines":{"node":">=20"},"gitHead":"93c4a295e1dbb9a2e247e18955ea963cf99f5348","private":false,"scripts":{"test":"node --test test/"},"_npmUser":{"name":"brilliant-hq","email":"hello@brilliant.design"},"_npmVersion":"10.7.0","description":"No-config local MCP bridge for brilliant.design — a dumb stdio<->loopback router. Your coding agent drives your live web tab (or the desktop app); zero bytes touch Brilliant's servers.","directories":{},"_nodeVersion":"18.20.4","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.3_1786912118631_0.7148711967984154","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@brilliant-hq/mcp","version":"0.1.4","license":"UNLICENSED","_id":"@brilliant-hq/mcp@0.1.4","maintainers":[{"name":"brilliant-hq","email":"hello@brilliant.design"}],"bin":{"brilliant-mcp":"bin/brilliant-mcp.js"},"dist":{"shasum":"e4b57daef4e896dea8cd6bb1e9a07577abd1d0d1","tarball":"https://registry.npmjs.org/@brilliant-hq/mcp/-/mcp-0.1.4.tgz","fileCount":15,"integrity":"sha512-5GJ5igWFUNkvaCepuQg18J6JaMupP2XUmIzIUc13XN62fBZM+GgsoAsUbbUecAWwvhXEVffC+UG3Jslu5OwkMg==","signatures":[{"sig":"MEUCIQDo1zpiagLsc+i/0CEtZGTCn7l/D0LjjbqQjS3+SYH5jwIgJ7zq3wigk50DuzVDbBFF6GwHk7BWil3kcaAKjhURct0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107780},"type":"module","engines":{"node":">=20"},"gitHead":"b604108ecf89bf1ed20116017e24ce9c6170b911","private":false,"scripts":{"test":"node --test test/"},"_npmUser":{"name":"brilliant-hq","email":"hello@brilliant.design"},"_npmVersion":"10.7.0","description":"No-config local MCP bridge for brilliant.design — a dumb stdio<->loopback router. Your coding agent drives your live web tab (or the desktop app); zero bytes touch Brilliant's servers.","directories":{},"_nodeVersion":"18.20.4","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.4_1787076103017_0.8904638113157513","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@brilliant-hq/mcp","version":"0.1.5","license":"UNLICENSED","_id":"@brilliant-hq/mcp@0.1.5","maintainers":[{"name":"brilliant-hq","email":"hello@brilliant.design"}],"bin":{"brilliant-mcp":"bin/brilliant-mcp.js"},"dist":{"shasum":"b63f1eac86578009322949b4a87a7f875d8b4cb3","tarball":"https://registry.npmjs.org/@brilliant-hq/mcp/-/mcp-0.1.5.tgz","fileCount":15,"integrity":"sha512-XjULgqdWoiqMes/iAoLSGIE9DObHwACjxIaC7w8fep02qBM8g6/JNar44B3s23wLG50b7zlYhPpzZCNZnxWAvA==","signatures":[{"sig":"MEQCIF/6coCIHXX73DAABTO8B/gfOWULU7DV95/vi8OB6SxvAiA2gxmI/6CDynpNdHv1XR8KozyFXQfxuCxMfpj3jzTKZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108063},"type":"module","engines":{"node":">=20"},"gitHead":"8c31027ff08e4166cc48af826101f23f6398d71e","private":false,"scripts":{"test":"node --test test/"},"_npmUser":{"name":"brilliant-hq","email":"hello@brilliant.design"},"_npmVersion":"10.8.2","description":"No-config local MCP bridge for brilliant.design — a dumb stdio<->loopback router. Your coding agent drives your live web tab (or the desktop app); zero bytes touch Brilliant's servers.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.5_1787593473736_0.7380847787646632","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@brilliant-hq/mcp","version":"0.1.6","license":"UNLICENSED","_id":"@brilliant-hq/mcp@0.1.6","maintainers":[{"name":"amantinband","email":"hello@brilliant.design"}],"bin":{"brilliant-mcp":"bin/brilliant-mcp.js"},"dist":{"shasum":"55ef59b2b381a97d6b272a636c74dd85c9e1a2e3","tarball":"https://registry.npmjs.org/@brilliant-hq/mcp/-/mcp-0.1.6.tgz","fileCount":15,"integrity":"sha512-apNLjQVaOWZMAT/Y6bbNfp9c6lfJDaGNsisPF6HjaHfZnpb5vhBQ4ClVXbeQ6/MRrI8U1tcKRawd7w0YMlaopA==","signatures":[{"sig":"MEUCIHXThN9An3L9pdV3f+r2Hx3lJodtM7119/QXMa0p+0INAiEA5/q7X7l//JpQm5ZgM3/ODwwBolO0dFx5nuS6WyxcU9o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109242},"type":"module","engines":{"node":">=20"},"gitHead":"e943fe2e732d50f7f0e19a69f824d40c7ed0836d","mcpName":"design.brilliant/mcp","private":false,"scripts":{"test":"node --test test/"},"_npmUser":{"name":"amantinband","email":"hello@brilliant.design"},"_npmVersion":"10.8.2","description":"No-config local MCP bridge for brilliant.design — a dumb stdio<->loopback router. Your coding agent drives your live web tab (or the desktop app); zero bytes touch Brilliant's servers.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.6_1787836489365_0.7285192103369762","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@brilliant-hq/mcp","version":"0.1.7","license":"UNLICENSED","_id":"@brilliant-hq/mcp@0.1.7","maintainers":[{"name":"amantinband","email":"hello@brilliant.design"}],"bin":{"brilliant-mcp":"bin/brilliant-mcp.js"},"dist":{"shasum":"cc629ba684b9e917c1c2a899b04c261c43850b9b","tarball":"https://registry.npmjs.org/@brilliant-hq/mcp/-/mcp-0.1.7.tgz","fileCount":15,"integrity":"sha512-wBjkoF9C2HpysVR+xErpllcAk5XIQ65mxutBbWRxcGBHv1AykoR3hQt2r1Hr5Cs8f4hJkrLSw64WuoqUbmzeKg==","signatures":[{"sig":"MEYCIQC1EUm/OOiM/eSXPtLfO5ZUNrj7Thm7qRWf1hkN9p8NWAIhAM229LFfFTTgo80ZdD1ux0HaWb7Y31wk0a4zv88LN+D/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD4LuF2DQqe6DU3jl+hCHd0FHN6l0Pj0UD+XWq/VmQUgAIgNYNSDNqvDiqtxNYCKk06S58o72hOT2UOYBfDswNqUpc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110560},"type":"module","engines":{"node":">=20"},"gitHead":"5e05e2b30d3e342ada99939d39510e1e155374c9","mcpName":"design.brilliant/mcp","private":false,"scripts":{"test":"node --test test/"},"_npmUser":{"name":"amantinband","email":"hello@brilliant.design"},"_npmVersion":"10.8.2","description":"No-config local MCP bridge for brilliant.design — a dumb stdio<->loopback router. Your coding agent drives your live web tab (or the desktop app); zero bytes touch Brilliant's servers.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.7_1788250990362_0.1969486234451332","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@brilliant-hq/mcp","version":"0.1.8","license":"UNLICENSED","_id":"@brilliant-hq/mcp@0.1.8","maintainers":[{"name":"amantinband","email":"hello@brilliant.design"}],"bin":{"brilliant-mcp":"bin/brilliant-mcp.js"},"dist":{"shasum":"6e29a4f238933254391d2059ebc5ee0e15a2532f","tarball":"https://registry.npmjs.org/@brilliant-hq/mcp/-/mcp-0.1.8.tgz","fileCount":15,"integrity":"sha512-RpoF6ljDG5QRrDi7K8Gnla4kfMAnzzdvcNXGcBLEj7P9a13tvgSo8mwInpdCDl1Hnd7l8tLSbLH77Firb0fQLQ==","signatures":[{"sig":"MEQCIEnHX9bK5wQYuqEHJVQU2Bzps2+pptvEK2K/ue4cJNO/AiAvKVWaBgSk9+rRNRrZQWL3xTYEr7iCPRukkr6Mj0zsKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIG3u7tKFtPaCV7fy5EdAfZMcjURbeaAt2K6gU7pplOGpAiA0PO3z3pQ4BE3bq69U0MprQjXB7N3Wvm6wb+aNWTGiMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124886},"type":"module","engines":{"node":">=20"},"mcpName":"design.brilliant/mcp","private":false,"scripts":{"test":"node --test test/"},"_npmUser":{"name":"amantinband","email":"hello@brilliant.design"},"_npmVersion":"10.8.2","description":"No-config local MCP bridge for brilliant.design: a dumb stdio<->loopback router. Your coding agent drives your live web tab (or the desktop app); zero bytes of MCP or design data touch Brilliant's servers.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.8_1790307222437_0.315597706508544","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"_id":"@brilliant-hq/mcp@0.1.9","bin":{"brilliant-mcp":"bin/brilliant-mcp.js"},"dist":{"shasum":"5a3aaee935742d1b0c1e1996839b2340880dd567","tarball":"https://registry.npmjs.org/@brilliant-hq/mcp/-/mcp-0.1.9.tgz","fileCount":15,"integrity":"sha512-KveXjfRf78/SoGS729Sc5L8ZZjzLX9jHJYtTLJGCS5neN0fuUdUleLxoRi2wrCPxvGD4n3YaNJcpKDD/A5/01Q==","signatures":[{"sig":"MEYCIQDzd0k/IFzWJIdOR8NcmofpwG1jmL5OPeyKnGBP5bELygIhALkAW1X6DntEdudyGEQCP08jN89sCJwZV/+QNRZ3vskS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC9+idffiFWpoJzTqnUkkBPDfzvcOPKdwksVLNWOwfGTwIhAInrf6wozwT0007tgjmzYV/FlP4KX4P8ktHQqESFJyXs"}],"unpackedSize":129798},"name":"@brilliant-hq/mcp","type":"module","engines":{"node":">=20"},"gitHead":"61e2f6095ffb020babfd2b4f31ec4d13b6d7fe63","license":"UNLICENSED","mcpName":"design.brilliant/mcp","private":false,"scripts":{"test":"node --test test/"},"version":"0.1.9","_npmUser":{"name":"amantinband","email":"hello@brilliant.design"},"_npmVersion":"10.8.2","description":"No-config local MCP bridge for brilliant.design: a dumb stdio<->loopback router. Your coding agent drives your live web tab (or the desktop app); zero bytes of MCP or design data touch Brilliant's servers.","directories":{},"maintainers":[{"name":"amantinband","email":"hello@brilliant.design"}],"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.9_1790984628161_0.13239593219926005"}}},"time":{"created":"2026-08-16T12:09:40.657Z","modified":"2026-10-02T23:43:48.417Z","0.1.0":"2026-08-16T12:09:40.974Z","0.1.1":"2026-08-16T18:24:40.006Z","0.1.2":"2026-08-16T19:56:29.362Z","0.1.3":"2026-08-16T20:28:39.282Z","0.1.4":"2026-08-18T18:01:43.169Z","0.1.5":"2026-08-24T17:44:33.883Z","0.1.6":"2026-08-27T13:14:49.491Z","0.1.7":"2026-09-01T08:23:10.432Z","0.1.8":"2026-09-25T03:33:42.529Z","0.1.9":"2026-10-02T23:43:48.246Z"},"license":"UNLICENSED","description":"No-config local MCP bridge for brilliant.design: a dumb stdio<->loopback router. Your coding agent drives your live web tab (or the desktop app); zero bytes of MCP or design data touch Brilliant's servers.","maintainers":[{"name":"amantinband","email":"hello@brilliant.design"}],"readme":"# @brilliant-hq/mcp\n\nNo-config local MCP bridge for [brilliant.design](https://brilliant.design). Your\ncoding agent drives your live Brilliant web tab (or the desktop app) with\nnear-zero setup. Everything runs on `127.0.0.1` - **zero bytes of MCP or design\ndata touch Brilliant's servers.**\n\n## Setup (once per machine, ever)\n\n```\nclaude mcp add brilliant -- npx -y @brilliant-hq/mcp\n```\n\nstdio is the universal denominator, so the same package serves every MCP client\n(Claude Code, Codex, Gemini, Cursor, VS Code, Windsurf, Zed, Claude Desktop, …).\n\n## How it works\n\n- The helper is a **dumb router**: MCP JSON-RPC crosses it verbatim; MCP\n  semantics live in the Brilliant tab (or desktop app), never here.\n- The first instance becomes the **leader** (owns one tab socket, one permission\n  grant, one binding table); every other MCP client's helper is a **follower**\n  that forwards over loopback `/rpc`. Leadership reassigns when the leader exits.\n- No tab connected yet? Your first tool call opens `brilliant.design` and pairs\n  via a URL fragment - discovery and pairing in one step.\n- The Brilliant **desktop app** is detected on `127.0.0.1:3333/3334/3335` and\n  covered by the same entry.\n\nFull wire contract: [`PROTOCOL.md`](./PROTOCOL.md).\n\n## CLI\n\n```\nnpx @brilliant-hq/mcp                          # run the stdio MCP server (default)\nnpx @brilliant-hq/mcp --version\nnpx @brilliant-hq/mcp install <client>         # add the server to <client>'s MCP config\nnpx @brilliant-hq/mcp install <client> --dry-run   # preview the change, write nothing\nnpx @brilliant-hq/mcp install <client> --remove    # remove it (exact inverse)\n```\n\n`install` merges into the tool's config without clobbering foreign servers,\npreserves JSONC comments, and is comment-/byte-stable on remove. Supported\n`<client>`: claude-code, cursor, vscode, codex, gemini, antigravity, windsurf,\nzed, opencode, claude-desktop. Per-client facts come from `clients.json` (the\none shared table this package ships).\n\n## Security\n\n- Every listener binds the `127.0.0.1` literal - never `0.0.0.0`, never a scan of\n  private ranges.\n- The tab socket validates `Origin: https://brilliant.design`, a loopback `Host`\n  (anti-DNS-rebinding), and a pairing token or an approved association.\n- The pairing token is never served from any local endpoint; `leader.json` is\n  mode `0600`; the tab never reads it.\n\nRequires Node ≥ 20.\n\n## Development\n\n```\nnpm install\nnpm test        # node --test\n```\n\n## Real-tab battery\n\n`battery/real_tab_pairing.mjs` proves the production pairing lane end to end with no stub on\neither side: this repo's helper over stdio + a real Chrome tab on the served\n`https://brilliant.design`, signed in as the locked qa-e2e identity. It runs p1 fragment pairing,\np2 a project tab re-pairing over `127.0.0.1:3363-3365` with no fragment, p3 a reload, p4 a leader\nrestart re-pairing with no reload, and p5 a fresh unpaired profile that must dial nothing.\n\n- Opt-in: `BRILLIANT_REAL_TAB_BATTERY=1 node battery/real_tab_pairing.mjs [--headed] [--out <json>]`\n  (Windows: `scripts/windows/test/real_tab_pairing_battery.ps1`). It lives outside `test/`, so\n  `npm test` stays hermetic.\n- Prerequisites, each refused by name: real Chrome (`BRILLIANT_CHROME_EXE`), nothing listening\n  on 3333-3335 or 3363-3365 (a foreign leader is never touched), `npm ci` here, the qa-e2e\n  session (`BRILLIANT_QA_STATE`, else minted through `scripts/lib/qa_web_session.mjs`).\n- Chrome 147+ gates loopback per site; the cell writes the Allow a user would give, the content\n  setting `profile.content_settings.exceptions.loopback_network` for `https://brilliant.design:443`,\n  into its fresh profile.\n- Exit codes: 0 every assertion passed, 1 any FAIL, 2 NOT MEASURED (a named missing prerequisite;\n  never 0). Output is one `PASS|FAIL pN <what> <number>` line per assertion.\n- The summary JSON lands in `qa-inbox/real_tab_pairing-<stamp>.json` (or `--out`), with the log\n  dir (tab console, WebSocket events, helper stderr) beside it as `<summary>-logs/`.\n","readmeFilename":"README.md"}