mcpField
S
safe-mode

safe-mode

github.com/rohitg00安全2.9k147 次安装4 周前更新
代码仓库

关于 safe-mode

面向 Claude Code 的技能,为编码会话添加可选防护。谨慎模式会在执行标记为危险的 Bash 命令前请求确认,锁定模式则将 Edit 和 Write 操作限制在指定目录内。

主要功能

  1. 01对标记的危险命令发出警告
  2. 02将 Edit 和 Write 限制在指定目录
  3. 03同时启用谨慎与锁定模式
  4. 04通过命令清除会话限制

适用场景

  1. 01在定向重构期间限制文件修改
  2. 02代码审查时限定可修改文件
  3. 03为高风险 Shell 命令添加确认提示

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/rohitg00/pro-workflow --skill safe-mode

安装后在 Claude Code 中输入/safe-mode确认已加载。

详细介绍

安全模式

在 AI 编码会话期间,为破坏性操作提供三个级别的保护。

**注意:**这些钩子仅限技能范围 — 只有在调用 /safe-mode 时才会激活。hooks.json 中的全局 permission-request.js 钩子会始终对危险命令发出警告。安全模式在此基础上增加了可选择启用的拦截和目录限制。

模式

谨慎模式
/safe-mode cautious

在执行前拦截 Bash 命令。对危险模式发出警告,但不会拦截 — 由用户决定。

标记的模式:

模式风险
rm -rf / rm -r递归删除
DROP TABLE / DROP DATABASESQL 数据丢失
TRUNCATESQL 数据销毁
git push --force / git push -f重写远程历史
git reset --hard本地历史丢失
git clean -f删除未跟踪文件
git checkout . / git restore .丢弃所有更改
chmod 777允许所有用户写入的权限
将 curl 或 wget 的输出传递给 shell管道执行远程内容
> /dev/sda / dd if=磁盘级操作
:(){ :|:& };:叉炸弹
sudo rm提权删除

**执行结果:**钩子会返回权限 ask,因此 Claude Code 会显示提示,指出匹配的模式,例如 Safe mode: rm with -r or -f。你可以批准或拒绝该命令。即使在自动模式下也会显示此提示。

锁定模式
/safe-mode lockdown <path>

将 Edit 和 Write 操作限制在单个目录树中。防止意外更改无关代码。

工作原理:

  1. 设置允许的路径(绝对路径或相对于仓库根目录的路径)
  2. 每次 Edit/Write 调用都会检查目标文件是否位于允许的路径内
  3. 路径外的操作会被拦截,并显示说明
LOCKDOWN ACTIVE: Edits restricted to src/api/

  Blocked: Edit to src/utils/helpers.ts
  Reason: File is outside the lockdown path (src/api/)

  To edit files outside the lockdown, run: /safe-mode clear

适用场景:

  • 专注重构某个模块,而不触及其他模块
  • 在特定目录中修复错误,同时在其他位置运行测试
  • 为初级开发者设置防护栏 — 限制影响范围
  • 代码审查会话 — 只编辑正在审查的文件

**作用范围:**以项目根目录为依据。设置后会一直生效,直到执行 /safe-mode clear;并且仅在调用过 /safe-mode 的会话中强制执行。

清除
/safe-mode clear

移除当前会话的所有限制。谨慎模式警告和锁定模式限制都会被禁用。

SAFE MODE: All restrictions cleared for this session.

实现方式

调用此技能会注册一个针对 Bash|Edit|Write 的 PreToolUse 钩子,该钩子会运行 scripts/safe-mode-guard.js。技能钩子会在会话剩余时间内保持注册状态。在设置模式之前,防护程序不会执行任何操作。

设置模式

用户运行 /safe-mode <mode> 时,从项目根目录运行防护程序的设置命令:

node "${CLAUDE_PLUGIN_ROOT}/scripts/safe-mode-guard.js" set cautious
node "${CLAUDE_PLUGIN_ROOT}/scripts/safe-mode-guard.js" set lockdown src/api/
node "${CLAUDE_PLUGIN_ROOT}/scripts/safe-mode-guard.js" set clear

然后报告设置命令打印的行。

谨慎模式(Bash)

防护程序会将 tool_input.command 与一组固定的破坏性模式进行匹配:递归或强制执行的 rm、DROP 和 TRUNCATE、强制推送、硬重置、git clean -f、丢弃所有更改、chmod 777、将 curl 或 wget 的输出传递给 shell、磁盘级写入、叉炸弹以及 sudo rm。匹配时会返回 permissionDecision: "ask",并将匹配的模式作为原因。未匹配时则放行。

锁定模式(Edit 和 Write)

防护程序会根据项目根目录解析 tool_input.file_path,跟随符号链接,并检查文件是否位于锁定路径内。路径内的操作会放行。路径外的操作会以状态码 2 退出,从而拦截编辑并告知 Claude 原因。

状态

模式存储在 $TMPDIR/pro-workflow/safe-mode-<hash>.json 中,并以项目根目录为键,因此不同项目不会共用状态:

{ "cautious": true, "lockdownPath": "/Users/dev/project/src/api", "root": "/Users/dev/project" }

set clear 会删除该文件。该文件的生命周期会超出当前会话,因此完成后请清除它;新会话只有在调用 /safe-mode 后才会再次强制执行限制,因为此钩子仅限技能范围。

组合模式

谨慎模式和锁定模式可以同时运行:

/safe-mode cautious
/safe-mode lockdown src/api/

现在你将获得:

  • 针对破坏性操作的 Bash 命令警告
  • 仅允许对 src/api/ 执行 Edit/Write 操作的限制

清除操作会移除这两种模式。

适用场景

情况模式
修改与生产环境相关的代码谨慎
专注重构单个模块锁定
面对不熟悉的代码库,想谨慎行事谨慎
结对编程,限制 AI 的范围锁定
不再需要限制清除

反模式

  • 需要编辑测试时仍保持锁定模式(更新路径或清除锁定)
  • 用安全模式代替 Git 分支(分支保护历史记录,安全模式保护会话)
  • 反复忽略谨慎模式的警告(如果总是继续操作,就将其关闭——错误的信心更糟)

评论

支持 Markdown