anomalyco / anomalyco/opencode
duplicate skill name WARN on every workspace: symlink ~/.claude/skills → ~/.agents/skills is not inode-deduped; nested remotion-best-practices SKILL.md collides
@neriousy is already working on this.
Since Aug 31, 2026.
- Dominant language
- TypeScript
- Stars
- 209k
- Forks
- 27.5k
- Avg merge
- 7h 2m
- Merged PRs (30d)
- 384
Description
Description
OpenCode 1.18.25 (Desktop, macOS) logs WARN duplicate skill name on every workspace boot, not once per process. Two distinct collisions:
-
Same skill, two roots, often the same inode.
~/.claude/skills/<name>is a symlink to~/.agents/skills/<name>(standard Claude + Codex layout). Discovery still treats them as two skills and warns.followSymlinks: trueplus norealpath/inode check.Example from this machine (already a symlink):
WARN duplicate skill name name=codex-security-scan existing=/Users/…/.claude/skills/codex-security-scan/SKILL.md duplicate=/Users/…/.agents/skills/codex-security-scan/SKILL.md -
Recursive glob inside a skill package.
~/.agents/skills/remotion-best-practices/{remotion-create,remotion-markup,…}/SKILL.mdhas the same frontmatternameas the sibling top-level~/.agents/skills/remotion-create/SKILL.md.{skill,skills}/**/SKILL.mdindexes both.
This is not the TUI-vs-Desktop which winner bug (#35153) and not only the non-deterministic last-writer (#32202). The user-visible failure here is a warning flood (once per open workspace) and a prompt-cache miss risk from unstable <location> bytes. Related closed: #29950.
OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 is an undocumented workaround for (1) only. It is env-only (not in opencode.json schema). It does not fix (2). There is no config key to skip Claude roots while keeping ~/.agents/skills.
Plugins
oh-my-openagent@latest (warnings are service=skill / OpenCode core, not the plugin)
OpenCode version
Desktop 1.18.25; CLI 1.18.10
Steps to reproduce
- Install the same skill in both Claude and Agents roots as a symlink:
mkdir -p ~/.agents/skills/example echo $'---\nname: example\ndescription: demo\n---\n' > ~/.agents/skills/example/SKILL.md ln -s ~/.agents/skills/example ~/.claude/skills/example - Also copy a nested package layout:
mkdir -p ~/.agents/skills/pkg/example cp ~/.agents/skills/example/SKILL.md ~/.agents/skills/pkg/example/SKILL.md - Start OpenCode Desktop (or
opencode) from any project. - Open more than one recent workspace.
Expected
- Same inode / symlink pair: index once, no WARN.
- Nested
**/SKILL.mdunder another skill directory: do not register as a second skill of the samename, or warn once with a stable winner by documented precedence. - A
opencode.jsonflag equivalent toOPENCODE_DISABLE_CLAUDE_CODE_SKILLS.
Actual
- WARN for every colliding name, repeated for every workspace instance.
- Winner is last writer (see #32202).
- Desktop has no config-file way to opt out of
~/.claude/skillswithout also dropping~/.agents/skills(OPENCODE_DISABLE_EXTERNAL_SKILLS=1).
Operating System
macOS
Terminal
OpenCode Desktop
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.