openspec/changes/add-tool-command-surface-capabilities/proposal.md
OpenSpec currently assumes command delivery maps directly to command adapters. That assumption does not hold for all tools.
Some tools expose OpenSpec workflows via skill entries rather than adapter-generated command files. Kimi CLI is a concrete example: it invokes skills with forms such as /skill:openspec-new-change. In this model, skills are the command surface.
Today, this creates a behavior gap:
delivery=commands can remove skillsThis is more than a prompt UX issue because non-interactive and CI flows bypass interactive guidance. We need a capability-aware model in core generation logic.
Add an optional field in tool metadata to describe how a tool exposes commands:
adapter: command files are generated through a command adapterskills-invocable: skills are directly invocable as commandsnone: no OpenSpec command surfaceField should be optional. Default behavior is inferred from adapter registry presence: tools with a registered adapter resolve to adapter; tools with no adapter registration and no explicit annotation resolve to none.
Capability values use kebab-case string tokens for consistency with serialized metadata conventions.
Initial explicit overrides:
skills-invocableskills-invocableskills-invocableTrae no longer belongs in this override set once its .trae/commands/opsx-<id>.md adapter is available; it should resolve to adapter like other file-backed command integrations.
Update init and update to compute effective artifact actions per tool from:
both | skills | commands)Behavior matrix:
both:
skillsDir (including skills-invocable)adapter toolsnone: no artifact action; MAY emit compatibility warningskills:
skillsDir (including skills-invocable)none: no artifact action; MAY emit compatibility warningcommands:
adapter: generate commands, remove skillsskills-invocable: generate (or keep if up-to-date) skills as command surface; do not remove themnone: fail fast with clear errorBefore writing/removing artifacts, validate selected/configured tools against delivery mode:
Update summaries to show effective delivery outcomes per tool (for example, when commands mode still installs skills for skills-invocable tools).
init --tools kimi with delivery=commandsupdate with Kimi CLI configured under delivery=commandsclaude + kimi) across all delivery modesdelivery=commandsWhen combined with add-global-install-scope, init/update planning must compose:
global | project)both | skills | commands)adapter | skills-invocable | none)Implementation tests should cover mixed-tool matrices to ensure deterministic behavior when both changes are active.
tool-command-surface: Capability model that classifies tools as adapter, skills-invocable, or none to drive delivery behaviorcli-init: Delivery handling becomes tool-capability-aware with preflight compatibility validationcli-update: Delivery sync becomes tool-capability-aware with consistent compatibility validation and messagingsupported-tools-docs: Documents command-surface semantics for non-adapter toolssrc/core/config.ts - add optional command-surface metadata and skills-invocable tool overridessrc/core/command-generation/registry.ts (or shared helper) - capability inference from adapter presencesrc/core/init.ts - capability-aware generation/removal planning + compatibility validation + summary messagingsrc/core/update.ts - capability-aware sync/removal planning + compatibility validation + summary messagingsrc/core/shared/tool-detection.ts - include capability-aware detection so skills-invocable tools remain detectable under delivery=commands, and none tools are excluded from command-surface artifact detectiondocs/supported-tools.md and docs/cli.md - document delivery behavior and compatibility notestest/core/init.test.ts and test/core/update.test.ts - add coverage for skills-invocable behavior and mixed-tool delivery scenariossimplify-skill-installation by introducing additive, capability-specific requirements for init/update.simplify-skill-installation merges first, this change should be rebased and keep the capability-aware rule as the source of truth for delivery=commands behavior on skills-invocable tools.simplify-skill-installation branch should be rebased to avoid re-introducing a global "commands-only means no skills for all tools" assumption.add-global-install-scope merges first, this change should be rebased to compose capability-aware behavior on top of scope-resolved path decisions from that change.add-global-install-scope should be rebased to preserve Section 5 composition rules (install scope + delivery mode + command surface capability) without overriding capability-aware command-surface outcomes.