# Snow CLI 使用文档——敏感命令配置

欢迎使用 Snow CLI！在终端中进行 Agentic 编程。

## 什么是敏感命令

敏感命令是指在执行时可能对系统、数据或项目产生重大影响的命令。这些命令在执行前需要用户明确确认，以防止意外操作导致的数据丢失或系统损坏。

Snow CLI 默认内置了一系列常见的敏感命令模式，并支持用户自定义添加需要保护的命令。

## 为什么需要敏感命令配置

在使用 AI 驱动的命令行工具时，AI 可能会建议执行某些具有破坏性的命令。敏感命令配置功能可以：

- 防止意外执行危险命令（如 `rm -rf`、`git reset --hard` 等）
- 在执行重要操作前给予用户确认机会
- 提供可自定义的命令保护机制
- 保护项目和数据安全

## 系统内置的敏感命令

Snow CLI 默认保护以下类型的命令：

### 文件系统操作

- `rm -rf` - 递归强制删除
- `rmdir /s` - Windows 递归删除目录
- `del /f` - Windows 强制删除

### Git 操作

- `git reset --hard` - 硬重置（丢弃所有更改）
- `git clean -fd` - 删除未跟踪的文件和目录
- `git push --force` - 强制推送
- `git branch -D` - 强制删除分支
- `git rebase` - 变基操作
- `git checkout` - 分支切换（可能丢失未提交的更改）

### 系统管理

- `sudo rm` - 以管理员权限删除
- `chmod -R` - 递归修改文件权限
- `chown -R` - 递归修改文件所有者

### 数据库操作

- `DROP DATABASE` - 删除数据库
- `DROP TABLE` - 删除表
- `TRUNCATE` - 清空表数据

## 敏感命令配置管理

### 进入配置界面

1. 启动 Snow CLI
2. 在主菜单中选择"敏感命令配置"选项
3. 进入敏感命令配置界面

### 查看敏感命令列表

配置界面会显示所有已配置的敏感命令，包括：

- 命令模式（支持正则表达式）
- 命令描述
- 启用/禁用状态
- 是否为系统内置命令

界面特点：

- 使用 `[✓]` 标记已启用的命令
- 使用 `[ ]` 标记已禁用的命令
- 自定义命令会显示 `(自定义)` 标记
- 支持滚动浏览，最多同时显示 13 条命令

### 启用或禁用命令保护

可以根据需要启用或禁用特定命令的保护。

#### 操作步骤

1. **导航到目标命令**

   - 使用 ↑/↓ 方向键在命令列表中移动
   - 当前选中的命令会高亮显示

2. **切换启用状态**

   - 按 Space 键切换选中命令的启用/禁用状态
   - 系统会显示操作成功提示（2 秒后自动消失）

3. **查看命令详情**
   - 列表下方会显示当前选中命令的描述
   - 显示命令的启用状态
   - 如果是自定义命令，会显示 `[自定义]` 标记

### 添加自定义敏感命令

除了系统内置的敏感命令，您可以添加自己的敏感命令模式。

#### 操作步骤

1. **进入添加模式**

   - 在命令列表界面按 A 键
   - 进入"添加自定义敏感命令"界面

2. **填写命令模式**

   - 在"命令模式"字段输入要保护的命令
   - 支持正则表达式匹配
   - 示例：
     - `npm uninstall` - 精确匹配
     - `^docker rm` - 以 docker rm 开头的命令
     - `.*--force.*` - 包含 --force 参数的命令
   - 按 Enter 或 Tab 键进入下一字段

3. **填写命令描述**

   - 在"描述"字段输入命令的说明
   - 建议清楚描述该命令的危险性或影响
   - 示例：
     - "卸载 npm 包"
     - "强制删除 Docker 容器"
     - "包含强制执行参数的命令"
   - 按 Enter 键提交

4. **完成添加**
   - 系统验证输入后保存自定义命令
   - 显示添加成功提示
   - 自动返回命令列表界面
   - 新添加的命令默认为启用状态

#### 命令模式编写技巧

1. **精确匹配**

   ```
   git reset --hard
   ```

   只匹配完全相同的命令

2. **前缀匹配**

   ```
   ^npm uninstall
   ```

   匹配以 "npm uninstall" 开头的所有命令

3. **包含匹配**

   ```
   .*--force.*
   ```

   匹配包含 "--force" 的所有命令

4. **多选项匹配**
   ```
   git (reset|clean|push --force)
   ```
   匹配多个相关的 git 操作

### 删除自定义敏感命令

可以删除不再需要的自定义敏感命令。注意：系统内置命令无法删除。

#### 操作步骤

1. **选择要删除的命令**

   - 使用 ↑/↓ 方向键选择自定义命令
   - 只有标记为 `(自定义)` 的命令可以删除

2. **请求删除**

   - 按 D 键请求删除

3. **确认删除**
   - 再次按 D 键确认删除
   - 或按 ESC 键取消删除
   - 删除成功后显示提示消息
   - 光标自动移动到下一个命令

#### 注意事项

- 系统内置命令无法删除（不会响应 D 键）
- 需要二次确认才能删除，防止误操作
- 删除操作不可恢复，请谨慎操作

### 重置为默认配置

如果您对配置进行了大量修改，可以一键重置为系统默认配置。

#### 操作步骤

1. **请求重置**

   - 在命令列表界面按 R 键
   - 系统会显示确认提示：
     ```
     确认重置为默认配置? 所有自定义命令将被删除，再次按 R 键确认，按 ESC 取消
     ```

2. **确认重置**

   - 再次按 R 键确认重置
   - 或按 ESC 键取消重置
   - 重置成功后显示提示消息

3. **重置效果**
   - 删除所有自定义命令
   - 恢复所有系统内置命令为启用状态
   - 配置立即生效

#### 注意事项

- 重置操作会删除所有自定义命令
- 重置操作不可恢复
- 需要二次确认才能执行
- 建议在重置前记录重要的自定义配置

## 键盘快捷键

### 命令列表界面

- **↑/↓**: 在命令列表中导航
- **Space**: 启用/禁用选中的命令
- **A**: 添加自定义敏感命令
- **D**: 删除自定义命令（需要二次确认）
- **R**: 重置为默认配置（需要二次确认）
- **ESC**: 返回主菜单或取消确认操作

### 添加命令界面

- **Tab**: 在输入字段间切换
- **Enter**: 确认输入并移至下一字段（最后一个字段为提交）
- **ESC**: 取消添加并返回列表界面

## 配置最佳实践

### 1. 保护关键操作

确保以下类型的命令受到保护：

- 删除操作（文件、目录、数据库）
- Git 破坏性操作（reset、clean、force push）
- 权限修改操作
- 批量操作命令

### 2. 合理使用正则表达式

- 避免过于宽泛的匹配模式（如 `.*`），可能导致所有命令都需要确认
- 使用精确的前缀或关键字匹配
- 测试正则表达式以确保只匹配预期的命令

### 3. 清晰的命令描述

- 描述应该说明命令的作用和潜在风险
- 帮助您在确认时快速理解命令的影响
- 例如："强制删除所有未跟踪的文件，不可恢复"

### 4. 定期审查配置

- 定期检查已配置的敏感命令
- 删除不再需要的自定义规则
- 根据项目需求调整保护范围

### 5. 团队协作建议

如果在团队环境中使用：

- 分享常用的自定义敏感命令配置
- 统一团队的命令保护标准
- 培训团队成员理解敏感命令的重要性

## 敏感命令的工作原理

当 AI 建议执行命令时，Snow CLI 会：

1. **检查命令是否匹配敏感模式**

   - 遍历所有已启用的敏感命令规则
   - 使用正则表达式匹配命令内容

2. **触发确认流程**

   - 如果命令匹配任何敏感模式
   - 暂停执行并显示确认对话框
   - 显示命令内容和警告信息

3. **等待用户决策**

   - 用户可以选择执行或取消
   - 取消后 AI 会收到反馈，可能建议替代方案
   - 执行后命令正常运行

4. **不匹配则直接执行**
   - 如果命令不匹配任何敏感模式
   - 直接执行，无需额外确认

## 常见问题

**Q: 敏感命令配置会影响所有项目吗？**

A: 是的。敏感命令配置是全局的，应用于所有使用 Snow CLI 的项目。这样可以确保一致的安全保护。

**Q: 我可以临时禁用某个敏感命令保护吗？**

A: 可以。进入敏感命令配置界面，找到对应的命令并按 Space 键禁用。完成操作后，建议重新启用保护。

**Q: 正则表达式匹配是否区分大小写？**

A: 这取决于您的正则表达式编写方式。如果需要不区分大小写，可以使用不区分大小写的模式或同时匹配大小写变体。

**Q: 如果我不小心删除了自定义命令怎么办？**

A: 删除操作不可恢复，但您可以重新添加该命令。建议记录重要的自定义配置，或定期备份配置文件。

**Q: 敏感命令保护可以完全阻止命令执行吗？**

A: 不可以。敏感命令保护只是提供确认提示，最终是否执行由用户决定。这是为了在保证安全的同时保持灵活性。

**Q: 系统内置的命令可以永久删除吗？**

A: 不可以，但您可以禁用它们。如果需要恢复，使用"重置为默认配置"功能即可。

**Q: 添加自定义命令后需要重启 Snow CLI 吗？**

A: 不需要。配置修改立即生效，会在下一次 AI 建议执行命令时应用。

## 配置文件位置

敏感命令配置存储在 Snow CLI 的配置目录中：

- Windows: `%USERPROFILE%\.snow\sensitive-commands.json`
- macOS/Linux: `~/.snow/sensitive-commands.json`

您可以直接编辑该文件进行批量配置，但建议使用配置界面以确保格式正确。

## 相关功能

- [命令注入模式](./10.命令注入模式.md) - 在消息中直接执行命令，同样受敏感命令保护
