# Freeze File Edits

Restricts file edits to one directory for the rest of the session.

- Repository: https://github.com/garrytan/gstack (138584 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add garrytan/gstack --skill freeze -g -a claude-code -y`
Codex: `npx skills add garrytan/gstack --skill freeze -g -a codex -y`
Cursor: `npx skills add garrytan/gstack --skill freeze -g -a cursor -y`
Gemini CLI: `npx skills add garrytan/gstack --skill freeze -g -a gemini-cli -y`

## Description

Restrict file edits to a specific directory for the session. (gstack)

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

<!-- AUTO-GENERATED from SKILL.md.tmpl, do not edit directly -->
<!-- Regenerate: bun run gen:skill-docs -->

# /freeze, Restrict Edits to a Directory

Lock file edits to a specific directory. Any Edit, Write or NotebookEdit
operation targeting a file outside the allowed path will be **blocked** (not
just warned).

```bash
GSTACK_STATE_ROOT=$(~/.claude/skills/gstack/bin/gstack-paths --get GSTACK_STATE_ROOT); : "${GSTACK_STATE_ROOT:?gstack-paths failed; reinstall with ./setup or /gstack-upgrade}"
mkdir -p "$GSTACK_STATE_ROOT"/analytics
echo '{"skill":"freeze","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}'  >> "$GSTACK_STATE_ROOT"/analytics/skill-usage.jsonl 2>/dev/null || true
```

## Setup

Ask the user which directory to restrict edits to. Use AskUserQuestion:

- Question: "Which directory should I restrict edits to? Files outside this path will be blocked from editing."
- Text input (not multiple choice), the user types a path.

Once the user provides a directory path:

Set the user-selected boundary with the shared state writer. It resolves the physical absolute path and serializes replacement with investigation cleanup:
```bash
bash "$HOME/.claude/skills/gstack/freeze/bin/freeze-state.sh" set "<user-provided-path>"
```

Only report success if the helper succeeds. On `FREEZE_BUSY` or unexpected state, preserve it and ask the user to inspect recovery after any active writer finishes; never write or delete the state file directly.

Tell the user: "Edits are now restricted to `<path>/`. Any Edit, Write or
NotebookEdit outside this directory will be blocked. To change the boundary, run `/freeze`
again. To remove it, run `/unfreeze`."

## How it works

The rest: https://github.com/garrytan/gstack/blob/HEAD/freeze/SKILL.md
