Harness compatibility
The 19 adapters, their install paths, support types and verification tiers.
Skillporter ships adapters for 19 AI agent harnesses. Each adapter records the exact directories that harness reads, how it supports the Agent Skills format, and what evidence backs the claim.
Two questions are kept separate on purpose:
- Support type describes how the harness consumes a skill.
- Verification tier describes how the adapter was tested.
A harness can support skills natively and still only be fixture tested. Skillporter never marks an adapter as runtime verified because a directory was created.
Support types
| Support type | Meaning |
|---|---|
NATIVE |
The harness reads the Agent Skills format (SKILL.md) directly. |
COMPATIBLE |
The harness reads SKILL.md through a documented compatibility path. |
ADAPTED |
The harness needs a controlled conversion, such as a rules or conventions file. |
The registry also defines PARTIAL, UNSUPPORTED and UNVERIFIED for custom adapters. No built-in adapter uses them.
Verification tiers
| Tier | Evidence required |
|---|---|
RUNTIME_VERIFIED |
Installation and live discovery verified inside the running harness on a test host. |
INTEGRATION_TESTED |
End-to-end multi-harness workflows (add, sync, diagnose, doctor --fix, drift, duplicates, shared-path deduplication, rollback) verified in automated integration suites, plus vendor documentation. |
FIXTURE_TESTED |
The full adapter lifecycle verified against automated fixtures in tests/test_adapter_conformance.py, plus official vendor documentation. |
DOCUMENTATION_VERIFIED |
Discovery paths and precedence confirmed against vendor documentation, without automated fixture execution. |
Custom adapters loaded with load_adapter_file() default to UNVERIFIED until you validate them yourself.
The 19 adapters
This table is generated from skillporter/harnesses.py, the same registry the CLI uses. Do not edit it by hand. Run python3 website/scripts/generate_site_data.py after changing the registry.
| ID | Harness | Category | Support | Verification | Project path | User path | Vendor docs |
|---|---|---|---|---|---|---|---|
hermes |
Hermes Agent | autonomous | NATIVE |
RUNTIME_VERIFIED |
.hermes/skills |
$HERMES_HOME/skills |
Docs |
claude-code |
Claude Code | coding | NATIVE |
INTEGRATION_TESTED |
.claude/skills |
~/.claude/skills |
Docs |
codex |
OpenAI Codex | coding | NATIVE |
INTEGRATION_TESTED |
.agents/skills |
~/.agents/skills |
Docs |
cursor |
Cursor | coding | NATIVE |
INTEGRATION_TESTED |
.agents/skills |
~/.agents/skills |
Docs |
github-copilot |
GitHub Copilot | coding | NATIVE |
FIXTURE_TESTED |
.github/skills |
~/.copilot/skills |
Docs |
gemini-cli |
Gemini CLI | coding | NATIVE |
FIXTURE_TESTED |
.agents/skills |
~/.agents/skills |
Docs |
antigravity |
Google Antigravity | coding | NATIVE |
FIXTURE_TESTED |
.agents/skills |
~/.gemini/config/skills |
Docs |
windsurf |
Windsurf | coding | NATIVE |
FIXTURE_TESTED |
.windsurf/skills |
~/.codeium/windsurf/skills |
Docs |
cline |
Cline | coding | NATIVE |
FIXTURE_TESTED |
.cline/skills |
~/.cline/skills |
Docs |
roo-code |
Roo Code | coding | NATIVE |
FIXTURE_TESTED |
.roo/skills |
~/.roo/skills |
Docs |
opencode |
OpenCode | coding | NATIVE |
FIXTURE_TESTED |
.opencode/skills |
~/.config/opencode/skills |
Docs |
zed |
Zed | coding | NATIVE |
FIXTURE_TESTED |
.agents/skills |
~/.agents/skills |
Docs |
replit |
Replit Agent | coding | NATIVE |
FIXTURE_TESTED |
.agents/skills |
~/.config/agents/skills |
Docs |
junie |
JetBrains Junie / AI Assistant | coding | NATIVE |
FIXTURE_TESTED |
.junie/skills |
~/.junie/skills |
Docs |
openclaw |
OpenClaw | autonomous | NATIVE |
FIXTURE_TESTED |
.openclaw/skills |
~/.openclaw/skills |
Docs |
openhands |
OpenHands | autonomous | NATIVE |
FIXTURE_TESTED |
.agents/skills |
~/.agents/skills |
Docs |
goose |
Goose | autonomous | NATIVE |
FIXTURE_TESTED |
.agents/skills |
~/.agents/skills |
Docs |
continue |
Continue | coding | COMPATIBLE |
FIXTURE_TESTED |
.continue/skills |
~/.continue/skills |
Docs |
aider |
Aider / AiderDesk | coding | ADAPTED |
FIXTURE_TESTED |
.aider-desk/skills |
~/.aider-desk/skills |
Docs |
19 adapters: 1 RUNTIME_VERIFIED, 3 INTEGRATION_TESTED, 15 FIXTURE_TESTED.
Print the same matrix locally:
skillporter matrix
skillporter matrix --category autonomous
skillporter matrix --json
Inspect one adapter, including every compatibility path and known limitation:
skillporter info cursor
The shared .agents/skills directory
Eight harnesses use .agents/skills as their primary project directory: Codex, Cursor, Gemini CLI, Antigravity, Zed, Replit Agent, OpenHands and Goose. Six more read it as a documented compatibility path: GitHub Copilot, Cline, Roo Code, OpenCode, Junie and OpenClaw.
Skillporter treats that directory as shared property.
- One write.
skillporter add <source> --harness allwrites.agents/skills/<skill>once and reports the other owners as sharing the path. - Safe removal.
skillporter remove <skill> --harness cursorremoves any Cursor-only copy but keeps.agents/skills/<skill>while another managed harness still owns it. The shared copy is deleted only when its last owner is removed. - No double loading. Installing the same skill into
.agents/skillsand.cursor/skillsmakes Cursor list it twice.skillporter diagnosereports that asDUPLICATE.
Harness differences that matter
Harnesses do not behave identically, and Skillporter does not pretend they do. A few examples from the registry:
- Claude Code reads
.claude/skillsonly. A skill that exists only in.agents/skillsis invisible to it. - Codex and Zed read
.agents/skillsonly. - Gemini CLI requires the project folder to be trusted before it loads workspace skills.
- Cline expects the
SKILL.mdbody to stay under 5,000 tokens. - Core Aider does not discover skill folders on its own. It needs
aider --read <skill>/SKILL.mdor an adaptedCONVENTIONS.md.
skillporter info <harness> prints the notes and limitations for any adapter.
Detecting what you have installed
skillporter detect .
skillporter detect . --all --versions
Detection is read-only. It looks for known binaries, user directories, project markers and environment variables.
Adding your own harness
See Custom adapters for the declarative JSON format and the Python registration API.