@fission-ai/openspec 0.23.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -382
- package/dist/cli/index.js +120 -6
- package/dist/commands/workflow/index.d.ts +17 -0
- package/dist/commands/workflow/index.js +12 -0
- package/dist/commands/workflow/instructions.d.ts +29 -0
- package/dist/commands/workflow/instructions.js +381 -0
- package/dist/commands/workflow/new-change.d.ts +11 -0
- package/dist/commands/workflow/new-change.js +44 -0
- package/dist/commands/workflow/schemas.d.ts +10 -0
- package/dist/commands/workflow/schemas.js +34 -0
- package/dist/commands/workflow/shared.d.ts +52 -0
- package/dist/commands/workflow/shared.js +111 -0
- package/dist/commands/workflow/status.d.ts +14 -0
- package/dist/commands/workflow/status.js +58 -0
- package/dist/commands/workflow/templates.d.ts +16 -0
- package/dist/commands/workflow/templates.js +68 -0
- package/dist/core/artifact-graph/instruction-loader.d.ts +5 -1
- package/dist/core/artifact-graph/instruction-loader.js +8 -19
- package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
- package/dist/core/command-generation/adapters/amazon-q.js +26 -0
- package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
- package/dist/core/command-generation/adapters/antigravity.js +26 -0
- package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
- package/dist/core/command-generation/adapters/auggie.js +27 -0
- package/dist/core/command-generation/adapters/claude.d.ts +13 -0
- package/dist/core/command-generation/adapters/claude.js +50 -0
- package/dist/core/command-generation/adapters/cline.d.ts +14 -0
- package/dist/core/command-generation/adapters/cline.js +27 -0
- package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
- package/dist/core/command-generation/adapters/codebuddy.js +28 -0
- package/dist/core/command-generation/adapters/codex.d.ts +13 -0
- package/dist/core/command-generation/adapters/codex.js +27 -0
- package/dist/core/command-generation/adapters/continue.d.ts +13 -0
- package/dist/core/command-generation/adapters/continue.js +28 -0
- package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
- package/dist/core/command-generation/adapters/costrict.js +27 -0
- package/dist/core/command-generation/adapters/crush.d.ts +13 -0
- package/dist/core/command-generation/adapters/crush.js +30 -0
- package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
- package/dist/core/command-generation/adapters/cursor.js +44 -0
- package/dist/core/command-generation/adapters/factory.d.ts +13 -0
- package/dist/core/command-generation/adapters/factory.js +27 -0
- package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
- package/dist/core/command-generation/adapters/gemini.js +26 -0
- package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
- package/dist/core/command-generation/adapters/github-copilot.js +26 -0
- package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
- package/dist/core/command-generation/adapters/iflow.js +29 -0
- package/dist/core/command-generation/adapters/index.d.ts +27 -0
- package/dist/core/command-generation/adapters/index.js +27 -0
- package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
- package/dist/core/command-generation/adapters/kilocode.js +23 -0
- package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
- package/dist/core/command-generation/adapters/opencode.js +26 -0
- package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
- package/dist/core/command-generation/adapters/qoder.js +30 -0
- package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
- package/dist/core/command-generation/adapters/qwen.js +26 -0
- package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
- package/dist/core/command-generation/adapters/roocode.js +27 -0
- package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
- package/dist/core/command-generation/adapters/windsurf.js +51 -0
- package/dist/core/command-generation/generator.d.ts +21 -0
- package/dist/core/command-generation/generator.js +27 -0
- package/dist/core/command-generation/index.d.ts +22 -0
- package/dist/core/command-generation/index.js +24 -0
- package/dist/core/command-generation/registry.d.ts +36 -0
- package/dist/core/command-generation/registry.js +88 -0
- package/dist/core/command-generation/types.d.ts +55 -0
- package/dist/core/command-generation/types.js +8 -0
- package/dist/core/config.d.ts +1 -0
- package/dist/core/config.js +21 -21
- package/dist/core/init.d.ts +16 -36
- package/dist/core/init.js +323 -534
- package/dist/core/legacy-cleanup.d.ts +162 -0
- package/dist/core/legacy-cleanup.js +501 -0
- package/dist/core/shared/index.d.ts +8 -0
- package/dist/core/shared/index.js +8 -0
- package/dist/core/shared/skill-generation.d.ts +41 -0
- package/dist/core/shared/skill-generation.js +76 -0
- package/dist/core/shared/tool-detection.d.ts +66 -0
- package/dist/core/shared/tool-detection.js +140 -0
- package/dist/core/templates/index.d.ts +7 -16
- package/dist/core/templates/index.js +8 -36
- package/dist/core/templates/skill-templates.d.ts +13 -0
- package/dist/core/templates/skill-templates.js +627 -21
- package/dist/core/update.d.ts +38 -0
- package/dist/core/update.js +280 -62
- package/dist/prompts/searchable-multi-select.d.ts +27 -0
- package/dist/prompts/searchable-multi-select.js +149 -0
- package/dist/ui/ascii-patterns.d.ts +16 -0
- package/dist/ui/ascii-patterns.js +133 -0
- package/dist/ui/welcome-screen.d.ts +10 -0
- package/dist/ui/welcome-screen.js +146 -0
- package/dist/utils/file-system.d.ts +11 -0
- package/dist/utils/file-system.js +65 -2
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +2 -0
- package/package.json +1 -1
- package/dist/commands/artifact-workflow.d.ts +0 -17
- package/dist/commands/artifact-workflow.js +0 -915
- package/dist/core/configurators/agents.d.ts +0 -8
- package/dist/core/configurators/agents.js +0 -15
- package/dist/core/configurators/base.d.ts +0 -7
- package/dist/core/configurators/base.js +0 -2
- package/dist/core/configurators/claude.d.ts +0 -8
- package/dist/core/configurators/claude.js +0 -15
- package/dist/core/configurators/cline.d.ts +0 -8
- package/dist/core/configurators/cline.js +0 -15
- package/dist/core/configurators/codebuddy.d.ts +0 -8
- package/dist/core/configurators/codebuddy.js +0 -15
- package/dist/core/configurators/costrict.d.ts +0 -8
- package/dist/core/configurators/costrict.js +0 -15
- package/dist/core/configurators/iflow.d.ts +0 -8
- package/dist/core/configurators/iflow.js +0 -15
- package/dist/core/configurators/qoder.d.ts +0 -30
- package/dist/core/configurators/qoder.js +0 -42
- package/dist/core/configurators/qwen.d.ts +0 -24
- package/dist/core/configurators/qwen.js +0 -37
- package/dist/core/configurators/registry.d.ts +0 -9
- package/dist/core/configurators/registry.js +0 -43
- package/dist/core/configurators/slash/amazon-q.d.ts +0 -9
- package/dist/core/configurators/slash/amazon-q.js +0 -46
- package/dist/core/configurators/slash/antigravity.d.ts +0 -9
- package/dist/core/configurators/slash/antigravity.js +0 -23
- package/dist/core/configurators/slash/auggie.d.ts +0 -9
- package/dist/core/configurators/slash/auggie.js +0 -31
- package/dist/core/configurators/slash/base.d.ts +0 -19
- package/dist/core/configurators/slash/base.js +0 -69
- package/dist/core/configurators/slash/claude.d.ts +0 -9
- package/dist/core/configurators/slash/claude.js +0 -37
- package/dist/core/configurators/slash/cline.d.ts +0 -9
- package/dist/core/configurators/slash/cline.js +0 -23
- package/dist/core/configurators/slash/codebuddy.d.ts +0 -9
- package/dist/core/configurators/slash/codebuddy.js +0 -34
- package/dist/core/configurators/slash/codex.d.ts +0 -14
- package/dist/core/configurators/slash/codex.js +0 -109
- package/dist/core/configurators/slash/continue.d.ts +0 -9
- package/dist/core/configurators/slash/continue.js +0 -46
- package/dist/core/configurators/slash/costrict.d.ts +0 -9
- package/dist/core/configurators/slash/costrict.js +0 -31
- package/dist/core/configurators/slash/crush.d.ts +0 -9
- package/dist/core/configurators/slash/crush.js +0 -37
- package/dist/core/configurators/slash/cursor.d.ts +0 -9
- package/dist/core/configurators/slash/cursor.js +0 -37
- package/dist/core/configurators/slash/factory.d.ts +0 -10
- package/dist/core/configurators/slash/factory.js +0 -35
- package/dist/core/configurators/slash/gemini.d.ts +0 -9
- package/dist/core/configurators/slash/gemini.js +0 -22
- package/dist/core/configurators/slash/github-copilot.d.ts +0 -9
- package/dist/core/configurators/slash/github-copilot.js +0 -34
- package/dist/core/configurators/slash/iflow.d.ts +0 -9
- package/dist/core/configurators/slash/iflow.js +0 -37
- package/dist/core/configurators/slash/kilocode.d.ts +0 -9
- package/dist/core/configurators/slash/kilocode.js +0 -17
- package/dist/core/configurators/slash/opencode.d.ts +0 -12
- package/dist/core/configurators/slash/opencode.js +0 -72
- package/dist/core/configurators/slash/qoder.d.ts +0 -35
- package/dist/core/configurators/slash/qoder.js +0 -76
- package/dist/core/configurators/slash/qwen.d.ts +0 -32
- package/dist/core/configurators/slash/qwen.js +0 -49
- package/dist/core/configurators/slash/registry.d.ts +0 -8
- package/dist/core/configurators/slash/registry.js +0 -78
- package/dist/core/configurators/slash/roocode.d.ts +0 -9
- package/dist/core/configurators/slash/roocode.js +0 -23
- package/dist/core/configurators/slash/toml-base.d.ts +0 -10
- package/dist/core/configurators/slash/toml-base.js +0 -53
- package/dist/core/configurators/slash/windsurf.d.ts +0 -9
- package/dist/core/configurators/slash/windsurf.js +0 -23
- package/dist/core/templates/agents-root-stub.d.ts +0 -2
- package/dist/core/templates/agents-root-stub.js +0 -17
- package/dist/core/templates/agents-template.d.ts +0 -2
- package/dist/core/templates/agents-template.js +0 -458
- package/dist/core/templates/claude-template.d.ts +0 -2
- package/dist/core/templates/claude-template.js +0 -2
- package/dist/core/templates/cline-template.d.ts +0 -2
- package/dist/core/templates/cline-template.js +0 -2
- package/dist/core/templates/costrict-template.d.ts +0 -2
- package/dist/core/templates/costrict-template.js +0 -2
- package/dist/core/templates/project-template.d.ts +0 -8
- package/dist/core/templates/project-template.js +0 -32
- package/dist/core/templates/slash-command-templates.d.ts +0 -4
- package/dist/core/templates/slash-command-templates.js +0 -49
package/README.md
CHANGED
|
@@ -1,453 +1,188 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<a href="https://github.com/Fission-AI/OpenSpec">
|
|
3
3
|
<picture>
|
|
4
|
-
<source srcset="assets/
|
|
5
|
-
<
|
|
6
|
-
<img src="assets/openspec_pixel_light.svg" alt="OpenSpec logo" height="64">
|
|
4
|
+
<source srcset="assets/openspec_bg.png">
|
|
5
|
+
<img src="assets/openspec_bg.png" alt="OpenSpec logo">
|
|
7
6
|
</picture>
|
|
8
7
|
</a>
|
|
9
|
-
|
|
10
8
|
</p>
|
|
11
|
-
|
|
9
|
+
|
|
12
10
|
<p align="center">
|
|
13
11
|
<a href="https://github.com/Fission-AI/OpenSpec/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/Fission-AI/OpenSpec/actions/workflows/ci.yml/badge.svg" /></a>
|
|
14
12
|
<a href="https://www.npmjs.com/package/@fission-ai/openspec"><img alt="npm version" src="https://img.shields.io/npm/v/@fission-ai/openspec?style=flat-square" /></a>
|
|
15
|
-
<a href="https://nodejs.org/"><img alt="node version" src="https://img.shields.io/node/v/@fission-ai/openspec?style=flat-square" /></a>
|
|
16
13
|
<a href="./LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square" /></a>
|
|
17
|
-
<a href="https://
|
|
18
|
-
<a href="https://discord.gg/YctCnvvshC"><img alt="Discord" src="https://img.shields.io/badge/Discord-Join%20the%20community-5865F2?logo=discord&logoColor=white&style=flat-square" /></a>
|
|
19
|
-
</p>
|
|
20
|
-
|
|
21
|
-
<p align="center">
|
|
22
|
-
<img src="assets/openspec_dashboard.png" alt="OpenSpec dashboard preview" width="90%">
|
|
23
|
-
</p>
|
|
24
|
-
|
|
25
|
-
<p align="center">
|
|
26
|
-
Follow <a href="https://x.com/0xTab">@0xTab on X</a> for updates · Join the <a href="https://discord.gg/YctCnvvshC">OpenSpec Discord</a> for help and questions.
|
|
14
|
+
<a href="https://discord.gg/YctCnvvshC"><img alt="Discord" src="https://img.shields.io/discord/1411657095639601154?style=flat-square&logo=discord&logoColor=white&label=Discord&suffix=%20online" /></a>
|
|
27
15
|
</p>
|
|
28
16
|
|
|
29
|
-
<
|
|
30
|
-
|
|
31
|
-
</p>
|
|
17
|
+
<details>
|
|
18
|
+
<summary><strong>The most loved spec framework.</strong></summary>
|
|
32
19
|
|
|
33
|
-
|
|
20
|
+
[](https://github.com/Fission-AI/OpenSpec/stargazers)
|
|
21
|
+
[](https://www.npmjs.com/package/@fission-ai/openspec)
|
|
22
|
+
[](https://github.com/Fission-AI/OpenSpec/graphs/contributors)
|
|
34
23
|
|
|
35
|
-
|
|
24
|
+
</details>
|
|
25
|
+
<p></p>
|
|
26
|
+
Our philosophy:
|
|
36
27
|
|
|
37
|
-
|
|
28
|
+
```text
|
|
29
|
+
→ fluid not rigid
|
|
30
|
+
→ iterative not waterfall
|
|
31
|
+
→ easy not complex
|
|
32
|
+
→ built for brownfield not just greenfield
|
|
33
|
+
→ scalable from personal projects to enterprises
|
|
34
|
+
```
|
|
38
35
|
|
|
39
|
-
|
|
36
|
+
> [!TIP]
|
|
37
|
+
> **New workflow now available!** We've rebuilt OpenSpec with a new artifact-guided workflow.
|
|
38
|
+
>
|
|
39
|
+
> Run `/opsx:onboard` to get started. → [Learn more here](docs/opsx.md)
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
- Shared visibility into what's proposed, active, or archived.
|
|
45
|
-
- Works with the AI tools you already use: custom slash commands where supported, context rules everywhere else.
|
|
41
|
+
<p align="center">
|
|
42
|
+
Follow <a href="https://x.com/0xTab">@0xTab on X</a> for updates · Join the <a href="https://discord.gg/YctCnvvshC">OpenSpec Discord</a> for help and questions.
|
|
43
|
+
</p>
|
|
46
44
|
|
|
47
|
-
|
|
45
|
+
### Teams
|
|
48
46
|
|
|
49
|
-
|
|
50
|
-
- **Brownfield-first**: works great beyond 0→1. OpenSpec separates the source of truth from proposals: `openspec/specs/` (current truth) and `openspec/changes/` (proposed updates). This keeps diffs explicit and manageable across features.
|
|
51
|
-
- **Change tracking**: proposals, tasks, and spec deltas live together; archiving merges the approved updates back into specs.
|
|
52
|
-
- **Compared to spec-kit & Kiro**: those shine for brand-new features (0→1). OpenSpec also excels when modifying existing behavior (1→n), especially when updates span multiple specs.
|
|
47
|
+
Using OpenSpec in a team? [Email here](mailto:teams@openspec.dev) for access to our Slack channel.
|
|
53
48
|
|
|
54
|
-
|
|
49
|
+
<!-- TODO: Add GIF demo of /opsx:new → /opsx:archive workflow -->
|
|
55
50
|
|
|
56
|
-
##
|
|
51
|
+
## See it in action
|
|
57
52
|
|
|
53
|
+
```text
|
|
54
|
+
You: /opsx:new add-dark-mode
|
|
55
|
+
AI: Created openspec/changes/add-dark-mode/
|
|
56
|
+
Ready to create: proposal
|
|
57
|
+
|
|
58
|
+
You: /opsx:ff # "fast-forward" - generate all planning docs
|
|
59
|
+
AI: ✓ proposal.md — why we're doing this, what's changing
|
|
60
|
+
✓ specs/ — requirements and scenarios
|
|
61
|
+
✓ design.md — technical approach
|
|
62
|
+
✓ tasks.md — implementation checklist
|
|
63
|
+
Ready for implementation!
|
|
64
|
+
|
|
65
|
+
You: /opsx:apply
|
|
66
|
+
AI: Implementing tasks...
|
|
67
|
+
✓ 1.1 Add theme context provider
|
|
68
|
+
✓ 1.2 Create toggle component
|
|
69
|
+
✓ 2.1 Add CSS variables
|
|
70
|
+
✓ 2.2 Wire up localStorage
|
|
71
|
+
All tasks complete!
|
|
72
|
+
|
|
73
|
+
You: /opsx:archive
|
|
74
|
+
AI: Archived to openspec/changes/archive/2025-01-23-add-dark-mode/
|
|
75
|
+
Specs updated. Ready for the next feature.
|
|
58
76
|
```
|
|
59
|
-
┌────────────────────┐
|
|
60
|
-
│ Draft Change │
|
|
61
|
-
│ Proposal │
|
|
62
|
-
└────────┬───────────┘
|
|
63
|
-
│ share intent with your AI
|
|
64
|
-
▼
|
|
65
|
-
┌────────────────────┐
|
|
66
|
-
│ Review & Align │
|
|
67
|
-
│ (edit specs/tasks) │◀──── feedback loop ──────┐
|
|
68
|
-
└────────┬───────────┘ │
|
|
69
|
-
│ approved plan │
|
|
70
|
-
▼ │
|
|
71
|
-
┌────────────────────┐ │
|
|
72
|
-
│ Implement Tasks │──────────────────────────┘
|
|
73
|
-
│ (AI writes code) │
|
|
74
|
-
└────────┬───────────┘
|
|
75
|
-
│ ship the change
|
|
76
|
-
▼
|
|
77
|
-
┌────────────────────┐
|
|
78
|
-
│ Archive & Update │
|
|
79
|
-
│ Specs (source) │
|
|
80
|
-
└────────────────────┘
|
|
81
|
-
|
|
82
|
-
1. Draft a change proposal that captures the spec updates you want.
|
|
83
|
-
2. Review the proposal with your AI assistant until everyone agrees.
|
|
84
|
-
3. Implement tasks that reference the agreed specs.
|
|
85
|
-
4. Archive the change to merge the approved updates back into the source-of-truth specs.
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Getting Started
|
|
89
|
-
|
|
90
|
-
### Supported AI Tools
|
|
91
|
-
|
|
92
|
-
<details>
|
|
93
|
-
<summary><strong>Native Slash Commands</strong> (click to expand)</summary>
|
|
94
|
-
|
|
95
|
-
These tools have built-in OpenSpec commands. Select the OpenSpec integration when prompted.
|
|
96
|
-
|
|
97
|
-
| Tool | Commands |
|
|
98
|
-
|------|----------|
|
|
99
|
-
| **Amazon Q Developer** | `@openspec-proposal`, `@openspec-apply`, `@openspec-archive` (`.amazonq/prompts/`) |
|
|
100
|
-
| **Antigravity** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (`.agent/workflows/`) |
|
|
101
|
-
| **Auggie (Augment CLI)** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (`.augment/commands/`) |
|
|
102
|
-
| **Claude Code** | `/openspec:proposal`, `/openspec:apply`, `/openspec:archive` |
|
|
103
|
-
| **Cline** | Workflows in `.clinerules/workflows/` directory (`.clinerules/workflows/openspec-*.md`) |
|
|
104
|
-
| **CodeBuddy Code (CLI)** | `/openspec:proposal`, `/openspec:apply`, `/openspec:archive` (`.codebuddy/commands/`) — see [docs](https://www.codebuddy.ai/cli) |
|
|
105
|
-
| **Codex** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (global: `~/.codex/prompts`, auto-installed) |
|
|
106
|
-
| **Continue** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (`.continue/prompts/`) |
|
|
107
|
-
| **CoStrict** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (`.cospec/openspec/commands/`) — see [docs](https://costrict.ai)|
|
|
108
|
-
| **Crush** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (`.crush/commands/openspec/`) |
|
|
109
|
-
| **Cursor** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` |
|
|
110
|
-
| **Factory Droid** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (`.factory/commands/`) |
|
|
111
|
-
| **Gemini CLI** | `/openspec:proposal`, `/openspec:apply`, `/openspec:archive` (`.gemini/commands/openspec/`) |
|
|
112
|
-
| **GitHub Copilot** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (`.github/prompts/`) |
|
|
113
|
-
| **iFlow (iflow-cli)** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (`.iflow/commands/`) |
|
|
114
|
-
| **Kilo Code** | `/openspec-proposal.md`, `/openspec-apply.md`, `/openspec-archive.md` (`.kilocode/workflows/`) |
|
|
115
|
-
| **OpenCode** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` |
|
|
116
|
-
| **Qoder (CLI)** | `/openspec:proposal`, `/openspec:apply`, `/openspec:archive` (`.qoder/commands/openspec/`) — see [docs](https://qoder.com/cli) |
|
|
117
|
-
| **Qwen Code** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (`.qwen/commands/`) |
|
|
118
|
-
| **RooCode** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (`.roo/commands/`) |
|
|
119
|
-
| **Windsurf** | `/openspec-proposal`, `/openspec-apply`, `/openspec-archive` (`.windsurf/workflows/`) |
|
|
120
|
-
|
|
121
|
-
Kilo Code discovers team workflows automatically. Save the generated files under `.kilocode/workflows/` and trigger them from the command palette with `/openspec-proposal.md`, `/openspec-apply.md`, or `/openspec-archive.md`.
|
|
122
|
-
|
|
123
|
-
</details>
|
|
124
77
|
|
|
125
78
|
<details>
|
|
126
|
-
<summary><strong>
|
|
79
|
+
<summary><strong>OpenSpec Dashboard</strong></summary>
|
|
127
80
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|-------|
|
|
132
|
-
| Amp • Jules • Others |
|
|
81
|
+
<p align="center">
|
|
82
|
+
<img src="assets/openspec_dashboard.png" alt="OpenSpec dashboard preview" width="90%">
|
|
83
|
+
</p>
|
|
133
84
|
|
|
134
85
|
</details>
|
|
135
86
|
|
|
136
|
-
|
|
87
|
+
## Quick Start
|
|
137
88
|
|
|
138
|
-
|
|
139
|
-
- **Node.js >= 20.19.0** - Check your version with `node --version`
|
|
89
|
+
**Requires Node.js 20.19.0 or higher.**
|
|
140
90
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
**Option A: Using npm**
|
|
91
|
+
Install OpenSpec globally:
|
|
144
92
|
|
|
145
93
|
```bash
|
|
146
94
|
npm install -g @fission-ai/openspec@latest
|
|
147
95
|
```
|
|
148
96
|
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
openspec --version
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
**Option B: Using Nix (NixOS and Nix package manager)**
|
|
155
|
-
|
|
156
|
-
Run OpenSpec directly without installation:
|
|
157
|
-
```bash
|
|
158
|
-
nix run github:Fission-AI/OpenSpec -- init
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
Or install to your profile:
|
|
162
|
-
```bash
|
|
163
|
-
nix profile install github:Fission-AI/OpenSpec
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
Or add to your development environment in `flake.nix`:
|
|
167
|
-
```nix
|
|
168
|
-
{
|
|
169
|
-
inputs = {
|
|
170
|
-
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
171
|
-
openspec.url = "github:Fission-AI/OpenSpec";
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
outputs = { nixpkgs, openspec, ... }: {
|
|
175
|
-
devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShell {
|
|
176
|
-
buildInputs = [ openspec.packages.x86_64-linux.default ];
|
|
177
|
-
};
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
Verify installation:
|
|
183
|
-
```bash
|
|
184
|
-
openspec --version
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
#### Step 2: Initialize OpenSpec in your project
|
|
188
|
-
|
|
189
|
-
Navigate to your project directory:
|
|
190
|
-
```bash
|
|
191
|
-
cd my-project
|
|
192
|
-
```
|
|
97
|
+
Then navigate to your project directory and initialize:
|
|
193
98
|
|
|
194
|
-
Run the initialization:
|
|
195
99
|
```bash
|
|
100
|
+
cd your-project
|
|
196
101
|
openspec init
|
|
197
102
|
```
|
|
198
103
|
|
|
199
|
-
|
|
200
|
-
- You'll be prompted to pick any natively supported AI tools (Claude Code, CodeBuddy, Cursor, OpenCode, Qoder,etc.); other assistants always rely on the shared `AGENTS.md` stub
|
|
201
|
-
- OpenSpec automatically configures slash commands for the tools you choose and always writes a managed `AGENTS.md` hand-off at the project root
|
|
202
|
-
- A new `openspec/` directory structure is created in your project
|
|
203
|
-
|
|
204
|
-
**After setup:**
|
|
205
|
-
- Primary AI tools can trigger `/openspec` workflows without additional configuration
|
|
206
|
-
- Run `openspec list` to verify the setup and view any active changes
|
|
207
|
-
- If your coding assistant doesn't surface the new slash commands right away, restart it. Slash commands are loaded at startup,
|
|
208
|
-
so a fresh launch ensures they appear
|
|
209
|
-
|
|
210
|
-
### Optional: Populate Project Context
|
|
211
|
-
|
|
212
|
-
After `openspec init` completes, you'll receive a suggested prompt to help populate your project context:
|
|
213
|
-
|
|
214
|
-
```text
|
|
215
|
-
Populate your project context:
|
|
216
|
-
"Please read openspec/project.md and help me fill it out with details about my project, tech stack, and conventions"
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
Use `openspec/project.md` to define project-level conventions, standards, architectural patterns, and other guidelines that should be followed across all changes.
|
|
104
|
+
Now tell your AI: `/opsx:new <what-you-want-to-build>`
|
|
220
105
|
|
|
221
|
-
|
|
106
|
+
> [!NOTE]
|
|
107
|
+
> Not sure if your tool is supported? [View the full list](docs/supported-tools.md) – we support 20+ tools and growing.
|
|
108
|
+
>
|
|
109
|
+
> Also works with pnpm, yarn, bun, and nix. [See installation options](docs/installation.md).
|
|
222
110
|
|
|
223
|
-
|
|
111
|
+
## Docs
|
|
224
112
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
*Scaffolds openspec/changes/add-profile-filters/ with proposal.md, tasks.md, spec deltas.*
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
#### 2. Verify & Review
|
|
237
|
-
Check that the change was created correctly and review the proposal:
|
|
238
|
-
|
|
239
|
-
```bash
|
|
240
|
-
$ openspec list # Confirm the change folder exists
|
|
241
|
-
$ openspec validate add-profile-filters # Validate spec formatting
|
|
242
|
-
$ openspec show add-profile-filters # Review proposal, tasks, and spec delta
|
|
243
|
-
```
|
|
113
|
+
→ **[Getting Started](docs/getting-started.md)**: first steps<br>
|
|
114
|
+
→ **[Workflows](docs/workflows.md)**: combos and patterns<br>
|
|
115
|
+
→ **[Commands](docs/commands.md)**: slash commands & skills<br>
|
|
116
|
+
→ **[CLI](docs/cli.md)**: terminal reference<br>
|
|
117
|
+
→ **[Supported Tools](docs/supported-tools.md)**: tool integrations & install paths<br>
|
|
118
|
+
→ **[Concepts](docs/concepts.md)**: how it all fits<br>
|
|
119
|
+
→ **[Multi-Language](docs/multi-language.md)**: multi-language support<br>
|
|
120
|
+
→ **[Customization](docs/customization.md)**: make it yours
|
|
244
121
|
|
|
245
|
-
#### 3. Refine the Specs
|
|
246
|
-
Iterate on the specifications until they match your needs:
|
|
247
122
|
|
|
248
|
-
|
|
249
|
-
You: Can you add acceptance criteria for the role and team filters?
|
|
123
|
+
## Why OpenSpec?
|
|
250
124
|
|
|
251
|
-
AI
|
|
252
|
-
*Edits openspec/changes/add-profile-filters/specs/profile/spec.md and tasks.md.*
|
|
253
|
-
```
|
|
125
|
+
AI coding assistants are powerful but unpredictable when requirements live only in chat history. OpenSpec adds a lightweight spec layer so you agree on what to build before any code is written.
|
|
254
126
|
|
|
255
|
-
|
|
256
|
-
|
|
127
|
+
- **Agree before you build** — human and AI align on specs before code gets written
|
|
128
|
+
- **Stay organized** — each change gets its own folder with proposal, specs, design, and tasks
|
|
129
|
+
- **Work fluidly** — update any artifact anytime, no rigid phase gates
|
|
130
|
+
- **Use your tools** — works with 20+ AI assistants via slash commands
|
|
257
131
|
|
|
258
|
-
|
|
259
|
-
You: The specs look good. Let's implement this change.
|
|
260
|
-
(Shortcut for tools with slash commands: /openspec:apply add-profile-filters)
|
|
132
|
+
### How we compare
|
|
261
133
|
|
|
262
|
-
|
|
263
|
-
*Implements tasks from openspec/changes/add-profile-filters/tasks.md*
|
|
264
|
-
*Marks tasks complete: Task 1.1 ✓, Task 1.2 ✓, Task 2.1 ✓...*
|
|
265
|
-
```
|
|
134
|
+
**vs. [Spec Kit](https://github.com/github/spec-kit)** (GitHub) — Thorough but heavyweight. Rigid phase gates, lots of Markdown, Python setup. OpenSpec is lighter and lets you iterate freely.
|
|
266
135
|
|
|
267
|
-
|
|
268
|
-
After implementation is complete, archive the change:
|
|
136
|
+
**vs. [Kiro](https://kiro.dev)** (AWS) — Powerful but you're locked into their IDE and limited to Claude models. OpenSpec works with the tools you already use.
|
|
269
137
|
|
|
270
|
-
|
|
271
|
-
AI: All tasks are complete. The implementation is ready.
|
|
138
|
+
**vs. nothing** — AI coding without specs means vague prompts and unpredictable results. OpenSpec brings predictability without the ceremony.
|
|
272
139
|
|
|
273
|
-
|
|
274
|
-
(Shortcut for tools with slash commands: /openspec:archive add-profile-filters)
|
|
140
|
+
## Updating OpenSpec
|
|
275
141
|
|
|
276
|
-
|
|
277
|
-
*Runs: openspec archive add-profile-filters --yes*
|
|
278
|
-
✓ Change archived successfully. Specs updated. Ready for the next feature!
|
|
279
|
-
```
|
|
142
|
+
**Upgrade the package**
|
|
280
143
|
|
|
281
|
-
Or run the command yourself in terminal:
|
|
282
144
|
```bash
|
|
283
|
-
|
|
145
|
+
npm install -g @fission-ai/openspec@latest
|
|
284
146
|
```
|
|
285
147
|
|
|
286
|
-
**
|
|
148
|
+
**Refresh agent instructions**
|
|
287
149
|
|
|
288
|
-
|
|
150
|
+
Run this inside each project to regenerate AI guidance and ensure the latest slash commands are active:
|
|
289
151
|
|
|
290
152
|
```bash
|
|
291
|
-
openspec
|
|
292
|
-
openspec view # Interactive dashboard of specs and changes
|
|
293
|
-
openspec show <change> # Display change details (proposal, tasks, spec updates)
|
|
294
|
-
openspec validate <change> # Check spec formatting and structure
|
|
295
|
-
openspec archive <change> [--yes|-y] # Move a completed change into archive/ (non-interactive with --yes)
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
## Example: How AI Creates OpenSpec Files
|
|
299
|
-
|
|
300
|
-
When you ask your AI assistant to "add two-factor authentication", it creates:
|
|
301
|
-
|
|
302
|
-
```
|
|
303
|
-
openspec/
|
|
304
|
-
├── specs/
|
|
305
|
-
│ └── auth/
|
|
306
|
-
│ └── spec.md # Current auth spec (if exists)
|
|
307
|
-
└── changes/
|
|
308
|
-
└── add-2fa/ # AI creates this entire structure
|
|
309
|
-
├── proposal.md # Why and what changes
|
|
310
|
-
├── tasks.md # Implementation checklist
|
|
311
|
-
├── design.md # Technical decisions (optional)
|
|
312
|
-
└── specs/
|
|
313
|
-
└── auth/
|
|
314
|
-
└── spec.md # Delta showing additions
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
### AI-Generated Spec (created in `openspec/specs/auth/spec.md`):
|
|
318
|
-
|
|
319
|
-
```markdown
|
|
320
|
-
# Auth Specification
|
|
321
|
-
|
|
322
|
-
## Purpose
|
|
323
|
-
Authentication and session management.
|
|
324
|
-
|
|
325
|
-
## Requirements
|
|
326
|
-
### Requirement: User Authentication
|
|
327
|
-
The system SHALL issue a JWT on successful login.
|
|
328
|
-
|
|
329
|
-
#### Scenario: Valid credentials
|
|
330
|
-
- WHEN a user submits valid credentials
|
|
331
|
-
- THEN a JWT is returned
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
### AI-Generated Change Delta (created in `openspec/changes/add-2fa/specs/auth/spec.md`):
|
|
335
|
-
|
|
336
|
-
```markdown
|
|
337
|
-
# Delta for Auth
|
|
338
|
-
|
|
339
|
-
## ADDED Requirements
|
|
340
|
-
### Requirement: Two-Factor Authentication
|
|
341
|
-
The system MUST require a second factor during login.
|
|
342
|
-
|
|
343
|
-
#### Scenario: OTP required
|
|
344
|
-
- WHEN a user submits valid credentials
|
|
345
|
-
- THEN an OTP challenge is required
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
### AI-Generated Tasks (created in `openspec/changes/add-2fa/tasks.md`):
|
|
349
|
-
|
|
350
|
-
```markdown
|
|
351
|
-
## 1. Database Setup
|
|
352
|
-
- [ ] 1.1 Add OTP secret column to users table
|
|
353
|
-
- [ ] 1.2 Create OTP verification logs table
|
|
354
|
-
|
|
355
|
-
## 2. Backend Implementation
|
|
356
|
-
- [ ] 2.1 Add OTP generation endpoint
|
|
357
|
-
- [ ] 2.2 Modify login flow to require OTP
|
|
358
|
-
- [ ] 2.3 Add OTP verification endpoint
|
|
359
|
-
|
|
360
|
-
## 3. Frontend Updates
|
|
361
|
-
- [ ] 3.1 Create OTP input component
|
|
362
|
-
- [ ] 3.2 Update login flow UI
|
|
153
|
+
openspec update
|
|
363
154
|
```
|
|
364
155
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
## Understanding OpenSpec Files
|
|
368
|
-
|
|
369
|
-
### Delta Format
|
|
156
|
+
## Usage Notes
|
|
370
157
|
|
|
371
|
-
|
|
158
|
+
**Model selection**: OpenSpec works best with high-reasoning models. We recommend Opus 4.5 and GPT 5.2 for both planning and implementation.
|
|
372
159
|
|
|
373
|
-
|
|
374
|
-
- **`## MODIFIED Requirements`** - Changed behavior (include complete updated text)
|
|
375
|
-
- **`## REMOVED Requirements`** - Deprecated features
|
|
160
|
+
**Context hygiene**: OpenSpec benefits from a clean context window. Clear your context before starting implementation and maintain good context hygiene throughout your session.
|
|
376
161
|
|
|
377
|
-
|
|
378
|
-
- Use `### Requirement: <name>` for headers
|
|
379
|
-
- Every requirement needs at least one `#### Scenario:` block
|
|
380
|
-
- Use SHALL/MUST in requirement text
|
|
381
|
-
|
|
382
|
-
## How OpenSpec Compares
|
|
383
|
-
|
|
384
|
-
### vs. spec-kit
|
|
385
|
-
OpenSpec’s two-folder model (`openspec/specs/` for the current truth, `openspec/changes/` for proposed updates) keeps state and diffs separate. This scales when you modify existing features or touch multiple specs. spec-kit is strong for greenfield/0→1 but provides less structure for cross-spec updates and evolving features.
|
|
386
|
-
|
|
387
|
-
### vs. Kiro.dev
|
|
388
|
-
OpenSpec groups every change for a feature in one folder (`openspec/changes/feature-name/`), making it easy to track related specs, tasks, and designs together. Kiro spreads updates across multiple spec folders, which can make feature tracking harder.
|
|
162
|
+
## Contributing
|
|
389
163
|
|
|
390
|
-
|
|
391
|
-
Without specs, AI coding assistants generate code from vague prompts, often missing requirements or adding unwanted features. OpenSpec brings predictability by agreeing on the desired behavior before any code is written.
|
|
164
|
+
**Small fixes** — Bug fixes, typo corrections, and minor improvements can be submitted directly as PRs.
|
|
392
165
|
|
|
393
|
-
|
|
166
|
+
**Larger changes** — For new features, significant refactors, or architectural changes, please submit an OpenSpec change proposal first so we can align on intent and goals before implementation begins.
|
|
394
167
|
|
|
395
|
-
|
|
396
|
-
2. **Start with new features** – Ask your AI to capture upcoming work as change proposals.
|
|
397
|
-
3. **Grow incrementally** – Each change archives into living specs that document your system.
|
|
398
|
-
4. **Stay flexible** – Different teammates can use Claude Code, CodeBuddy, Cursor, or any AGENTS.md-compatible tool while sharing the same specs.
|
|
168
|
+
When writing proposals, keep the OpenSpec philosophy in mind: we serve a wide variety of users across different coding agents, models, and use cases. Changes should work well for everyone.
|
|
399
169
|
|
|
400
|
-
|
|
170
|
+
**AI-generated code is welcome** — as long as it's been tested and verified. PRs containing AI-generated code should mention the coding agent and model used (e.g., "Generated with Claude Code using claude-opus-4-5-20251101").
|
|
401
171
|
|
|
402
|
-
|
|
172
|
+
### Development
|
|
403
173
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
- Run `openspec update` inside each project to regenerate AI guidance and ensure the latest slash commands are active.
|
|
174
|
+
- Install dependencies: `pnpm install`
|
|
175
|
+
- Build: `pnpm run build`
|
|
176
|
+
- Test: `pnpm test`
|
|
177
|
+
- Develop CLI locally: `pnpm run dev` or `pnpm run dev:cli`
|
|
178
|
+
- Conventional commits (one-line): `type(scope): subject`
|
|
410
179
|
|
|
411
|
-
##
|
|
180
|
+
## Other
|
|
412
181
|
|
|
413
182
|
<details>
|
|
414
|
-
<summary><strong
|
|
415
|
-
|
|
416
|
-
**Why this exists:**
|
|
417
|
-
- Standard workflow is locked down — you can't tweak instructions or customize
|
|
418
|
-
- When AI output is bad, you can't improve the prompts yourself
|
|
419
|
-
- Same workflow for everyone, no way to match how your team works
|
|
420
|
-
|
|
421
|
-
**What's different:**
|
|
422
|
-
- **Hackable** — edit templates and schemas yourself, test immediately, no rebuild
|
|
423
|
-
- **Granular** — each artifact has its own instructions, test and tweak individually
|
|
424
|
-
- **Customizable** — define your own workflows, artifacts, and dependencies
|
|
425
|
-
- **Fluid** — no phase gates, update any artifact anytime
|
|
426
|
-
|
|
427
|
-
```
|
|
428
|
-
You can always go back:
|
|
429
|
-
|
|
430
|
-
proposal ──→ specs ──→ design ──→ tasks ──→ implement
|
|
431
|
-
▲ ▲ ▲ │
|
|
432
|
-
└───────────┴──────────┴────────────────────┘
|
|
433
|
-
```
|
|
183
|
+
<summary><strong>Telemetry</strong></summary>
|
|
434
184
|
|
|
435
|
-
|
|
436
|
-
|---------|--------------|
|
|
437
|
-
| `/opsx:new` | Start a new change |
|
|
438
|
-
| `/opsx:continue` | Create the next artifact (based on what's ready) |
|
|
439
|
-
| `/opsx:ff` | Fast-forward (all planning artifacts at once) |
|
|
440
|
-
| `/opsx:apply` | Implement tasks, updating artifacts as needed |
|
|
441
|
-
| `/opsx:archive` | Archive when done |
|
|
442
|
-
|
|
443
|
-
**Setup:** `openspec artifact-experimental-setup`
|
|
444
|
-
|
|
445
|
-
[Full documentation →](docs/experimental-workflow.md)
|
|
446
|
-
|
|
447
|
-
</details>
|
|
448
|
-
|
|
449
|
-
<details>
|
|
450
|
-
<summary><strong>Telemetry</strong> – OpenSpec collects anonymous usage stats (opt-out: <code>OPENSPEC_TELEMETRY=0</code>)</summary>
|
|
185
|
+
OpenSpec collects anonymous usage stats.
|
|
451
186
|
|
|
452
187
|
We collect only command names and version to understand usage patterns. No arguments, paths, content, or PII. Automatically disabled in CI.
|
|
453
188
|
|
|
@@ -455,14 +190,6 @@ We collect only command names and version to understand usage patterns. No argum
|
|
|
455
190
|
|
|
456
191
|
</details>
|
|
457
192
|
|
|
458
|
-
## Contributing
|
|
459
|
-
|
|
460
|
-
- Install dependencies: `pnpm install`
|
|
461
|
-
- Build: `pnpm run build`
|
|
462
|
-
- Test: `pnpm test`
|
|
463
|
-
- Develop CLI locally: `pnpm run dev` or `pnpm run dev:cli`
|
|
464
|
-
- Conventional commits (one-line): `type(scope): subject`
|
|
465
|
-
|
|
466
193
|
<details>
|
|
467
194
|
<summary><strong>Maintainers & Advisors</strong></summary>
|
|
468
195
|
|
|
@@ -470,6 +197,8 @@ See [MAINTAINERS.md](MAINTAINERS.md) for the list of core maintainers and adviso
|
|
|
470
197
|
|
|
471
198
|
</details>
|
|
472
199
|
|
|
200
|
+
|
|
201
|
+
|
|
473
202
|
## License
|
|
474
203
|
|
|
475
204
|
MIT
|