完全没接触过 Skills 的人,读完这篇就能自己写一个。
第一章:先说清楚 Skills 是什么
1.1 Skills = 给 Agent 看的操作手册
你和一个智能 Agent 对话,它帮你做事。但每次遇到同样的问题,它都要你再解释一遍——就像每次教新同事「周报怎么发」。
Skills 就是解决这个问题的:你把步骤写成文档,下次 Agent 遇到同样场景,自动就知道怎么做。
| 对比 | 没有 Skill | 有 Skill |
|---|---|---|
| 第一次 | 你一步步教 Agent 怎么做 | 你一步步教 Agent 怎么做 |
| 第二次 | 还要再教一遍 | Agent 自己读 Skill,直接做 |
| 效果 | 每次重复劳动 | 一次编写,永久复用 |
1.2 一个生活例子
假设你教同事「发周报」:
第一次(没有文档):
你:打开邮箱 → 点新建 → 收件人写 leader@xxx.com → 主题写「周报」→ 写内容 → 发送
第二次(有了文档):
你:发周报
同事:好(翻出文档,按步骤操作)
Skills 就是这份文档。 只是它存在服务器上,Agent 能自动找到并执行。
1.3 谁来写?你还是 Agent?
你说需求,Agent 写文件。
- 你只需要用中文描述:做什么、怎么做
- Agent 负责:创建文件夹、写 SKILL.md、设置正确的格式
- 你不需要写代码,不需要碰命令行
第二章:Skill 文件长什么样
2.1 物理位置
~/.hermes/skills/ ← 所有 Skill 在此
├── red-teaming/ ← 按分类排列
│ ├── vuln-hunter/ ← 一个 Skill 一个文件夹
│ │ ├── SKILL.md ← 主文件
│ │ ├── references/ ← 详细参考(可选)
│ │ └── scripts/ ← 自动化脚本(可选)
│ └── quick-scan/
│ └── SKILL.md
├── software-development/
├── devops/
└── ...
每个 Skill = 一个文件夹 + 一个 SKILL.md 文件。
2.2 SKILL.md 的内部结构
分成两段:
第一段:前置信息(叫 Frontmatter)
---
name: quick-scan ← 名字(英文小写+连字符)
description: "快速扫描目标资产。" ← 描述
version: 1.0.0 ← 版本号
author: Hermes Agent ← 作者
license: MIT ← 许可证
metadata:
hermes:
tags: [recon, scanning] ← 标签
related_skills: [nmap-scan] ← 关联技能
---
第二段:正文(用 Markdown 写)
# Quick Scan — 标题
## Overview
1-2 段说明
## When to Use
什么场景该用,什么场景不该用
## Steps
具体操作步骤
## Common Pitfalls
新手容易踩的坑
## Verification Checklist
做完后怎么验证
2.3 需要学 Markdown 吗?
不需要。你只需要用中文描述步骤,Agent 会自动转换成 Markdown 格式。但如果你知道这些,能写得更精确:
#一级标题 /##二级标题 /###三级标题-无序列表 /1.有序列表加粗/斜体- `
代码` 行内代码 / 代码块用三个反引号 | 表格 | 格式 |表格
第三章:手把手创建第一个 Skill
下面是一个完整实战。你只需要在对话框里说出需求。
3.1 场景
你经常用 nmap 扫描目标:先全端口扫,再扫服务版本,最后跑默认脚本。每次都要敲一遍命令,很烦。
3.2 说出你的需求
在聊天框里输入:
帮我创建一个 skill:
名字叫 nmap-quick-scan
分类放 red-teaming
描述:快速 nmap 扫描目标,三步搞定
内容:
- 第一步:nmap -sV -sC -p- 全端口扫描,结果保存到文件
- 第二步:nmap -O 系统识别
- 第三步:汇总结果
3.3 Agent 做了什么(你不需要看到)
Agent 在后台执行了类似这样的操作:
创建文件:~/.hermes/skills/red-teaming/nmap-quick-scan/SKILL.md
内容:带正确格式的完整 SKILL.md
3.4 创建成功后
下次你说「扫一下 xxxx.com」或「快速扫描」,Agent 会自动加载这个 Skill,按照里面的步骤执行。
注意:当前会话看不到新 Skill——要新开一个会话才生效。
3.5 查看已有 Skill
列出我的所有 skill
Agent 会返回分类列表:
可用技能 (按分类):
red-teaming/
├── nmap-quick-scan — 快速 nmap 扫描
├── vuln-hunter — 漏洞挖掘全流程
└── ...
第四章:创建后怎么维护
4.1 漏了步骤(Patch)
说:
nmap-quick-scan 漏了把结果保存到文件的步骤,帮我加上
Agent 会自动在合适位置补上内容。
4.2 内容太多想拆分
SKILL.md 超过 15KB 时,说:
nmap-quick-scan 太大了,把详细命令参数说明移到 references/ 目录
Agent 会创建 references/ 子文件夹,移走详细内容,SKILL.md 只保留概要。
4.3 加自动化脚本
说:
帮 nmap-quick-scan 加个脚本,自动运行三件套并汇总
Agent 会创建 scripts/auto-scan.sh,并在 SKILL.md 中引用。
4.4 完全重写
说:
nmap-quick-scan 太旧了,帮我重写,改用 masscan + nmap 组合
Agent 会用新内容替换整篇 SKILL.md。
4.5 删掉
说:
nmap-quick-scan 没用了,删掉
Agent 删除整个文件夹。
第五章:一个可以直接用的完整示例
把这段话发给 Agent:
帮我创建一个 skill:
name: dirbust-scan
category: red-teaming
description: "Use when needing to brute-force web directories with dirsearch or gobuster."
内容:
# 目录爆破 — Dirbust Scan
## Overview
对 Web 目标进行目录和文件爆破,发现隐藏路径。
## When to Use
- ✅ 拿到 Web 目标,想找隐藏后台、配置文件
- ❌ 目标有严格的 WAF 或频率限制
## Steps
### Step 1: dirsearch 快速扫描
dirsearch -u <target> -e php,asp,jsp,txt,zip -t 50
### Step 2: 大字典扫描
gobuster dir -u <target> -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 30
### Step 3: 检查常见敏感文件
curl -s -o /dev/null -w "%{http_code}" <target>/robots.txt
curl -s -o /dev/null -w "%{http_code}" <target>/.git/HEAD
curl -s -o /dev/null -w "%{http_code}" <target>/admin
Common Pitfalls
- 频率太快会被封 IP,加 --delay 或 -rate
- 大型字典跑得慢,先用小型字典试试
- 结果用 -o 保存,别只靠屏幕输出
Verification Checklist
- [ ] 发现了至少一个隐藏路径
- [ ] 200/403/301 状态码已记录
- [ ] 敏感文件已检查
---
### 第六章:常见问题
**Q:我说话就能创建,为什么还要学这些?**
因为你知道得越清楚,写的 Skill 质量越高。就像你会说话就能叫外卖,但知道菜系分类能点得更好吃。
**Q:新会话 Skill 才生效,那之前写的怎么办?**
新会话自动加载所有 Skill。旧会话看不到——但旧会话的内容可以通过 `session_search` 回忆。
**Q:一个 Skill 可以写多长?**
| 大小 | 建议 |
|------|------|
| < 15 KB | 👍 很好 |
| 15-30 KB | ⚠ 考虑拆分 |
| > 60 KB | ❌ 必须拆分 |
| > 100 KB | 💀 系统自动截断 |
**Q:有数量限制吗?**
没有。但太多不好找——所以需要分类管理。
**Q:描述用中文还是英文?**
都可以。Agent 匹配时看的是语义关键词,不是精确短语。
---
### 总结:核心流程
你说需求 → Agent 执行 skill_manage → 文件写入 ~/.hermes/skills/
↓
下次新会话自动加载
↓
匹配到场景自动执行
↓
发现遗漏 → patch 修补
**不需要记命令,只需要说中文需求。这就是零基础的核心。**