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)