Harness Parity — Keep Claude & OpenCode in Sync
SkillAI & modelsUse whenever you add, edit, rename, or delete any harness artifact — a skill, agent, command, rule, or instruction — in either .claude/ or .opencode/. Replicate the equivalent change in the other harness with the correct frontmatter and registration translation, so the two trees stay in parity.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Harness Parity — Keep Claude & OpenCode in Sync skill
What this skill tells your AI
The instructions your AI receives, as published by fmflurry/settings-opencode in skills/harness-parity/SKILL.md and read by ahel’s review.
When you add, edit, rename, or delete any artifact in .claude/ or .opencode/ (skills, agents, commands, rules, instructions), you MUST replicate the equivalent change in the other harness. This keeps the two harness codebases at parity, avoiding orphaned or divergent tools.
A. Replication Checklist
Follow these steps in order for every harness artifact change:
-
Identify artifact type and source harness
- Artifact type: skill / command / agent / rule-instruction
- Source: which harness changed (Claude
.claude/or OpenCode.opencode/)?
-
Locate or create the mirror path in the other harness
- Use the translation table (Section B) to find the equivalent path.
- Create the directory structure if it doesn't exist.
-
Apply the frontmatter/registration translation
- Consult the translation table for frontmatter fields and required registration entries.
- Copy the body verbatim (for skills, commands, rules, instructions).
- For agents: split the single Claude
.mdinto a prompt.txt+ JSONC config entry.
-
Wire the artifact into the registry/load-path
- Claude: Add an
@-import line to.claude/CLAUDE.mdfor rules/instructions. - OpenCode: Add entries to
opencode.jsonc:instructionsarray,commandobject, oragentobject. - If the artifact needs registration, skipping this step leaves it orphaned.
- Claude: Add an
-
Bring across any reference sub-files
- For skills with reference files (
reference.md,templates.md, etc.), copy them too. - File paths are relative; preserve the directory structure.
- For skills with reference files (
-
For deletes/renames: remove mirrors and their registry entries
- Delete or rename the mirror artifact in the other harness.
- Remove any
@-import,instructionsarray entry, orcommand/agentobject entry referencing it.
-
Validate syntax and references
- OpenCode:
opencode.jsoncstill parses (JSONC allows trailing commas). - Claude: All
@-import paths resolve to existing files. - Cross-check wikilinks (
[[skill-name]]) — they must point to existing skills in the same harness.
- OpenCode:
B. Translation Table
| Artifact | Claude Path | OpenCode Path | Frontmatter | Registration | Notes |
|---|---|---|---|---|---|
| Skill | .claude/skills/<name>/SKILL.md | .opencode/skills/<name>/SKILL.md | Both: name + description (no changes) | None (no registry entry either side) | Copy reference files (reference-*.md, etc.) with the same directory structure. |
| Command | .claude/commands/<name>.md (subdir allowed, e.g. opsx/new.md) | .opencode/commands/<name>.md (flat; convert opsx/new → opsx-new) | Claude: description only. Body includes > CC: delegate to <agent> note. | OpenCode: description + agent: + subtask: true | Add to opencode.jsonc command object for visibility. Drop the > CC: note when porting; it's replaced by agent: frontmatter. |
| Agent | .claude/agents/<name>.md (single file: frontmatter name/description/tools + prompt body) | Prompt: .opencode/prompts/agents/<name>.txt (prompt body only). Config: entry in opencode.jsonc agent object. | Claude: name, description, tools, frontmatter + prompt body. | OpenCode: Remove name/description/tools from .txt, place in JSONC agent object with keys description, mode, model, prompt, temperature, topP, tools, optional permission. | If delegatable, also add to conductor.permission.task allow-list in JSONC. Split the Claude file into prompt text + JSONC config. |
| Rule / Instruction | .claude/rules/**/*.md + @rules/... import in .claude/CLAUDE.md | .opencode/instructions/<name>.md + entry in opencode.jsonc instructions array | Both: standard markdown frontmatter (none required; body is the content). | Claude: @rules/path/to/file.md line in .claude/CLAUDE.md. | Adding the file alone is NOT enough — it must be in the active load path or it is orphaned. Register immediately. |
Key Translation Notes
- Skill references within text: Keep
[[skill-name]]wikilinks verbatim (they are harness-local). - Subdir flattening for commands:
opsx/newin Claude becomesopsx-newin OpenCode (flat structure, hyphens instead of slashes). - Agent split: Claude's single
.mdfile (frontmatter + body) becomes OpenCode's separate.txt(body only) + JSONC entry (config). - Command delegation: Claude uses
> CC: delegate to <agent>body note; OpenCode usesagent:frontmatter field.
C. Discovery & Trigger
This skill is always loaded in the harness rule/instruction (.claude/rules/common/harness-parity.md or .opencode/instructions/harness-parity.md), which reminds you to consult this skill whenever you modify a harness artifact. The skill provides the detailed translation table and replication checklist.
Whenever you add, edit, rename, or delete any artifact — no matter which harness you're in — the rule/instruction will prompt you to replicate the change in the other harness using this skill.
Maintenance: If new artifact types are introduced or paths change, update this table. Keep it as the single source of truth for Claude ↔ OpenCode artifact translation.
Scope Note
The harness-parity skill itself is PROJECT-SCOPED: it governs a project's own .claude/ ↔ .opencode/ pair. It does NOT govern the translation layer between this settings repo's .claude/skills/ and its root skills/ directory. This settings repo itself has no .opencode/ directory; the root skills/ directory is managed separately and is not subject to harness-parity rules. Harness-parity rules apply only when a project has both .claude/ and .opencode/ directories under version control.
Signals
- GitHub stars
- 171
- Forks
- 10
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
harness-parity- Source
- github.com/fmflurry/settings-opencode