From 7fd11f352c58e616156400deedd8942317b515a4 Mon Sep 17 00:00:00 2001 From: Steve Yegge Date: Sat, 13 Dec 2025 09:46:01 +1100 Subject: [PATCH] fix(setup): correct allowedTools pattern from "bd:*" to "bd *" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Claude Code allowedTools pattern uses prefix matching with space separator, not colon. "Bash(bd *)" matches "bd ready", "bd create", etc. Follow-up to 3d48458. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- cmd/bd/setup/claude.go | 4 ++-- cmd/bd/setup/claude_test.go | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/cmd/bd/setup/claude.go b/cmd/bd/setup/claude.go index 9353828d..323cbd4e 100644 --- a/cmd/bd/setup/claude.go +++ b/cmd/bd/setup/claude.go @@ -66,7 +66,7 @@ func InstallClaude(project bool, stealth bool) { } // Add bd to allowedTools so commands don't require per-command approval - if addAllowedTool(settings, "Bash(bd:*)") { + if addAllowedTool(settings, "Bash(bd *)") { fmt.Println("✓ Added bd to allowedTools (no per-command approval needed)") } @@ -155,7 +155,7 @@ func RemoveClaude(project bool) { removeHookCommand(hooks, "PreCompact", "bd prime --stealth") // Remove bd from allowedTools - removeAllowedTool(settings, "Bash(bd:*)") + removeAllowedTool(settings, "Bash(bd *)") // Write back data, err = json.MarshalIndent(settings, "", " ") diff --git a/cmd/bd/setup/claude_test.go b/cmd/bd/setup/claude_test.go index 36b1ee50..2cff275e 100644 --- a/cmd/bd/setup/claude_test.go +++ b/cmd/bd/setup/claude_test.go @@ -418,25 +418,25 @@ func TestAddAllowedTool(t *testing.T) { { name: "add tool to empty settings", existingSettings: make(map[string]interface{}), - tool: "Bash(bd:*)", + tool: "Bash(bd *)", wantAdded: true, wantLen: 1, }, { name: "add tool to existing allowedTools", existingSettings: map[string]interface{}{ - "allowedTools": []interface{}{"Bash(git:*)"}, + "allowedTools": []interface{}{"Bash(git *)"}, }, - tool: "Bash(bd:*)", + tool: "Bash(bd *)", wantAdded: true, wantLen: 2, }, { name: "tool already exists", existingSettings: map[string]interface{}{ - "allowedTools": []interface{}{"Bash(bd:*)"}, + "allowedTools": []interface{}{"Bash(bd *)"}, }, - tool: "Bash(bd:*)", + tool: "Bash(bd *)", wantAdded: false, wantLen: 1, }, @@ -483,31 +483,31 @@ func TestRemoveAllowedTool(t *testing.T) { { name: "remove only tool", existingSettings: map[string]interface{}{ - "allowedTools": []interface{}{"Bash(bd:*)"}, + "allowedTools": []interface{}{"Bash(bd *)"}, }, - tool: "Bash(bd:*)", + tool: "Bash(bd *)", wantLen: 0, }, { name: "remove one of multiple tools", existingSettings: map[string]interface{}{ - "allowedTools": []interface{}{"Bash(git:*)", "Bash(bd:*)", "Bash(npm:*)"}, + "allowedTools": []interface{}{"Bash(git *)", "Bash(bd *)", "Bash(npm *)"}, }, - tool: "Bash(bd:*)", + tool: "Bash(bd *)", wantLen: 2, }, { name: "remove non-existent tool", existingSettings: map[string]interface{}{ - "allowedTools": []interface{}{"Bash(git:*)"}, + "allowedTools": []interface{}{"Bash(git *)"}, }, - tool: "Bash(bd:*)", + tool: "Bash(bd *)", wantLen: 1, }, { name: "remove from empty settings", existingSettings: make(map[string]interface{}), - tool: "Bash(bd:*)", + tool: "Bash(bd *)", wantLen: 0, }, }