freeze
The freeze skill establishes a project-local edit lock that restricts Claude's file modifications to specified directories or blocks all edits entirely. Use it during debugging, refactoring, or code review to prevent accidental changes outside the focused area, enforced by a PreToolUse hook that gates Edit and Write operations against an allow-list stored in `.claude/.freeze`.
git clone --depth 1 https://github.com/oliver-kriska/claude-elixir-phoenix /tmp/freeze && cp -r /tmp/freeze/plugins/elixir-phoenix/skills/freeze ~/.claude/skills/freezeSKILL.md
# 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`.
Ash Framework — resources, actions, policies, aggregates, calculations,
Compatibility alias for the Elixir/Phoenix plugin's LiveView assigns audit. Invoke explicitly with /lv:assigns.
Inspect LiveView socket assigns for memory bloat — missing temporary_assigns, unused assigns, unbounded lists needing streams, memory estimates. Use when LiveView memory grows or you need to add temporary_assigns.
Project health audit and health check — architecture, performance, tests, dependencies, code quality. Use when assessing overall project health, before releases, or after refactors.
Analyze Phoenix context boundaries and module coupling via mix xref. Use when checking cross-context calls, validating dependencies, before splitting modules, or reviewing architecture.
Brainstorm Elixir/Phoenix features — explore ideas, compare approaches, gather requirements. Use when vague idea, not sure how to approach, or want to discuss before plan.
Interactive briefing of a plan file — explains reasoning, schema decisions, component choices. Use when developers need to understand a plan before approving.
Summarize and review what changed while you were away. Use after a weekend, vacation, or flight to check missed PRs, git commits, Linear tickets, and meetings — one prioritized brief, not a firehose.