Skill 机制
Skill 机制
Skill 是给 Agent 看的专业任务说明。
它和普通教程不同。教程通常面向人,讲概念、原理、背景和例题;Skill 面向 Agent,更关心什么时候使用、第一步做什么、如何判断结果、何时切换方向。
ljagiello/ctf-skills 就是把 CTF 常见方向整理成一组 Agent Skills。
Skill 解决什么问题
没有 Skill 的 Agent,面对 CTF 题可能会这样:
- 看到网页就开始扫目录
- 看到二进制就直接写 payload
- 看到数字就假设是 RSA
- 看到图片就无脑跑隐写工具
- 卡住后不断换工具但没有路线
Skill 的作用是让 Agent 先按专业路线行动。
一个 Skill 应该回答:
- 哪些信号说明该用它?
- 第一轮应该检查什么?
- 常用工具有哪些?
- 结果如何解释?
- 哪些情况说明应该换 Skill?
- 解出后怎么整理?
SKILL.md 的结构
在 ctf-skills 中,每个技能包目录下都有 SKILL.md。
一个典型开头类似:
---
name: ctf-web
description: Provides web exploitation techniques for CTF challenges.
license: MIT
allowed-tools: Bash Read Write Edit Glob Grep Task WebFetch WebSearch
---这段 frontmatter 对 Agent 很重要。
| 字段 | 作用 |
|---|---|
name | Skill 名称 |
description | 触发和选择 Skill 的关键描述 |
allowed-tools | Skill 允许使用的工具范围 |
license | 许可证信息 |
特别是 description。Agent 往往会根据描述判断某个 Skill 是否适合当前任务。
Skill 不是 Prompt
Prompt 是当前对话或任务的输入,Skill 是可复用的专业说明。
面向一类任务。比如 ctf-crypto 适合密码学 CTF 题。
Skill 会沉淀工具、路线、判断信号和补充文件。
Prompt 更像“这次要做什么”,Skill 更像“这类事通常怎么做”。
Skill 不是 MCP Tool
Skill 也不是工具。
ctf-pwn 不会自己运行 gdb,ctf-web 不会自己发 HTTP 请求。它们只是告诉 Agent:在这些场景下应该考虑哪些检查、哪些工具、哪些方向。
真正执行动作的还是工具调用层。
可以这样分层:
用户目标
↓
Agent 判断
↓
Skill 提供路线
↓
Tool/MCP 执行动作
↓
结果回到上下文Skill 为什么适合 CTF
CTF 的一个特点是题目类型相对固定,但细节变化很大。
例如 Web 题可能涉及 SQLi、SSTI、JWT、SSRF;Pwn 题可能涉及栈、堆、格式化字符串;Crypto 题可能涉及 RSA、ECC、PRNG、格。每次都重新教 Agent 这些方向不现实,Skill 可以把通用路线沉淀下来。
Skill 不是替代专业能力,而是帮助 Agent 更快进入正确起点。
ctf-skills 的 Skill 组织方式
原项目把入口和专业方向分开:
solve-challenge:先分类和路由ctf-web:Web 题ctf-pwn:二进制利用ctf-crypto:密码学ctf-reverse:逆向ctf-forensics:取证ctf-osint:开源情报ctf-malware:恶意代码分析ctf-misc:杂项题ctf-ai-ml:AI/ML 题ctf-writeup:解后整理
这说明它不是一个大杂烩,而是一个带调度入口的 Skill 集合。
如何判断 Skill 是否有效
一个有效 Skill 应该让 Agent 的行为更稳定。
你可以观察:
- 它是否先收集证据,而不是直接猜?
- 它是否会根据题目材料选择工具?
- 它是否知道什么时候换方向?
- 它是否能说明结论依据?
- 它是否能避免无边界尝试?
如果加载 Skill 后,Agent 只是换了一种说法继续乱试,那这个 Skill 的使用就是失败的。
小结
Skill 是 Agent 的专业操作手册。ctf-skills 的价值不在于替代 CTF 教材,而在于把各方向解题经验整理成 Agent 能加载、能执行、能切换的路线。