mahitoh/skillci

GitHub: mahitoh/skillci

skillci 是专为 AI agent skill 文件设计的 CI 验证工具,提供结构检查、静态安全审计和场景测试三合一的质量门禁。

Stars: 0 | Forks: 0

# skillci **面向 AI agent skill 的 CI 工具。** 在你(或任何其他人)信任你的 `SKILL.md` skill 之前,对它们进行 lint、安全审计和场景测试——就像 `eslint` + `pytest` 之于代码一样。 ![skillci](https://img.shields.io/badge/skillci-verified%20100%2F100-brightgreen) ![license](https://img.shields.io/badge/license-MIT-blue) ``` npx skillci run ./my-skill ``` ``` ▶ changelog-writer (./my-skill/SKILL.md) ✓ lint: clean ✓ audit: clean tests: ✓ pass groups commits into changelog sections 1840ms VERIFIED score 100/100 ``` ## 为什么会有这个项目 Agent skill(用于 Claude Code、Codex、Cursor、OpenClaw 以及其他 60 多种 agent 的 `SKILL.md` 文件)是 AI 生态系统中增长最快的领域——但也是验证最少的领域。在 2026 年初,**ClawHavoc** 供应链攻击活动攻陷了最大 skill 注册中心中大约 **五分之一的 skill**,它们搭载了窃取 SSH 密钥、API 密钥和加密货币钱包的 infostealer。独立的审计发现,在抽样的 skill 中,**超过三分之一**存在 prompt injection。 与此同时,几乎没有人去检查一个 skill *是否真正有效*——大多数 skill 只是凭感觉发布,从未针对任何测试用例运行过。 **skillci 就是那个缺失的测试门禁。** 它做三件事,其中最重要的部分完全不需要 Docker、API 密钥或任何云服务: | 命令 | 作用 | 需要 agent? | |---|---|---| | `skillci lint` | 结构检查:有效的 frontmatter、名称、描述、有效的文件引用 | 否 | | `skillci audit` | 静态安全扫描:检测 prompt injection、凭证窃取、数据泄露、`curl \| sh`、钱包访问 | 否 | | `skillci test` | 通过真实的 agent 运行你的场景测试并检查结果 | 是 | | `skillci run` | 运行以上全部三项,给出通过/失败判定及评分——**请在 CI 中使用此项** | 可选 | `lint` 和 `audit` 引擎是纯粹的静态分析。它们可以在任何 Node 运行的地方即时、离线运行。测试功能将执行委托给你**已经安装的 agent CLI**(目前为 Claude Code)——因此无需设置任何沙箱。我们依赖于 agent 自身的权限系统和受限的工具白名单,而不是要求必须使用 container。 ## 安装 ``` # zero-install,一次性使用 npx skillci run ./path/to/skill # 或将其添加到项目中 npm i -D skillci ``` 需要 Node 18+。测试功能还需要一个 agent CLI(例如 [Claude Code](https://claude.com/claude-code));lint 和 audit 不需要任何其他依赖。 ## 快速开始 ``` # 1. 审计你即将安装的 skill — 捕获恶意模式 npx skillci audit ./some-downloaded-skill # 2. 为你正在编写的 skill 搭建测试文件 npx skillci init ./my-skill # 3. 运行完整的 gate npx skillci run ./my-skill # 4. 验证通过后生成 README 徽章 npx skillci badge ./my-skill ``` 你可以将任何命令指向单个 skill **或**包含多个 skill 的目录——skillci 会自动发现其下的每一个 `SKILL.md` 文件。 ## 编写场景测试 在你的 `SKILL.md` 旁边放置一个 `skill.test.yaml` 文件(或者运行 `skillci init`): ``` scenarios: - name: groups commits into changelog sections prompt: | Draft a changelog from these commits: feat: add CSV export fix: handle empty result set expect: no_error: true output_contains: ["Added", "Fixed", "CSV export"] # output_matches: ["## \\d+\\.\\d+\\.\\d+"] # tools_used: [Read] # tools_not_used: [Bash] ``` skillci 会将 skill 的指令注入到 agent 中,发送每一条 `prompt`,并根据 `expect` 检查响应结果。如果没有安装任何 agent,测试将被报告为 **skipped**(绝对不会悄无声息地显示为 passed)。 ## 在 CI 中 (GitHub Actions) ``` # .github/workflows/skillci.yml name: skillci on: [push, pull_request] jobs: verify: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: mahitoh/skillci@v0 # lint + audit on every PR with: path: . ``` 如果任何 skill 存在 error 级别的发现,该 Action 将使构建失败。(在 CI 中进行场景测试需要配置 agent 和密钥;lint 和 audit 无需任何配置即可运行。) ## 评分 评分系统特意设计得透明且简单。初始分数为 100;每个 error 扣除 **25** 分,每个 warning 扣除 **8** 分,每个 info 扣除 **2** 分,每项失败的测试扣除 **15** 分。当一个 skill 没有任何 error 并且所有实际运行的测试都通过时,它即被标记为 **VERIFIED**。被 skipped 的测试不会扣分。 ## 安全规则 `skillci rules` 会列出所有规则。内置的规则包旨在针对真实攻击中出现的模式——远程 `curl | sh`、凭证/SSH/钱包访问、env-secret 泄露、反向 shell、指令覆盖型的 prompt injection、隐藏的 HTML 注释指令、混淆的 base64 payload 以及未加范围限制的 `rm -rf`。每一条规则都是 [`rules/`](rules/core.yml) 中几行 YAML 代码。 **添加规则是最简单的贡献方式** —— 写下匹配模式,在 fixture 中添加一行测试,就完成了。请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 路线图 - 支持更多 agent 适配器(Codex、Cursor、Gemini CLI、OpenClaw)——[适配器接口](src/types.ts)就是全部的契约 - 建立一个带有徽章的、已验证 skill 的公共注册中心 - 用于模糊输出质量评估的 LLM-as-judge 断言 - VS Code 扩展,内联展示 skill 状态 ## 贡献 这个项目天生就是为了接受贡献而设计的——三个独立的模块(安全规则、agent 适配器、场景包)各自的门槛极低,甚至不需要编写 Markdown 以外的内容。你可以从一个 [适合新手的 issue](https://github.com/mahitoh/skillci/labels/good%20first%20issue) 开始,或者阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 许可证 MIT
标签:AI代理, MITM代理, 提示词安全, 文档结构分析, 暗色界面, 自动化攻击, 错误基检测, 静态代码分析