n8n-io/n8n · error · Error

No computer-use daemon is paired with this n8n instance. Ei

Error message

No computer-use daemon is paired with this n8n instance.

Either re-run without `--no-auto-start-daemon`, or start one manually:

  npx @n8n/computer-use ${baseUrl} \
    --dir <path-to-a-dedicated-sandbox-dir> \
    --auto-confirm \
    --permission-filesystem-read allow \
    --permission-filesystem-write allow \
    --permission-shell allow \
    --permission-browser allow

(The daemon prints a pairing token on startup that you paste into the n8n UI once.)

What it means

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.

Source

Thrown at packages/@n8n/instance-ai/evaluations/computer-use/daemon.ts:78

export async function ensureDaemon(opts: EnsureDaemonOptions): Promise<DaemonInfo> {
	const { client, logger } = opts;

	let status = await client.getGatewayStatus();
	if (status.connected && status.directory) {
		logger.verbose(`[daemon] already paired, dir=${status.directory}`);
		// Auto-connect (N8N_EVAL_AUTO_BROWSER_CONNECT=1) is set on the daemon's
		// own process env at spawn-time, so it only takes effect when the eval
		// runner started the daemon. A pre-existing daemon won't have it.
		logger.warn(
			'Reusing existing computer-use daemon. If it was not started by this eval runner, ' +
				'browser auto-connect may be inactive — you may need to click Connect in the ' +
				'extension manually when the browser session resets between scenarios.',
		);
		return toInfo(status);
	}

	if (!opts.autoStart) {
		throw new Error(noDaemonHint(opts.baseUrl));
	}

	const usePublished = opts.usePublishedDaemon ?? false;
	if (!usePublished && !existsSync(LOCAL_COMPUTER_USE_CLI)) {
		throw new Error(
			`Local computer-use build not found at ${LOCAL_COMPUTER_USE_CLI}.\n` +
				'Build it first:\n' +
				'  pnpm --filter @n8n/computer-use --filter @n8n/mcp-browser build\n' +
				'\n' +
				'Or pass --use-published-daemon to spawn the released package via npx instead.',
		);
	}

	const sandboxDir = opts.daemonSandboxDir ?? join(opts.evalOutputDir, 'daemon-sandbox');
	await mkdir(sandboxDir, { recursive: true });

	const logPath = join(opts.evalOutputDir, 'daemon.log');
	const { token } = await client.createGatewayLink();

View on GitHub (pinned to 5ac6606e81)

Solutions

  1. Either drop `--no-auto-start-daemon` so the runner auto-spawns and pairs a daemon, OR
  2. 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.
  3. 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.

Example fix

// before
$ node cli.ts --no-auto-start-daemon --base-url http://localhost:5678
// after (option A — let the runner spawn it)
$ node cli.ts --base-url http://localhost:5678
// after (option B — start it yourself)
$ 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
# paste the pairing token into n8n, then:
$ node cli.ts --no-auto-start-daemon --base-url http://localhost:5678
Defensive patterns

Strategy: validation

Validate before calling

// Pre-flight: if autoStart is off, confirm a daemon is paired before running.
const status = await client.getGatewayStatus();
if (!opts.autoStart && !(status.connected && status.directory)) {
  throw new Error(noDaemonHint(opts.baseUrl)); // surface the same hint early
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/9224655216956dcd. Report an issue: GitHub.