agents24 多 Harness 能力矩阵实战:一套 Markdown 插件源如何原生适配 Claude Code、Codex、Cursor、OpenCode 与 Antigravity
【免费下载链接】agentsMulti-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity项目地址: https://gitcode.com/GitHub_Trending/agents24/agents
本文围绕 agents24 开源仓库的跨 Harness 能力矩阵(docs/harnesses.md)展开,深入讲解这套 agentic plugin marketplace 如何以plugins/下的 Claude Code Markdown 为唯一事实源,通过 tools/adapters/ 下的适配器为五种 Harness 生成各自原生的制品,并阐明各 Harness 的能力差异、优雅降级规则、安装路径与再生成流程。读完本文,你将掌握:每个 Harness 支持哪些组件与能力、同一份源内容在不同 Harness 中会被如何改写、哪些产物提交进仓库而哪些需要本地生成,以及gh skill/npx skills这类只装技能的轻量安装方式。
设计前提:一个事实源,五套原生制品
claude-agents(本文简称 agents24)是一个多 Harness 插件市场。它的核心设计原则是:
- 事实源(source of truth)位于仓库根目录的 plugins/,全部以 Claude Code 的 Markdown 形式编写(agents 为
.md、skills 为SKILL.md、commands 为.md); - 各 Harness 的制品由 tools/adapters/ 下的适配器生成,且目标是"每个 Harness 拿到符合自身惯例的原生产物,而不是最低公分母的翻译";
- 能力矩阵的单一数据源是 tools/adapters/capabilities.py:该文件里的
Capabilitydataclass 与CAPABILITIES字典同时被适配器(用于优雅降级)、文档生成器(用于生成本文所对应的docs/harnesses.md)以及 plugin-eval(用于harness_portability评分维度)消费。文档头部的注释也明确写道:本文镜像了capabilities.py中的矩阵,改动应编辑源码后通过make docs重新生成。
从源码结构看,每个 Harness 对应一个继承自HarnessAdapter基类(tools/adapters/base.py)的适配器,基类要求实现emit_plugin()(按插件逐个产出制品),并可覆写emit_global()(产出跨插件的市场注册表、上下文文件等)。
支持的 Harness 与产物路径
以下是文档给出的完整 Harness 支持清单:
| Harness | 状态 | 生成路径 |
|---|---|---|
| Claude Code | 事实源 | plugins/、.claude-plugin/marketplace.json |
| OpenAI Codex CLI | 受支持 | 已提交:.agents/plugins/marketplace.json、plugins/*/.codex-plugin/plugin.json;gitignored:.codex/skills/、.codex/agents/ |
| Cursor(2.5+) | 受支持 | 已提交:.cursor-plugin/、.cursor/rules/(精选规则)——指向源plugins/ |
OpenCode(sst/opencode) | 受支持 | gitignored:.opencode/agents/、.opencode/commands/、.opencode/skills/、opencode.json |
Google Antigravity CLI(agy) | 受支持 | gitignored:.antigravity/plugins/<name>/{skills/,agents/,commands/} |
Agent Skills 安装器(gh skill2.90+、npx skills) | 受支持,仅技能 | 不生成任何东西;两者直接读取 GitHub 上的plugins/*/skills/ |
值得注意的分工是:Codex 与 Cursor 走"已提交的瘦注册表"路线(注册表条目指向源plugins/,安装时直接读源技能树),而OpenCode、Antigravity(以及 Copilot)走"克隆后本地生成"路线(变换后的树体积大,故 gitignored)。这背后的取舍在文档中被称为 "native install is lean":只提交小型 JSON 注册表指向源目录,大体积的变换树留待本地用make generate重新生成。
能力矩阵:六大维度逐一对照
文档给出了完整的跨 Harness 能力对照表,这是判断"某能力在此 Harness 上是否可用、以何种形式可用"的核心依据:
| 能力 | Claude Code | Codex | Cursor | OpenCode | Antigravity |
|---|---|---|---|---|---|
| Skills(原生 SKILL.md) | ✅ | ✅ | ✅ 经.claude/ | ✅ 经.opencode/skills/ | ✅(原生,每个插件自包含) |
| Subagents(原生 Markdown) | ✅ | TOML 格式 | ✅ 经.claude/ | ✅(frontmatter 不同) | ✅(agents/<name>.md+invoke_subagent/define_subagent) |
| Slash commands | ✅ | 转换为 skills | ✅ | ✅ | commands/<p>/<cmd>.toml(agy 报告为"转换为 skills") |
| 插件市场 | ✅ | — | ✅ (2.5+) | — | ✅(agy plugin install <name>@marketplace/agy plugin link) |
| 并行 subagents | ✅ | ✅ | ✅ | ✅ | ✅ |
| 每 Agent 工具白名单 | ✅(tools:) | 仅sandbox_mode | 仅readonly: | ✅(permission:块) | ✅(tools:,agy 原生名) |
TodoWrite工具 | ✅ | — | — | ✅ | — |
Task/Agent派生工具 | ✅ | 散文点名 | ✅ | ✅(task) | ✅(invoke_subagent/define_subagent) |
| MCP servers | ✅ | ✅ | ✅ | ✅ | ✅ |
| 生命周期 hooks | ✅ | — | — | ✅(TS 插件) | ✅ |
| 上下文文件 | CLAUDE.md | AGENTS.md(32 KiB 上限) | AGENTS.md | AGENTS.md/~/.claude/CLAUDE.md | AGENTS.md(原生读取) |
| 上下文文件建议上限 | 150 行 / 500 tokens | 150 行 / 500 tokens | 150 行 / 500 tokens | 150 行 / 500 tokens | 150 行 / 500 tokens |
| Skill 正文硬上限 | 无 | 8 KB | 无 | 无 | 无 |
| 工具名大小写 | CamelCase(Read) | 动作动词(无工具词汇表) | 小写 | 小写(严格) | 小写(agy 原生名) |
| 裸模型别名 | ✅(fable/opus/sonnet/haiku) | 映射到 GPT-5.x 家族 | 用inherit | 完整 provider/model-id | 映射到层级别名(pro/flash/inherit) |
源码层面的对应关系
- 能力标志的数据模型:每个
Capability实例都带有skills_native、agents_native、commands_native、plugin_marketplace、parallel_agents、tool_allowlist_per_agent、todowrite、task_spawn、mcp_servers、hooks、context_file_name、context_file_max_lines、skill_body_max_bytes、tool_name_case、bare_model_aliases等字段(见 tools/adapters/capabilities.py)。例如_CODEX_SKILL_CAP = 8 * 1024与_CONTEXT_LINES_CAP = 150直接对应矩阵中 Codex 的 8 KB 技能上限与 150 行上下文建议上限。 - 模型别名映射:矩阵底部"裸模型别名"一行的具体映射实现在
MODEL_ALIASES(tools/adapters/capabilities.py):例如源里的model: opus在 Codex 下解析为gpt-5.5、在 Cursor 下改写为inherit、在 OpenCode 下改写为anthropic/claude-opus-4-8、在 Antigravity 下改写为层级别名pro。resolve_model()还会在遇到未知别名时通过EmitResult.warnings提示用户其显式模型选择被覆盖。 - 工具名映射:
TOOL_NAME_MAPS(tools/adapters/capabilities.py)定义了 CamelCase 工具名到各 Harness 原生形式的改写表。Antigravity 的映射(Read→view_file、Edit→replace_file_content、Write→write_file、Bash→run_command、Grep→grep_search、Agent/Task→invoke_subagent)在代码注释中特别注明是"对照已安装的 agy 1.1.14 二进制自带的文档逐一确认"过的,未被确认的Glob/WebFetch/WebSearch/TodoWrite宁可留空原样透传,也不猜测映射。
Claude Code 原生特性:其余 Harness 缺失或降级的能力
Claude Code 是事实源 Harness,它通过CLAUDE.md(指向AGENTS.md的符号链接)读取规范上下文文件。文档明确列出它支持而其他 Harness 会降级或缺失的特性:
- 每 Agent 工具白名单:
tools:frontmatter 被原样执行(Cursor/Codex 更粗糙;OpenCode 适配器将其翻译为permission:块)。 Task/Agent派生工具:可扇出并行 subagent(Codex 需要在散文里点名某个 agent 来委托)。TodoWrite:原生进度追踪(Codex/Cursor/Antigravity 均无)。- Slash-command 市场:完整的
/plugin install、/plugin marketplace工作流。
Claude-Code-only 的路径有两个:
.claude-plugin/marketplace.json—— 插件注册表(事实源)plugins/<name>/.claude-plugin/plugin.json—— 每插件清单
与之对应,supported_harnesses()(tools/adapters/capabilities.py)明确把claude-code排除在"生成目标"之外:它只是源,不是适配目标。
优雅降级:同一份源内容如何被逐 Harness 改写
适配器会机械地处理不兼容项,插件作者不需要记住各 Harness 的规则就能写出可移植内容。文档给出的降级对照表如下:
| 源模式 | Codex | Cursor | OpenCode | Antigravity |
|---|---|---|---|---|
tools: Read, Grep(agent 白名单) | 丢弃;sandbox_mode = "read-only"启发式 | 丢弃(Cursor 不执行) | 转换为permission:deny 块 | 改写为 agy 原生工具名 |
color: blue(agent) | 丢弃 | 丢弃 | 丢弃 | 丢弃 |
model: opus(agent) | 映射到gpt-5.5 | 改写为inherit | 改写为anthropic/claude-opus-4-8 | 映射到pro |
model: fable(agent) | 映射到gpt-5.5 | 改写为inherit | 改写为anthropic/claude-fable-5 | 映射到pro |
正文中的TodoWrite | 无等价物——原样保留 | 无等价物——原样保留 | 原样可用 | 无等价物 |
| Skill 正文 > 8 KB | 拆入references/details.md | 透传 | 透传 | 透传 |
名为worker的 agent | 加命名空间为<plugin>__worker | 透传 | 透传 | 透传(无<plugin>__命名空间——插件目录本身已隔离) |
Slash command(commands/<x>.md) | 转换为 skill | 透传 | 改写为.opencode/commands/ | commands/<plugin>/<x>.toml,正文始终内联(绝不@{path}注入) |
源码印证:降级规则的实现细节
- Codex 的
sandbox_mode启发式(tools/adapters/codex.py):源 frontmatter 完全没有tools:字段 → 视为默认全工具 →workspace-write;有tools:且全部是只读工具(Read/Glob/Grep/WebFetch/WebSearch)→read-only;其余 →workspace-write。 - Codex 的 8 KB 拆分(tools/adapters/codex.py):
_split_body_if_oversized先按##小节边界累计内容(且会跳过代码块内的假标题),仍超限则在 UTF-8 码点边界硬切(优先选换行符),并给头部追加一行指针注释指向references/details.md。有效上限SKILL_BODY_CAP = 7400字节,为 frontmatter 与指针注释预留了约 700 字节余量。如果源技能已有references/details.md,溢出内容会写入references/_overflow.md以免互相覆盖。 - OpenCode 的
permission:块(tools/adapters/opencode.py):严格区分三种语义——无tools:键(默认不限制)→ 不输出 permission 块;显式tools: [](锁定)→ 输出全 deny 块(但skill与task基础能力始终 allow,否则会悄悄剥夺受限 agent 的子代理委托与技能调用);有白名单 → 允许列出的工具、拒绝其余,并把 MCP 工具排除在块外(走 MCP 配置)。函数注释里的对照表正是矩阵中"OpenCode 转换为permission:deny 块"的展开。 - Antigravity 的命令内联(tools/adapters/antigravity.py):
_inline_command_prompt把 Claude 的$ARGUMENTS占位符翻译为 agy 的{{args}},且只有当源正文完全没有$ARGUMENTS时才追加尾部{{args}}块,避免参数被绑定两次。之所以始终内联,是因为实测发现agy plugin validate结构上接受@{path}注入语法但从不求值,无法确认其运行时能否解析。
输出路径:已提交与 gitignored 的划分
文档给出了完整的提交/忽略清单:
已提交(committed):
.claude-plugin/marketplace.json # SOURCE OF TRUTH plugins/ # SOURCE OF TRUTH AGENTS.md # canonical context file .agents/plugins/marketplace.json # Codex marketplace registry (source.path: ./plugins/<name>) plugins/*/.codex-plugin/plugin.json # per-plugin Codex manifest (skills: ./skills/) .cursor-plugin/, .cursor/rules/ # Cursor marketplace + curated rules (point at source)Gitignored(用make generate重新生成):
.codex/skills/, .codex/agents/ # transformed Codex trees (for ~/.codex/skills symlink recipe) .opencode/agents/, .opencode/commands/, .opencode/skills/, opencode.json .antigravity/plugins/<name>/ # self-contained agy plugins (skills/, agents/, commands/) .copilot/agents/, .copilot/skills/, .copilot/commands/几点源码级补充:
- Codex 的每插件清单
plugins/<name>/.codex-plugin/plugin.json中skills: "./skills/"表示"直接从源技能目录读取 SKILL.md",因此无需提交变换后的技能树(tools/adapters/codex.py);codex-marketplace安装器的 zod schema 要求description非空,适配器在源插件缺省时回退为插件名(tools/adapters/codex.py)。 - Cursor 适配器只提交
.cursor-plugin/plugin.json(仅清单,不列组件,Cursor 会从.claude/自动发现)与根级.cursor-plugin/marketplace.json(镜像.claude-plugin/结构,但按 Cursor 要求带owner字段、条目用source而非path),另把手选的.cursor/rules/*.mdc从 tools/adapters/cursor_rules/ 拷入(tools/adapters/cursor.py)。MDC frontmatter 只允许description/globs/alwaysApply三个键,校验器会拒绝其他键。 AGENTS.md由适配器校验而非生成:Codex 适配器的emit_global会检查仓库根的AGENTS.md是否超过 32 KiB 硬上限与 150 行目录上限(tools/adapters/codex.py),因为它是 Codex/Cursor/OpenCode/Antigravity 共用的跨 Harness 上下文文件,Claude Code 则通过CLAUDE.md符号链接读取同一份文件。
原生安装:Codex、Cursor、Antigravity、OpenCode 各走各的路
文档给出的原生安装方式按"是否需要克隆 + 生成"分为两类:
- Codex:
npx codex-marketplace add wshobson/agents(当仓库是当前目录时还会被自动发现为项目级市场),然后逐个安装插件。Codex 直接从plugins/<name>/skills/读SKILL.md;超过 8 KB 上限的技能会在加载时被 Codex 截断。gitignored 的.codex/skills/副本保留给~/.codex/skills符号链接方案使用。 - Cursor:添加市场,然后
/plugin install <name>。条目指向源./plugins/<name>;Cursor 直接从源读取SKILL.md与.mdagent。 - Antigravity:没有"从 URL 一步安装"的途径(这是瘦化权衡的代价)。需要先克隆仓库,再
make generate HARNESS=antigravity,然后按插件执行agy plugin install .antigravity/plugins/<name>,或一次性执行make install-antigravity把所有生成的插件符号链接进~/.gemini/antigravity-cli/plugins/(agy 的配置目录)。 - OpenCode:同样没有一步式 URL 安装。克隆仓库后执行
make install-opencode(先跑 generate,再把.opencode/符号链接到~/.config/opencode/)。
Skills-only 安装器:gh skill与npx skills
gh skill(GitHub CLI 2.90+)与npx skills(vercel-labs 的 skills)可以直接从 GitHub 把 Agent Skills 装进任何受支持的 agent:两者无需克隆、无需市场、无需 generate 步骤,自动发现本仓库中每一个plugins/<plugin>/skills/<skill>/目录。它们只携带技能:不带 agents、commands 或 hooks。
文档给出的完整命令:
# gh skill:列表显示为 [plugins] <plugin>/<skill>,按裸技能名或精确路径选择 gh skill install wshobson/agents # 交互式浏览 gh skill install wshobson/agents python-testing-patterns gh skill install wshobson/agents plugins/python-development/skills/python-testing-patterns # 精确路径跳过目录树遍历 gh skill install wshobson/agents --all --agent claude-code --scope user gh skill install wshobson/agents python-testing-patterns --pin <sha> # npx skills:按裸技能名列表与选择 npx skills add wshobson/agents --list npx skills add wshobson/agents --skill python-testing-patterns -a claude-code npx skills add wshobson/agents --all -g需要注意的陷阱(文档原文的 Gotchas):
- 两者都按裸技能名安装到
<agent>/skills/<skill>/。gh skill列表中的<plugin>/前缀仅供展示;python-development/python-testing-patterns不是合法选择器,合法的是python-testing-patterns或精确的plugins/...路径。技能目录名在全部插件间唯一,make smoke-test保证这一点——重名会在安装时冲突。 gh skill在有 GitHub Release 时从最新 release 安装,仓库无 release 时退回main。本仓库不发布 release,所以安装始终跟随main;一旦创建 release,安装会被冻结在该 tag 直到下一个 release。- 本地检出场景:执行
make generate-all后,npx skills add ./agents也会遍历 gitignored 的.codex/、.opencode/、.copilot/树并列出它们的副本。要么改从 GitHub 源安装,要么用gh skill install . --from-local(会跳过隐藏目录)。 - Spec 门禁:
gh skill publish --dry-run会按 agentskills.io 规范校验每个 SKILL.md(名称模式、名称与目录名一致、必需 frontmatter)。make smoke-test会运行它,并用真实二进制走通两个 CLI 的发现流程。
再生成与验证:make 目标一览
已提交的注册表指向源,变换后的树按需再生成。贡献者提交源改动前必须运行make generate-all——CI 会在已提交注册表发生漂移时失败。
make generate HARNESS=codex make generate HARNESS=cursor make generate HARNESS=opencode make generate HARNESS=antigravity # 或者一次性全部生成(提交源改动前运行): make generate-all # 可选的全局安装: make install-opencode make uninstall-opencode make install-antigravity make uninstall-antigravity从 Makefile 可以看到完整的工具链编排(Makefile):
HARNESSES := codex copilot cursor opencode antigravity,generate-all循环遍历它们;- 支持单插件生成:
make generate HARNESS=codex PLUGIN=python-development; make validate(结构校验)、make garden(doc-gardener 漂移/死链/上限检测)、make smoke-test(真实 CLI 冒烟测试,PATH 上没有的 CLI 自动跳过,CI 会把 OpenCode/Antigravity/Codex 的跳过转为硬性要求);- 所有 Python 工具都通过
uv运行(uv run --project plugins/plugin-eval python ...),插件级 venv 通过 extra-paths 配置使tools/adapters/可导入。
全局安装与卸载
OpenCode、Copilot、Antigravity 支持把生成产物全局安装到用户级发现路径:
make install-opencode # symlink .opencode/ → ~/.config/opencode/ make uninstall-opencode make install-copilot # symlink .copilot/ → ~/.copilot/ make uninstall-copilot make install-antigravity # symlink each .antigravity/plugins/<p>/ → ~/.gemini/antigravity-cli/plugins/<p>/ make uninstall-antigravity # 强制替换冲突符号链接: make install-copilot FORCE=1 make install-antigravity FORCE=1Copilot 在仓库级从
.copilot/agents/与.copilot/skills/发现 agent 与技能,在用户级从~/.copilot/agents/与~/.copilot/skills/发现。适配器输出到.copilot/;如需用户级发现,使用make install-copilot。
外部集成:Pensyve 与 HOL Guard
Pensyve(外部记忆集成)
Claude Code 市场把 Pensyve 作为外部git-subdir插件收录。对于生成式 Harness,请使用 Pensyve 上游的 Harness 原生集成:
| Harness | 上游集成 |
|---|---|
| Claude Code | https://github.com/major7apps/pensyve.git,路径integrations/claude-code |
| Codex CLI | integrations/codex-plugin |
| Cursor | integrations/cursor |
| OpenCode | integrations/opencode-plugin |
| Copilot | .copilot/(仓库级)或~/.copilot/(经make install-copilot全局安装) |
HOL Guard(外部安全集成)
Claude Code 市场把 HOL Guard 作为来自hashgraph-online/hol-guard-plugin仓库distributions/wshobson-agents路径的外部git-subdir插件收录。该审查负载暴露可移植的hol-guard与plugin-scanner技能,且默认保持本地决策;Guard Cloud 既非必需也不被推广。该市场条目仅作为 Claude Code 的发现面,不会把 HOL Guard 加入生成的 Codex、Cursor、OpenCode、Antigravity 或 Copilot 注册表。
审查负载被固定(pinned)在 commit43b2dda59e9f07057c52e69fd7426188faae1488,并安装精确的本地 CLI 版本hol-guard==2.2.119与plugin-scanner==2.2.119,安装前需要用户批准。更新审查负载时,需要同时推进市场清单里的sha以及市场/外部清单的版本号。当用户明确请求防护时,本地 HOL Guard 运行时可以修改受支持 Harness 的 hook/设置配置;本仓库中生成的 Harness 输出不会打包或改写外部 HOL Guard 负载。
关键要点回顾
- 单一事实源、多套原生制品是整套架构的核心:作者只维护
plugins/下的 Claude Code Markdown,五种 Harness 的原生形态全部由 tools/adapters/ 中的适配器机械生成。 - 能力矩阵不是营销话术而是可执行代码:tools/adapters/capabilities.py 的
CAPABILITIES、TOOL_NAME_MAPS、MODEL_ALIASES三个数据结构同时驱动降级改写、文档生成与 plugin-eval 的可移植性评分。 - "瘦提交 + 本地生成":Codex/Cursor 走已提交的 JSON 注册表直接指向源目录;OpenCode/Antigravity/Copilot 的变换树 gitignored,克隆后
make generate即可再生。 - 权限语义被小心保留:OpenCode 的
permission:块严格区分"未设置tools:"与"显式空列表";Antigravity 与 Codex 的工具白名单降级各有启发式,避免静默泄漏权限。 - 只装技能的轻量通道:
gh skill install与npx skills add无需克隆即可把任意技能装进任意 agent,但要留意裸名安装、release 行为与本地检出等陷阱。
延伸阅读
- docs/authoring.md —— 面向插件作者的可移植内容风格指南
- docs/architecture.md —— 整体设计原则(粒度化、可组合性、上下文效率)
- docs/plugin-eval.md ——
harness_portability评分维度所在的评估框架 - docs/usage.md —— 各 Harness 的完整安装、命令与工作流
【免费下载链接】agentsMulti-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity项目地址: https://gitcode.com/GitHub_Trending/agents24/agents
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考