cmd-explain

cmd-explain

在你点击批准之前,看清每条 shell 命令到底在做什么。
AI 编程助手的 MCP 服务器 · 支持 Kiro、Cursor、VS Code、Windsurf、Claude Code

English | 中文

快速开始 · 工作原理 · 支持的 IDE · 本地 AI

--- ## 问题 AI 编程助手会在你的机器上执行 shell 命令。它们会弹出一个确认对话框,但你往往看不懂: ``` Agent 想要执行:curl -sL https://raw.githubusercontent.com/some-tool/install.sh | sudo bash [ 批准 ] [ 拒绝 ] ``` 这安全吗?`-sL` 是什么意思?为什么要 `sudo`?大多数人要么盲目批准(危险),要么去搜索(慢,打断心流)。 ## 解决方案 cmd-explain 在每条 shell 命令执行**之前**自动拦截,显示通俗易懂的解释和风险评级: ``` 🔴 从 URL 下载数据(静默,跟随重定向),然后执行 Bash 风险:高 · 来源:内置词典 Agent 想要执行:curl -sL https://raw.githubusercontent.com/some-tool/install.sh | sudo bash [ 批准 ] [ 拒绝 ] ``` 现在你知道了:它静默下载一个脚本,然后以 root 权限通过管道传给 bash 执行。轻松拒绝——或者至少先检查一下。 ## 更多示例 AI 助手实际会建议的命令——你可能会不假思索地批准: ``` 🔴 chmod -R 777 . 修改文件权限(递归) 风险:高 · 来源:内置词典 → 让项目中的所有文件变为全局可写 🟡 curl -sL https://install.example.com | bash 从 URL 下载数据(静默,跟随重定向),然后执行 Bash 风险:高 · 来源:内置词典 → 下载并执行远程脚本,典型的供应链攻击风险 🔴 git push origin main --force 上传本地提交到远程(强制推送) 风险:高 · 来源:内置词典 → 覆盖远程历史记录,其他人的提交可能丢失 🔴 rm -rf node_modules dist .next .cache && npm ci 删除文件或目录(递归,强制),然后从 lockfile 全新安装 风险:高 · 来源:内置词典 🟡 npx prisma db push --accept-data-loss 从远程 npm 包运行命令 风险:高 · 来源:内置词典 → --accept-data-loss 这个参数名说明了一切 🔴 kubectl exec -it prod-db-0 -- psql -c "DROP TABLE users" 在容器中执行命令 风险:高 · 来源:内置词典 → 直接在生产环境 Pod 上执行 SQL ``` 每条解释包含: - **做了什么** —— 通俗的中文解释,包括参数和 shell 模式(`2>&1`、`|| true`、`>/dev/null`) - **风险等级** —— 低(只读)、中(有状态变更)、高(破坏性)、未知 - **来源** —— `built-in`(440+ 条内置词典)、`system`(man 手册)、`ai-generated`(LLM) ## 快速开始 ```bash npx cmd-explain setup ``` 就这样。自动检测你的 IDE,安装 MCP 服务器,创建命令拦截钩子。重启 IDE 即可生效。 **要求:** Node.js 18+。无需 API 密钥,无需 Ollama,无需手动编辑配置文件。 ## 工作原理 cmd-explain 是一个 [MCP 服务器](https://modelcontextprotocol.io/),只提供一个工具:`explain_command`。当你的 AI 助手即将执行 shell 命令时,预命令钩子会自动调用这个工具。 解释来自三个层级,按顺序检查: | 层级 | 来源 | 速度 | 覆盖率 | 需要配置? | |------|------|------|--------|-----------| | 1 | **内置词典** —— 240+ 个程序,440+ 条命令解释(git、docker、npm、kubectl、terraform、aws、brew、cargo 等) | <1ms | ~90% 的 AI 助手命令 | 否 | | 2 | **系统 man 手册** —— 解析 `whatis` 输出,覆盖所有已安装的 CLI 工具 | ~50ms | 大部分已安装工具 | 否 | | 3 | **本地 AI** —— Ollama、OpenAI 或 Anthropic,处理前两层未覆盖的命令 | ~1s | 全部 | 可选 | 第 1、2 层完全离线,零依赖。第 3 层为可选配置。 ### Shell 模式检测 cmd-explain 能识别 AI 助手常用的 shell 语法: | 模式 | 标注 | |------|------| | `2>&1` | 将 stderr 重定向到 stdout | | `>/dev/null 2>&1` | 抑制所有输出 | | `2>/dev/null` | 抑制错误输出 | | `\|\| true` | 忽略退出码 | | `set -e` | 遇错即退 | | `set -x` | 执行前打印命令 | | `set -o pipefail` | 管道中任一段失败则整体失败 | | `$(...)` | 命令替换 | ### 风险分类 | 等级 | 含义 | 示例 | |------|------|------| | 🟢 低 | 只读,无副作用 | `ls`、`cat`、`grep`、`git status`、`curl GET` | | 🟡 中 | 有状态变更但可恢复 | `git commit`、`npm install`、`mkdir`、`docker build` | | 🔴 高 | 破坏性或不可逆 | `rm -rf`、`docker rm -f`、`terraform destroy`、`find -delete` | | ⚪ 未知 | 无法识别 | 自定义/私有 CLI 工具 | ## 支持的 IDE 一条命令搞定所有配置,每个 IDE 自动获得正确的钩子格式。 | IDE | 钩子事件 | Shell 命令覆盖 | |-----|---------|---------------| | **Kiro** | `preToolUse` | ✅ 所有 shell 命令 | | **VS Code Copilot** | `PreToolUse` | ✅ 所有 shell 命令 | | **Cursor** | `beforeShellExecution` | ✅ 专用 shell 钩子 | | **Windsurf** | `pre_run_command` | ✅ 专用 shell 钩子 | | **Claude Code** | `PreToolUse` | ✅ 通过 matcher | ```bash npx cmd-explain setup # 自动检测所有 IDE npx cmd-explain setup --ide kiro # 指定单个 IDE npx cmd-explain setup --no-hooks # 仅安装 MCP 服务器 ``` ## 本地 AI(可选) 对于词典和 man 手册未覆盖的命令,可以启用 Ollama 本地 AI 解释(约 1GB 一次性下载): ```bash brew install ollama brew services start ollama ollama pull qwen2.5-coder:1.5b npx cmd-explain setup --ollama qwen2.5-coder:1.5b ``` setup 命令会验证每一步——如果 Ollama 未安装或模型未下载,会告诉你具体该执行什么命令。 也支持云端 API: ```bash npx cmd-explain setup --openai-key sk-... ``` 支持的提供商:Ollama、OpenAI(`OPENAI_API_KEY`)、Anthropic(`ANTHROPIC_API_KEY`)。 ## 手动安装 在你的 IDE MCP 配置中添加: ```json { "mcpServers": { "cmd-explain": { "command": "npx", "args": ["-y", "cmd-explain"] } } } ``` 配置文件位置: - **Kiro:** `.kiro/settings/mcp.json` - **VS Code:** `.vscode/mcp.json` - **Cursor:** `.cursor/mcp.json` - **Windsurf:** `~/.codeium/windsurf/mcp_config.json` - **Claude Code:** `~/.claude/settings.json` ## 卸载 ```bash npx cmd-explain uninstall ``` 从所有检测到的 IDE 中移除 MCP 配置和钩子文件。干净卸载,不留残余。 ## 平台支持 | | macOS | Linux | Windows | |-|-------|-------|---------| | 词典(第 1 层) | ✅ | ✅ | ✅ | | Man 手册(第 2 层) | ✅ | ✅ | ⚠️ 仅 `--help` | | 本地 AI(第 3 层) | ✅ | ✅ | ✅ | | Setup CLI | ✅ | ✅ | ✅ | ## 许可证 MIT