Skip to main content

Skill(AI Agent 工作)

这个页面专门讲:怎么把 Yak 的 SSA/SyntaxFlow 能力接进 AI Agent,让 Agent 自动做代码扫描与审计。

参考仓库:

1. 先决条件

  1. 机器上可直接执行 yakyak version 能看到版本)
  2. Agent 支持 Skill/MCP(如 Codex、Claude Code、Cursor)

2. 安装 Skill

2.1 通过 npx skills 安装(推荐)

npx skills add yaklang/irify-sast-skill

2.2 手动安装

irify-sast-skill 仓库里的 skills/irify-sast/SKILL.md 放到对应目录:

  • Claude Code:.claude/skills/irify-sast/
  • Codex:.agents/skills/irify-sast/
  • Cursor:.agents/skills/irify-sast/

3. 配置 MCP(关键步骤)

Skill 本身会调用 SSA MCP 服务,所以要先配置:

yak mcp -t ssa

3.1 Codex 配置示例(~/.codex/config.toml

[mcp_servers.yaklang-ssa]
command = "yak"
args = ["mcp", "-t", "ssa"]

3.2 Claude Code / Cursor 配置示例

{ "command": "yak", "args": ["mcp", "-t", "ssa"] }

4. Agent 工作流(建议直接照这个走)

4.1 第一步:编译项目

让 Agent 先执行 ssa_compile,并固定 program_name(便于缓存与增量编译)。

4.2 第二步:执行 ssa_query

让 Agent 用 SyntaxFlow 规则进行查询,不要先用 grep 在源码里盲找“候选点”。

4.3 第三步:阅读命中上下文

命中后,再让 Agent 读取命中行附近代码,判断是否真实风险。

4.4 代码变更后:增量编译

优先用 base_program_name 做增量编译,只重编译变更部分。

5. 给 Agent 的常用任务指令

你可以直接用下面这类任务描述。

5.1 手动规则验证

请先编译这个 Java 项目,然后执行 lesson-1.sf,告诉我 source/sink 命中行号。

5.2 漏洞检测

请检查这个项目是否存在命令执行和 SQL 注入,输出每个风险的文件、行号和触发规则。

5.3 回归审计

这个分支刚改完,请基于已有 program 做增量编译,然后只看新增风险。

6. 常见问题

6.1 Agent 找不到 yak

先确认本机终端能运行:

yak version

再确认 Agent 运行环境和你当前 shell 的 PATH 一致。

6.2 Skill 装了但不会调用 SSA 工具

优先检查 MCP 配置是否生效,尤其是 yak mcp -t ssa 的 command/args 是否完全一致。

6.3 扫描太慢

优先做三件事:

  • 先小范围规则验证,再全量
  • 使用增量编译(base_program_name
  • 扫描时启用 --memory(如果不需要保留中间数据)