mcpField
C
careful

careful

github.com/garrytanAgent 工作流138.1k379 次安装今天更新
代码仓库

关于 careful

careful 是一款按会话启用的安全技能,会在执行前检查 Bash 和 PowerShell 命令中的破坏性模式。它会对许多高风险操作发出警告,并直接拒绝少数极端危险的命令形式。

主要功能

  1. 01检测破坏性命令模式
  2. 02对高风险操作发出警告
  3. 03拒绝指定的极端危险命令
  4. 04检查 Bash 和 PowerShell 命令
  5. 05添加项目级警告模式

适用场景

  1. 01拦截意外的递归删除命令
  2. 02检查有风险的数据库或 Git 操作
  3. 03为项目添加额外命令警告

安装

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

$npx skills add https://github.com/garrytan/gstack --skill careful

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

SKILL.md.tmpl
bin/
check-careful.sh
hook-extract.sh
mask-commit-message.awk

详细介绍

/careful — 危险命令防护

安全模式现已启用。执行前,系统会检查每条 Bash 和 PowerShell 命令是否包含危险模式。如果检测到危险命令,系统会发出警告,你可以选择继续或取消。

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":"careful","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

保护范围

模式示例风险
rm -rf / rm -r / rm --recursiverm -rf /var/data递归删除
DROP TABLE / DROP DATABASEDROP TABLE users;数据丢失
TRUNCATETRUNCATE orders;数据丢失
git push --force / -fgit push -f origin main重写历史记录
git reset --hardgit reset --hard HEAD~3丢失未提交的工作
git checkout . / git restore .git checkout .丢失未提交的工作
kubectl deletekubectl delete pod影响生产环境
docker rm -f / docker system prunedocker system prune -a容器/镜像丢失

PowerShell 和 cmd(Windows)

此钩子也会检查 PowerShell 工具(Claude Code 的主要 Windows shell),以及从 Bash 启动的任何 pwsh/powershell/cmd。匹配时不区分大小写,也会检查命令位置上的别名,接受参数前缀(-r、-fo),并去除 cmd 的 ^ 转义符。上表中的所有规则同样适用。

模式示例
Remove-Item/rm/ri/del/erase/rd/rmdir + -Recurse 或 -Forcegci | ri -r -fo
cmd rd /s、rmdir /s、del /s、erase /scmd /c rd /s /q C:\proj
Format-Volume、Clear-Disk、Clear-Content、[IO.Directory]::Delete、[IO.File]::DeleteClear-Disk -Number 1
-EncodedCommand、iex、启动 shell 的 Start-Process、& $cmd(无法检查)irm $url | iex

**PowerShell 检查尽力而为。**字符串匹配无法识别运行时构建的命令。如需强制拦截,请添加 Claude Code 权限拒绝规则,它会解析 PowerShell 及其别名:在 .claude/settings.json 中添加 "deny": ["PowerShell(Remove-Item *)"]。此钩子通过 bash 运行,因此 Windows 需要 Git Bash。

安全例外

以下模式允许执行,不会发出警告:

  • rm -rf node_modules / .next / dist / __pycache__ / .cache / build / .turbo / coverage

工作原理

钩子会从工具输入 JSON 中读取 tool_name 和命令,并根据上述模式进行检查。若匹配,则返回包含 permissionDecision: "ask" 和警告原因的 hookSpecificOutput 负载(该决定必须嵌套在 hookSpecificOutput 下——Claude Code 会忽略顶层的 permissionDecision)。你始终可以选择忽略 MEDIUM 级警告并继续。

HIGH 级别(强制拒绝)

两种灾难性操作会被拒绝,而非询问:对 /、~ 或 $HOME 执行 rm -r/-R,以及强制推送到仓库的默认分支。仅适用于简单命令(不含 ;、&&、||、|、换行符)——复合命令会降级为 MEDIUM 级询问;--force-with-lease 永远不会被判定为 HIGH 级别。这只是尽力而为的建议性强制拦截,不构成策略边界:唯一的绕过方式是结束选择加入的、仅限当前会话的 /careful 会话。

项目模式(仅可添加)

在 ~/.gstack/careful-patterns.txt(全局)或 ~/.gstack/projects/<slug>/careful-patterns.txt(按项目)中添加警告规则——每行一条 POSIX ERE,可使用 # 注释。系统会在内置规则族之后检查这些规则,因此配置只能添加规则,不能屏蔽基线警告。无效的正则表达式行会被跳过。

若要停用,请结束对话或开始新对话。钩子仅限当前会话。

评论

支持 Markdown