- Generate to .copilot/agents/ and .copilot/skills/ (repo-local, gitignored) - make install-copilot symlinks to ~/.copilot/ for user-level discovery - tools/install_copilot.py + test_install_copilot.py (mirrors install_opencode) - tools/validate_generated.py: validate agents + skills - tools/doc_gardener.py: stale artifact detection for .copilot/ - tools/generate.py: _HARNESS_TARGETS + prune_orphans for .copilot/ - tools/tests/test_adapters.py: TestCopilotAdapter (9 tests) - tools/tests/test_round_trip.py: TestCopilotRoundTrip (3 tests) - tools/tests/test_validate_generated.py: expanded to 8 tests - docs/harnesses.md: install-copilot instructions + Pensyve entry - .gitignore: .copilot/ Closes #553 (follows same install pattern as OpenCode)
5.9 KiB
Cross-harness capability matrix
claude-agents is a multi-harness plugin marketplace. Source-of-truth lives under plugins/
as Claude Code markdown. Per-harness artifacts are generated by adapters under tools/adapters/.
This file mirrors the capability matrix in
tools/adapters/capabilities.py. Edit there; regenerate viamake docs.
Supported harnesses
| Harness | Status | Generated paths |
|---|---|---|
| Claude Code | source-of-truth | plugins/, .claude-plugin/marketplace.json |
| OpenAI Codex CLI | supported | .codex/skills/, .codex/agents/, AGENTS.md |
| Cursor (2.5+) | supported | .cursor-plugin/, .cursor/rules/ (curated) |
OpenCode (sst/opencode) |
supported | .opencode/agents/, .opencode/commands/, .opencode/skills/, opencode.json |
| Gemini CLI | supported | skills/, agents/, commands/ (at extension root) |
Capability matrix
| Capability | Claude Code | Codex | Cursor | OpenCode | Gemini |
|---|---|---|---|---|---|
| Skills (SKILL.md native) | ✅ | ✅ | ✅ via .claude/ |
✅ via .opencode/skills/ |
✅ (auto-discovered) |
| Subagents (markdown native) | ✅ | TOML format | ✅ via .claude/ |
✅ (different frontmatter) | ✅ (April 2026 spec) |
| Slash commands | ✅ | converted to skills | ✅ | ✅ | TOML at commands/ |
| Plugin marketplace | ✅ | — | ✅ (2.5+) | — | — (direct URL install) |
| Parallel subagents | ✅ | ✅ | ✅ | ✅ | ✅ (April 2026) |
| Per-agent tool allowlist | ✅ (tools:) |
only sandbox_mode |
only readonly: |
✅ (permission: block) |
✅ (tools:) |
TodoWrite tool |
✅ | — | — | ✅ | — |
Task/Agent spawn tool |
✅ | name in prose | ✅ | ✅ (task) |
@agent syntax |
| MCP servers | ✅ | ✅ | ✅ | ✅ | ✅ |
| Lifecycle hooks | ✅ | — | — | ✅ (TS plugins) | — |
| Context file | CLAUDE.md |
AGENTS.md (32 KiB cap) |
AGENTS.md |
AGENTS.md / ~/.claude/CLAUDE.md |
GEMINI.md |
| Context file recommended cap | 150 lines / 500 tokens | 150 lines / 500 tokens | 150 lines / 500 tokens | 150 lines / 500 tokens | 150 lines / 500 tokens |
| Skill body hard cap | none | 8 KB | none | none | none |
| Tool name case | CamelCase (Read) |
action verbs (no tool vocab) | lowercase | lowercase (strict) | lowercase (Gemini names) |
| Bare model aliases | ✅ (opus/sonnet/haiku) |
mapped to GPT-5 family | use inherit |
full provider/model-id | mapped to gemini-2.5-* |
Graceful degradation
Each adapter handles incompatibilities mechanically — authors don't need to know the per-harness rules to write portable content.
| Source pattern | Codex | Cursor | OpenCode | Gemini |
|---|---|---|---|---|
tools: Read, Grep (agent allowlist) |
dropped; sandbox_mode = "read-only" heuristic |
dropped (Cursor doesn't honor) | converted to permission: deny block |
passed through |
color: blue (agent) |
dropped | dropped | dropped | dropped |
model: opus (agent) |
mapped to gpt-5 |
rewritten to inherit |
rewritten to anthropic/claude-opus-4-7 |
mapped to gemini-2.5-pro |
TodoWrite in body |
no equivalent — leave as-is | no equivalent — leave as-is | works as-is | no equivalent |
| Skill body > 8 KB | split into references/details.md |
passed through | passed through | passed through |
Agent named worker |
namespaced to <plugin>__worker |
passed through | passed through | passed through |
Slash command (commands/<x>.md) |
converted to skill | passed through | rewritten to .opencode/commands/ |
TOML at commands/<plugin>/<x>.toml |
Output paths (all gitignored)
.claude-plugin/marketplace.json # SOURCE OF TRUTH (committed)
plugins/ # SOURCE OF TRUTH (committed)
GEMINI.md, AGENTS.md* # context files (committed/generated)
.codex/skills/, .codex/agents/ # generated by Codex adapter
.cursor-plugin/, .cursor/rules/ # generated by Cursor adapter
.opencode/agents/, .opencode/commands/, .opencode/skills/, opencode.json # generated by OpenCode adapter
skills/, agents/, commands/ # generated by Gemini adapter (at extension root; not for OpenCode install)
Regenerating
make generate HARNESS=codex
make generate HARNESS=cursor
make generate HARNESS=opencode
make generate HARNESS=gemini
# Or all at once:
make generate-all
# Optional global OpenCode install:
make install-opencode
make uninstall-opencode
External Pensyve integrations
The Claude Code marketplace includes Pensyve as an external git-subdir plugin.
For generated harnesses, use Pensyve's upstream harness-native integration:
| Harness | Upstream integration |
|---|---|
| Claude Code | https://github.com/major7apps/pensyve.git, path integrations/claude-code |
| Codex CLI | integrations/codex-plugin |
| Cursor | integrations/cursor |
| OpenCode | integrations/opencode-plugin |
| Gemini CLI | gemini extensions install https://github.com/major7apps/pensyve |
| Copilot | .copilot/ (repo-level) or ~/.copilot/ (global install via make install-copilot) |
Global install
OpenCode and Copilot support installing generated artifacts globally for user-level discovery:
make install-opencode # symlink .opencode/ → ~/.config/opencode/
make uninstall-opencode
make install-copilot # symlink .copilot/ → ~/.copilot/
make uninstall-copilot
# Force-replace conflicting symlinks:
make install-copilot FORCE=1
Copilot discovers agents from
.copilot/agents/and skills from.copilot/skills/at the repo level, and from~/.copilot/agents/and~/.copilot/skills/at the user level. The adapter emits to.copilot/; usemake install-copilotfor user-level discovery.
See also
authoring.md— portable-content style guide for plugin authorsarchitecture.md— overall design principlesplugin-eval.md— theharness_portabilityscoring dimension