关于 careful
careful 是一款按会话启用的安全技能,会在执行前检查 Bash 和 PowerShell 命令中的破坏性模式。它会对许多高风险操作发出警告,并直接拒绝少数极端危险的命令形式。
主要功能
- 01检测破坏性命令模式
- 02对高风险操作发出警告
- 03拒绝指定的极端危险命令
- 04检查 Bash 和 PowerShell 命令
- 05添加项目级警告模式
适用场景
- 01拦截意外的递归删除命令
- 02检查有风险的数据库或 Git 操作
- 03为项目添加额外命令警告
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ garrytan/ gstack --skill careful安装后在 Claude Code 中输入/careful确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
SKILL.md.tmplbin/check-careful.shhook-extract.shmask-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 --recursive | rm -rf /var/data | 递归删除 |
DROP TABLE / DROP DATABASE | DROP TABLE users; | 数据丢失 |
TRUNCATE | TRUNCATE orders; | 数据丢失 |
git push --force / -f | git push -f origin main | 重写历史记录 |
git reset --hard | git reset --hard HEAD~3 | 丢失未提交的工作 |
git checkout . / git restore . | git checkout . | 丢失未提交的工作 |
kubectl delete | kubectl delete pod | 影响生产环境 |
docker rm -f / docker system prune | docker 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 或 -Force | gci | ri -r -fo |
cmd rd /s、rmdir /s、del /s、erase /s | cmd /c rd /s /q C:\proj |
Format-Volume、Clear-Disk、Clear-Content、[IO.Directory]::Delete、[IO.File]::Delete | Clear-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,可使用 # 注释。系统会在内置规则族之后检查这些规则,因此配置只能添加规则,不能屏蔽基线警告。无效的正则表达式行会被跳过。
若要停用,请结束对话或开始新对话。钩子仅限当前会话。