freeze

其他 社区 v0.1.0
解读按原文结构重写,命令、链接、术语均保留;右侧可核对作者原始 SKILL.md

设计思路

freeze 是 gstack 的「编辑边界锁」——告诉 hook:从现在起,Edit / Write 工具只能改某个目录里的文件,超出边界直接 deny(不是 warn)。设计目的是给 agent 一个「围栏」,让它明确知道哪些文件是这个 task 该碰的,避免误改不相关代码。注意作者明确说这不是安全边界——bash sed 这种命令仍然能在围栏外动文件,但能挡住 90% 的手滑误改。

Setup 流程

# 1. 用 AskUserQuestion 让用户输入要锁的目录(文本输入,不是单选)
# 2. 解析为绝对路径
FREEZE_DIR=$(cd "<user-provided-path>" 2>/dev/null && pwd)

# 3. 加尾斜杠避免 /src 误匹配 /src-old
FREEZE_DIR="${FREEZE_DIR%/}/"

# 4. 写入 gstack state 文件
eval "$(~/.claude/skills/gstack/bin/gstack-paths)"
STATE_DIR="$GSTACK_STATE_ROOT"
mkdir -p "$STATE_DIR"
echo "$FREEZE_DIR" > "$STATE_DIR/freeze-dir.txt"

设置完后会回执:「Edits are now restricted to <path>/. Any Edit or Write outside this directory will be blocked. To change the boundary, run /freeze again. To remove it, run /unfreeze or end the session.」

工作机制

hook 读 Edit/Write 工具调用里的 file_path,检查它是否以 freeze directory 开头——不是就返回 permissionDecision: "deny" 直接拦截。

关键边界条件

  • 尾斜杠不可省——防 /src 误匹配 /src-old
  • 只管 Edit / Write——Read / Bash / Glob / Grep 不受影响。
  • 不是安全边界——bash 里的 sed / mv 仍可绕过。
  • session 范围——重开会话就失效,或显式 /unfreeze 解除。

适合谁

  • 让 agent 改某个模块时希望 sandbox 化的工程师
  • 重构 / 整理 monorepo 单包时怕动到别的包
  • 给新人用 agent 时多一道防误改

不适合

  • 任务本身需要跨目录改动(big refactor)——围栏会一直拦
  • 已经有 git pre-commit hook 防御足够时

配套

unfreeze(解除)、careful(命令级危险拦截)、git-guardrails-claude-code(git 级 PreToolUse 拦截)一起组成多层防护。

流狐档案 作者与许可取自来源;运行、权限和网络为流狐检测或估算
流狐分类
通用
作者声明 Agent
未找到明确声明;不据此推断已兼容或已测试
静态检查
92 / 100 · 启发式扫描,不代表运行安全
作者 / 版本 / 许可
@garrytan · v0.1.0 · 未声明 license
流狐 Token 估算
低消耗
流狐接入估算
即装即用
是否需要外部 API Key
未发现要求
检测到的系统要求
macOS · Linux · Windows
底层运行要求
Bun
检测到的文件与系统行为
  • 只读
  • 允许写入 / 修改
检测到的网络行为
仅限本地
安装命令数
无(仅作为资料)

档案由构建时根据 SKILL.md 与安装命令自动衍生,可能与作者实际意图存在差异。

需要注意: 未限定 allowed-tools,默认拥有全部工具权限。

输出预览 freeze.preview
作者没有在当前 SKILL.md 中定义固定输出样例。

讨论

基于 GitHub Discussions。登录 GitHub 即可参与讨论、点赞、订阅更新。