NetAnlatAkademi/skillforge
GitHub: NetAnlatAkademi/skillforge
SkillForge 是一个 .NET 10 开源 CLI,用于创建、验证、检查、对比和打包基于 SKILL.md 的 AI agent 技能文件,在本地和 CI 中报告风险信号而非安全裁定。
Stars: 1 | Forks: 0
# SkillForge
一个用于 AI agent 技能的本地、开源 CLI。SkillForge 可以创建、验证、检查和打包
基于 `SKILL.md` 的技能,并以人类可读的控制台输出、JSON 或 SARIF 格式报告结果。
## 试试看
```
dotnet run --project src/SkillForge.Cli -- validate ./samples/valid-skill
dotnet run --project src/SkillForge.Cli -- validate ./samples/broken-references --verbose
```
```
SkillForge Validate
Skill: broken-references
Path: ./samples/broken-references
x SF0007 The referenced file 'references/checklist.md' does not exist in the skill. (SKILL.md:16)
x SF0007 The referenced file 'scripts/analyze.ps1' does not exist in the skill. (SKILL.md:17)
! SF1010 No agent compatibility is declared. (SKILL.md:1)
Result: INVALID
Errors: 2 Warnings: 1 Info: 0
```
退出代码:`0` 正常 · `1` 验证失败,或在 `--strict` 下出现警告 · `2` 使用错误 ·
`3` 意外失败。选项:`--strict`、`--quiet`、`--verbose`、`--no-color`(`NO_COLOR`
环境变量也同样适用)。
## 为什么需要
Agent 技能是带有实际权限的可执行指令。SkillForge 让开发者
能够在几秒钟内发现有缺陷或存在风险的技能——在本地和 CI 环境中——而无需向服务端发送任何内容。
SkillForge 会报告具体的诊断信息和风险信号。它有意**不**将技能
标记为“安全”或“不安全”。
## 命令
| 命令 | 用途 |
|---|---|
| `skillforge init
` | 搭建一个已通过验证的技能脚手架 |
| `skillforge validate ` | 验证结构、frontmatter 和质量规则 |
| `skillforge inspect ` | 总结文件、链接、脚本和推断出的能力 |
| `skillforge diff ` | 根据两个版本能做什么进行比较,而不是看哪些字节发生了变化 |
| `skillforge pack ` | 生成带有 SHA-256 哈希和清单的确定性 `.skill.zip` |
完整选项请参见 [docs/cli-reference.md](docs/cli-reference.md);CI 用法(包括 SARIF 上传)请参见
[docs/ci.md](docs/ci.md)。
## 环境要求
- [.NET SDK 10.0](https://dotnet.microsoft.com/download) 或更高版本
## 构建和测试
```
dotnet restore
dotnet build
dotnet test
```
包含代码覆盖率:
```
dotnet test --collect:"XPlat Code Coverage" --settings coverlet.runsettings
```
运行设置会排除源生成代码。如果不排除,由
`[GeneratedRegex]` 生成的匹配器会占据数据的主要部分,从而掩盖手写代码中真正的覆盖率缺口。
从源码运行 CLI:
```
dotnet run --project src/SkillForge.Cli -- --help
```
## 作为全局工具安装
发布后:
```
dotnet tool install --global SkillForge.Cli
skillforge --help
```
或者在本地构建并安装该包:
```
dotnet pack src/SkillForge.Cli -c Release -o artifacts/local-tool
# 从仓库外部运行此命令 — 请参阅下方的说明。
cd ~
dotnet tool install --global --add-source /path/to/skillforge/artifacts/local-tool SkillForge.Cli
```
`cd` 是必须执行的。此代码仓库的 `NuGet.config` 将每个包映射到 nuget.org,而 NuGet 不允许
将 `--add-source` 与源映射结合使用——如果在仓库内运行安装,它会报错
`NU1110`。如果在其他任何地方运行,仓库的配置就不再适用,本地文件夹也会被接受。
使用 `dotnet tool uninstall --global SkillForge.Cli` 进行卸载。
## 在 GitHub Actions 中使用
```
permissions:
contents: read
security-events: write # what turns findings into inline pull-request annotations
jobs:
skills:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: NetAnlatAkademi/skillforge@v26.208.1
with:
path: ./skills
suppress: SF1009,SF1010
```
将 `path` 指向单个技能或包含它们的目录——没有自己 `SKILL.md` 的目录会作为
一个批次进行验证,整个批次会变成**一次** SARIF 运行,这正是代码扫描所期望的。该 action 会自动上传
该 SARIF,因此结果会作为注解显示在 pull request 中,而不仅仅是在日志里。
`strict` 默认是关闭的,这是有意为之:SF1009 和 SF1010 几乎会在所有真实技能上触发,因此
开箱即用的严格运行会导致原本没问题的技能验证失败。请参阅 [docs/validation-rules.md](docs/validation-rules.md)。
保留 `version` 为未设置状态,action 将从其自身的检出中构建 CLI——速度较慢,但它将 CLI 锁定在
你引用该 action 所使用的 ref 上,并且在该工具发布到 NuGet 之前也能正常工作。将其设置为已发布的
`SkillForge.Cli` 版本即可改为安装该版本。
`exit-code` 作为输出公开(0 正常,1 有结果,2 无法运行),供希望自行决定的调用者使用;
除了 0 以外,该步骤本身仍然会失败。
## 仓库布局
```
skillforge/
├── docs/ Architecture, validation rules, CLI reference
├── samples/ Example skills used by integration tests
├── src/ Domain, Application, Infrastructure, Reporting, Cli
└── tests/ One xUnit project per source project
```
各层的职责和依赖规则在 [docs/architecture.md](docs/architecture.md) 中进行了描述。
## 贡献
- 已启用可空引用类型和“警告视为错误”;构建必须保持零警告。
- 每个新的 NuGet 包都需要在 `docs/architecture.md` 中提供书面理由。
- 验证规则位于 Application 层,绝对不能放在命令类中。
- 提交需遵循 Conventional Commits,例如 `feat(validation): validate skill frontmatter`。
## 许可证
[MIT](LICENSE)标签:AI智能体, LNA, 云安全监控, 代码规范, 静态分析