From 49d53ff0bb80a4e55189c3363a2465841bd06fcf Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 21 Jan 2026 10:27:19 +0000 Subject: [PATCH] fix: honor wildcard exec approvals on macOS --- CHANGELOG.md | 1 + apps/macos/Sources/Clawdbot/ExecApprovals.swift | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ec3997e9..a3f1d4fa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ Docs: https://docs.clawd.bot ### Fixes - Nodes tool: include agent/node/gateway context in tool failure logs to speed approval debugging. +- macOS: exec approvals now respect wildcard agent allowlists (`*`). - UI: remove the chat stop button and keep the composer aligned to the bottom edge. ## 2026.1.20 diff --git a/apps/macos/Sources/Clawdbot/ExecApprovals.swift b/apps/macos/Sources/Clawdbot/ExecApprovals.swift index 3647b5d82..15a0eeb71 100644 --- a/apps/macos/Sources/Clawdbot/ExecApprovals.swift +++ b/apps/macos/Sources/Clawdbot/ExecApprovals.swift @@ -276,12 +276,13 @@ enum ExecApprovalsStore { ? agentId!.trimmingCharacters(in: .whitespacesAndNewlines) : "default" let agentEntry = file.agents?[key] ?? ExecApprovalsAgent() + let wildcardEntry = file.agents?["*"] ?? ExecApprovalsAgent() let resolvedAgent = ExecApprovalsResolvedDefaults( - security: agentEntry.security ?? resolvedDefaults.security, - ask: agentEntry.ask ?? resolvedDefaults.ask, - askFallback: agentEntry.askFallback ?? resolvedDefaults.askFallback, - autoAllowSkills: agentEntry.autoAllowSkills ?? resolvedDefaults.autoAllowSkills) - let allowlist = (agentEntry.allowlist ?? []) + security: agentEntry.security ?? wildcardEntry.security ?? resolvedDefaults.security, + ask: agentEntry.ask ?? wildcardEntry.ask ?? resolvedDefaults.ask, + askFallback: agentEntry.askFallback ?? wildcardEntry.askFallback ?? resolvedDefaults.askFallback, + autoAllowSkills: agentEntry.autoAllowSkills ?? wildcardEntry.autoAllowSkills ?? resolvedDefaults.autoAllowSkills) + let allowlist = ((wildcardEntry.allowlist ?? []) + (agentEntry.allowlist ?? [])) .map { entry in ExecAllowlistEntry( pattern: entry.pattern.trimmingCharacters(in: .whitespacesAndNewlines),