内容提要
本文介绍如何构建可配置的Agent技能,解决静态技能无法定制的问题。通过创建`resolve_config.py`脚本,合并技能默认配置(`config.default.yaml`)与项目级覆盖文件(`.agent/skills.config.yaml`),实现技能行为可调。以git提交格式化技能为例,展示如何将设置从指令中分离,支持不同团队使用不同风格(如Conventional Commits或gitmoji),无需分叉代码。该方法可推广至其他技能,便于共享和维护。
延伸解读
配置与逻辑分离的价值
文章指出,静态技能将设置硬编码在指令中,导致团队各自分叉,难以维护。通过引入config.default.yaml和项目级覆盖文件,将技能的逻辑与设置分离,使得同一技能在不同项目中可以有不同的行为,而无需修改技能本身。这种模式不仅适用于git提交格式化,还可推广到其他技能,如变更日志生成器或许可证头添加器,提高了技能的可复用性和可维护性。
合并策略的细节
resolve_config.py中的deep_merge函数采用递归合并,字典逐键合并,而列表则整体替换。这种设计选择保证了行为的可预测性,避免列表合并带来的意外。对于需要追加的场景,文章建议使用显式的extra_types键,而不是依赖列表合并。理解这一策略有助于用户正确配置技能,避免因列表覆盖而丢失默认值。
测试与验证的重要性
文章强调,无需依赖代理即可测试配置合并的正确性。通过直接运行resolve_config.py并检查输出,可以确认用户覆盖是否生效、默认值是否保留。此外,建议编写自动化测试,以防未来修改加载器时破坏合并逻辑。这种测试方法简单有效,能确保技能在不同配置下表现符合预期。
分享与生态构建
为了让技能易于他人采用,文章建议将resolve_config.py复制到每个技能目录中,确保技能自包含;在SKILL.md中记录所有配置键;并发布index.json索引,方便发现和贡献。这种约定不仅使单个技能可配置,还促进了整个技能生态的共享与协作,减少了分叉,让改进惠及所有用户。
Q&A
Antigravity Agent Skills 的静态特性有什么问题?
静态技能将设置硬编码在指令中,导致用户无法在不复制和修改整个技能的情况下定制行为。这会导致团队各自维护分叉,难以同步原作者的改进。
如何让 Antigravity Agent 技能可配置?
通过创建一个 resolve_config.py 脚本,合并技能默认配置(config.default.yaml)和项目级覆盖文件(.agent/skills.config.yaml),并在 SKILL.md 中指示代理首先运行该脚本并应用输出。这样用户只需编辑 YAML 文件即可定制技能行为,无需修改技能本身。
resolve_config.py 脚本是如何工作的?
脚本首先加载技能目录下的 config.default.yaml 作为默认配置,然后向上查找项目根目录下的 .agent/skills.config.yaml,提取对应技能名的配置,最后通过 deep_merge 函数合并,用户配置覆盖默认值。合并规则是字典逐键合并,列表整体替换。
如何为 git-commit-formatter 技能添加项目级覆盖?
在项目根目录创建 .agent/skills.config.yaml 文件,并写入类似以下内容: ```yaml git-commit-formatter: style: gitmoji extra_types: [ci, build] scope_required: true ``` 这样该项目的提交风格就会变为 gitmoji,并允许 ci 和 build 类型,且强制要求 scope。
如何测试可配置技能是否正常工作?
可以直接运行 resolve_config.py 脚本并检查输出。例如,在没有覆盖文件时运行 `python scripts/resolve_config.py git-commit-formatter --project-root .` 会输出默认配置;添加覆盖文件后再次运行,输出会显示用户配置已生效。也可以编写自动化测试,在临时目录中创建假技能和配置,验证合并逻辑。
除了 git-commit-formatter,还有哪些技能可以应用这种可配置模式?
文章还提供了两个示例:changelog-generator 和 license-header-adder。changelog-generator 可以配置输出格式、包含的提交类型等;license-header-adder 可以配置许可证类型、持有人等。任何包含可调参数的技能都可以通过此模式实现可配置。
如何分享可配置的 Agent 技能给其他人?
分享时需确保每个技能自包含,将 resolve_config.py 复制到技能的 scripts/ 文件夹中;在 SKILL.md 中记录所有配置键;发布一个 index.json 列出技能名称、路径和配置键,方便他人发现和使用。