@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.
Files changed (183) hide show
  1. package/README.md +111 -382
  2. package/dist/cli/index.js +120 -6
  3. package/dist/commands/workflow/index.d.ts +17 -0
  4. package/dist/commands/workflow/index.js +12 -0
  5. package/dist/commands/workflow/instructions.d.ts +29 -0
  6. package/dist/commands/workflow/instructions.js +381 -0
  7. package/dist/commands/workflow/new-change.d.ts +11 -0
  8. package/dist/commands/workflow/new-change.js +44 -0
  9. package/dist/commands/workflow/schemas.d.ts +10 -0
  10. package/dist/commands/workflow/schemas.js +34 -0
  11. package/dist/commands/workflow/shared.d.ts +52 -0
  12. package/dist/commands/workflow/shared.js +111 -0
  13. package/dist/commands/workflow/status.d.ts +14 -0
  14. package/dist/commands/workflow/status.js +58 -0
  15. package/dist/commands/workflow/templates.d.ts +16 -0
  16. package/dist/commands/workflow/templates.js +68 -0
  17. package/dist/core/artifact-graph/instruction-loader.d.ts +5 -1
  18. package/dist/core/artifact-graph/instruction-loader.js +8 -19
  19. package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
  20. package/dist/core/command-generation/adapters/amazon-q.js +26 -0
  21. package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
  22. package/dist/core/command-generation/adapters/antigravity.js +26 -0
  23. package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
  24. package/dist/core/command-generation/adapters/auggie.js +27 -0
  25. package/dist/core/command-generation/adapters/claude.d.ts +13 -0
  26. package/dist/core/command-generation/adapters/claude.js +50 -0
  27. package/dist/core/command-generation/adapters/cline.d.ts +14 -0
  28. package/dist/core/command-generation/adapters/cline.js +27 -0
  29. package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
  30. package/dist/core/command-generation/adapters/codebuddy.js +28 -0
  31. package/dist/core/command-generation/adapters/codex.d.ts +13 -0
  32. package/dist/core/command-generation/adapters/codex.js +27 -0
  33. package/dist/core/command-generation/adapters/continue.d.ts +13 -0
  34. package/dist/core/command-generation/adapters/continue.js +28 -0
  35. package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
  36. package/dist/core/command-generation/adapters/costrict.js +27 -0
  37. package/dist/core/command-generation/adapters/crush.d.ts +13 -0
  38. package/dist/core/command-generation/adapters/crush.js +30 -0
  39. package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
  40. package/dist/core/command-generation/adapters/cursor.js +44 -0
  41. package/dist/core/command-generation/adapters/factory.d.ts +13 -0
  42. package/dist/core/command-generation/adapters/factory.js +27 -0
  43. package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
  44. package/dist/core/command-generation/adapters/gemini.js +26 -0
  45. package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
  46. package/dist/core/command-generation/adapters/github-copilot.js +26 -0
  47. package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
  48. package/dist/core/command-generation/adapters/iflow.js +29 -0
  49. package/dist/core/command-generation/adapters/index.d.ts +27 -0
  50. package/dist/core/command-generation/adapters/index.js +27 -0
  51. package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
  52. package/dist/core/command-generation/adapters/kilocode.js +23 -0
  53. package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
  54. package/dist/core/command-generation/adapters/opencode.js +26 -0
  55. package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
  56. package/dist/core/command-generation/adapters/qoder.js +30 -0
  57. package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
  58. package/dist/core/command-generation/adapters/qwen.js +26 -0
  59. package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
  60. package/dist/core/command-generation/adapters/roocode.js +27 -0
  61. package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
  62. package/dist/core/command-generation/adapters/windsurf.js +51 -0
  63. package/dist/core/command-generation/generator.d.ts +21 -0
  64. package/dist/core/command-generation/generator.js +27 -0
  65. package/dist/core/command-generation/index.d.ts +22 -0
  66. package/dist/core/command-generation/index.js +24 -0
  67. package/dist/core/command-generation/registry.d.ts +36 -0
  68. package/dist/core/command-generation/registry.js +88 -0
  69. package/dist/core/command-generation/types.d.ts +55 -0
  70. package/dist/core/command-generation/types.js +8 -0
  71. package/dist/core/config.d.ts +1 -0
  72. package/dist/core/config.js +21 -21
  73. package/dist/core/init.d.ts +16 -36
  74. package/dist/core/init.js +323 -534
  75. package/dist/core/legacy-cleanup.d.ts +162 -0
  76. package/dist/core/legacy-cleanup.js +501 -0
  77. package/dist/core/shared/index.d.ts +8 -0
  78. package/dist/core/shared/index.js +8 -0
  79. package/dist/core/shared/skill-generation.d.ts +41 -0
  80. package/dist/core/shared/skill-generation.js +76 -0
  81. package/dist/core/shared/tool-detection.d.ts +66 -0
  82. package/dist/core/shared/tool-detection.js +140 -0
  83. package/dist/core/templates/index.d.ts +7 -16
  84. package/dist/core/templates/index.js +8 -36
  85. package/dist/core/templates/skill-templates.d.ts +13 -0
  86. package/dist/core/templates/skill-templates.js +627 -21
  87. package/dist/core/update.d.ts +38 -0
  88. package/dist/core/update.js +280 -62
  89. package/dist/prompts/searchable-multi-select.d.ts +27 -0
  90. package/dist/prompts/searchable-multi-select.js +149 -0
  91. package/dist/ui/ascii-patterns.d.ts +16 -0
  92. package/dist/ui/ascii-patterns.js +133 -0
  93. package/dist/ui/welcome-screen.d.ts +10 -0
  94. package/dist/ui/welcome-screen.js +146 -0
  95. package/dist/utils/file-system.d.ts +11 -0
  96. package/dist/utils/file-system.js +65 -2
  97. package/dist/utils/index.d.ts +1 -0
  98. package/dist/utils/index.js +2 -0
  99. package/package.json +1 -1
  100. package/dist/commands/artifact-workflow.d.ts +0 -17
  101. package/dist/commands/artifact-workflow.js +0 -915
  102. package/dist/core/configurators/agents.d.ts +0 -8
  103. package/dist/core/configurators/agents.js +0 -15
  104. package/dist/core/configurators/base.d.ts +0 -7
  105. package/dist/core/configurators/base.js +0 -2
  106. package/dist/core/configurators/claude.d.ts +0 -8
  107. package/dist/core/configurators/claude.js +0 -15
  108. package/dist/core/configurators/cline.d.ts +0 -8
  109. package/dist/core/configurators/cline.js +0 -15
  110. package/dist/core/configurators/codebuddy.d.ts +0 -8
  111. package/dist/core/configurators/codebuddy.js +0 -15
  112. package/dist/core/configurators/costrict.d.ts +0 -8
  113. package/dist/core/configurators/costrict.js +0 -15
  114. package/dist/core/configurators/iflow.d.ts +0 -8
  115. package/dist/core/configurators/iflow.js +0 -15
  116. package/dist/core/configurators/qoder.d.ts +0 -30
  117. package/dist/core/configurators/qoder.js +0 -42
  118. package/dist/core/configurators/qwen.d.ts +0 -24
  119. package/dist/core/configurators/qwen.js +0 -37
  120. package/dist/core/configurators/registry.d.ts +0 -9
  121. package/dist/core/configurators/registry.js +0 -43
  122. package/dist/core/configurators/slash/amazon-q.d.ts +0 -9
  123. package/dist/core/configurators/slash/amazon-q.js +0 -46
  124. package/dist/core/configurators/slash/antigravity.d.ts +0 -9
  125. package/dist/core/configurators/slash/antigravity.js +0 -23
  126. package/dist/core/configurators/slash/auggie.d.ts +0 -9
  127. package/dist/core/configurators/slash/auggie.js +0 -31
  128. package/dist/core/configurators/slash/base.d.ts +0 -19
  129. package/dist/core/configurators/slash/base.js +0 -69
  130. package/dist/core/configurators/slash/claude.d.ts +0 -9
  131. package/dist/core/configurators/slash/claude.js +0 -37
  132. package/dist/core/configurators/slash/cline.d.ts +0 -9
  133. package/dist/core/configurators/slash/cline.js +0 -23
  134. package/dist/core/configurators/slash/codebuddy.d.ts +0 -9
  135. package/dist/core/configurators/slash/codebuddy.js +0 -34
  136. package/dist/core/configurators/slash/codex.d.ts +0 -14
  137. package/dist/core/configurators/slash/codex.js +0 -109
  138. package/dist/core/configurators/slash/continue.d.ts +0 -9
  139. package/dist/core/configurators/slash/continue.js +0 -46
  140. package/dist/core/configurators/slash/costrict.d.ts +0 -9
  141. package/dist/core/configurators/slash/costrict.js +0 -31
  142. package/dist/core/configurators/slash/crush.d.ts +0 -9
  143. package/dist/core/configurators/slash/crush.js +0 -37
  144. package/dist/core/configurators/slash/cursor.d.ts +0 -9
  145. package/dist/core/configurators/slash/cursor.js +0 -37
  146. package/dist/core/configurators/slash/factory.d.ts +0 -10
  147. package/dist/core/configurators/slash/factory.js +0 -35
  148. package/dist/core/configurators/slash/gemini.d.ts +0 -9
  149. package/dist/core/configurators/slash/gemini.js +0 -22
  150. package/dist/core/configurators/slash/github-copilot.d.ts +0 -9
  151. package/dist/core/configurators/slash/github-copilot.js +0 -34
  152. package/dist/core/configurators/slash/iflow.d.ts +0 -9
  153. package/dist/core/configurators/slash/iflow.js +0 -37
  154. package/dist/core/configurators/slash/kilocode.d.ts +0 -9
  155. package/dist/core/configurators/slash/kilocode.js +0 -17
  156. package/dist/core/configurators/slash/opencode.d.ts +0 -12
  157. package/dist/core/configurators/slash/opencode.js +0 -72
  158. package/dist/core/configurators/slash/qoder.d.ts +0 -35
  159. package/dist/core/configurators/slash/qoder.js +0 -76
  160. package/dist/core/configurators/slash/qwen.d.ts +0 -32
  161. package/dist/core/configurators/slash/qwen.js +0 -49
  162. package/dist/core/configurators/slash/registry.d.ts +0 -8
  163. package/dist/core/configurators/slash/registry.js +0 -78
  164. package/dist/core/configurators/slash/roocode.d.ts +0 -9
  165. package/dist/core/configurators/slash/roocode.js +0 -23
  166. package/dist/core/configurators/slash/toml-base.d.ts +0 -10
  167. package/dist/core/configurators/slash/toml-base.js +0 -53
  168. package/dist/core/configurators/slash/windsurf.d.ts +0 -9
  169. package/dist/core/configurators/slash/windsurf.js +0 -23
  170. package/dist/core/templates/agents-root-stub.d.ts +0 -2
  171. package/dist/core/templates/agents-root-stub.js +0 -17
  172. package/dist/core/templates/agents-template.d.ts +0 -2
  173. package/dist/core/templates/agents-template.js +0 -458
  174. package/dist/core/templates/claude-template.d.ts +0 -2
  175. package/dist/core/templates/claude-template.js +0 -2
  176. package/dist/core/templates/cline-template.d.ts +0 -2
  177. package/dist/core/templates/cline-template.js +0 -2
  178. package/dist/core/templates/costrict-template.d.ts +0 -2
  179. package/dist/core/templates/costrict-template.js +0 -2
  180. package/dist/core/templates/project-template.d.ts +0 -8
  181. package/dist/core/templates/project-template.js +0 -32
  182. package/dist/core/templates/slash-command-templates.d.ts +0 -4
  183. 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/openspec_pixel_dark.svg" media="(prefers-color-scheme: dark)">
5
- <source srcset="assets/openspec_pixel_light.svg" media="(prefers-color-scheme: light)">
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
- <p align="center">Spec-driven development for AI coding assistants.</p>
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://conventionalcommits.org"><img alt="Conventional Commits" src="https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?style=flat-square" /></a>
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
- <p align="center">
30
- <sub>🧪 <strong>New:</strong> <a href="docs/experimental-workflow.md">Experimental Workflow (OPSX)</a> — schema-driven, hackable, fluid. Iterate on workflows without code changes.</sub>
31
- </p>
17
+ <details>
18
+ <summary><strong>The most loved spec framework.</strong></summary>
32
19
 
33
- # OpenSpec
20
+ [![Stars](https://img.shields.io/github/stars/Fission-AI/OpenSpec?style=flat-square&label=Stars)](https://github.com/Fission-AI/OpenSpec/stargazers)
21
+ [![Downloads](https://img.shields.io/npm/dm/@fission-ai/openspec?style=flat-square&label=Downloads/mo)](https://www.npmjs.com/package/@fission-ai/openspec)
22
+ [![Contributors](https://img.shields.io/github/contributors/Fission-AI/OpenSpec?style=flat-square&label=Contributors)](https://github.com/Fission-AI/OpenSpec/graphs/contributors)
34
23
 
35
- OpenSpec aligns humans and AI coding assistants with spec-driven development so you agree on what to build before any code is written. **No API keys required.**
24
+ </details>
25
+ <p></p>
26
+ Our philosophy:
36
27
 
37
- ## Why OpenSpec?
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
- AI coding assistants are powerful but unpredictable when requirements live in chat history. OpenSpec adds a lightweight specification workflow that locks intent before implementation, giving you deterministic, reviewable outputs.
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
- Key outcomes:
42
- - Human and AI stakeholders agree on specs before work begins.
43
- - Structured change folders (proposals, tasks, and spec updates) keep scope explicit and auditable.
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
- ## How OpenSpec compares (at a glance)
45
+ ### Teams
48
46
 
49
- - **Lightweight**: simple workflow, no API keys, minimal setup.
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
- See the full comparison in [How OpenSpec Compares](#how-openspec-compares).
49
+ <!-- TODO: Add GIF demo of /opsx:new → /opsx:archive workflow -->
55
50
 
56
- ## How It Works
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>AGENTS.md Compatible</strong> (click to expand)</summary>
79
+ <summary><strong>OpenSpec Dashboard</strong></summary>
127
80
 
128
- These tools automatically read workflow instructions from `openspec/AGENTS.md`. Ask them to follow the OpenSpec workflow if they need a reminder. Learn more about the [AGENTS.md convention](https://agents.md/).
129
-
130
- | Tools |
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
- ### Install & Initialize
87
+ ## Quick Start
137
88
 
138
- #### Prerequisites
139
- - **Node.js >= 20.19.0** - Check your version with `node --version`
89
+ **Requires Node.js 20.19.0 or higher.**
140
90
 
141
- #### Step 1: Install the CLI globally
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
- Verify installation:
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
- **What happens during initialization:**
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
- ### Create Your First Change
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
- Here's a real example showing the complete OpenSpec workflow. This works with any AI tool. Those with native slash commands will recognize the shortcuts automatically.
111
+ ## Docs
224
112
 
225
- #### 1. Draft the Proposal
226
- Start by asking your AI to create a change proposal:
227
-
228
- ```text
229
- You: Create an OpenSpec change proposal for adding profile search filters by role and team
230
- (Shortcut for tools with slash commands: /openspec:proposal Add profile search filters)
231
-
232
- AI: I'll create an OpenSpec change proposal for profile filters.
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
- ```text
249
- You: Can you add acceptance criteria for the role and team filters?
123
+ ## Why OpenSpec?
250
124
 
251
- AI: I'll update the spec delta with scenarios for role and team filters.
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
- #### 4. Implement the Change
256
- Once specs look good, start implementation:
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
- ```text
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
- AI: I'll work through the tasks in the add-profile-filters change.
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
- #### 5. Archive the Completed Change
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
- ```text
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
- You: Please archive the change
274
- (Shortcut for tools with slash commands: /openspec:archive add-profile-filters)
140
+ ## Updating OpenSpec
275
141
 
276
- AI: I'll archive the add-profile-filters change.
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
- $ openspec archive add-profile-filters --yes # Archive the completed change without prompts
145
+ npm install -g @fission-ai/openspec@latest
284
146
  ```
285
147
 
286
- **Note:** Tools with native slash commands (Claude Code, CodeBuddy, Cursor, Codex, Qoder, RooCode) can use the shortcuts shown. All other tools work with natural language requests to "create an OpenSpec proposal", "apply the OpenSpec change", or "archive the change".
148
+ **Refresh agent instructions**
287
149
 
288
- ## Command Reference
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 list # View active change folders
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
- **Important:** You don't create these files manually. Your AI assistant generates them based on your requirements and the existing codebase.
366
-
367
- ## Understanding OpenSpec Files
368
-
369
- ### Delta Format
156
+ ## Usage Notes
370
157
 
371
- Deltas are "patches" that show how specs change:
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
- - **`## ADDED Requirements`** - New capabilities
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
- **Format requirements:**
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
- ### vs. No Specs
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
- ## Team Adoption
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
- 1. **Initialize OpenSpec** Run `openspec init` in your repo.
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
- Run `openspec update` whenever someone switches tools so your agents pick up the latest instructions and slash-command bindings.
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
- ## Updating OpenSpec
172
+ ### Development
403
173
 
404
- 1. **Upgrade the package**
405
- ```bash
406
- npm install -g @fission-ai/openspec@latest
407
- ```
408
- 2. **Refresh agent instructions**
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
- ## Experimental Features
180
+ ## Other
412
181
 
413
182
  <details>
414
- <summary><strong>🧪 OPSX: Fluid, Iterative Workflow</strong> (Claude Code only)</summary>
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
- | Command | What it does |
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