chore(claude): allow everything, deny the memory directory #897

Merged
coilysiren merged 2 commits from chore/claude-permissions-allow-all into main 2026-08-20 09:12:58 +00:00
Owner

Two commits.

.claude/settings.json - the permissions block is now two rules: allow *, deny the auto-memory directory. The sixteen-entry read-only Bash allowlist is gone. It was a prompt-reduction list rather than a guardrail, since an agent denied one spelling just reached for a permitted one.

The deny is spelled twice because Write and Edit are distinct tools and one spelling alone leaves the other free to create a memory file. It mirrors the two entries apply-base-claude-settings.py already stamps into ~/.claude/settings.json fleet-wide.

.pre-commit-config.yaml - check-illegal-windows-names carried no stage pin, so it also ran at commit-msg and was handed $GIT_DIR/COMMIT_EDITMSG. From a linked worktree git resolves that absolute, and the drive colon reads as an illegal Windows name, so every commit from a worktree failed. Pinning it to pre-commit was a prerequisite for landing the first commit at all, since agents are required to take a worktree when the canonical checkout holds another task's branch.

🤖 Generated with Claude Code

Two commits. **`.claude/settings.json`** - the permissions block is now two rules: allow `*`, deny the auto-memory directory. The sixteen-entry read-only Bash allowlist is gone. It was a prompt-reduction list rather than a guardrail, since an agent denied one spelling just reached for a permitted one. The deny is spelled twice because `Write` and `Edit` are distinct tools and one spelling alone leaves the other free to create a memory file. It mirrors the two entries `apply-base-claude-settings.py` already stamps into `~/.claude/settings.json` fleet-wide. **`.pre-commit-config.yaml`** - `check-illegal-windows-names` carried no stage pin, so it also ran at `commit-msg` and was handed `$GIT_DIR/COMMIT_EDITMSG`. From a linked worktree git resolves that absolute, and the drive colon reads as an illegal Windows name, so every commit from a worktree failed. Pinning it to `pre-commit` was a prerequisite for landing the first commit at all, since agents are required to take a worktree when the canonical checkout holds another task's branch. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The hook carries no stage pin, so it also ran at commit-msg and was handed
$GIT_DIR/COMMIT_EDITMSG. In the canonical checkout that path is relative and
passes; from a linked worktree git resolves it absolute, and the drive colon
reads as an illegal Windows name, so every commit from a worktree failed.

Agents are required to take a linked worktree before touching a checkout that
holds another task's work, which made this a hard block rather than a nuisance.
chore(claude): allow everything, deny the memory directory
All checks were successful
TruffleHog / Scan for secrets (pull_request) Successful in 5s
CI / lint (pull_request) Successful in 44s
2626d965f2
Replace the sixteen-entry read-only Bash allowlist with a single wildcard
allow. The allowlist was a prompt-reduction list, not a guardrail: an agent
denied one spelling just reached for a permitted one, so it cost prompts
without bounding anything. The rule that is a guardrail is the auto-memory
deny, which the fleet-wide base settings already stamp into
~/.claude/settings.json and this repo now carries locally.

The deny takes two entries because Write and Edit are distinct tools; one
spelling alone would leave the other free to create a memory file.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/infrastructure!897
No description provided.