OpenCode and Command Code skills can share a project folder: both tools discover Agent Skills in .agents/skills/. But sharing a file is not the same as guaranteeing identical behaviour. Each tool loads and invokes skills differently, and instructions that depend on a particular tool, command or permission may need a small adjustment.
That distinction is useful if you keep project guidance in Git and switch between coding agents. The portable part is usually the plain-language instruction. Tool calls, scripts and assumptions about the runtime are where compatibility tends to break.
Put the skill in the shared project folder
For a project-level skill, use the same basic layout:
project/
└── .agents/
└── skills/
└── release-notes/
└── SKILL.md
OpenCode documents skills under .agents/skills/<name>/SKILL.md. Command Code also discovers skills in .agents/skills/, so both can find the same project file without keeping duplicate copies.
A small skill with clear frontmatter and tool-neutral instructions is the safest place to start:
---
name: release-notes
description: Draft release notes from supplied changes
---
## Instructions
- Read the changelog or merged-change list provided.
- Group related changes under clear headings.
- Do not invent fixes, dates or compatibility claims.
- Flag missing details instead of guessing.
What carries over?
The Markdown file and its core instructions are portable. For example, a request to group changes, avoid unsupported claims and call out missing information does not depend on which coding agent reads it.
What may behave differently?
OpenCode loads a skill through its own skill tool and applies its permission.skill rules. A skill can exist on disk but still be unavailable if permissions deny it. OpenCode also expects skill names to be unique.
Command Code has its own discovery and invocation flow. Its /skills command and cmd skills list --debug can help check what it found. If you also put a copy in .commandcode/skills/, Command Code gives that tool-specific copy priority over the shared one.
That priority is handy when one agent needs extra instructions, but it can also explain why edits to the shared file do not seem to change Command Code’s behaviour. Check for a tool-specific copy before debugging the shared version.
Keep tool-specific assumptions out of the shared file
A skill is not a universal plugin. If its instructions name an MCP server, call a tool that only one agent has, run a script that assumes a particular shell, or expect files in a tool-specific directory, the other agent may not be able to follow them.
Keep the shared SKILL.md focused on the task and expected result. Put agent-specific setup in a separate file or a short note for that agent. If a script is essential, document the runtime and dependencies instead of assuming the other tool has them installed.
A quick compatibility check
- Place one small skill in
.agents/skills/<name>/SKILL.md. - Use standard frontmatter and make the folder name match the skill name.
- Keep the steps independent of a specific MCP, shell or agent command.
- In Command Code, check
/skillsor runcmd skills list --debug. Look for a tool-specific override if the shared version is not the one being used. - In OpenCode, check that the skill is visible to the active agent and allowed by its skill permissions, then test it on a low-risk task.
- SourceOpenCode: Agent Skills














