unfreeze
- 信任分
- 92/100
- 兼容 Agent
- 1
- 领域
- 通用
- 兼容 Agent
- Claude Code
- 信任分
- 92 / 100 · 已通过审计
- 作者 / 版本 / 许可
- @garrytan · v0.1.0 · 未声明 license
- 安装命令数
- 1 条
需要注意: 未限定 allowed-tools,默认拥有全部工具权限。
想读作者英文原文? ↓ 滚到正文区切换 · 在 GitHub 查看 ↗
unfreeze 是 /freeze 的对偶:把上一次 /freeze 设置的「只允许编辑某目录」边界清掉,让 edit 在所有目录恢复自由。
设计思路
作者把「冻结 / 解冻」当成一对临时锁,用来在执行某个高风险任务时约束 agent 的写范围。/freeze 把允许的目录写到 $STATE_DIR/freeze-dir.txt;/unfreeze 删掉这个文件即解锁——hook 仍注册在 session 里,但因为没 state 文件,hook 默认放行一切。要再次冻结,再跑一次 /freeze。
工作流
① 跑 eval "$(~/.claude/skills/gstack/bin/gstack-paths)" 拿 GSTACK_STATE_ROOT;② 检查 $STATE_DIR/freeze-dir.txt 是否存在;存在就读出 PREV,删除文件,告诉用户 "Freeze boundary cleared (was: $PREV). Edits are now allowed everywhere.";不存在则告知 "No freeze boundary was set.";③ 全程顺手 append 一条 telemetry 到 ~/.gstack/analytics/skill-usage.jsonl。
与 freeze 的关系
/freeze <dir>写 state 文件,把允许写的范围限定在<dir>/unfreeze删 state 文件解锁- hook 在 session 里始终注册,所以无须重新挂 hook,只是当 state 不存在时变成 no-op
适合的场景
/freeze任务跑完,把边界主动撤掉- agent 误操作了
/freeze想立即解锁 - 切到新任务前先 reset 写权限
何时不要用
- 你压根没跑过
/freeze:跑了也只是 echo "No freeze boundary was set." - 想精细收紧边界而非解锁:直接
/freeze设新目录覆盖即可
配套
freeze(建立写边界)、continuous-checkpoint(冻结期间常配套自动 commit)、ship(合并前先 unfreeze 让 /ship 可改各处)、autoplan(在计划模式下也常配套使用 freeze / unfreeze)。
/unfreeze — Clear Freeze Boundary
Remove the edit restriction set by /freeze, allowing edits to all directories.
mkdir -p ~/.gstack/analytics
echo '{"skill":"unfreeze","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/analytics/skill-usage.jsonl 2>/dev/null || true
Clear the boundary
eval "$(~/.claude/skills/gstack/bin/gstack-paths)"
STATE_DIR="$GSTACK_STATE_ROOT"
if [ -f "$STATE_DIR/freeze-dir.txt" ]; then
PREV=$(cat "$STATE_DIR/freeze-dir.txt")
rm -f "$STATE_DIR/freeze-dir.txt"
echo "Freeze boundary cleared (was: $PREV). Edits are now allowed everywhere."
else
echo "No freeze boundary was set."
fi
Tell the user the result. Note that /freeze hooks are still registered for the
session — they will just allow everything since no state file exists. To re-freeze,
run /freeze again.