Yak Skills
July 14, 2026 · View on GitHub
中文 | English
面向 AI Agent 的 Yaklang 编程与 Yak 热加载知识库。一个总入口 + 多个专题,每个 skill 都配可一键自测的
.yak示例,并提供命令行验证器与端到端证据。
Yak Skills 模仿目录式 SKILL 知识库范式,围绕 Yak 公众号文章(yak-project-public)与 yaklang.github.io 官方文档,把 Yaklang 编程与 Yak 热加载的核心机制蒸馏成可被 AI Agent 直接加载、可被人直接运行的技能库。
在线浏览
静态站点:skills.yaklang.io(由 GitHub Pages 自动构建部署,默认中文,可切换英文)。
- 按分类 / 层级 / 自由文本检索
- 支持
category:hotpatch、tier:master等过滤语法 - 每张卡片可一键复制安装命令、跳转 GitHub 源码
三层热加载体系(核心)
热加载(Hot Patch)允许在 不中断服务 的情况下,用 Yaklang 代码动态接管 HTTP 流量的处理阶段。它分三层,执行顺序自上而下:全局 -> 模块(MITM / Web Fuzzer)。
全局热加载 (Global Hot Patch) ← MITM 与所有 Fuzzer 共享, 同时只启用 1 个, 先执行
│
▼
模块热加载
├── MITM 热加载 代理侧: 劫持 / 镜像 / 入库 / mock
└── Web Fuzzer 热加载 单 Tab: 加解密 / 签名 / 重试 / fuzztag
│
▼
出站 / 回显 / 入库
技能目录
| Skill | 层级 | 说明 |
|---|---|---|
yak | 总入口 | 三层热加载路由、YAK_MAIN 调试约定、测试方法 |
yakit-basic | 专题 | Yakit 架构概览、三种界面模式、核心功能区路由表、引擎连接与项目切换、新手快速上手 |
yakit-ui-binding | 专题 | yakit.* 库函数与 UI 交互机制:gRPC ExecResult 流链路、日志/进度条/表格/图表/卡片/网站树输出 API |
mitm-hotpatch | 专题 | MITM 六类 Hook:hijackHTTPRequest / hijackHTTPResponseEx / mirror* / hijackSaveHTTPFlow / mockHTTPRequest |
webfuzzer-hotpatch | 专题 | beforeRequest / afterRequest / retryHandler / customFailureChecker / mirrorHTTPFlow / fuzztag;前端加密对抗组合配方(AES-CBC / 加密+验签 / RSA+AES-GCM 混合)让用户看到明文 |
global-hotpatch | 专题 | 全站透明加解密、动态 challenge 签名、统一认证、全站染色 |
yaklang-syntax | 专题 | 变量 / 控制流 / 函数 / 闭包 / f-string / 错误处理 ~ |
yaklang-database | 专题 | SQLite / 键值存储 / Payload 字典 / 项目配置 |
yakit-data-extract-plugin | 专题 | 按 domain 捞 History、URI 去重、提取登录 Cookie、字典驱动发包扫描 |
yakit-native-plugin | 专题 | yak/mitm 原生插件 + cli 参数表单;mitm 被动扫描、mitm+cli 交互式加载外部参数 |
yakit-rightclick-plugin | 专题 | codec 右键插件 handle 契约;History 右键 flow id 反查提取(进度条)、codec+cli 选提取项、Web Fuzzer 选区变换 |
yaklang-toolchain | 专题 | go run 工作流、4 个验证命令、用仓库调试 MITM、如何验证你写的插件 |
每个专题目录下都有若干 example-*.yak,均可独立运行自测。
安装
整包安装(推荐)
npx skills add yaklang/yak-skills
单个专题
npx skills add yaklang/yak-skills/mitm-hotpatch
curl 拉取单个 SKILL.md
curl -fsSL https://raw.githubusercontent.com/yaklang/yak-skills/main/skills/yak/SKILL.md
YAK_MAIN 调试约定(重要)
所有热加载脚本统一结构——注册 hook 函数 + if YAK_MAIN { runSelfTest() } 守卫本地自测:
// 1) 注册 hook (yakit 加载时只做这件事)
hijackHTTPRequest = func(isHttps, url, req, forward, drop) {
forward(req)
}
// 2) 本地自测 (命令行运行时才跑)
func runSelfTest() {
// mock 数据 + 自定义 callback + assert
}
if YAK_MAIN {
runSelfTest()
}
YAK_MAIN 是 yaklang 引擎注入的全局布尔:
- 命令行
yak xxx.yak运行:YAK_MAIN = true→ 跑自测。 - yakit 热加载窗口加载:
YAK_MAIN = false→ 只注册 hook。
所以含自测块的完整脚本可以 安全地 粘贴回 yakit——yakit 不会执行你的 mock 数据。这就是"命令行一键自测 → 粘回 yakit 使用"的安全闭环。
如何验证你写的插件
除了 YAK_MAIN 自测,本库在 yaklang 引擎里提供了四个验证命令,用 与 Yakit UI 同款的 gRPC 执行路径 把脚本跑在真实请求/响应上、打印改写证据。详见 yaklang-toolchain。
| 命令 | 验证对象 |
|---|---|
yak hotpatch-mitm --script x.yak --request req.txt [--response rsp.txt] [--https] [--url URL] | MITM 热加载 |
yak hotpatch-global --script x.yak --request req.txt [--response rsp.txt] | 全局热加载(beforeRequest/afterRequest + 劫持 + 入库) |
yak hotpatch-webfuzzer --script x.yak --request req.txt [--response rsp.txt] [--fuzztag TAG] | Web Fuzzer 热加载 |
yak codec-plugin --script x.yak --input STRING | 右键 codec 插件(handle) |
示例:
printf 'POST /api/order/create HTTP/1.1\r\nHost: shop.example.com\r\nContent-Type: application/json\r\n\r\n{"amount":100}' > /tmp/req.txt
yak hotpatch-mitm --script skills/mitm-hotpatch/examples/hijack-request.yak --request /tmp/req.txt
# 输出会打印原始请求 / 改写后请求 / drop 状态 / 入库 tag 作为证据
yak codec-plugin --script skills/yaklang-toolchain/examples/codec-rot13.yak --input "Hello, Yak!"
# -> output (len=11): Uryyb, Lnx!
命令实现位于 yaklang/common/yak/cmd/yakcmds/hotpatch.go,并配有 Go 单元测试 hotpatch_test.go
(go test ./common/yak/cmd/yakcmds/ -run 'HotPatch|Codec')。
本地运行与验证
# 用 yaklang 源码引擎 (推荐, 拿到最新能力)
cd /path/to/yaklang
go run common/yak/cmd/yak.go /path/to/yak-skills/skills/mitm-hotpatch/examples/hijack-request.yak
# 或用已安装引擎
yak skills/mitm-hotpatch/examples/hijack-request.yak
合格标准:10 秒内完成、所有 assert 通过、log 全英文、末尾出现 ... self test passed。
批量证据化验证
# 遍历所有 example-*.yak 自测 + 跑 4 个验证命令, 证据落地 scripts/evidence/
cd yak-skills
YAK_BIN=/path/to/yak yak scripts/validate-skills.yak
# 真实 MITM 链路演示 (mitm 模块起代理 + 本地靶站), 证据落地 scripts/evidence/live/
yak scripts/mitm-live-demo.yak
构建索引
go run common/yak/cmd/yak.go scripts/build-skills-index.yak \
--project-root /path/to/yak-skills --strict
会扫描 skills/*/SKILL.md,结合 site/data/categories.yaml 生成 site/data/skills.json,并做回环校验。新增 skill 目录后必须在 categories.yaml 登记,否则 --strict 会报错。
知识来源
- Yak 公众号文章合集
yak-project-public(最核心的实战指导) - yaklang.github.io 官方文档
- yaklang 引擎源码(Hook 签名以源码为准):
- MITM:
common/yak/hook_mixed_plugin_caller.go - Web Fuzzer:
common/yak/script_engine_for_fuzz.go - YAK_MAIN:
common/yak/script_engine.go
- MITM:
规范
- 注释可用中文;
log输出、字符串、payload 全部英文。 - 错误处理优先用
~;关键结果用assert验证。 - 关键代码位置加
// 关键词: ...注释,便于 grep 与 AI 检索。 - 不使用 emoji。
深入学习:更复杂的 Yak 代码与详细案例
本库聚焦"热加载 / 工具链"这条主线,做的是可被 Agent 直接加载的精炼技能。当你需要 更复杂的 Yak 代码写法、更系统的标准库用法、更详细的实战案例 时,请配合姊妹仓库 yaklang/yaklang-ai-training-materials 一起使用——本库的 SKILL 与下列目录互相引用、互为补充:
| 你想要的 | 去训练素材仓库的这里 | 说明 |
|---|---|---|
| 100+ 标准库的实战写法 | library-usage/ | codec / http / poc / fuzz / db / crawler / ssa / ai 等每个库一个目录,含 *-practice.yak 可直接运行 |
| Yaklang 语法从零到进阶 | basic-syntax/ | 变量、闭包、f-string、错误处理 ~、面向对象等系统化语法案例 |
| 完整的渗透/安全实战脚本 | practice/ · awesome-scripts/ | 端到端的复杂脚本,演示如何把多个库组合成真实工具 |
| 热加载/前端加密的深度文章 | yak-project-public/ | Yak 公众号原文(含截图),本库组合配方的灵感与依据来源 |
建议路径:先用本库的 SKILL 建立心智模型与可运行骨架 → 再到
library-usage//practice/找对应库的更复杂写法补全细节。
相关项目(姊妹站)
| 项目 | 在线站点 | 定位 |
|---|---|---|
| Yak Skills(本库) | skills.yaklang.io | Yaklang 编程 + Yak 热加载技能库 |
| HackSkills | skills.hackbenchmark.com · yaklang/hack-skills | 面向 Agent 的渗透/安全攻防技能库(Web/API/认证/提权/逆向/密码学等) |
| 训练素材 | yaklang/yaklang-ai-training-materials | 更复杂的 Yak 代码、标准库实战、详细案例 |