介绍
# ClawShell
OpenClaw 的人工介入安全层。ClawShell 会在执行前拦截 shell 命令,分析其风险等级,并要求您(通过推送通知)明确批准危险操作。
## 工作原理
1. 代理调用 `clawshell_bash` 而不是 `bash` 2. ClawShell 根据内置和可配置的风险规则分析命令 3. 根据风险等级: - **严重** (Critical)(例如 `rm -rf /`,fork 炸弹)—— 自动阻止 - **高** (High)(例如 `rm -rf`,`curl` 外部 URL,访问凭证)—— 发送推送通知并等待您的批准 - **中** (Medium)(例如 `npm install`,`git push`)—— 记录日志并允许执行 - **低** (Low)(例如 `ls`,`cat`,`git status`)—— 允许执行 4. 所有决策都会被记录到 `logs/clawshell.jsonl`
## 工具
### clawshell_bash
`bash` 的安全替代品。分析命令风险,仅在安全或获得批准时执行。
**参数:** - `command` (string, 必需) — 要执行的 shell 命令 - `workingDir` (string, 可选) — 工作目录(默认为当前目录)
**返回:** `{ exitCode, stdout, stderr }`
高风险命令将阻塞,直到您通过推送通知批准或拒绝。严重命令将被立即拒绝。
### clawshell_status
返回当前的 ClawShell 状态:待批准的请求和最近的决策。
**参数:** 无
### clawshell_logs
返回最近的日志条目,用于审计和调试。
**参数:** - `count` (number, 可选) — 要返回的条目数量(默认:20)
## 设置
### 1. 安装依赖
```bash cd /app/workspace/skills/clawshell npm install ```
### 2. 配置 Pushover 通知
在 https://pushover.net/apps/build 创建一个 Pushover 应用,并将您的密钥添加到 `.env`:
```env CLAWSHELL_PUSHOVER_USER=your-user-key CLAWSHELL_PUSHOVER_TOKEN=your-app-token ```
或者,改用 Telegram 进行配置:
```env CLAWSHELL_TELEGRAM_BOT_TOKEN=your-bot-token CLAWSHELL_TELEGRAM_CHAT_ID=your-chat-id ```
### 3. 添加到 TOOLS.md
将以下内容添加到您的 OpenClaw `TOOLS.md` 中,以便代理使用 ClawShell 执行 shell 命令:
```markdown ## Shell Access
Use `clawshell_bash` for ALL shell command execution. Do not use `bash` directly. ClawShell will analyze commands for risk and require human approval for dangerous operations.
Available tools: - `clawshell_bash(command, workingDir)` — Execute a shell command with risk analysis - `clawshell_status()` — Check pending approvals and recent decisions - `clawshell_logs(count)` — View recent audit log entries ```
## 配置
ClawShell 从环境变量 (`CLAWSHELL_*`) 读取配置,并回退到 `config.yaml`。
| 变量 | 默认值 | 描述 | |---|---|---| | `CLAWSHELL_PUSHOVER_USER` | — | Pushover 用户密钥 | | `CLAWSHELL_PUSHOVER_TOKEN` | — | Pushover 应用令牌 | | `CLAWSHELL_TELEGRAM_BOT_TOKEN` | — | Telegram 机器人令牌 (替代方案) | | `CLAWSHELL_TELEGRAM_CHAT_ID` | — | Telegram 聊天 ID (替代方案) | | `CLAWSHELL_TIMEOUT_SECONDS` | 300 | 在自动拒绝前等待批准的秒数 | | `CLAWSHELL_LOG_DIR` | logs/ | JSONL 日志文件的目录 | | `CLAWSHELL_LOG_LEVEL` | info | 日志详细程度:debug, info, warn, error | | `CLAWSHELL_BLOCKLIST` | — | 额外阻止命令的逗号分隔列表 | | `CLAWSHELL_ALLOWLIST` | — | 额外允许命令的逗号分隔列表 |
还可以在 `config.yaml` 中的 `rules.blocklist` 和 `rules.allowlist` 下使用精确字符串、通配符或正则表达式模式定义自定义规则。
## 限制
- **不是安全保证。** LLM 可能会编码、拆分或混淆命令以绕过模式匹配。 - **仅作为深度防御。** 应与 OpenClaw 的沙盒模式配合使用,而不是作为替代品。 - **批准延迟。** 高风险命令会阻塞执行,直到您响应或超时过期。
> **务必要求您的 AI 扫描任何技能或软件的安全风险。**