freeze
Scope or freeze which files Claude can edit during debugging, a refactor, or review. Use when edits should stay in specific dirs, or for a read-only investigate lock. Backed by a sentinel + PreToolUse hook.
Install
npx skills add https://github.com/oliver-kriska/claude-elixir-phoenix/tree/main/plugins/elixir-phoenix/skills/freeze
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install oliver-kriska-claude-elixir-phoenix@llmmart
git clone https://github.com/oliver-kriska/claude-elixir-phoenix.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole oliver-kriska/claude-elixir-phoenix collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Freeze — scoped edit lock
Toggle a project-local edit lock so Claude can only modify the files you intend
during a focused task (debugging, a tight refactor, a review pass). Enforced by
the freeze-gate.sh PreToolUse hook, which denies Edit/Write/NotebookEdit
outside the allow-list. No sentinel = no lock; the hook stays dormant.
The lock lives in .claude/.freeze — one allowed path prefix per line,
project-relative. Empty file = freeze everything.
Usage
/phx:freeze [args] — resolve $ARGUMENTS and run the matching Bash branch.
| Invocation | Effect |
|---|---|
/phx:freeze |
Freeze ALL edits — read-only investigation mode |
/phx:freeze lib/app_web priv/repo |
Allow edits only under these dirs |
/phx:freeze status |
Show current lock state |
/phx:freeze off |
Lift the lock (delete the sentinel) |
Freeze all edits (investigation mode)
mkdir -p .claude && : > .claude/.freeze
echo "Freeze ON — all edits blocked. Lift with /phx:freeze off"
Scope edits to specific directories
mkdir -p .claude
printf '%s\n' lib/app_web priv/repo > .claude/.freeze
echo "Freeze ON — edits limited to: lib/app_web priv/repo"
Map $ARGUMENTS to the dirs the user named. Include any directory you still need
to write to — e.g. add .claude if progress/scratchpad logging must continue.
Show status
if [ -f .claude/.freeze ]; then
if [ -s .claude/.freeze ]; then echo "Freeze ON — limited to:"; cat .claude/.freeze
else echo "Freeze ON — ALL edits blocked"; fi
else echo "Freeze OFF — no edit lock"; fi
Lift the lock
rm -f .claude/.freeze && echo "Freeze OFF — edits unlocked"
Iron Laws
- MANAGE the sentinel via Bash only (
:>,printf,rm) — NEVER via Edit/Write. The freeze hook gates Edit/Write and would block you from re-scoping or clearing the lock. - NEVER leave a freeze active across unrelated tasks — it persists until
/phx:freeze off, including into later sessions. Clear it when the task ends. - PATHS ARE PROJECT-RELATIVE PREFIXES, one per line —
lib/fooallowslib/fooand everything under it; it does NOT allowlib/foobar.
Notes
- The hook denies with a reason and tells Claude not to retry, so a frozen edit surfaces clearly instead of failing silently.
- Pairs with
/phx:investigate(freeze all while root-causing) and/phx:work(scope to the plan's dirs). The lock is advisory tooling, not a security boundary — anyone can run/phx:freeze off.
Files (claude-elixir-phoenix)
-
SKILL.md 2.8 KB
--- name: freeze description: Scope or freeze which files Claude can edit during debugging, a refactor, or review. Use when edits should stay in specific dirs, or for a read-only investigate lock. Backed by a sentinel + PreToolUse hook. effort: low --- # Freeze — scoped edit lock Toggle a project-local edit lock so Claude can only modify the files you intend during a focused task (debugging, a tight refactor, a review pass). Enforced by the `freeze-gate.sh` PreToolUse hook, which denies `Edit`/`Write`/`NotebookEdit` outside the allow-list. No sentinel = no lock; the hook stays dormant. The lock lives in `.claude/.freeze` — one allowed path prefix per line, project-relative. Empty file = freeze everything. ## Usage `/phx:freeze [args]` — resolve `$ARGUMENTS` and run the matching Bash branch. | Invocation | Effect | |------------|--------| | `/phx:freeze` | Freeze ALL edits — read-only investigation mode | | `/phx:freeze lib/app_web priv/repo` | Allow edits only under these dirs | | `/phx:freeze status` | Show current lock state | | `/phx:freeze off` | Lift the lock (delete the sentinel) | ### Freeze all edits (investigation mode) ```bash mkdir -p .claude && : > .claude/.freeze echo "Freeze ON — all edits blocked. Lift with /phx:freeze off" ``` ### Scope edits to specific directories ```bash mkdir -p .claude printf '%s\n' lib/app_web priv/repo > .claude/.freeze echo "Freeze ON — edits limited to: lib/app_web priv/repo" ``` Map `$ARGUMENTS` to the dirs the user named. Include any directory you still need to write to — e.g. add `.claude` if progress/scratchpad logging must continue. ### Show status ```bash if [ -f .claude/.freeze ]; then if [ -s .claude/.freeze ]; then echo "Freeze ON — limited to:"; cat .claude/.freeze else echo "Freeze ON — ALL edits blocked"; fi else echo "Freeze OFF — no edit lock"; fi ``` ### Lift the lock ```bash rm -f .claude/.freeze && echo "Freeze OFF — edits unlocked" ``` ## Iron Laws 1. **MANAGE the sentinel via Bash only** (`:>`, `printf`, `rm`) — NEVER via Edit/Write. The freeze hook gates Edit/Write and would block you from re-scoping or clearing the lock. 2. **NEVER leave a freeze active across unrelated tasks** — it persists until `/phx:freeze off`, including into later sessions. Clear it when the task ends. 3. **PATHS ARE PROJECT-RELATIVE PREFIXES, one per line** — `lib/foo` allows `lib/foo` and everything under it; it does NOT allow `lib/foobar`. ## Notes - The hook denies with a reason and tells Claude not to retry, so a frozen edit surfaces clearly instead of failing silently. - Pairs with `/phx:investigate` (freeze all while root-causing) and `/phx:work` (scope to the plan's dirs). The lock is advisory tooling, not a security boundary — anyone can run `/phx:freeze off`.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.