From 546912afb2d46391365edcf56dc4fa04205e0fad Mon Sep 17 00:00:00 2001 From: ye4241 Date: Sun, 26 Apr 2026 20:02:48 +0800 Subject: [PATCH] fix: respect Claude's defaultMode from settings.json as permission mode default When hapi spawns a session without an explicit permissionMode, it was hardcoded to 'default', ignoring the user's `permissions.defaultMode` setting in ~/.claude/settings.json (e.g. 'auto'). Now reads Claude's settings.json via the existing readClaudeSettings() utility and uses its defaultMode as the fallback, keeping 'default' as the final fallback for users without the setting configured. --- cli/src/claude/runClaude.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cli/src/claude/runClaude.ts b/cli/src/claude/runClaude.ts index c7aae047b..29d5cc72a 100644 --- a/cli/src/claude/runClaude.ts +++ b/cli/src/claude/runClaude.ts @@ -20,6 +20,7 @@ import { formatMessageWithAttachments } from '@/utils/attachmentFormatter'; import { normalizeClaudeSessionModel } from './model'; import { normalizeClaudeSessionEffort } from './effort'; import { getInvokedCwd } from '@/utils/invokedCwd'; +import { readClaudeSettings } from '@/claude/utils/claudeSettings'; export interface StartOptions { model?: string @@ -151,7 +152,9 @@ export async function runClaude(options: StartOptions = {}): Promise { })); // Forward messages to the queue - let currentPermissionMode: PermissionMode = options.permissionMode ?? 'default'; + const claudeSettings = readClaudeSettings(); + const claudeDefaultMode = claudeSettings?.permissions?.defaultMode as PermissionMode | undefined; + let currentPermissionMode: PermissionMode = options.permissionMode ?? claudeDefaultMode ?? 'default'; let currentModel: SessionModel = initialModel; let currentEffort: SessionEffort = initialEffort; let currentFallbackModel: string | undefined = undefined; // Track current fallback model