From 4a3a6ed27fff17f14df60ff5b57767bc547730c0 Mon Sep 17 00:00:00 2001 From: L <6723574+louisgv@users.noreply.github.com> Date: Wed, 4 Mar 2026 20:11:42 -0500 Subject: [PATCH] fix: suppress Claude Code workspace trust prompt on provisioned VMs (#2192) The "Quick safety check: Is this a project you created or one you trust?" prompt fires per-workspace and is not suppressed by hasCompletedOnboarding or --dangerously-skip-permissions (anthropics/claude-code#28506). Fix: inject a workspace trust entry keyed by $HOME into ~/.claude.json with hasTrustDialogAccepted: true. The JSON is now constructed on the remote side so $HOME resolves to the actual path (/root, /home/user, etc). Co-authored-by: Claude Opus 4.6 (1M context) --- packages/cli/src/shared/agent-setup.ts | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/cli/src/shared/agent-setup.ts b/packages/cli/src/shared/agent-setup.ts index 752389a5..92069615 100644 --- a/packages/cli/src/shared/agent-setup.ts +++ b/packages/cli/src/shared/agent-setup.ts @@ -145,17 +145,22 @@ async function setupClaudeCodeConfig(runner: CloudRunner, apiKey: string): Promi "dangerouslySkipPermissions": true } }`; - const globalState = `{ - "hasCompletedOnboarding": true, - "bypassPermissionsModeAccepted": true -}`; const settingsB64 = Buffer.from(settingsJson).toString("base64"); - const stateB64 = Buffer.from(globalState).toString("base64"); - await runner.runServer( - `mkdir -p ~/.claude && printf '%s' '${settingsB64}' | base64 -d > ~/.claude/settings.json && chmod 600 ~/.claude/settings.json && printf '%s' '${stateB64}' | base64 -d > ~/.claude.json && chmod 600 ~/.claude.json && touch ~/.claude/CLAUDE.md`, - ); + // Build ~/.claude.json on the remote using $HOME so the workspace trust + // entry uses the actual home directory path (e.g. /root, /home/user). + // This pre-accepts the "Quick safety check" trust dialog for the home dir. + const stateScript = [ + "mkdir -p ~/.claude", + `printf '%s' '${settingsB64}' | base64 -d > ~/.claude/settings.json`, + "chmod 600 ~/.claude/settings.json", + 'printf \'{"hasCompletedOnboarding":true,"bypassPermissionsModeAccepted":true,"%s":{"hasTrustDialogAccepted":true}}\\n\' "$HOME" > ~/.claude.json', + "chmod 600 ~/.claude.json", + "touch ~/.claude/CLAUDE.md", + ].join(" && "); + + await runner.runServer(stateScript); logInfo("Claude Code configured"); }