{"record":{"id":"9224655216956dcd","repo":"n8n-io/n8n","slug":"no-computer-use-daemon-is-paired-with-this-n8n-ins","errorCode":null,"errorMessage":"No computer-use daemon is paired with this n8n instance.\n\nEither re-run without `--no-auto-start-daemon`, or start one manually:\n\n  npx @n8n/computer-use ${baseUrl} \\\n    --dir <path-to-a-dedicated-sandbox-dir> \\\n    --auto-confirm \\\n    --permission-filesystem-read allow \\\n    --permission-filesystem-write allow \\\n    --permission-shell allow \\\n    --permission-browser allow\n\n(The daemon prints a pairing token on startup that you paste into the n8n UI once.)","messagePattern":"No computer-use daemon is paired with this n8n instance\\.\n\nEither re-run without `--no-auto-start-daemon`, or start one manually:\n\n  npx @n8n/computer-use (.+?) \\\\\n    --dir <path-to-a-dedicated-sandbox-dir> \\\\\n    --auto-confirm \\\\\n    --permission-filesystem-read allow \\\\\n    --permission-filesystem-write allow \\\\\n    --permission-shell allow \\\\\n    --permission-browser allow\n\n\\(The daemon prints a pairing token on startup that you paste into the n8n UI once\\.\\)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/@n8n/instance-ai/evaluations/computer-use/daemon.ts","lineNumber":78,"sourceCode":"export async function ensureDaemon(opts: EnsureDaemonOptions): Promise<DaemonInfo> {\n\tconst { client, logger } = opts;\n\n\tlet status = await client.getGatewayStatus();\n\tif (status.connected && status.directory) {\n\t\tlogger.verbose(`[daemon] already paired, dir=${status.directory}`);\n\t\t// Auto-connect (N8N_EVAL_AUTO_BROWSER_CONNECT=1) is set on the daemon's\n\t\t// own process env at spawn-time, so it only takes effect when the eval\n\t\t// runner started the daemon. A pre-existing daemon won't have it.\n\t\tlogger.warn(\n\t\t\t'Reusing existing computer-use daemon. If it was not started by this eval runner, ' +\n\t\t\t\t'browser auto-connect may be inactive — you may need to click Connect in the ' +\n\t\t\t\t'extension manually when the browser session resets between scenarios.',\n\t\t);\n\t\treturn toInfo(status);\n\t}\n\n\tif (!opts.autoStart) {\n\t\tthrow new Error(noDaemonHint(opts.baseUrl));\n\t}\n\n\tconst usePublished = opts.usePublishedDaemon ?? false;\n\tif (!usePublished && !existsSync(LOCAL_COMPUTER_USE_CLI)) {\n\t\tthrow new Error(\n\t\t\t`Local computer-use build not found at ${LOCAL_COMPUTER_USE_CLI}.\\n` +\n\t\t\t\t'Build it first:\\n' +\n\t\t\t\t'  pnpm --filter @n8n/computer-use --filter @n8n/mcp-browser build\\n' +\n\t\t\t\t'\\n' +\n\t\t\t\t'Or pass --use-published-daemon to spawn the released package via npx instead.',\n\t\t);\n\t}\n\n\tconst sandboxDir = opts.daemonSandboxDir ?? join(opts.evalOutputDir, 'daemon-sandbox');\n\tawait mkdir(sandboxDir, { recursive: true });\n\n\tconst logPath = join(opts.evalOutputDir, 'daemon.log');\n\tconst { token } = await client.createGatewayLink();","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/instance-ai/evaluations/computer-use/daemon.ts#L60-L96","documentation":"Thrown by `ensureDaemon()` in computer-use/daemon.ts when the gateway status query reports no paired daemon AND `opts.autoStart` is false. The `--no-auto-start-daemon` flag sets autoStart=false, telling the runner NOT to spawn a daemon itself; if none is already paired, the run cannot proceed. The message is built by `noDaemonHint(baseUrl)` and includes the exact `npx @n8n/computer-use ...` invocation with the right permissions and the pairing-token flow.","triggerScenarios":"Run the eval with `--no-auto-start-daemon` on a fresh n8n instance where no daemon has ever paired. Run after deleting/rotating the n8n database so the previously stored pairing is gone. Run against a remote n8n instance (`--base-url https://...`) where the daemon you have running locally is paired with a different instance.","commonSituations":"Developers use `--no-auto-start-daemon` to avoid the 90s pairing timeout during iteration, then forget to start the daemon manually. Running against a CI-provisioned n8n where the daemon side hasn't been started. Switching `--base-url` between local and a teammate's instance invalidates the pairing.","solutions":["Either drop `--no-auto-start-daemon` so the runner auto-spawns and pairs a daemon, OR","Start a daemon manually using the exact command from the error message: `npx @n8n/computer-use <baseUrl> --dir <sandbox> --auto-confirm --permission-filesystem-read allow --permission-filesystem-write allow --permission-shell allow --permission-browser allow`, then paste the pairing token into the n8n UI once.","Confirm the daemon was started against the SAME `--base-url` the eval is targeting; a daemon paired with a different instance won't show as connected."],"exampleFix":"// before\n$ node cli.ts --no-auto-start-daemon --base-url http://localhost:5678\n// after (option A — let the runner spawn it)\n$ node cli.ts --base-url http://localhost:5678\n// after (option B — start it yourself)\n$ npx @n8n/computer-use http://localhost:5678 --dir /tmp/cu-sandbox --auto-confirm --permission-filesystem-read allow --permission-filesystem-write allow --permission-shell allow --permission-browser allow\n# paste the pairing token into n8n, then:\n$ node cli.ts --no-auto-start-daemon --base-url http://localhost:5678","handlingStrategy":"validation","validationCode":"// Pre-flight: if autoStart is off, confirm a daemon is paired before running.\nconst status = await client.getGatewayStatus();\nif (!opts.autoStart && !(status.connected && status.directory)) {\n  throw new Error(noDaemonHint(opts.baseUrl)); // surface the same hint early\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["When iterating with `--no-auto-start-daemon`, keep a daemon running in a separate terminal pointed at the same `--base-url` so re-runs reuse it.","After switching `--base-url`, re-confirm the daemon is paired for that instance before relying on `--no-auto-start-daemon`.","In CI, either let the runner auto-start, or start the daemon and pair it explicitly as a setup step."],"tags":["daemon","computer-use","pairing","configuration","developer-error"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}