К основному содержанию
скилл Claude Code CX Codex Cursor GitHub Copilot

freeze · garrytan — скилл для Claude Code: что делает и как установить

Хук блокирует Edit, Write и NotebookEdit за пределами выбранной папки. Отказ, а не предупреждение.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add garrytan/gstack --skill freeze -a claude-code
Открыть на GitHub

Что делает freeze

Скилл спрашивает, какую папку считать границей, и записывает путь через freeze-state.sh. Дальше на каждый вызов Edit, Write и NotebookEdit срабатывает хук check-freeze.sh: он достаёт file_path из входа инструмента или notebook_path у блокнота Jupyter и сравнивает с границей. Не совпало — правка блокируется решением permissionDecision: deny. Не предупреждение, именно отказ.

Логика fail-closed. Если хук не разобрал payload, изменение отклоняется: граница, которая пропускает непонятное, перестаёт быть границей. Symlink сверяется по конечному компоненту, поэтому ссылка внутри папки, ведущая наружу, проверяется по цели. Замыкающий слэш не даёт /src совпасть с /src-old, пробелы в пути поддерживаются. Состояние лежит в файле и живёт дольше разговора — закрытие сессии его не снимает.

Хук висит только на редактировании файлов, так что Read, Bash, Glob и Grep работают как обычно. Проверьте это до того, как положитесь на скилл: sed или Set-Content из Bash спокойно правят файлы за границей. Это защита от случайных правок, а не граница безопасности. Снять ограничение — /unfreeze, сдвинуть — снова /freeze.

Какие задачи решает

  • не дать агенту править файлы вне src/
  • зафиксировать границу правок на долгую сессию
  • поймать случайную запись в соседний пакет монорепозитория
  • убедиться, что symlink не уводит правку за пределы папки
  • снять ограничение, когда работа в папке закончена

Примеры запросов агенту

  • `/freeze` — ограничь правки папкой `packages/api/`
  • Залочь редактирование на `src/` до конца сессии
  • `/unfreeze` — снимаем границу

Как установить freeze

1Через Skills CLI (Vercel)

npx skills add garrytan/gstack --skill freeze -a claude-code

2Вручную: положить файлы

~/.claude/skills/freeze/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/freeze/

Из того же набора12

Весь набор →
gstack garrytan Роутер по набору скиллов gstack: выбирает нужный скилл под задачу и запускает его. Пригодится, когда скиллов много и вы не помните, какой за что отвечает. Claude Code CX Codex Cursor +1 24 100установок plan-design-review garrytan Скилл для дизайн-ревью планов и черновиков перед началом разработки. Находит пробелы в UX и интерфейсных решениях и сразу вносит правки в план. Claude Code CX Codex Cursor +1 474установок qa garrytan Скилл для автоматизированного поиска и фиксации ошибок в браузере, API, CLI, джобах и вебхуках. Работает с Bash, поиском по файлам и вебом. Claude Code CX Codex Cursor +1 457установок cso garrytan Проверяет код и инфраструктуру на уязвимости, а в полном режиме добавляет воспроизведение и варианты исправления. Нужен для аудита проекта. Claude Code CX Codex Cursor +1 405установок qa-only garrytan Находит и фиксирует баги в браузерных сценариях, API, CLI и воркерах без изменения кода. Пригодится для чистого тестирования перед релизом. Claude Code CX Codex Cursor +1 395установок careful garrytan Скилл проверяет команды терминала перед запуском и блокирует опасные операции вроде удаления баз данных или сброса веток Git. Пригодится при выдаче агенту доступа к терминалу. Claude Code CX Codex Cursor +1 375установок plan-devex-review garrytan Интерактивное ревью плана: скилл смотрит, где споткнётся тот, кто впервые открывает проект, и задаёт вопросы до начала работы. Claude Code CX Codex Cursor +1 347установок setup-browser-cookies garrytan Скилл переносит куки из настоящего браузера Chromium в сеанс headless-браузера. Нужен, чтобы тестировать сайты, на которых требуется авторизация, без ввода пароля каждый раз. Claude Code CX Codex Cursor +1 342установок

Другие версии freeze

Похожие

agent-memory-systems sickn33 Скилл для проектирования памяти агентов с разделением по пользователям и тенантам. Помогает построить RAG, историю диалогов и хранилище векторов так, чтобы данные одного клиента не утекали к другому. Claude Code CX Codex Cursor +1 2 000установок vision-analysis MiniMax-AI Описывает картинки, вытаскивает текст и разбирает интерфейсы через инструмент MiniMax. Пригодится, когда агенту нужно понять, что на скриншоте или макете. Claude Code CX Codex Cursor +1 2 700установок sigma sanyuan0704 Персональный тьютор с диагностикой уровня, сократовским диалогом и контролем освоения. Не даёт готовых ответов, ведёт через вопросы до 80%-го порога. Claude Code CX Codex Cursor +1 4 800установок hypothesis-generation K-Dense-AI Скилл превращает научные наблюдения в проверяемые гипотезы, альтернативные объяснения и планы анализа для пререгистрации, отделяя предположения от фактов. Claude Code CX Codex Cursor +1 2 100установок simplify-code Hermes Agent (inspired by Claude Code /simplify) Проверяет недавние изменения кода четырьмя параллельными субагентами и убирает оправданные упрощения. Нужен для чистки работающего кода после правок. Claude Code CX Codex Cursor +1 345установок draft-nda phuryn Скилл помогает составить детальное соглашение о неразглашении (NDA) между двумя сторонами с учётом типов информации, юрисдикции и пометками разделов для проверки юристом. Claude Code CX Codex Cursor +1 2 600установок setup-matt-pocock-skills Matt Pocock Скилл настраивает репозиторий для инженерных скиллов Matt Pocock: задаёт трекер задач, метки триажа и расположение доменной документации. Запустите его перед первым использованием остальных скиллов. Claude Code 1 052 851установок to-tickets Matt Pocock Разбивает план, спецификацию или переписку на небольшие сквозные задачи и отмечает, какие из них блокируют остальные. Пригодится, когда нужно согласовать порядок работы до публикации задач в трекере. Claude Code 711 230установок

Вопросы о freeze

Как установить freeze в Claude Code?

Одной командой: npx skills add garrytan/gstack --skill freeze -a claude-code. После неё скилл лежит в ~/.claude/skills/freeze/SKILL.md.

Что делает freeze?

Запирает правки внутри одной папки: Edit, Write и NotebookEdit за её пределами получают отказ от хука. Граница держится до /unfreeze.

Правки через Bash тоже блокируются?

Нет. Хук стоит только на Edit, Write и NotebookEdit, а sed или Set-Content из Bash файлы за границей меняют. Скилл страхует от случайных правок, барьером безопасности он не является.

Исходный текст

SKILL.md · MIT
---
name: freeze
version: 0.1.0
description: Restrict file edits to a specific directory for the session. (gstack)
triggers:
  - freeze edits to directory
  - lock editing scope
  - restrict file changes
allowed-tools:
  - Bash
  - Read
  - AskUserQuestion
hooks:
  PreToolUse:
    - matcher: "Edit"
      hooks:
        - type: command
          command: 'bash -c "exec bash \"$HOME/.claude/skills/gstack/freeze/bin/check-freeze.sh\""'
          statusMessage: "Checking freeze boundary..."
    - matcher: "Write"
      hooks:
        - type: command
          command: 'bash -c "exec bash \"$HOME/.claude/skills/gstack/freeze/bin/check-freeze.sh\""'
          statusMessage: "Checking freeze boundary..."
    - matcher: "NotebookEdit"
      hooks:
        - type: command
          command: 'bash -c "exec bash \"$HOME/.claude/skills/gstack/freeze/bin/check-freeze.sh\""'
          statusMessage: "Checking freeze boundary..."
---
<!-- 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 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

© garrytan · MIT · garrytan/gstack

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой