Files
wshobson-agents/docs/harnesses.md
T
GitHub Copilot 07036e9689 feat: copilot harness follows OpenCode install pattern with .copilot/ output
- 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)
2026-05-26 09:02:12 -05:00

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 via make 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/; use make install-copilot for user-level discovery.

See also