Skill: wavmson/cmd-guard (version 1.0.0)

--- name: exec-guard description: "命令安全守卫。在执行 shell 命令前进行语义分类（READ/WRITE/NETWORK/DESTRUCTIVE），自动放行安全操作，拦截危险操作。灵感来自 Claude Code 的命令语义分类器。触发词：exec guard、命令安全、安全执行、safe exec。" alwaysLoad: true --- # Exec Guard — 命令安全守卫 灵感来源：Claude Code 的命令语义分类器（bash command classifier）。 ## 核心问题 Agent 需要 exec 权限才能干活，但开了 full 权限又怕翻车。 现有方案要么太松（full：什么都能跑）要么太紧（allowlist：预设白名单太死板）。 **Exec Guard 提供第三条路：语义级安全。** 不是看命令长什么样，而是理解命令**要做什么**。 ## 何时生效 始终生效（`alwaysLoad: true`）。 每次准备调用 `exec` 工具时，先在脑中过一遍本 Skill 的分类规则。 ## 命令分类体系 ### Level 0 — READ（只读）✅ 自动放行 **定义**：只读取信息，不修改任何东西。 ```bash # 典型命令 cat / head / tail / less / more ls / find / locate / which / where grep / rg / ag / ack wc / du / df / free / top / ps echo / printf / date / whoami / id git status / git log / git diff / git show docker ps / docker logs / docker inspect curl -s [GET] / wget -q -O - python3 -c "print(...)" jq / yq（只查询） ``` **判断要点**： - 没有重定向（`>`、`>>`、`|` 到写命令） - 没有 `-i`（in-place）/ `-w`（write）标志 - 没有副作用 ### Level 1 — WRITE（workspace 内写入）✅ 自动放行 **定义**：在 workspace 目录内创建或修改文件。 ```bash # 典型命令 echo "x" > ./file.txt mkdir -p ./dir cp src.txt ./dst.txt mv ./old.txt ./new.txt git add / git commit / git push npm install（在项目目录内） pip install --user touch / tee（workspace 内） sed -i（workspace 内文件） ``` **判断要点**： - 所有写入目标都在 workspace 或 /tmp 内 - 不影响系统文件 - 可恢复（有 git 或可以重新生成） ### Level 2 — WRITE_SYSTEM（系统级写入）⚠️ 需要确认 **定义**：修改 workspace 外的文件或系统配置。 ```bash # 典型命令 sudo apt install systemctl start/stop/restart crontab -e echo "x" >> ~/.bashrc cp file /etc/... chmod / chown（系统目录） docker run / docker-compose up npm install -g ``` **处理方式**： - 告诉用户你要做什么、为什么 - 等用户确认后执行 - 如果用户之前说过"这类操作随便做" → 记住偏好，下次自动放行 ### Level 3 — NETWORK（网络操作）⚠️ 需要确认 **定义**：主动发起网络请求（不是读取本地资源）。 ```bash # 典型命令 curl -X POST / PUT / DELETE wget（下载文件） ssh / scp / rsync（到远程） git clone（新仓库） docker pull pip install（从 PyPI 下载） ``` **处理方式**： - GET 请求到已知安全域名 → 自动放行 - POST/PUT/DELETE → 需要确认 - 安全域名白名单：github.com, pypi.org, npmjs.com, api.openai.com 等 ### Level 4 — DESTRUCTIVE（破坏性）🚫 必须确认 **定义**：不可逆的删除或破坏操作。 ```bash # 高危命令 rm -rf（尤其是带 / 或 ~） dd if=... of=... mkfs / fdisk > /dev/sda git reset --hard git clean -fd docker system prune DROP TABLE / DELETE FROM（数据库） kill -9 / killall reboot / shutdown ``` **处理方式**： 1. **绝对不自动执行** 2. 告诉用户：这个命令会做什么、影响范围、是否可恢复 3. 建议更安全的替代方案（`trash` 替代 `rm`、`git stash` 替代 `git reset --hard`） 4. 用户明确说"执行"后才执行 ## 分类决策树 ``` 命令 → 是否修改任何东西？ ├─ 否 → Level 0 (READ) ✅ └─ 是 → 修改什么？ ├─ workspace/tmp 内的文件 → Level 1 (WRITE) ✅ ├─ 系统文件/全局配置 → Level 2 (WRITE_SYSTEM) ⚠️ ├─ 发起网络请求 → Level 3 (NETWORK) │ ├─ GET + 安全域名 → ✅ │ └─ 其他 → ⚠️ └─ 不可逆删除/破坏 → Level 4 (DESTRUCTIVE) 🚫 ``` ## 复合命令处理 管道和链式命令按**最高危险等级**分类： ```bash # 整体 Level 0（两段都是只读） cat file.txt | grep "pattern" # 整体 Level 4（rm 是破坏性的） find . -name "*.tmp" -exec rm {} \; # → 建议改为：find . -name "*.tmp" -exec trash {} \; # 整体 Level 2（写系统文件） echo "export PATH=..." >> ~/.bashrc && source ~/.bashrc ``` ## 用户偏好学习 记住用户的安全偏好： ``` 用户："npm install 不用问我" → 记住：npm install 在项目目录内 → 自动放行 用户："docker 操作都先问我" → 记住：所有 docker 命令 → 需要确认 用户："sudo 随便用" → 记住：sudo 命令 → 自动放行（但 DESTRUCTIVE 级别仍然确认） ``` 偏好记录到 `memory/` 或 MEMORY.md 中，跨 session 生效。 ## 安全底线（不可覆盖） 即使用户说"什么都自动执行"，以下操作**永远需要确认**： 1. `rm -rf /` 或 `rm -rf ~`（或任何删除根目录/home 目录） 2. `dd` 写入块设备 3. `mkfs` 格式化 4. 任何涉及 `sudo` + 删除的组合 5. `:(){ :|:& };:` 或类似 fork bomb ## 输出格式 当需要确认时，用简洁格式： ``` ⚠️ 这个命令会 [具体影响] 命令：[完整命令] 风险等级：Level X (TYPE) 更安全的替代：[如果有的话] 要执行吗？ ``` ## 与 OpenClaw 的配合 - `security: full` 模式下，Exec Guard 作为**软防护**补充（建议但不强制） - `security: allowlist` 模式下，Exec Guard 帮助**扩展白名单**（自动放行 READ 级别） - `security: deny` 模式下，Exec Guard 不生效（exec 本身就禁用了） ## 使用示例 ``` Agent 内心独白： "用户要我清理 docker 镜像。命令是 docker system prune -a。 分类：Level 4 (DESTRUCTIVE) — 会删除所有未使用的镜像、容器、网络。 不可自动执行。告诉用户影响，等确认。" Agent 回复： "⚠️ docker system prune -a 会删除所有未使用的镜像、容器和网络，释放磁盘空间但无法恢复。 要执行吗？或者我可以先 docker system df 看看占了多少空间。" ```


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)