Skip to content
cccskills
FreePublished on GitHubEnglish overview

freeze

Limit file edits to a chosen directory and block Edit, Write, and NotebookEdit operations outside it. Keep debugging or module changes within scope, with the restriction remaining active until explicitly removed.

OriginalShow the original description

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

AI rating90/ 100See how to install

Good for

  • Keeping debugging edits within one folder
  • Limiting changes to a single module
  • Preventing accidental edits to unrelated files

Overview

What it does

freeze limits the files an agent can edit to a directory you specify. It blocks Edit, Write, and NotebookEdit operations outside that directory, rather than only displaying a warning. It checks symbolic links against their actual target paths, preventing changes when a link points outside the permitted area.

When it helps

Use it during debugging to prevent changes to unrelated code, or when you want to work on just one module. It lets you give an agent editing work with an explicit boundary around the files it may change.

Example requests

“Use /freeze to restrict edits to src/components.”

Run /freeze again to change the allowed directory. Use /unfreeze to remove the restriction. Paths containing spaces are supported.

Notes

The skill uses Claude Code hooks and gstack scripts. Restrictions persist after the conversation ends. They apply only to the three editing tools listed above: they cannot prevent writes outside the directory through Bash or PowerShell. This is a way to reduce accidental changes, not a security sandbox.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Objective evaluation

AI rated this skill on four points using only the contents of its SKILL.md. Stars and popularity are not taken into account.

Clear instructionsIs it clear when to use it and what it does?
AGoodIt explicitly blocks Edit, Write, and NotebookEdit outside a specified directory.
Concrete stepsAre steps, inputs, outputs, and examples spelled out?
AGoodIt specifies asking for a path, configuring it with freeze-state.sh, checking success, and removing the restriction.
SafetyAre sending data, deleting files, and running commands disclosed?
AGoodIt requires preserving state and seeking inspection when updates fail, and explicitly states that Bash and similar tools bypass the restriction.
Easy setupDoes it need few tools or API keys, and are they documented?
BPartly lackingIt requires Claude Code hooks and scripts within gstack, but provides no installation procedure.

The total counts each point as A = 25, B = 15, C = 5. Rated by AI (OpenAI Codex) as of Oct 20, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (4)

  • SKILL.md4.5 KB
  • bin/check-freeze.sh8.8 KB
  • bin/freeze-state.sh2.8 KB
  • SKILL.md.tmpl4.3 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

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

When to invoke this skill

Blocks Edit, Write and NotebookEdit outside the allowed path. Use when debugging to prevent accidentally "fixing" unrelated code, or when you want to scope changes to one module. Use when asked to "freeze", "restrict edits", "only edit this folder", or "lock down edits".

/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).

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 "$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 hook reads file_path from the Edit/Write tool input JSON, or notebook_path from a NotebookEdit (Jupyter notebook) call (shared real-JSON extractor with /careful — one copy, sourced by both hooks), then checks whether the path starts with the freeze directory. If not, it returns a hookSpecificOutput payload with permissionDecision: "deny" to block the operation (nested under hookSpecificOutput — Claude Code ignores a top-level permissionDecision).

Polarity is fail-closed: a tool payload the hook cannot parse is DENIED, not allowed — a boundary that fails open is not a boundary. A payload that parses but has neither path field (a non-file tool) is allowed. A deny names the tool, the path field, the boundary and /unfreeze. Symlinks are resolved through their FINAL component, so an in-boundary symlink pointing outside the boundary is checked against its target.

The freeze boundary persists until explicitly removed via the state file. The hook script reads it on every Edit/Write/NotebookEdit invocation. Boundaries containing spaces are supported.

Notes

  • The trailing / on the freeze directory prevents /src from matching /src-old
  • Freeze applies to Edit, Write and NotebookEdit only — Read, Bash, PowerShell, Glob, Grep are unaffected
  • This prevents accidental edits, not a security boundary — Bash or PowerShell commands like sed or Set-Content can still modify files outside the boundary
  • To deactivate, run /unfreeze; ending or killing a conversation does not remove persisted state

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

autoplan

FreeSummaryAI rating 80

Run sequential reviews of a plan from business, design, engineering, and developer experience perspectives. Apply six principles to intermediate decisions, then bring close choices, scope questions, and reviewer disagreements to a final approval step.

  • Reviewing a plan from several perspectives
  • Running reviews without answering every intermediate question
  • Considering close choices and disagreements at final approval
garrytan/gstack137KUpdated Oct 19, 2026

benchmark

FreeSummaryAI rating 80

Measure web page loading times, rendering milestones, and resource sizes in a real browser. Save baseline measurements, compare results before and after code changes, and inspect historical trends to spot performance regressions.

  • Saving performance baselines before changes
  • Checking page speed after a code change
  • Finding slow resources and large transfers
garrytan/gstack137KUpdated Oct 19, 2026

benchmark-models

FreeSummaryAI rating 70

Compare Claude, GPT, and Gemini on the same skill or prompt. Get a table of response times, token usage, and costs, with optional AI scoring to help choose a model for the task.

  • Choosing a model for a specific skill
  • Comparing response times and costs
  • Comparing output quality with optional AI scoring
garrytan/gstack137KUpdated Oct 19, 2026

browse

FreeSummaryAI rating 70

Open web pages, follow navigation, and check form flows in a browser. Capture screenshots at different screen sizes, compare pages before and after actions, and collect console errors, the technical messages that can reveal page problems.

  • Checking navigation and form flows
  • Capturing mobile, tablet, and desktop views
  • Recording screenshots and console errors
garrytan/gstack137KUpdated Oct 19, 2026

canary

FreeSummaryAI rating 70

Monitor a live app after deployment for console errors, slower performance, and page failures. Periodic screenshots and comparisons with pre-deployment baselines help identify anomalies and check whether the release is behaving as expected.

  • Monitoring a live app after deployment
  • Checking for performance regressions after a release
  • Comparing screenshots before and after deployment
garrytan/gstack137KUpdated Oct 19, 2026

careful

FreeSummaryAI rating 90

Check shell commands before they run and warn about destructive actions such as file deletion, database removal, and Git history changes. Users can approve ordinary warnings, while certain catastrophic command patterns are denied.

  • Check destructive commands in production
  • Review deletion commands in shared environments
  • Catch Git operations that discard work
garrytan/gstack137KUpdated Oct 19, 2026

See all skills by garrytan

Report a problem with this skill