Context
This is a cross-tool coexistence finding, not a Claude Code bug. Claude Code only reads .claude/skills, so this never bites there. But OpenCode reads .opencode/skills + .claude/skills + .agents/skills together, and that's where it surfaces. Related: BaseInfinity/opencode-sdlc-wizard#26.
Finding
claude-sdlc-wizard installs skills whose directory name differs from the name: in frontmatter:
.claude/skills/update/SKILL.md declares name: update-wizard
.claude/skills/setup/SKILL.md declares name: setup-wizard
Those names collide with opencode-sdlc-wizard's own setup-wizard / update-wizard skills. When OpenCode reads both trees, skill({ name: "update-wizard" }) resolves non-deterministically — it can load the Claude updater (which maintains .claude/ + the Claude wizard) instead of the OpenCode one. Verified: resolution flips between identical runs.
Suggested fix (low effort, improves multi-lane coexistence)
- Make the skill directory name match the
name: (e.g. dir setup-wizard/ with name: setup-wizard), so at least the naming is internally consistent; and/or
- Namespace the wizard maintenance skills (e.g.
claude-setup-wizard / claude-update-wizard) so they can't collide with the OpenCode/Codex siblings when a multi-tree reader (OpenCode) is present.
The workflow skills (sdlc etc.) collide too, but those are functionally equivalent, so the maintenance skills are the higher-value fix.
Environment: OpenCode 1.16.2 reading claude-sdlc-wizard + opencode-sdlc-wizard + codex siblings, macOS 15.1 arm64.
Context
This is a cross-tool coexistence finding, not a Claude Code bug. Claude Code only reads
.claude/skills, so this never bites there. But OpenCode reads.opencode/skills+.claude/skills+.agents/skillstogether, and that's where it surfaces. Related: BaseInfinity/opencode-sdlc-wizard#26.Finding
claude-sdlc-wizard installs skills whose directory name differs from the
name:in frontmatter:.claude/skills/update/SKILL.mddeclaresname: update-wizard.claude/skills/setup/SKILL.mddeclaresname: setup-wizardThose
names collide with opencode-sdlc-wizard's ownsetup-wizard/update-wizardskills. When OpenCode reads both trees,skill({ name: "update-wizard" })resolves non-deterministically — it can load the Claude updater (which maintains.claude/+ the Claude wizard) instead of the OpenCode one. Verified: resolution flips between identical runs.Suggested fix (low effort, improves multi-lane coexistence)
name:(e.g. dirsetup-wizard/withname: setup-wizard), so at least the naming is internally consistent; and/orclaude-setup-wizard/claude-update-wizard) so they can't collide with the OpenCode/Codex siblings when a multi-tree reader (OpenCode) is present.The workflow skills (
sdlcetc.) collide too, but those are functionally equivalent, so the maintenance skills are the higher-value fix.Environment: OpenCode 1.16.2 reading claude-sdlc-wizard + opencode-sdlc-wizard + codex siblings, macOS 15.1 arm64.