Files
pbakaus_impeccable/HARNESSES.md
T
Paul BakausandClaude Opus 4.6 2d4c7899dd Update provider configs from official docs, add HARNESSES.md reference
Research each harness's official documentation to verify and correct
provider frontmatter configs. Remove Codex/Gemini body transforms that
targeted their commands systems, not skills.

- Add compatibility + metadata to Cursor and Agents (Copilot)
- Add allowed-tools to Pi
- Remove Codex $ARGNAME and Gemini {{args}} body transforms
- Add HARNESSES.md as source of truth for harness capabilities

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 10:46:59 -07:00

4.3 KiB

Harness Skills Capabilities Reference

Source of truth for what each AI coding harness supports in terms of agent skills. Used to inform provider configs in scripts/lib/transformers/providers.js.

Last verified: 2026-03-24

Official Documentation

Harness Docs URL
Claude Code https://code.claude.com/docs/en/skills
Cursor https://cursor.com/docs/context/skills
Gemini CLI https://geminicli.com/docs/cli/skills/
Codex CLI https://developers.openai.com/codex/skills
GitHub Copilot (Agents) https://code.visualstudio.com/docs/copilot/customization/agent-skills
Kiro https://kiro.dev/docs/skills/
OpenCode https://opencode.ai/docs/skills/
Pi https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/skills.md

Spec Compliance

All harnesses follow the Agent Skills specification to varying degrees. The spec defines these frontmatter fields: name, description, license, compatibility, metadata, allowed-tools.

Provider-specific extensions beyond the spec: user-invocable, argument-hint, disable-model-invocation, allowed-tools (extended syntax), model, effort, context, agent, hooks, subtask, mcp.

Frontmatter Support

Fields marked with * are spec-standard. Others are provider extensions.

Field Claude Code Cursor Gemini Codex Copilot Kiro OpenCode Pi
name* Yes Yes Yes Yes Yes Yes Yes Yes
description* Yes Yes Yes Yes Yes Yes Yes Yes
license* Yes Yes Ignored No Yes Yes Yes Yes
compatibility* Yes Yes Ignored No Yes Yes Yes Yes
metadata* Yes Yes Ignored No Yes Yes Yes Yes
allowed-tools* Yes No Ignored No No No Yes Yes
user-invocable Yes No No No Yes No Yes No
argument-hint Yes No No No Yes No Yes No
disable-model-invocation Yes Yes No No Yes No Yes Yes
model Yes No No No No No Yes No
effort Yes No No No No No No No
context Yes No No No No No No No
agent Yes No No No No No Yes No
hooks Yes No No No No No No No

Notes:

  • Gemini CLI validates only name and description; other spec fields are parsed but ignored.
  • Codex CLI uses a separate agents/openai.yaml sidecar for extended metadata (icons, branding, MCP tools, invocation control).
  • Kiro recognizes user-invocable and disable-model-invocation per community reports but does not formally document them.
  • Unknown fields are silently ignored by all harnesses.

Skill Directory Structure

Harness Native directory Also reads
Claude Code .claude/skills/ -
Cursor .cursor/skills/ .agents/skills/, .claude/skills/, .codex/skills/
Gemini CLI .gemini/skills/ .agents/skills/
Codex CLI .agents/skills/ (primary) -
GitHub Copilot .github/skills/ .agents/skills/, .claude/skills/
Kiro .kiro/skills/ -
OpenCode .opencode/skills/ .agents/skills/, .claude/skills/
Pi .pi/skills/ .agents/skills/

All harnesses support the {skill-name}/SKILL.md directory structure with optional reference/, scripts/, and assets/ subdirectories.

Placeholder / Variable Substitution

Claude Code supports runtime variable substitution directly in SKILL.md bodies: $ARGUMENTS, $0-$N, ${CLAUDE_SKILL_DIR}, ${CLAUDE_SESSION_ID}. No other harness supports substitution in skills.

Some harnesses have separate "custom commands" systems (distinct from skills) with their own substitution:

Harness Command system Substitution syntax
Gemini CLI .gemini/commands/ (TOML) {{args}}, !{shell}, @{file}
Codex CLI .codex/prompts/ $ARGNAME
OpenCode .opencode/commands/ $ARGUMENTS, $1-$N, !`shell`

Our build system handles cross-provider placeholders at compile time via replacePlaceholders() for {{model}}, {{config_file}}, {{ask_instruction}}, and {{available_commands}}.