深色模式
可配置技能体系
Reeve 内置 34 套运维技能,外加用户级 + 项目级扩展。AI 不会的命令先 evaluate_skills 查技能再动手;任何技能里的危险命令正则自动注入策略黑名单。
进入
主界面左侧导航 → 技能。
技能是什么
技能(Skill)是一份带 frontmatter 的 Markdown 文档(SKILL.md),告诉 AI:
- 遇到什么场景该用这个技能(触发词)
- 该用什么命令、什么顺序(指南正文)
- 哪些命令永远不能跑(dangerous_commands 正则)
例如 nginx-status 技能告诉 AI 排查 nginx 时按 systemctl → nginx -t → error.log → 重启的顺序,并自动拦截 rm -rf /etc/nginx。
三级合并
| 层级 | 位置 | 说明 |
|---|---|---|
| builtin | Reeve 内置 34 套 | AI 知识库,UI 默认隐藏 |
| user | ~/.config/reeve/skills/ 或 ~/.claude/skills/ | 全局个人技能 |
| project | <project>/.claude/skills/ | 项目级,跟着项目走 |
优先级:project > user > builtin(同名覆盖)。
34 套内置技能
按域分组:
| 域 | 技能 |
|---|---|
| 系统 / 网络 / 安全 | linux-fundamentals / systemd-service / ssh-hardening / log-investigation / iptables-firewalld / wireguard-vpn / selinux-apparmor |
| Web 反代 / 证书 | nginx-status / openresty-lua / caddy-traefik / certbot-acme |
| 数据库 | mysql-ops / postgresql-ops / mongodb-ops / clickhouse-ops / redis-ops |
| 容器 / 编排 / 面板 | docker-ps / kubernetes-basics / portainer-ops / 1panel-ops |
| 消息队列 | rabbitmq-ops / kafka-ops |
| CI/CD / Git | git-server / jenkins-runner |
| 存储 / 备份 / 共享 | minio-s3 / nfs-smb-share / borgbackup-restic |
| 监控 | prometheus-grafana / loki-promtail |
| 运行时 | nodejs-pm2 / java-jvm-tuning / python-venv-uwsgi / php-fpm-ops |
| AI | ollama-vllm |
内置技能 UI 默认隐藏
内置技能是「AI 知识库」,普通用户在 UI 看不到。如果想浏览:工具栏 显示内置 Switch 打开。后端 + AI 行为不受 UI 显示状态影响。
列表视图
每行:
- 名称
- 来源(builtin / user / project,颜色标识)
- 描述
- 触发词(前 5 个)
- 修改时间
- 操作(编辑 / 删除 / 测试触发)
工具栏:
- 来源过滤(Segmented)
- 显示内置 Switch(localStorage 持久化)
- 关键字搜索
测试触发
工具栏 测试触发 按钮 → 弹窗:
- 输入一个 prompt(例如「nginx 重启失败」)
- Reeve 跑
evaluate_skills(prompt=...) - 命中的技能高亮,显示分数
用于:
- 调试新写的技能触发词
- 看 AI 在你的项目里会自动用到哪些技能
新建技能
右上 新建 按钮 → 弹窗:
| 字段 | 说明 |
|---|---|
| 作用域 | user / project(项目作用域需先打开项目目录) |
| 名称 | kebab-case,例如 redis-cluster-ops |
| 描述 | 一句话 |
| 触发词 | 多个关键字,逗号分隔 |
| 危险命令 | 多行正则,每行一条 |
保存后打开 Drawer 编辑正文(Markdown)。
SKILL.md 格式
markdown
---
name: nginx-status
description: 排查 nginx 服务状态、配置、错误日志
triggers:
- nginx
- 反向代理
- 502
- upstream
dangerous_commands:
- 'rm\s+-rf\s+/etc/nginx'
- 'nginx\s+-s\s+stop' # 生产慎用
---
# nginx 状态排查
## 1. 检查服务状态
...
## 2. 验证配置
...
## 3. 看错误日志
...frontmatter 字段:
| 字段 | 说明 |
|---|---|
name | 唯一标识 |
description | 一句话描述 |
triggers | 触发词数组(用于 evaluate_skills 匹配) |
dangerous_commands | 正则数组,自动注入 ai-policy 黑名单,任何档位(含 trusted)都拦 |
编辑技能
行内 编辑 → Drawer 打开:
- 编辑 tab:CodeMirror Markdown 编辑器(含语法高亮)
- 预览 tab:Markdown 渲染
保存时:
- 凭据黑名单扫描(含
password=api_key:等模式 → 拒保存) - frontmatter 解析校验
- 正则可编译性校验
危险命令自动注入
SKILL.md 的 dangerous_commands 字段加载时自动注册到 ai-policy:
- 任何档位(含 trusted)都拦
- AI 走
ssh_exec时实时匹配 - 命中即拒绝 + 写审计
blocked_by_skill: <skill_name>
例如 mysql-ops 技能里写:
yaml
dangerous_commands:
- 'DROP\s+DATABASE'
- 'mysql.*--password=\S+' # 命令行带密码AI 永远跑不出这些命令,即使你把 mysql-ops 技能压根没在对话里用。
evaluate_skills 工具
AI 通过 MCP 工具 evaluate_skills(prompt="...") 主动查询技能:
AI: 用户说 nginx 502 了
[调用 evaluate_skills(prompt="nginx 502")]
返回: matched=["nginx-status"], score=12
[调用 get_skill(name="nginx-status")]
返回: <完整 SKILL.md>
AI: 我先 systemctl status nginx ...内置技能集成测试
每个内置技能都有 frontmatter 校验测试 builtin_skills_all_parse_correctly:
- 全部 SKILL.md frontmatter 可解析
- 全部
dangerous_commands正则可编译 - 累计 100+ 条 危险命令注入 ai-policy 黑名单
删除技能
行内 删除 按钮:
- 二次确认
- 仅对 user / project 技能可用(内置只读)
- 从黑名单移除该技能的正则
- 写审计
项目空间联动
打开项目空间后,<project>/.claude/skills/ 下的所有 SKILL.md 自动加载为 project 作用域技能,跟着项目走。
这也意味着:
- Git 仓库可以提交团队共享的技能
- Claude Code 进到该目录原生发现这些技能(因为路径符合 Claude Code 约定)
故障排查
| 症状 | 排查 |
|---|---|
| 保存被拒「含敏感凭据」 | frontmatter 或正文里有疑似密码字段,剔除 |
| 正则编译失败 | 检查转义;用「测试触发」预演 |
| AI 没用我的技能 | 触发词不够精准;尝试在对话里直接 @skill |
| 内置技能不显示 | 工具栏「显示内置」Switch 打开 |