freeze
Hard-block Edit/Write outside a chosen directory. Use to scope-lock edits during a focused fix or refactor. Pair with /unfreeze to release.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Hard-block Edit/Write outside a chosen directory. Use to scope-lock edits during a focused fix or refactor. Pair with /unfreeze to release.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Audit context window consumption across LOTRAOM agents, skills, rules, MCP servers, and CLAUDE.md. Report token estimates, flag bloat, recommend trims.
Six-phase root-cause debugging for crashes, build failures, or "why is this broken" reports. Iron Law - no fixes without root cause. Auto-engages /freeze.
Release the directory edit lock set by /freeze. Edit and Write are unrestricted again. No-op if /freeze was never set.
Dispatch an independent Codex verification job for the current changes
Inspect all changed files, group by logical concern, and guide atomic per-concern commits
Check mod compatibility against a new Bannerlord version by reviewing patch targets and GameModel overrides
| name | freeze |
| description | Hard-block Edit/Write outside a chosen directory. Use to scope-lock edits during a focused fix or refactor. Pair with /unfreeze to release. |
| allowed-tools | ["Bash","Read","AskUserQuestion"] |
| hooks | {"PreToolUse":[{"matcher":"Edit","hooks":[{"type":"command","command":"bash ${CLAUDE_PROJECT_DIR}/.claude/skills/freeze/check-freeze.sh"}]},{"matcher":"Write","hooks":[{"type":"command","command":"bash ${CLAUDE_PROJECT_DIR}/.claude/skills/freeze/check-freeze.sh"}]},{"matcher":"NotebookEdit","hooks":[{"type":"command","command":"bash ${CLAUDE_PROJECT_DIR}/.claude/skills/freeze/check-freeze.sh"}]}]} |
Hard-block any Edit, Write, or NotebookEdit to a file outside the chosen directory for the remainder of the session.
Adapted from garrytan/gstack/freeze via TAOM 2026-05-17. Uses the inline-hooks-in-skill-frontmatter pattern: the PreToolUse hooks above only fire while this skill is active — no global settings.json change.
/deep-review and want scope-locked/investigate, which auto-engages this hookUse AskUserQuestion to ask the user which directory to lock to:
Main/Features/<FeatureName>/ — single feature scopeMain/Adapters/ — adapter layer onlyMain/_Module/ModuleData/ — XML data onlyLOTRAOM.Tests/ — tests onlyResolve to absolute path and persist to the state file:
FREEZE_INPUT="<user-provided-path>"
# Resolve relative paths against the project root
if [[ "$FREEZE_INPUT" != /* && "$FREEZE_INPUT" != [A-Za-z]:* ]]; then
FREEZE_DIR="$(cd "$FREEZE_INPUT" 2>/dev/null && pwd)"
else
FREEZE_DIR="$(cd "$FREEZE_INPUT" 2>/dev/null && pwd)"
fi
if [[ -z "$FREEZE_DIR" || ! -d "$FREEZE_DIR" ]]; then
echo "Could not resolve '$FREEZE_INPUT' to a directory."
exit 1
fi
STATE_DIR="${CLAUDE_PROJECT_DIR}/.claude/tmp/freeze"
mkdir -p "$STATE_DIR"
echo "$FREEZE_DIR" > "$STATE_DIR/freeze-dir.txt"
echo "Freeze boundary set: $FREEZE_DIR"
Edits are now locked to
<resolved-path>/. Any Edit, Write, or NotebookEdit outside this directory will be hard-blocked. Run/unfreezeto release.
The PreToolUse hooks declared in this skill's frontmatter activate the moment the skill is invoked. On every Edit/Write/NotebookEdit tool call, check-freeze.sh runs:
.claude/tmp/freeze/freeze-dir.txt)file_path from the tool call's JSON input{"permissionDecision":"deny",...} to block{} to allowThe hook is silent on success and verbose only when blocking, so freeze adds zero noise to normal work.
| Tool | Behavior |
|---|---|
| Edit | Blocked outside boundary |
| Write | Blocked outside boundary |
| NotebookEdit | Blocked outside boundary |
| Read, Glob, Grep | Always allowed (read-only) |
| Bash | Always allowed — sed, tee, > etc. can still bypass freeze. This is not a security boundary. |
MCP server tools (Serena's replace_content, etc.) | Not blocked — these are separate tools. Use Edit/Write for changes you want freeze-protected. |
/Main from matching /Main_old.claude/tmp/ (should be gitignored — verify in .gitignore)