phx-freeze

$npx mdskill add oliver-kriska/claude-elixir-phoenix/phx-freeze

Scopes or freezes which files Claude can edit during focused tasks.

  • Prevents accidental edits outside allowed directories during debugging or refactoring.
  • Depends on a sentinel file at .claude/.freeze and a PreToolUse hook script.
  • Reads the .freeze file to determine allowed path prefixes or full freeze.
  • Blocks Edit/Write/NotebookEdit operations outside the allow-list via the hook.

SKILL.md

.github/skills/phx-freezeView on GitHub ↗
---
name: phx-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.
---

# 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`.

More from oliver-kriska/claude-elixir-phoenix

SkillDescription
ash-frameworkAsh Framework — resources, actions, policies, aggregates, calculations, AshPhoenix.Form, LiveView, migrations. Use when generating resources via mix ash.codegen, editing changes, checks, types, validations, or domain code interfaces.
catchupSummarize 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.
cc-changelog|
codex-abRun an A/B codex review experiment — holistic codex review vs 3 focused dimension passes (security, ecto, liveview) on the branch diff, classify findings, report a panel-value verdict. Use when the branch is fresh, before any codex review runs.
compound-docsSearchable Elixir/Phoenix/Ecto solution documentation system with YAML frontmatter. Builds institutional knowledge from solved problems. Use when consulting past solutions before investigating new issues.
docs-check|
ecto-n1-checkDetect N+1 query anti-patterns specifically — Repo calls inside Enum/for
ecto-patternsEcto patterns — schemas, changesets, queries, migrations, Multi, associations, preloads, upserts. Use when editing Repo calls, Ecto.Query, or schema fields. Skip for Ash.
ecto:constraint-debugDebug Ecto constraint violations - trace triggers, check migrations, find duplicate data. Use when seeing unique_constraint, foreign_key_constraint, or check_constraint errors.
ecto:n1-checkDetect N+1 query anti-patterns specifically — Repo calls inside Enum/for loops, missing preloads on associations. Use when N+1 is explicitly suspected, NOT for unrelated Ecto questions or wider database performance.