diff --git a/internal/session/control/approval_orchestration.go b/internal/session/control/approval_orchestration.go index f77b0a24ea..de65eefca1 100644 --- a/internal/session/control/approval_orchestration.go +++ b/internal/session/control/approval_orchestration.go @@ -211,9 +211,11 @@ func (c *Controller) newInteractiveGate() *permission.Gate { // `--allowed-tools remember` write memory with no prompt. Strip them so the // forced Ask rules below stay authoritative. policy.SessionAllow = rulesWithoutFreshHumanApproval(policy.SessionAllow) - policy.Ask = append(policy.Ask, permission.Rule{Tool: memoryRememberTool}) if mode != ToolApprovalYolo { - policy.Ask = append(policy.Ask, permission.Rule{Tool: memoryForgetTool}) + policy.Ask = append(policy.Ask, + permission.Rule{Tool: memoryRememberTool}, + permission.Rule{Tool: memoryForgetTool}, + ) } var approver permission.Approver = gateApprover{c} if mode == ToolApprovalDontAsk { diff --git a/internal/session/control/yolo_test.go b/internal/session/control/yolo_test.go index aa6d0a24ff..e21b98ffe7 100644 --- a/internal/session/control/yolo_test.go +++ b/internal/session/control/yolo_test.go @@ -212,18 +212,15 @@ func TestToolApprovalModeAutoForcesMemoryAskRules(t *testing.T) { } } -func TestToolApprovalModeYoloAsksBeforeRememberButNotForget(t *testing.T) { +func TestToolApprovalModeYoloDoesNotAskBeforeMemoryWrites(t *testing.T) { c := New(Options{}) c.SetToolApprovalMode(ToolApprovalYolo) gate := c.newInteractiveGate() - if got := gate.Policy.Decide("remember", false, json.RawMessage(`{}`)); got != permission.Ask { - t.Fatalf("remember under yolo mode = %v, want ask", got) - } - // Forget archives a memory rather than destroying it, so the mode that - // skips every other prompt skips this one too. - if got := gate.Policy.Decide("forget", false, json.RawMessage(`{}`)); got != permission.Allow { - t.Fatalf("forget under yolo mode = %v, want allow", got) + for _, toolName := range []string{"remember", "forget"} { + if got := gate.Policy.Decide(toolName, false, json.RawMessage(`{}`)); got != permission.Allow { + t.Fatalf("%s under yolo mode = %v, want allow", toolName, got) + } } // Verify that regular tools ARE auto-allowed in YOLO (sanity check). if got := gate.Policy.Decide("bash", false, json.RawMessage(`{"command":"go test ./..."}`)); got != permission.Allow {