From 93df9aef916b5f6239fe4971ef3dcd59453b359c Mon Sep 17 00:00:00 2001 From: Mahdi Dibaiee Date: Wed, 17 Dec 2025 16:32:02 +0000 Subject: [PATCH] mise: fix vm:claude on macOS --- mise/tasks/vm/claude | 28 ++++++++++++++++++---------- mise/tasks/vm/create-post | 2 +- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/mise/tasks/vm/claude b/mise/tasks/vm/claude index 05edae06e17..d7f4c870d52 100755 --- a/mise/tasks/vm/claude +++ b/mise/tasks/vm/claude @@ -36,16 +36,27 @@ echo "Syncing credentials from host to VM..." # Ensure .claude directory exists in VM ssh "${HOSTNAME}" 'mkdir -p ~/.claude' +# Copy .claude.json configuration file +scp ~/.claude.json "${HOSTNAME}:~/.claude.json" + # Extract and copy credentials based on host OS if [[ "${HOST_OS}" == "mac" ]]; then - # Extract from macOS Keychain and pipe directly to VM - if ! security find-generic-password -s "Claude Code-credentials" -w 2>/dev/null | \ - jq -c 'del(.claudeAiOauth.refreshToken)' | \ - ssh "${HOSTNAME}" 'cat > ~/.claude/.credentials.json'; then + # Try extracting from macOS Keychain with both possible service names + if security find-generic-password -s "Claude Code-credentials" -w 2>/dev/null | \ + jq -c 'del(.claudeAiOauth.refreshToken)' | \ + ssh "${HOSTNAME}" 'cat > ~/.claude/.credentials.json'; then + echo "Found credentials under 'Claude Code-credentials'" + elif security find-generic-password -s "Claude Code" -w 2>/dev/null | \ + ssh "${HOSTNAME}" 'read key && jq --arg key "$key" ".primaryApiKey = \$key" ~/.claude.json > ~/.claude.json.tmp && mv ~/.claude.json.tmp ~/.claude.json'; then + echo "Found credentials under 'Claude Code'" + else echo "Error: Could not find Claude Code credentials in macOS Keychain" echo "Please ensure you are logged in to Claude Code on the host" exit 1 fi + + # Set appropriate permissions + ssh "${HOSTNAME}" 'chmod 700 ~/.claude && chmod 600 ~/.claude/.credentials.json 2>/dev/null || chmod 600 ~/.claude.json' elif [[ "${HOST_OS}" == "linux" ]]; then # Copy directly from Linux filesystem if ! cat ~/.claude/.credentials.json | \ @@ -55,12 +66,9 @@ elif [[ "${HOST_OS}" == "linux" ]]; then echo "Please ensure you are logged in to Claude Code on the host" exit 1 fi -fi -# Copy .claude.json configuration file -scp ~/.claude.json "${HOSTNAME}:~/.claude.json" - -# Set appropriate permissions -ssh "${HOSTNAME}" 'chmod 700 ~/.claude && chmod 600 ~/.claude/.credentials.json' + # Set appropriate permissions + ssh "${HOSTNAME}" 'chmod 700 ~/.claude && chmod 600 ~/.claude/.credentials.json' +fi echo "Claude Code installed and configured in ${HOSTNAME}" diff --git a/mise/tasks/vm/create-post b/mise/tasks/vm/create-post index 11ff8775080..e1c810f0069 100755 --- a/mise/tasks/vm/create-post +++ b/mise/tasks/vm/create-post @@ -57,4 +57,4 @@ if [[ -d /tmp/idle-shutdown ]]; then sudo systemctl daemon-reload sudo systemctl enable --now idle-shutdown.timer rm -rf /tmp/idle-shutdown -fi \ No newline at end of file +fi