Skip to content

Move OpenSpec to Agent Skills only (deprecate generated commands) #2022

Description

@TabishB

Summary

OpenSpec installs its workflows into each AI tool twice. It writes a skill and a tool-specific command file. We want to install skills only, using the Agent Skills standard (SKILL.md folders). The shared .agents/skills/ folder comes first wherever a tool reads it.

We audited all 49 tools OpenSpec supports. 48 of 49 already load Agent Skills. The only exception is Amazon Q Developer, which AWS is retiring.

This issue proposes a direction, not a fix. It lays out the audit, a phased plan, and what we still need to find out before we commit.

Why

  • One format instead of 35. Today we keep 34 command adapters, each with its own file layout and syntax (Markdown, TOML, prefixed names). Every new tool means another adapter. Skills are one format that works everywhere.
  • The ecosystem has moved. Skills used to be a Claude-only feature. Now nearly every coding agent supports them, and most read a shared .agents/skills/ folder.
  • Fewer files in user repos. A project set up for several tools gets one shared skills folder instead of a commands folder per tool.
  • Adding a tool gets cheap. A tool that reads .agents/skills/ needs no tool-specific code at all. The Universal target already proves this.

Where we are today

Count
Tools OpenSpec supports 49 (plus the Universal .agents target)
Tools that get command files today 34
Tools that are already skills-only 15
Default install (delivery) both: skills and commands
Tools OpenSpec already points at .agents/skills 5 (Amp, Antigravity, Codex, GSD, Zed)

Users can already choose skills only (delivery: skills), so the building blocks exist. This proposal makes skills only the default, and later the only option.

Audit: Agent Skills support per tool

Checked against official docs, changelogs and source code on 2026-10-01.

Group Tools Install target
✅ Reads project .agents/skills/ (30) Amp, Antigravity, Auggie, Code Studio, Codex, Command Code, CoStrict, Crush, Cursor, DeepSeek Harness, Devin Desktop, Factory Droid, Gemini CLI, GitHub Copilot, GSD, Junie, Kilo Code, Kimi Code, MiniMax Code, Mistral Vibe, Oh My Pi, OpenCode, Pi, Qwen Code, Rovo Dev CLI, SourceCraft, Warp, Zed Agent, ZCode, Zoo Code .agents/skills/
⚠️ Partial or unclear (5) ForgeCode, Grok Build (both read only the user ~/.agents/skills), Hermes Agent (needs trust or config), Lingma (changelog and docs disagree), Veai (reads other tools' folders, .agents not named) Own folder for now
📁 Skills in own folder only (13) AtomCode, Claude Code, Cline, CodeArts, CodeBuddy, Continue, EasyCode, GigaCode, IBM Bob, iFlow, Kiro, Qoder, Trae .<tool>/skills/
❌ No skills support (1) Amazon Q Developer None (Kiro replaces it)
Full table (49 tools)
Tool Gets commands today Reads .agents/skills Native skills folder Notes
Amazon Q Developer Yes ❌ No skills none IDE plugin reads rules only. End of support 2027-04-30, replaced by Kiro
Amp No ✅ .agents/skills
Antigravity Yes ✅ project only .agents/skills Legacy .agent/skills still works
AtomCode Yes 📁 .atomcode/skills
Auggie Yes ✅ .augment/skills .agents has the lowest precedence
IBM Bob Yes 📁 .bob/skills
Claude Code Yes 📁 .claude/skills Request to read .agents closed as not planned
Cline Yes 📁 .cline/skills Open bug: .agents/skills not loaded
Command Code Yes ✅ .commandcode/skills Compatibility path
CodeArts No 📁 .codeartsdoer/skills
Codex No ✅ .agents/skills Native folder
DeepSeek Harness No ✅ .dsh/skills
Devin Desktop Yes ✅ .devin/skills
ForgeCode No ⚠️ user only .forge/skills
CodeBuddy Code Yes 📁 .codebuddy/skills
Code Studio Yes ✅ .codestudio/skills Rebrand to BoldCreate (.boldcreate) in progress
Continue Yes 📁 .continue/skills Also reads .claude/skills
CoStrict Yes ✅ .roo/skills We write .cospec, which it never reads for skills
Crush Yes ✅ .crush/skills
Cursor Yes ✅ .cursor/skills
EasyCode Yes 📁 .easycode/skills User folder is ~/.easycode-user/skills
Factory Droid Yes ✅ .factory/skills Docs label .agents as "legacy"
Gemini CLI Yes ✅ .gemini/skills
GitHub Copilot Yes ✅ .github/skills
GigaCode Yes 📁 .gigacode/skills
Grok Build No ⚠️ user only .grok/skills
GSD No ✅ .agents/skills Only folder
Hermes Agent No ⚠️ trust or config .hermes/skills
iFlow Yes 📁 .iflow/skills
Junie Yes ✅ .junie/skills
Kilo Code Yes ✅ .kilo/skills Legacy .kilocode/skills still loads
Kimi Code No ✅ .kimi-code/skills
Kiro Yes 📁 .kiro/skills
Lingma Yes ⚠️ conflicting .lingma/skills
MiniMax Code No ✅ .minimax/skills OpenSpec installs globally today
Mistral Vibe No ✅ trusted folders .vibe/skills
Oh My Pi Yes ✅ .omp/skills
OpenCode Yes ✅ .opencode/skills
Pi Yes ✅ trust prompt .pi/skills
SourceCraft Yes ✅ .codeassistant/skills
Qoder Yes 📁 .qoder/skills
Qwen Code Yes ✅ source only .qwen/skills Docs out of date
Rovo Dev CLI No ✅ .rovodev/skills
Zoo Code Yes ✅ source only .roo/skills Upstream Roo Code never added it
Trae Yes 📁 .trae/skills
Veai No ⚠️ maybe .veai/skills
Warp No ✅ recommended .agents/skills
Zed Agent No ✅ .agents/skills Only folder
ZCode Yes ✅ source only .zcode/skills Docs out of date

Proposed direction

Where skills get installed

  1. .agents/skills/ when the tool reads it at project level.
  2. .<tool>/skills/ when the tool only reads its own folder.
  3. The user-level folder only when a tool has no project folder.

When a user picks several tools that all read .agents/skills/, OpenSpec writes one copy.

Phased rollout

Phase What changes What users see
Now (minor) Fix the bugs below. Test unclear tools by hand. Nothing changes
Next major Default becomes skills only. Commands still work as an opt-in and show a deprecation notice. New installs get skills. Existing users get a notice and a migration path
Later (timing TBD) Decide whether to remove command generation, based on feedback and usage To be decided

We are not proposing to remove commands in the next major. We deprecate them there and keep them working until we have a removal plan we're confident in.

Problems the audit found today

These are bugs whatever we decide here:

  1. CoStrict: we write skills to .cospec/, which CoStrict never reads for skills. It reads .roo/skills and .agents/skills.
  2. Amazon Q Developer: .amazonq/skills loads nowhere. The product is being retired in favor of Kiro.
  3. Hermes: our setup note says Hermes only loads ~/.hermes/skills, but its docs now say it scans project folders too.

Open questions and unknowns

User experience

  • How do users trigger a workflow? Users run commands like /opsx:propose today. Each tool triggers skills differently: some by slash name, some by $name, some only automatically. We need a per-tool answer before dropping commands.
  • The names change. Skill names (openspec-propose) differ from command names (opsx:propose). Docs, tutorials and muscle memory all use the command spelling.
  • Do commands do anything skills can't? For example, argument passing or tool-specific front matter. We should list any gaps.

Install behavior

  • Duplicates. Many tools read both .agents/skills and their own folder. Upgraded projects could load the same skill twice, with tool-specific precedence deciding which copy wins.
  • Trust gates. Pi, Mistral Vibe and Hermes only read .agents/skills in trusted folders. Will first-run users think the install failed?
  • Cleanup on upgrade. How do we remove old command files safely without touching files the user edited?

Evidence gaps

  • Support found only in source, not docs: Qwen Code, Zoo Code and ZCode. Lingma's docs contradict each other. Veai and Trae are unclear. We should test these by hand.
  • .agents is not formally standardized. agentskills.io defines the SKILL.md format but no canonical folder. Factory already calls .agents "legacy" and Claude Code declined it. What happens if a tool drops it?
  • Tool churn. Code Studio is mid-rebrand and Amazon Q is being retired. How do we keep this audit current?

Release

  • Removal criteria. What tells us it's safe to remove commands entirely? Usage data, open issues, a fixed number of releases?
  • Amazon Q users. Do we drop the target, point those users to Kiro, or keep commands for it only?

Out of scope

  • Changing the content of OpenSpec's workflows.
  • Changing how tools are detected during openspec init.
  • Implementation details. Those come in a change proposal once the open questions are answered.

Activity

  1. clay-good commented on Oct 7, 2026

    @clay-good
    Collaborator

    Did some digging on the open questions. Sharing what we found, not proposing a fix yet.

    Scope note: this only affects the generated command files. The openspec CLI stays, since skills still call it for status, validate and archive.

    How users trigger a skill (checked 2026-10-07)

    Tool Run a skill by name? Arguments?
    Claude Code ✅ /openspec-propose ("custom commands have been merged into skills") ✅ $ARGUMENTS, argument-hint
    VS Code Copilot ✅ /name ✅ free text, argument-hint
    Cursor ✅ /name Not documented
    Codex ✅ $name or the /skills picker. Custom prompts are now marked deprecated Not documented
    Devin ✅ /name Not documented
    Grok Build ✅ /name ✅ argument-hint
    Gemini CLI ❌ only the model can activate a skill —
    OpenCode ❌ only the model loads a skill, through its skill tool —

    Gemini CLI and OpenCode are the real gaps: with skills only, users there lose a way to start a workflow on purpose.

    Corrections and new findings

    • Claude Code + .agents/skills: the request isn't closed. It's still open as anthropics/claude-code#16345 (also #31005).
    • Grok Build: it reads project .grok/skills, but only the user-level ~/.agents/skills, and it already runs skills as slash commands. That matters for the Grok PR (feat(tools): add Grok Build CLI support #1851), which adds a 35th command adapter.
    • Duplicates are already happening. Cursor users report the same skill loading twice from .agents, .claude and .cursor (forum). Copilot, OpenCode and Gemini also read more than one of these folders.
    • The spec has no invocation fields. agentskills.io defines only name, description, license, compatibility, metadata and allowed-tools. user-invocable, disable-model-invocation and argument-hint are a shared habit of Claude Code, Copilot and Cursor, not a standard.
    • Cleanup today: with delivery: skills, openspec update deletes command files without checking whether the user edited them (src/core/update.ts, removeCommandFiles).

    Possible directions to discuss

    • Keep commands only for tools where a user can't start a skill by name, instead of a single global switch.
    • Use openspec update as the migration path, with a clear notice before it deletes anything, so users don't need a separate script.
    • Keep tool detection a deterministic folder check, as it is today. A small setup skill could let the running agent name its own tool.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions