careful
- 信任分
- 87/100
- 兼容 Agent
- 1
- 领域
- 通用
- 兼容 Agent
- Claude Code
- 信任分
- 87 / 100 · 社区维护
- 作者 / 版本 / 许可
- @garrytan · v0.1.0 · 未声明 license
- 安装命令数
- 1 条
需要注意: 未限定 allowed-tools,默认拥有全部工具权限。;检出高风险片段:rm_rf_root
想读作者英文原文? ↓ 滚到正文区切换 · 在 GitHub 查看 ↗
设计思路
careful 是一个「session 级安全模式开关」——开启后,bash 命令在执行前会被一个 hook 扫一遍,命中危险模式就让 LLM 停下来问你一句再决定。它不是杀菌剂、不是审计工具,是给 agent 加一层最后的防呆刹车,避免 rm -rf /var/data 这种 typo 一气呵成。作者把保护清单和安全例外都列得极清楚,没有暗箱。
受保护的命令模式(直接抄作者原文)
| 模式 | 例子 | 风险 |
|---|---|---|
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 |
容器 / 镜像丢失 |
安全例外
这些清理类命令是允许直接通过的:rm -rf node_modules / .next / dist / __pycache__ / .cache / build / .turbo / coverage。日常清缓存不会被打断。
工作机制
hook 从 Bash 工具的 tool input JSON 里读到要执行的命令字符串,按上述模式匹配;命中就返回 permissionDecision: "ask",附带警告语;用户可以选择继续或取消。hook 是 session 范围,新开会话或结束当前 session 会自动失效,不需要主动卸载。
适合谁
- 让 LLM 自动跑命令时希望多一道防呆的人
- 给新来的同事 / 实习生跑 agent,担心他们直接同意危险操作
- 在生产代码库工作,怕一时手滑
何时不该用
- 一次性的 sandbox / 容器内——本来就隔离了,再加 hook 反而打断节奏
- 你需要做的就是大量删除——guardrails 会一直打断
配套
和 unfreeze(解冻分支)、finishing-a-development-branch 配合,发布前的危险操作链路全程被守护。
/careful — Destructive Command Guardrails
Safety mode is now active. Every bash command will be checked for destructive patterns before running. If a destructive command is detected, you'll be warned and can choose to proceed or cancel.
mkdir -p ~/.gstack/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/analytics/skill-usage.jsonl 2>/dev/null || true
What's protected
| Pattern | Example | Risk |
|---|---|---|
rm -rf / rm -r / rm --recursive |
rm -rf /var/data |
Recursive delete |
DROP TABLE / DROP DATABASE |
DROP TABLE users; |
Data loss |
TRUNCATE |
TRUNCATE orders; |
Data loss |
git push --force / -f |
git push -f origin main |
History rewrite |
git reset --hard |
git reset --hard HEAD~3 |
Uncommitted work loss |
git checkout . / git restore . |
git checkout . |
Uncommitted work loss |
kubectl delete |
kubectl delete pod |
Production impact |
docker rm -f / docker system prune |
docker system prune -a |
Container/image loss |
Safe exceptions
These patterns are allowed without warning:
rm -rf node_modules/.next/dist/__pycache__/.cache/build/.turbo/coverage
How it works
The hook reads the command from the tool input JSON, checks it against the
patterns above, and returns permissionDecision: "ask" with a warning message
if a match is found. You can always override the warning and proceed.
To deactivate, end the conversation or start a new one. Hooks are session-scoped.