mirror of
https://github.com/Fission-AI/OpenSpec.git
synced 2026-11-05 08:53:24 +08:00
* feat(skills): auto-approve the openspec CLI in generated skills Emit `allowed-tools: Bash(openspec:*)` in every generated SKILL.md so agents that honor the Agent Skills standard run `openspec` commands without prompting on each call. Scope is limited to the CLI; per the standard `allowed-tools` pre-approves rather than restricts, so every other tool a skill uses stays available under the user's normal permission settings. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(commands): auto-approve the openspec CLI in Claude slash commands Extend the allowed-tools pre-approval to the second surface: Claude Code /opsx:* slash commands share the skill frontmatter contract, so the Claude command adapter now emits `allowed-tools: Bash(openspec:*)` too. The value is single-sourced in `src/core/shared/allowed-tools.ts` (a leaf module both surfaces import). Other command adapters are unchanged — no other tool's slash-command format defines a per-command pre-approval field; on the skills side every tool already gets the standard field via generateSkillContent and non-implementing tools ignore the unknown key. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1.6 KiB
1.6 KiB
MODIFIED Requirements
Requirement: ToolCommandAdapter interface
The system SHALL define a ToolCommandAdapter interface for per-tool formatting.
Scenario: Adapter interface structure
- WHEN implementing a tool adapter
- THEN
ToolCommandAdapterSHALL require:toolId: string identifier matchingAIToolOption.valuegetFilePath(commandId: string): returns file path for command (relative from project root, or absolute for global-scoped tools like Codex)formatFile(content: CommandContent): returns complete file content with frontmatter
Scenario: Claude adapter formatting
- WHEN formatting a command for Claude Code
- THEN the adapter SHALL output YAML frontmatter with
name,description,allowed-tools,category,tagsfields - AND the
allowed-toolsfield SHALL have the valueBash(openspec:*)so Claude Code runsopenspeccommands from the slash command without prompting for approval - AND file path SHALL follow pattern
.claude/commands/opsx/<id>.md
Scenario: Cursor adapter formatting
- WHEN formatting a command for Cursor
- THEN the adapter SHALL output YAML frontmatter with
nameas/opsx-<id>,id,category,descriptionfields - AND file path SHALL follow pattern
.cursor/commands/opsx-<id>.md
Scenario: Windsurf adapter formatting
- WHEN formatting a command for Windsurf
- THEN the adapter SHALL output YAML frontmatter with
name,description,category,tagsfields - AND file path SHALL follow pattern
.windsurf/workflows/opsx-<id>.md