用途:把本会话中的文件编辑限制在一个目录(冻结目录)内,直到解除。适用于需要把改动范围锁死在某个子目录、避免误改其他代码的场景。
主要能力:调用该技能会注册一个 PreToolUse 钩子,作用于 Edit|Write|MultiEdit|NotebookEdit。Claude Code 会在本会话后续所有轮次保持该钩子生效。每次编辑时钩子会解析写入实际落点,若在冻结目录之外则以退出码 2 拒绝。允许:冻结目录内的文件、冻结目录下新建子目录中的新文件。拒绝:经由 .. 逃逸到其他目录、同前缀的兄弟目录(如 <frozen>-evil)、指向外部的符号链接、指向外部缺失文件的悬空链接,以及不带路径的编辑调用。符号链接会被跟随。
使用方式(命令保持原样): /ork:freeze src/hooks # 将编辑围栏设为 src/hooks /ork:freeze # 显示当前围栏 /ork:freeze off # 解除围栏 再次以其他目录调用会移动围栏;不存在的目录会被拒绝且保留原围栏。会话状态记录在 .claude/state/freeze/<session-id>.json,参数会相对项目目录解析、跟随符号链接并记录真实路径。
被拦截时:拒绝原因会指明目标与冻结目录,应停下并请操作者放宽或解除冻结,不要改用 Bash(sed -i、cat >、cp)绕过——围栏仅覆盖编辑工具,绕过会违背启用它的目的。
限制:只覆盖编辑工具,Bash、MCP 工具与子进程仍可在任意位置写入;每个会话仅一个围栏,状态存放在项目的 .claude/state/freeze/;若钩子无法读取输入或状态文件,会选择阻止而非猜测。实现为 scripts/freeze-guard.mjs(Node,无依赖),测试位于 tests/unit/test-freeze-guard.mjs。目录名中含 $、反引号或双引号不受支持。