superdev-cli 0.1.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/.claude-plugin/marketplace.json +33 -0
- package/.claude-plugin/plugin.json +21 -0
- package/.codex-plugin/plugin.json +27 -0
- package/CODE_OF_CONDUCT.md +109 -0
- package/CONTRIBUTING.md +205 -0
- package/LICENSE +202 -0
- package/NOTICE +11 -0
- package/README.md +1051 -0
- package/SECURITY.md +135 -0
- package/THIRD-PARTY-NOTICES.md +253 -0
- package/hooks/hooks.json +61 -0
- package/hooks/run.mjs +88 -0
- package/package.json +65 -0
- package/references/confidentiality.md +48 -0
- package/references/evidence-and-risk.md +73 -0
- package/references/operating-model.md +105 -0
- package/references/platform-capabilities.md +51 -0
- package/references/project-record.md +91 -0
- package/references/provider-contracts.md +102 -0
- package/scripts/doctor/doctor.mjs +539 -0
- package/scripts/privacy/scan-history.mjs +163 -0
- package/scripts/privacy/scan.mjs +368 -0
- package/scripts/validate/README.md +94 -0
- package/scripts/validate/common.mjs +149 -0
- package/scripts/validate/data-model.mjs +225 -0
- package/scripts/validate/dependencies.mjs +69 -0
- package/scripts/validate/docs-templates.mjs +99 -0
- package/scripts/validate/footprint.mjs +78 -0
- package/scripts/validate/imports.mjs +61 -0
- package/scripts/validate/manifests.mjs +173 -0
- package/scripts/validate/markdown.mjs +123 -0
- package/scripts/validate/migrations.mjs +187 -0
- package/scripts/validate/no-tests.mjs +136 -0
- package/scripts/validate/privacy.mjs +115 -0
- package/scripts/validate/record-links.mjs +127 -0
- package/scripts/validate/skill-commands.mjs +190 -0
- package/scripts/validate/skills.mjs +112 -0
- package/scripts/validate/specification.mjs +88 -0
- package/scripts/validate/style.mjs +78 -0
- package/scripts/validate/validate-all.mjs +175 -0
- package/skills/debug/SKILL.md +68 -0
- package/skills/decision/SKILL.md +99 -0
- package/skills/docs/SKILL.md +86 -0
- package/skills/docs/assets/fragments/api/events.md +14 -0
- package/skills/docs/assets/fragments/api/graphql.md +14 -0
- package/skills/docs/assets/fragments/api/local-only.md +13 -0
- package/skills/docs/assets/fragments/api/rest.md +13 -0
- package/skills/docs/assets/fragments/api/rpc.md +13 -0
- package/skills/docs/assets/fragments/async/event-bus.md +13 -0
- package/skills/docs/assets/fragments/async/none.md +11 -0
- package/skills/docs/assets/fragments/async/platform-jobs.md +13 -0
- package/skills/docs/assets/fragments/async/queue.md +13 -0
- package/skills/docs/assets/fragments/async/scheduler.md +13 -0
- package/skills/docs/assets/fragments/auth/detected-provider.md +15 -0
- package/skills/docs/assets/fragments/auth/neutral-base.md +14 -0
- package/skills/docs/assets/fragments/data/document.md +13 -0
- package/skills/docs/assets/fragments/data/external-saas.md +13 -0
- package/skills/docs/assets/fragments/data/key-value.md +13 -0
- package/skills/docs/assets/fragments/data/none.md +12 -0
- package/skills/docs/assets/fragments/data/sql-orm.md +13 -0
- package/skills/docs/assets/fragments/data/sql-plain.md +13 -0
- package/skills/docs/assets/fragments/env/conventional.md +13 -0
- package/skills/docs/assets/fragments/env/envx.md +13 -0
- package/skills/docs/assets/fragments/env/managed-platform.md +13 -0
- package/skills/docs/assets/fragments/env/none.md +11 -0
- package/skills/docs/assets/fragments/ui/api-only.md +13 -0
- package/skills/docs/assets/fragments/ui/cli.md +14 -0
- package/skills/docs/assets/fragments/ui/desktop.md +14 -0
- package/skills/docs/assets/fragments/ui/mobile.md +14 -0
- package/skills/docs/assets/fragments/ui/web.md +14 -0
- package/skills/docs/assets/templates/adr.md +62 -0
- package/skills/docs/assets/templates/api.md +30 -0
- package/skills/docs/assets/templates/architecture.md +52 -0
- package/skills/docs/assets/templates/change-impact-drift-report.md +29 -0
- package/skills/docs/assets/templates/compliance.md +29 -0
- package/skills/docs/assets/templates/data-schema.md +43 -0
- package/skills/docs/assets/templates/feature.md +43 -0
- package/skills/docs/assets/templates/foundations.md +55 -0
- package/skills/docs/assets/templates/jobs-webhooks.md +36 -0
- package/skills/docs/assets/templates/module-inventory.md +19 -0
- package/skills/docs/assets/templates/module.md +50 -0
- package/skills/docs/assets/templates/nfr.md +22 -0
- package/skills/docs/assets/templates/observability.md +28 -0
- package/skills/docs/assets/templates/pages-ui-actions.md +47 -0
- package/skills/docs/assets/templates/project-summary.md +44 -0
- package/skills/docs/assets/templates/roles-permissions.md +26 -0
- package/skills/docs/assets/templates/test-plan.md +23 -0
- package/skills/docs/assets/templates/workflow-state-machine.md +43 -0
- package/skills/docs/references/adr-authoring.md +24 -0
- package/skills/docs/references/apis-and-data.md +23 -0
- package/skills/docs/references/capability-fragments.md +25 -0
- package/skills/docs/references/change-tracking.md +62 -0
- package/skills/docs/references/diagrams.md +31 -0
- package/skills/docs/references/discovery.md +59 -0
- package/skills/docs/references/edge-cases.md +45 -0
- package/skills/docs/references/foundations-modules.md +18 -0
- package/skills/docs/references/ingestion.md +52 -0
- package/skills/docs/references/initialize-adopt.md +25 -0
- package/skills/docs/references/module-decomposition.md +38 -0
- package/skills/docs/references/profiles.md +60 -0
- package/skills/docs/references/quality-attributes.md +27 -0
- package/skills/docs/references/reverse-engineer.md +21 -0
- package/skills/docs/references/spec-depths.md +31 -0
- package/skills/docs/references/summarize.md +18 -0
- package/skills/docs/references/surfaces-and-actions.md +24 -0
- package/skills/docs/references/validation.md +47 -0
- package/skills/docs/references/workflows-and-jobs.md +25 -0
- package/skills/docs/scripts/ingest.mjs +984 -0
- package/skills/docs/scripts/profile-detect.mjs +299 -0
- package/skills/docs/scripts/screen.mjs +96 -0
- package/skills/docs/scripts/template-lint.mjs +143 -0
- package/skills/docs/scripts/validate-docs.mjs +363 -0
- package/skills/doctor/SKILL.md +167 -0
- package/skills/feature/SKILL.md +132 -0
- package/skills/init/SKILL.md +137 -0
- package/skills/project/SKILL.md +261 -0
- package/skills/project/references/commands.md +213 -0
- package/skills/resume/SKILL.md +79 -0
- package/skills/review/SKILL.md +91 -0
- package/skills/status/SKILL.md +85 -0
- package/skills/task/SKILL.md +183 -0
- package/src/cli/product-map.mjs +468 -0
- package/src/cli/render.mjs +544 -0
- package/src/cli.mjs +2774 -0
- package/src/cloud/crypto.mjs +118 -0
- package/src/cloud/merge.mjs +186 -0
- package/src/cloud/policy.mjs +115 -0
- package/src/cloud/sync.mjs +512 -0
- package/src/cloud/transport.mjs +116 -0
- package/src/db/connect.mjs +189 -0
- package/src/db/maintenance.mjs +419 -0
- package/src/db/migrate.mjs +188 -0
- package/src/db/migrations/001_initial.sql +1024 -0
- package/src/db/migrations/002_docs_coverage.sql +126 -0
- package/src/db/migrations/003_memory_retrieval_and_integrity.sql +168 -0
- package/src/db/migrations/004_task_categories.sql +59 -0
- package/src/db/migrations/005_executable_evidence.sql +32 -0
- package/src/db/migrations/006_module_and_feature_boundaries.sql +27 -0
- package/src/db/migrations/007_drop_redundant_module_users.sql +13 -0
- package/src/db/migrations/008_changes_assumptions_test_plans_api_services.sql +166 -0
- package/src/db/migrations/009_retired_documents.sql +54 -0
- package/src/db/migrations/010_test_plan_evidence.sql +20 -0
- package/src/db/migrations/011_criterion_waiver.sql +13 -0
- package/src/db/migrations/012_synchronization.sql +56 -0
- package/src/db/store.mjs +327 -0
- package/src/decisions/record.mjs +167 -0
- package/src/docs/proposals.mjs +871 -0
- package/src/docs/render.mjs +1424 -0
- package/src/docs/templates.mjs +1281 -0
- package/src/features/acceptance.mjs +315 -0
- package/src/features/specify.mjs +248 -0
- package/src/init/discovery.mjs +901 -0
- package/src/init/index.mjs +784 -0
- package/src/init/questions.mjs +562 -0
- package/src/memory/benchmark.mjs +171 -0
- package/src/memory/capture.mjs +135 -0
- package/src/memory/consolidate.mjs +255 -0
- package/src/memory/index.mjs +810 -0
- package/src/model/ids.mjs +185 -0
- package/src/model/screening.mjs +150 -0
- package/src/model/toolkit.mjs +258 -0
- package/src/model/vocabulary.mjs +190 -0
- package/src/product/assumptions.mjs +120 -0
- package/src/product/changes.mjs +180 -0
- package/src/product/test-plans.mjs +183 -0
- package/src/progress/index.mjs +1364 -0
- package/src/runtime/harness.mjs +264 -0
- package/src/runtime/hooks.mjs +1021 -0
- package/src/runtime/identity.mjs +305 -0
- package/src/runtime/resume.mjs +343 -0
- package/src/runtime/session.mjs +679 -0
- package/src/runtime/version.mjs +315 -0
- package/src/service/assets/control-center.html +206 -0
- package/src/service/assets/control-center.manifest.json +7 -0
- package/src/service/manage.mjs +542 -0
- package/src/service/mutations.mjs +860 -0
- package/src/service/read-model.mjs +1557 -0
- package/src/service/server.mjs +783 -0
- package/src/tasks/categories.mjs +154 -0
- package/src/tasks/derive.mjs +977 -0
- package/src/tasks/lifecycle.mjs +830 -0
- package/src/verify/index.mjs +236 -0
package/README.md
ADDED
|
@@ -0,0 +1,1051 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./ui/src/assets/logo.png" alt="Superdev" width="120" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Superdev</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Keep your coding agent honest about what is built, why, and what proves it.</strong>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://www.npmjs.com/package/superdev-cli"><img alt="npm version" src="https://img.shields.io/npm/v/superdev-cli.svg" /></a>
|
|
13
|
+
<a href="LICENSE"><img alt="License: Apache 2.0" src="https://img.shields.io/badge/License-Apache_2.0-blue.svg" /></a>
|
|
14
|
+
<img alt="Node 20 or newer" src="https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg" />
|
|
15
|
+
<img alt="Works offline" src="https://img.shields.io/badge/works-offline-informational.svg" />
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<img src="./docs/images/dashboard-overview.png" alt="The Superdev dashboard, showing progress counted from real records" width="900" />
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
## Table of Contents
|
|
23
|
+
|
|
24
|
+
- [Overview](#overview)
|
|
25
|
+
- [The rules it enforces](#the-rules-it-enforces)
|
|
26
|
+
- [Prerequisites](#prerequisites)
|
|
27
|
+
- [Installation](#installation)
|
|
28
|
+
- [Step 1: the CLI](#step-1-the-cli)
|
|
29
|
+
- [Step 2: the plugin](#step-2-the-plugin)
|
|
30
|
+
- [Claude Code](#claude-code)
|
|
31
|
+
- [Codex](#codex)
|
|
32
|
+
- [Cursor](#cursor)
|
|
33
|
+
- [Any other editor](#any-other-editor)
|
|
34
|
+
- [Quick Start](#quick-start)
|
|
35
|
+
- [Commands](#commands)
|
|
36
|
+
- [superdev init](#superdev-init)
|
|
37
|
+
- [superdev adopt](#superdev-adopt)
|
|
38
|
+
- [superdev status](#superdev-status)
|
|
39
|
+
- [superdev resume](#superdev-resume)
|
|
40
|
+
- [superdev feature](#superdev-feature)
|
|
41
|
+
- [superdev derive](#superdev-derive)
|
|
42
|
+
- [superdev task](#superdev-task)
|
|
43
|
+
- [superdev verify](#superdev-verify)
|
|
44
|
+
- [superdev test-plan](#superdev-test-plan)
|
|
45
|
+
- [superdev decision](#superdev-decision)
|
|
46
|
+
- [superdev docs](#superdev-docs)
|
|
47
|
+
- [superdev memory](#superdev-memory)
|
|
48
|
+
- [superdev doctor](#superdev-doctor)
|
|
49
|
+
- [superdev readiness](#superdev-readiness)
|
|
50
|
+
- [superdev ui](#superdev-ui)
|
|
51
|
+
- [superdev db](#superdev-db)
|
|
52
|
+
- [superdev cloud and sync](#superdev-cloud-and-sync)
|
|
53
|
+
- [superdev settings](#superdev-settings)
|
|
54
|
+
- [Product map commands](#product-map-commands)
|
|
55
|
+
- [Global options and exit codes](#global-options-and-exit-codes)
|
|
56
|
+
- [The Dashboard](#the-dashboard)
|
|
57
|
+
- [Workflow Examples](#workflow-examples)
|
|
58
|
+
- [Updates and Versioning](#updates-and-versioning)
|
|
59
|
+
- [Privacy](#privacy)
|
|
60
|
+
- [Providers](#providers)
|
|
61
|
+
- [Troubleshooting](#troubleshooting)
|
|
62
|
+
- [Folder Structure](#folder-structure)
|
|
63
|
+
- [Development](#development)
|
|
64
|
+
- [Releasing](#releasing)
|
|
65
|
+
- [Contributing](#contributing)
|
|
66
|
+
- [License](#license)
|
|
67
|
+
|
|
68
|
+
## Overview
|
|
69
|
+
|
|
70
|
+
Working with a coding agent across many sessions has a familiar failure mode.
|
|
71
|
+
It rebuilds something already finished. It contradicts a decision you made last
|
|
72
|
+
week. It tells you a feature is done when nothing verified it. The plan lives in
|
|
73
|
+
a conversation that scrolls away, and the documentation describes last month.
|
|
74
|
+
|
|
75
|
+
Superdev gives the agent a project record it cannot talk its way around. Goals,
|
|
76
|
+
features, workflows, decisions, tasks and evidence live in a database on your
|
|
77
|
+
machine, and every surface reads from the same place: the command line, the
|
|
78
|
+
generated Markdown, the dashboard, and the agent working beside you.
|
|
79
|
+
|
|
80
|
+
It will not make your code correct. What it removes is ambiguity, forgotten
|
|
81
|
+
context, undocumented decisions, and the distance between what a status report
|
|
82
|
+
says and what is true.
|
|
83
|
+
|
|
84
|
+
Superdev ships in two pieces:
|
|
85
|
+
|
|
86
|
+
| | What it is | Where it comes from |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| **`superdev-cli`** | The engine. Every command, the database, the dashboard. | npm |
|
|
89
|
+
| **The plugin** | The skills your agent reads, and the lifecycle hooks. | git, through your editor |
|
|
90
|
+
|
|
91
|
+
They share one version. A release moves both.
|
|
92
|
+
|
|
93
|
+
## The rules it enforces
|
|
94
|
+
|
|
95
|
+
These are the whole idea. Everything else is machinery for keeping them true.
|
|
96
|
+
|
|
97
|
+
| Rule | What it feels like |
|
|
98
|
+
|---|---|
|
|
99
|
+
| **Completion is derived, never claimed** | A feature finishes when every acceptance criterion under it is met or waived and every task against it is closed. Nobody can mark it done. |
|
|
100
|
+
| **No evidence, no completion** | `task complete` refuses until the work carries a passing result, and until the accepted test plan covering it has been run. |
|
|
101
|
+
| **Every task implements something** | A task cannot leave draft without a link to a criterion, a workflow step, an operation or an entity. |
|
|
102
|
+
| **Nothing changes status quietly** | Status moves through lifecycle commands that write history. A direct update is refused by a database trigger. |
|
|
103
|
+
| **History is append only** | Enforced by triggers. What happened cannot be quietly revised later. |
|
|
104
|
+
| **Plan first, apply second** | Every command that would change something prints its plan and changes nothing until you add `--apply`. |
|
|
105
|
+
| **A refusal names the next step** | Every refusal says what to run to get past it. |
|
|
106
|
+
|
|
107
|
+
## Prerequisites
|
|
108
|
+
|
|
109
|
+
- **Node.js 20 or newer.** That is the only prerequisite.
|
|
110
|
+
- **npm**, which comes with Node.
|
|
111
|
+
|
|
112
|
+
Nothing to compile, no build step, no service to configure. npm fetches the
|
|
113
|
+
right database engine for your platform.
|
|
114
|
+
|
|
115
|
+
## Installation
|
|
116
|
+
|
|
117
|
+
### Step 1: the CLI
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm install -g superdev-cli
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Confirm it:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
superdev --version
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Prefer not to install globally? Every command works through
|
|
130
|
+
`npx superdev-cli <command>`.
|
|
131
|
+
|
|
132
|
+
### Step 2: the plugin
|
|
133
|
+
|
|
134
|
+
The CLI does the work on its own. The plugin is what teaches your agent to drive
|
|
135
|
+
it, so you never have to remember a command name.
|
|
136
|
+
|
|
137
|
+
### Claude Code
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
claude plugin marketplace add superdev-ai/superdev
|
|
141
|
+
claude plugin install superdev@superdev
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
The plugin is text only, so nothing is compiled and no dependency is installed.
|
|
145
|
+
It calls the `superdev` from step 1.
|
|
146
|
+
|
|
147
|
+
To try it without installing permanently:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
claude --plugin-dir /path/to/a/clone
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**If you skipped step 1**, your next session says so plainly rather than failing
|
|
154
|
+
cryptically: *"the plugin is installed and its command-line tool is not"*, with
|
|
155
|
+
the install command.
|
|
156
|
+
|
|
157
|
+
Then just describe what you want:
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
"Set up superdev here"
|
|
161
|
+
"I want to build a tool for tracking recipes I actually cook"
|
|
162
|
+
"What should I work on?"
|
|
163
|
+
"Review this against the spec"
|
|
164
|
+
"Open the dashboard"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Codex
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
codex plugin marketplace add superdev-ai/superdev
|
|
171
|
+
codex plugin add superdev@superdev
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
The same eleven skills load. Two limits apply on Codex:
|
|
175
|
+
|
|
176
|
+
1. Lifecycle hooks do not fire until you explicitly trust each one. Until then,
|
|
177
|
+
ask for status directly rather than expecting it to appear on its own.
|
|
178
|
+
2. Codex tool hooks cover shell commands only, so edits made through the editor
|
|
179
|
+
do not mark documentation stale. Run `superdev docs generate` when you want it
|
|
180
|
+
refreshed.
|
|
181
|
+
|
|
182
|
+
Neither affects correctness. The database is still the record either way.
|
|
183
|
+
|
|
184
|
+
### Cursor
|
|
185
|
+
|
|
186
|
+
Cursor has no plugin system Superdev installs into, so it uses the CLI plus a
|
|
187
|
+
rules file. You do not need the plugin at all.
|
|
188
|
+
|
|
189
|
+
Create `.cursor/rules/superdev.mdc` in your project:
|
|
190
|
+
|
|
191
|
+
```markdown
|
|
192
|
+
---
|
|
193
|
+
description: Use Superdev as the project record
|
|
194
|
+
alwaysApply: true
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
This project is tracked by Superdev. Its database is the authority on what is
|
|
198
|
+
being built, what is finished and what proves it. Do not keep project state in
|
|
199
|
+
chat. The command is `superdev`.
|
|
200
|
+
|
|
201
|
+
Before starting work:
|
|
202
|
+
- `superdev resume` to load the active task, blockers and next action
|
|
203
|
+
- `superdev status` to see where the project stands
|
|
204
|
+
- `superdev decision list` to check nothing decided contradicts the request
|
|
205
|
+
|
|
206
|
+
While working:
|
|
207
|
+
- `superdev task list`, then `task claim <id> --apply` to take one
|
|
208
|
+
- `superdev task start <id> --apply` before changing anything
|
|
209
|
+
- `superdev task evidence <id> --result pass --summary "<observed>" --command "<check>" --apply`
|
|
210
|
+
- `superdev task complete <id> --apply` last, and expect a refusal without evidence
|
|
211
|
+
|
|
212
|
+
For new behaviour:
|
|
213
|
+
- `superdev feature specify <id>`, then `feature accept <id> --apply`
|
|
214
|
+
- `superdev derive <id> --apply` for the tasks
|
|
215
|
+
|
|
216
|
+
Every command that changes something needs `--apply`. Without it you get a plan
|
|
217
|
+
and nothing is written. Add `--json` to parse output. `superdev --help` lists
|
|
218
|
+
everything.
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
The commands are the same ones verified everywhere else. The `.mdc` frontmatter
|
|
222
|
+
is Cursor's own format rather than something exercised here.
|
|
223
|
+
|
|
224
|
+
### Any other editor
|
|
225
|
+
|
|
226
|
+
Superdev is a command-line tool. Any agent that can run a shell command can use
|
|
227
|
+
it, and so can you.
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
cd ~/my-project
|
|
231
|
+
superdev init --brief requirements.md --apply
|
|
232
|
+
superdev status
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Quick Start
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
mkdir ~/recipe-keeper && cd ~/recipe-keeper
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Write a short brief. Plain language, and there is a template with every section
|
|
242
|
+
explained in [requirement.md](requirement.md) if you want one:
|
|
243
|
+
|
|
244
|
+
```markdown
|
|
245
|
+
# Recipe Keeper
|
|
246
|
+
|
|
247
|
+
A tool for keeping the recipes I actually cook, not the ones I bookmark.
|
|
248
|
+
|
|
249
|
+
## Features
|
|
250
|
+
|
|
251
|
+
- Save a recipe with its ingredients and steps.
|
|
252
|
+
- Mark a recipe as cooked, with the date.
|
|
253
|
+
- See which recipes I have not cooked in six months.
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Then:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
superdev init --brief brief.md # shows the plan, writes nothing
|
|
260
|
+
superdev init --brief brief.md --apply # now it writes
|
|
261
|
+
superdev ui --apply # open the dashboard
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
You get the three features the brief names, a project named from the document's
|
|
265
|
+
own title, and a list of questions the brief did not answer. Nothing is invented
|
|
266
|
+
to fill a gap.
|
|
267
|
+
|
|
268
|
+
The headings are not decoration: Superdev classifies what it reads by the heading
|
|
269
|
+
it sits under, so `## Features` becomes features and `## Constraints` becomes
|
|
270
|
+
constraints. [requirement.md](requirement.md) lists every heading it recognises,
|
|
271
|
+
what each becomes, and a complete worked example. A section you leave out becomes
|
|
272
|
+
a recorded question rather than an assumption.
|
|
273
|
+
|
|
274
|
+
## Commands
|
|
275
|
+
|
|
276
|
+
Every command that changes something takes `--apply`. Without it you get the
|
|
277
|
+
plan and nothing happens. `superdev --help` lists the full surface.
|
|
278
|
+
|
|
279
|
+
### `superdev init`
|
|
280
|
+
|
|
281
|
+
Start a project from an idea, a brief, or a folder of notes.
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
# From a written brief
|
|
285
|
+
superdev init --brief requirements.md --apply
|
|
286
|
+
|
|
287
|
+
# From a sentence
|
|
288
|
+
superdev init --idea "A reading list app with a weekly digest" --name "Readlist" --apply
|
|
289
|
+
|
|
290
|
+
# See what it would do first
|
|
291
|
+
superdev init --brief requirements.md
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**Options:** `--brief <file>`, `--idea <text>`, `--name <text>`, `--apply`
|
|
295
|
+
|
|
296
|
+
It inspects the repository before asking anything, records what the source
|
|
297
|
+
material states, and records what it does not as open questions rather than
|
|
298
|
+
guesses.
|
|
299
|
+
|
|
300
|
+
### `superdev adopt`
|
|
301
|
+
|
|
302
|
+
Take on a codebase that already exists.
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
superdev adopt --apply
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
It reads your conventions and documentation without overwriting them, and labels
|
|
309
|
+
everything it inferred rather than presenting a guess as a fact.
|
|
310
|
+
|
|
311
|
+
### `superdev status`
|
|
312
|
+
|
|
313
|
+
Where the project is, how fresh that is, and what is next.
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
superdev status
|
|
317
|
+
superdev status --json # for scripts
|
|
318
|
+
superdev status --root ~/other # another project
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
```
|
|
322
|
+
Progress
|
|
323
|
+
--------
|
|
324
|
+
Overall: 100 percent (110 of 110 tracked items done)
|
|
325
|
+
Accepted features delivered 91 of 91
|
|
326
|
+
Milestones reached 9 of 9
|
|
327
|
+
Goal success criteria met 10 of 10
|
|
328
|
+
|
|
329
|
+
Next
|
|
330
|
+
----
|
|
331
|
+
Nothing is pending
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
Progress is counted from declared deliverables and attached verification. Where
|
|
335
|
+
nothing has been agreed to measure, it says **Not measurable** rather than
|
|
336
|
+
showing a percentage that would not be true.
|
|
337
|
+
|
|
338
|
+
### `superdev resume`
|
|
339
|
+
|
|
340
|
+
Everything a new session needs to carry on, after a break, a handoff or a
|
|
341
|
+
compaction.
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
superdev resume # read it
|
|
345
|
+
superdev resume --apply # and open a work session
|
|
346
|
+
superdev resume --end --apply
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
Returns the objective, the active task, its contract, governing decisions,
|
|
350
|
+
blockers, the last verified evidence, and the recorded next action.
|
|
351
|
+
|
|
352
|
+
### `superdev feature`
|
|
353
|
+
|
|
354
|
+
Define what to build, at a depth proportionate to its risk.
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
# What is missing before this can be accepted
|
|
358
|
+
superdev feature depth FEAT-0001
|
|
359
|
+
|
|
360
|
+
# Write the specification
|
|
361
|
+
superdev feature specify FEAT-0001 \
|
|
362
|
+
--purpose "Save a recipe so it can be cooked again" \
|
|
363
|
+
--user "A cook wants their own recipe back without searching a browser" \
|
|
364
|
+
--in "Saving a recipe with ingredients and steps" \
|
|
365
|
+
--out "Importing from other sites" \
|
|
366
|
+
--flow "Open the new recipe screen" \
|
|
367
|
+
--flow "Enter the name, ingredients and steps" \
|
|
368
|
+
--flow "Save it and see it in the list" \
|
|
369
|
+
--criterion "A saved recipe survives a restart || Save one, restart, read it back" \
|
|
370
|
+
--edge "empty_states:The list says there are no recipes yet" \
|
|
371
|
+
--edge "invalid_input:A recipe with no name is refused with a reason" \
|
|
372
|
+
--apply
|
|
373
|
+
|
|
374
|
+
# Change how much it owes
|
|
375
|
+
superdev feature depth FEAT-0001 standard
|
|
376
|
+
|
|
377
|
+
# Accept it. Refused while anything above is missing.
|
|
378
|
+
superdev feature accept FEAT-0001 --apply
|
|
379
|
+
|
|
380
|
+
# Set a criterion aside, with the reason on the record
|
|
381
|
+
superdev feature waive AC-0003 --reason "Deferred to the next milestone" --apply
|
|
382
|
+
|
|
383
|
+
# Read one in full
|
|
384
|
+
superdev feature show FEAT-0001
|
|
385
|
+
superdev feature list
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
**Three depths.** *Microspec* wants purpose, who wants it, scope in and out, the
|
|
389
|
+
primary flow, acceptance criteria and edge cases. *Standard* adds surfaces,
|
|
390
|
+
operations, entities, permissions, workflow steps, observability and a test plan.
|
|
391
|
+
*Full design* adds alternatives considered, migration and rollback, capacity
|
|
392
|
+
targets, failure recovery and decision records.
|
|
393
|
+
|
|
394
|
+
A refusal names everything missing at once:
|
|
395
|
+
|
|
396
|
+
```
|
|
397
|
+
Save a recipe is declared standard depth, and 9 of the 11 things that depth
|
|
398
|
+
promises are missing: what is in scope and what is deliberately out; the primary
|
|
399
|
+
flow, step by step; how anyone can tell it works; ...
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
<p align="center">
|
|
403
|
+
<img src="./docs/images/dashboard-feature.png" alt="A feature with its whole contract and a plain-language account of where it stands" width="900" />
|
|
404
|
+
</p>
|
|
405
|
+
|
|
406
|
+
### `superdev derive`
|
|
407
|
+
|
|
408
|
+
Turn accepted specifications into tasks.
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
superdev derive FEAT-0001 --apply # one feature
|
|
412
|
+
superdev derive --apply # everything accepted
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
Tasks come from the accepted specification rather than from a list somebody
|
|
416
|
+
wrote. Each belongs to exactly one feature and links to the contract it
|
|
417
|
+
implements.
|
|
418
|
+
|
|
419
|
+
### `superdev task`
|
|
420
|
+
|
|
421
|
+
The execution lifecycle.
|
|
422
|
+
|
|
423
|
+
```bash
|
|
424
|
+
superdev task list # open tasks, oldest first
|
|
425
|
+
superdev task list --all # including finished
|
|
426
|
+
superdev task show TASK-0001
|
|
427
|
+
|
|
428
|
+
superdev task create --feature FEAT-0001 \
|
|
429
|
+
--name "Store a recipe" \
|
|
430
|
+
--outcome "A recipe survives a restart" \
|
|
431
|
+
--verify "Save one, restart, read it back" --apply
|
|
432
|
+
|
|
433
|
+
superdev task update TASK-0001 --link acceptance_criterion:AC-0001 --apply
|
|
434
|
+
superdev task claim TASK-0001 --apply
|
|
435
|
+
superdev task start TASK-0001 --apply
|
|
436
|
+
|
|
437
|
+
superdev task evidence TASK-0001 \
|
|
438
|
+
--result pass \
|
|
439
|
+
--summary "Saved a recipe, restarted, read the same one back" \
|
|
440
|
+
--command "npm test" \
|
|
441
|
+
--criterion AC-0001 --apply
|
|
442
|
+
|
|
443
|
+
superdev task complete TASK-0001 --apply
|
|
444
|
+
|
|
445
|
+
superdev task block TASK-0001 --reason "Waiting on the API key" --apply
|
|
446
|
+
superdev task unblock TASK-0001 --apply
|
|
447
|
+
superdev task cancel TASK-0001 --reason "Superseded by FEAT-0009" --apply
|
|
448
|
+
superdev task reopen TASK-0001 --reason "The fix regressed" --apply
|
|
449
|
+
superdev task release TASK-0001 --apply
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
Completion refuses until the work is proven, and the refusal says how:
|
|
453
|
+
|
|
454
|
+
```
|
|
455
|
+
TASK-0002 verifies acceptance criteria that are still unmet: AC-0003 (A saved
|
|
456
|
+
recipe survives a restart). Attach a passing result to each with task evidence
|
|
457
|
+
TASK-0002 --criterion AC-0003, or waive it with feature waive AC-0003 --reason.
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
The feature above finishes on its own when its last task does.
|
|
461
|
+
|
|
462
|
+
### `superdev verify`
|
|
463
|
+
|
|
464
|
+
Re-run the checks your recorded evidence stands on.
|
|
465
|
+
|
|
466
|
+
```bash
|
|
467
|
+
superdev verify # report what still passes
|
|
468
|
+
superdev verify --apply # and mark anything that stopped passing as stale
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
```
|
|
472
|
+
Evidence in force 121
|
|
473
|
+
Carries a command 80
|
|
474
|
+
Checked by hand only 41
|
|
475
|
+
Re-ran 80
|
|
476
|
+
Still passing 80
|
|
477
|
+
No longer passing 0
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
Evidence that names a command can be checked again. Evidence checked by hand
|
|
481
|
+
says so, rather than carrying an invented command.
|
|
482
|
+
|
|
483
|
+
### `superdev test-plan`
|
|
484
|
+
|
|
485
|
+
How a feature or the product is verified, and whether anyone has run it.
|
|
486
|
+
|
|
487
|
+
```bash
|
|
488
|
+
superdev test-plan list
|
|
489
|
+
superdev test-plan show TP-0001
|
|
490
|
+
superdev test-plan run TP-0001 --apply # runs it, records what it produced
|
|
491
|
+
superdev test-plan record TP-0007 \
|
|
492
|
+
--summary "Opened every dashboard area and read each against the database" \
|
|
493
|
+
--apply
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
A plan whose instruction is a command can be run. A plan whose instruction is a
|
|
497
|
+
journey is carried out by a person and recorded with what they saw. Task
|
|
498
|
+
completion is refused while a plan covering the work has no passing run.
|
|
499
|
+
|
|
500
|
+
### `superdev decision`
|
|
501
|
+
|
|
502
|
+
Record what was chosen and why, so it is not relitigated every week.
|
|
503
|
+
|
|
504
|
+
```bash
|
|
505
|
+
superdev decision list
|
|
506
|
+
superdev decision record \
|
|
507
|
+
--title "Postgres over MySQL" \
|
|
508
|
+
--decision "Postgres, for JSONB and partial indexes" \
|
|
509
|
+
--rationale "Both were adequate; JSONB decided it" \
|
|
510
|
+
--verification "The schema uses JSONB in three tables" --apply
|
|
511
|
+
|
|
512
|
+
superdev decision supersede DEC-0007 --apply
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
A request that contradicts an accepted decision surfaces that decision before
|
|
516
|
+
work starts. Changing one means superseding it, which keeps the chain.
|
|
517
|
+
|
|
518
|
+
Related:
|
|
519
|
+
|
|
520
|
+
```bash
|
|
521
|
+
superdev change record --summary "Dropped the digest email" --reason "Out of scope for v1" --apply
|
|
522
|
+
superdev assumption record --assumption "One user per account" --trigger "The first team signs up" --apply
|
|
523
|
+
superdev question list
|
|
524
|
+
superdev question answer Q-0001 --answer "Weekly, on Sunday" --apply
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
### `superdev docs`
|
|
528
|
+
|
|
529
|
+
Markdown generated from the database, never a second source of truth.
|
|
530
|
+
|
|
531
|
+
```bash
|
|
532
|
+
superdev docs generate --apply
|
|
533
|
+
superdev docs diff # what a hand edit changed
|
|
534
|
+
superdev docs accept talks/path/file.md --apply
|
|
535
|
+
superdev docs reject talks/path/file.md --apply
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
Edit a generated file and Superdev notices, shows you the difference, and asks.
|
|
539
|
+
It updates the database first, then regenerates. Your edit is never silently
|
|
540
|
+
overwritten and never treated as authority without you accepting it.
|
|
541
|
+
|
|
542
|
+
### `superdev memory`
|
|
543
|
+
|
|
544
|
+
Structured recall across sessions, captured from real events.
|
|
545
|
+
|
|
546
|
+
```bash
|
|
547
|
+
superdev memory search "why did we choose the storage engine"
|
|
548
|
+
superdev memory show MEM-0042
|
|
549
|
+
superdev memory verify MEM-0042 # check it against the current record
|
|
550
|
+
superdev memory consolidate --apply # merge duplicates, mark contradictions
|
|
551
|
+
superdev memory status
|
|
552
|
+
superdev memory benchmark # measure recall, precision, ranking
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
Every memory carries where it came from and links to the records it concerns.
|
|
556
|
+
Retrieval quality is measured rather than asserted, and described plainly:
|
|
557
|
+
structured filters plus a lexical index, with semantic search reported as a
|
|
558
|
+
bounded scan because that is what it would be.
|
|
559
|
+
|
|
560
|
+
### `superdev doctor`
|
|
561
|
+
|
|
562
|
+
Whether Superdev can work here, and what to do when it cannot.
|
|
563
|
+
|
|
564
|
+
```bash
|
|
565
|
+
superdev doctor
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
```
|
|
569
|
+
Check Verdict Detail
|
|
570
|
+
Storage engine Pass Installed and loaded
|
|
571
|
+
Database Pass Schema version 12 of 12, 0 migrations pending
|
|
572
|
+
Integrity Pass No page damage and no dangling references
|
|
573
|
+
Documentation Pass 299 generated files match the database
|
|
574
|
+
Alignment Pass Every record maps to something that declares it
|
|
575
|
+
Freshness Pass Nothing is out of date
|
|
576
|
+
Providers Pass 7 of 7 ready
|
|
577
|
+
Evidence Pass 80 of 121 can be re-run. Run superdev verify.
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
### `superdev readiness`
|
|
581
|
+
|
|
582
|
+
The production-readiness checklist, gap by gap. Thirty-two areas, each either
|
|
583
|
+
specified, awaiting a decision, not applicable with a reason, or deferred with an
|
|
584
|
+
owner and a trigger.
|
|
585
|
+
|
|
586
|
+
```bash
|
|
587
|
+
superdev readiness
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
"Not yet considered" is not one of the answers.
|
|
591
|
+
|
|
592
|
+
### `superdev ui`
|
|
593
|
+
|
|
594
|
+
```bash
|
|
595
|
+
superdev ui --apply # start and open
|
|
596
|
+
superdev start --apply
|
|
597
|
+
superdev stop --apply
|
|
598
|
+
superdev restart --apply
|
|
599
|
+
superdev services
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
### `superdev db`
|
|
603
|
+
|
|
604
|
+
```bash
|
|
605
|
+
superdev db status # schema version, integrity, row counts
|
|
606
|
+
superdev db migrate --apply # apply pending migrations
|
|
607
|
+
superdev db backup --apply # snapshot
|
|
608
|
+
superdev db restore <name> --apply # put one back
|
|
609
|
+
superdev export project.json --apply # move between machines
|
|
610
|
+
superdev import project.json --apply
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
Migrations are forward only, with a self-contained backup taken before every
|
|
614
|
+
run. Getting back means restoring that backup, which is why one is always taken.
|
|
615
|
+
|
|
616
|
+
`db migrate`, `db restore` and `import` all refuse while the dashboard is
|
|
617
|
+
running, and each refusal names the command that frees it.
|
|
618
|
+
|
|
619
|
+
### `superdev cloud and sync`
|
|
620
|
+
|
|
621
|
+
Optional, and inert until you configure it. Your local database is always the
|
|
622
|
+
authority.
|
|
623
|
+
|
|
624
|
+
```bash
|
|
625
|
+
superdev cloud connect ~/Dropbox/product-sync --apply # creates a local key
|
|
626
|
+
superdev cloud status
|
|
627
|
+
superdev sync --dry-run # what would move
|
|
628
|
+
superdev sync --apply # move it
|
|
629
|
+
superdev sync --resolve # list disagreements
|
|
630
|
+
superdev sync --resolve CONF-0001 --keep remote --apply # settle one
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
- Everything sent is encrypted with a key created on your machine and never
|
|
634
|
+
transmitted. Copy the key to your other machine yourself.
|
|
635
|
+
- A record changed in both copies is never overwritten. It becomes a conflict and
|
|
636
|
+
you choose.
|
|
637
|
+
- Specifications, decisions, evidence and tasks travel. Memory, activity,
|
|
638
|
+
sessions and identities never leave.
|
|
639
|
+
- The only transport is a directory you provide, such as a synced folder. There
|
|
640
|
+
is no hosted service.
|
|
641
|
+
|
|
642
|
+
### `superdev settings`
|
|
643
|
+
|
|
644
|
+
```bash
|
|
645
|
+
superdev settings # what it checks on its own
|
|
646
|
+
superdev settings --no-update-check --apply # stop checking
|
|
647
|
+
superdev settings --update-check --apply # start again
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
### Product map commands
|
|
651
|
+
|
|
652
|
+
Read-only views of what has been recorded.
|
|
653
|
+
|
|
654
|
+
```bash
|
|
655
|
+
superdev module list superdev module show MOD-0001
|
|
656
|
+
superdev goal list superdev goal show GOAL-0001
|
|
657
|
+
superdev milestone list superdev milestone show MS-0001
|
|
658
|
+
superdev workflow list superdev workflow show WF-0001
|
|
659
|
+
superdev architecture show superdev schema show [entity]
|
|
660
|
+
superdev api show superdev integration list
|
|
661
|
+
superdev plan
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
### Global options and exit codes
|
|
665
|
+
|
|
666
|
+
| Option | What it does |
|
|
667
|
+
|---|---|
|
|
668
|
+
| `--apply` | Actually do it. Without this, every changing command prints its plan and changes nothing. |
|
|
669
|
+
| `--json` | Machine-readable output, and nothing else on stdout. |
|
|
670
|
+
| `--root <path>` | Which project. Defaults to the working directory. |
|
|
671
|
+
| `--out <path>` | Write this command's output to a file. |
|
|
672
|
+
| `--actor <name>` | Who to record as responsible. |
|
|
673
|
+
| `--version` | The CLI's name and version. |
|
|
674
|
+
| `--help` | The full command surface. |
|
|
675
|
+
|
|
676
|
+
| Exit code | Meaning |
|
|
677
|
+
|---|---|
|
|
678
|
+
| `0` | It worked. |
|
|
679
|
+
| `1` | Something was found, or refused. |
|
|
680
|
+
| `2` | The command was misused. |
|
|
681
|
+
|
|
682
|
+
## The Dashboard
|
|
683
|
+
|
|
684
|
+
```bash
|
|
685
|
+
superdev ui --apply
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
A local page at `127.0.0.1:4317`, served from a single self-contained file. It
|
|
689
|
+
reads the database on every request and follows it as you work.
|
|
690
|
+
|
|
691
|
+
Twenty areas, grouped by the question each answers:
|
|
692
|
+
|
|
693
|
+
| Group | Areas |
|
|
694
|
+
|---|---|
|
|
695
|
+
| Where we are | Overview, Readiness, Activity |
|
|
696
|
+
| What we are building | Discovery, Product, Blueprint, Features, Workflows |
|
|
697
|
+
| How it is built | Data, Architecture, APIs, Surfaces, Decisions |
|
|
698
|
+
| How we know it works | Evidence, Test Plans, Changes |
|
|
699
|
+
| Who is doing it | Tasks, Team, Sync, Settings |
|
|
700
|
+
|
|
701
|
+
The **Blueprint** is the whole project as one map, with pan, zoom, drag, search,
|
|
702
|
+
highlighting, fullscreen, and navigation into any record.
|
|
703
|
+
|
|
704
|
+
<p align="center">
|
|
705
|
+
<img src="./docs/images/dashboard-blueprint.png" alt="The Blueprint: goals, milestones, modules, features and tasks as one connected map" width="900" />
|
|
706
|
+
</p>
|
|
707
|
+
|
|
708
|
+
A view that no navigation group contains fails the build, so an area cannot exist
|
|
709
|
+
without a way to reach it.
|
|
710
|
+
|
|
711
|
+
## Workflow Examples
|
|
712
|
+
|
|
713
|
+
### One feature, end to end
|
|
714
|
+
|
|
715
|
+
```bash
|
|
716
|
+
superdev feature specify FEAT-0001 --purpose "..." --user "..." \
|
|
717
|
+
--in "..." --out "..." --flow "..." \
|
|
718
|
+
--criterion "what is true || how it is checked" \
|
|
719
|
+
--edge "empty_states:what happens when there is nothing" --apply
|
|
720
|
+
superdev feature accept FEAT-0001 --apply
|
|
721
|
+
superdev derive FEAT-0001 --apply
|
|
722
|
+
superdev task claim TASK-0001 --apply
|
|
723
|
+
superdev task start TASK-0001 --apply
|
|
724
|
+
# ... write the code ...
|
|
725
|
+
superdev task evidence TASK-0001 --result pass \
|
|
726
|
+
--summary "what you observed" --command "npm test" --criterion AC-0001 --apply
|
|
727
|
+
superdev task complete TASK-0001 --apply
|
|
728
|
+
superdev docs generate --apply
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
### Picking up yesterday's work
|
|
732
|
+
|
|
733
|
+
```bash
|
|
734
|
+
superdev resume --apply # objective, active task, blockers, next action
|
|
735
|
+
superdev task list # or choose something else
|
|
736
|
+
```
|
|
737
|
+
|
|
738
|
+
### Before a release
|
|
739
|
+
|
|
740
|
+
```bash
|
|
741
|
+
superdev status # derived progress
|
|
742
|
+
superdev doctor # eight health checks
|
|
743
|
+
superdev verify # re-run every recorded check
|
|
744
|
+
superdev readiness # the production checklist
|
|
745
|
+
superdev docs diff # nothing unreviewed on disk
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
### Two machines
|
|
749
|
+
|
|
750
|
+
```bash
|
|
751
|
+
# on the first
|
|
752
|
+
superdev cloud connect ~/Dropbox/product-sync --apply
|
|
753
|
+
superdev sync --apply
|
|
754
|
+
|
|
755
|
+
# copy .superdev/cloud/key to the second machine, then
|
|
756
|
+
superdev cloud connect ~/Dropbox/product-sync --alias laptop --apply
|
|
757
|
+
superdev sync --apply
|
|
758
|
+
```
|
|
759
|
+
|
|
760
|
+
## Updates and Versioning
|
|
761
|
+
|
|
762
|
+
The CLI and the plugin share one version, and a release moves both. Superdev
|
|
763
|
+
tells you when either has a newer release:
|
|
764
|
+
|
|
765
|
+
```
|
|
766
|
+
A newer Superdev CLI is available: 0.2.0, you have 0.1.0.
|
|
767
|
+
Update with npm install -g superdev-cli.
|
|
768
|
+
|
|
769
|
+
A newer Superdev plugin is available: 0.2.0, you have 0.1.0.
|
|
770
|
+
Update with claude plugin marketplace update superdev.
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
Updating:
|
|
774
|
+
|
|
775
|
+
```bash
|
|
776
|
+
npm install -g superdev-cli # the CLI
|
|
777
|
+
claude plugin marketplace update superdev # the plugin
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
If the plugin ever needs a newer CLI than you have, your next session says so
|
|
781
|
+
directly, naming both versions, rather than letting a skill call a command that
|
|
782
|
+
does not exist yet.
|
|
783
|
+
|
|
784
|
+
**How the check behaves.** It is the only outbound request Superdev makes:
|
|
785
|
+
|
|
786
|
+
- **At most once a day**, and only after a command has already answered.
|
|
787
|
+
- **It never delays anything.** The notice comes from a file the previous check
|
|
788
|
+
wrote, and the check runs in a separate process your command does not wait
|
|
789
|
+
for. Measured: 165 ms with the check against 148 ms with it disabled.
|
|
790
|
+
- **It fails silently.** No network, a proxy, a firewall: nothing is printed and
|
|
791
|
+
nothing is cached.
|
|
792
|
+
- **It writes to stderr**, so `--json` output is never affected.
|
|
793
|
+
|
|
794
|
+
Turning it off:
|
|
795
|
+
|
|
796
|
+
```bash
|
|
797
|
+
superdev settings --no-update-check --apply
|
|
798
|
+
export SUPERDEV_NO_UPDATE_CHECK=1 # for a container or a build
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
`CI=1` also disables it.
|
|
802
|
+
|
|
803
|
+
## Privacy
|
|
804
|
+
|
|
805
|
+
**Your project never leaves your machine.** No telemetry, no analytics, no crash
|
|
806
|
+
reporting. Every read and write of your project record is local, the dashboard
|
|
807
|
+
binds to `127.0.0.1` and refuses anything not same origin, and synchronization
|
|
808
|
+
only writes to a directory you name.
|
|
809
|
+
|
|
810
|
+
**One exception, and it is small.** The update check above asks the npm registry
|
|
811
|
+
for a version number and reads the plugin's manifest from this repository. What
|
|
812
|
+
that discloses is that somebody uses Superdev. It sends nothing about you or your
|
|
813
|
+
project, and one command turns it off.
|
|
814
|
+
|
|
815
|
+
Everything else follows. `npm install` fetches from the registry once, as any
|
|
816
|
+
install does. Installing an optional provider runs that provider's own installer,
|
|
817
|
+
which needs a network and is never implicit. And the agent harness you run
|
|
818
|
+
Superdev inside is a separate program with its own network behaviour.
|
|
819
|
+
|
|
820
|
+
Where your data lives:
|
|
821
|
+
|
|
822
|
+
```text
|
|
823
|
+
your-project/
|
|
824
|
+
.superdev/ the database, backups and runtime state, git-ignored
|
|
825
|
+
talks/ generated Markdown documentation, commit this
|
|
826
|
+
```
|
|
827
|
+
|
|
828
|
+
Nothing else is added. No dependency entry, no `node_modules`, no lockfile
|
|
829
|
+
change. There is no file per task, session or event; those are database records
|
|
830
|
+
and they show in the dashboard.
|
|
831
|
+
|
|
832
|
+
## Providers
|
|
833
|
+
|
|
834
|
+
Superdev works on its own. If these are installed it will use them, and if they
|
|
835
|
+
are not it says so and continues:
|
|
836
|
+
|
|
837
|
+
Superpowers (brainstorming, planning, test-driven development, systematic
|
|
838
|
+
debugging, review), Frontend Design, Impeccable, Claude Mem, envx, Find Skills,
|
|
839
|
+
Task Observer, skills.sh.
|
|
840
|
+
|
|
841
|
+
```bash
|
|
842
|
+
superdev integration list # what each is for, and what happens when absent
|
|
843
|
+
superdev doctor # which are present
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
Nothing is installed on your behalf, ever, and Superdev never presents its own
|
|
847
|
+
work as a provider's methodology.
|
|
848
|
+
|
|
849
|
+
## Troubleshooting
|
|
850
|
+
|
|
851
|
+
| Problem | Fix |
|
|
852
|
+
|---|---|
|
|
853
|
+
| `superdev: command not found` | `npm install -g superdev-cli`, then `superdev --version`. |
|
|
854
|
+
| The plugin says its command-line tool is not installed | Same fix. The plugin is text; the CLI does the work. |
|
|
855
|
+
| A session says the skills need a newer CLI | `npm install -g superdev-cli` to catch up. |
|
|
856
|
+
| `Cannot find package '@tursodatabase/database'` | The install did not finish. Run `npm install -g superdev-cli` again. |
|
|
857
|
+
| `No project in this directory` | `superdev init --apply`, or pass `--root /path/to/project`. |
|
|
858
|
+
| `db migrate` or `db restore` refuses | The dashboard is running. `superdev stop --apply` first. |
|
|
859
|
+
| A command printed a plan and changed nothing | That is the default. Add `--apply`. |
|
|
860
|
+
| `task complete` refuses | Read the refusal. It names the missing evidence or criterion and the command that fixes it. |
|
|
861
|
+
| The dashboard shows old data | `superdev docs generate --apply`, then reload. |
|
|
862
|
+
| Anything else | `superdev doctor` reports what is wrong and what to run. |
|
|
863
|
+
|
|
864
|
+
## Folder Structure
|
|
865
|
+
|
|
866
|
+
One repository, two published artifacts. The same tree becomes the npm package
|
|
867
|
+
and the plugin, so the two cannot drift apart: they are one commit.
|
|
868
|
+
|
|
869
|
+
```text
|
|
870
|
+
superdev/
|
|
871
|
+
│
|
|
872
|
+
├── src/ THE CLI, published to npm as superdev-cli
|
|
873
|
+
│ ├── cli.mjs every command, and the only entry point
|
|
874
|
+
│ ├── db/ storage, migrations, one writer at a time
|
|
875
|
+
│ │ └── migrations/ ordered SQL, applied forward only
|
|
876
|
+
│ ├── model/ vocabulary, identifiers, content screening
|
|
877
|
+
│ ├── init/ discovery, adoption, the interview
|
|
878
|
+
│ ├── features/ the depth gate, acceptance, completion
|
|
879
|
+
│ ├── tasks/ the task lifecycle and its refusals
|
|
880
|
+
│ ├── verify/ re-running the checks evidence stands on
|
|
881
|
+
│ ├── progress/ derived progress and alignment warnings
|
|
882
|
+
│ ├── decisions/ decision records and their chains
|
|
883
|
+
│ ├── product/ changes, assumptions, test plans
|
|
884
|
+
│ ├── memory/ structured recall, provenance, benchmarking
|
|
885
|
+
│ ├── docs/ the Markdown projection
|
|
886
|
+
│ ├── cloud/ synchronization: policy, merge, leases, crypto
|
|
887
|
+
│ ├── service/ the local read model and HTTP service
|
|
888
|
+
│ │ └── assets/ the compiled dashboard, one inlined file
|
|
889
|
+
│ ├── runtime/ sessions, identity, hooks, version checking
|
|
890
|
+
│ └── cli/ output rendering
|
|
891
|
+
│
|
|
892
|
+
├── skills/ THE PLUGIN, distributed by git
|
|
893
|
+
│ ├── project/ the entry point skill, routes to the rest
|
|
894
|
+
│ ├── init/ start a project, or adopt a codebase
|
|
895
|
+
│ ├── feature/ specify behaviour before it is built
|
|
896
|
+
│ ├── task/ run the task lifecycle
|
|
897
|
+
│ ├── decision/ find, record, revisit, supersede
|
|
898
|
+
│ ├── status/ report where things stand
|
|
899
|
+
│ ├── resume/ rebuild context after a break
|
|
900
|
+
│ ├── review/ check a change against what was accepted
|
|
901
|
+
│ ├── debug/ investigate to root cause
|
|
902
|
+
│ ├── docs/ the documentation engine
|
|
903
|
+
│ └── doctor/ check the environment
|
|
904
|
+
│
|
|
905
|
+
├── hooks/
|
|
906
|
+
│ ├── hooks.json which lifecycle events Superdev listens to
|
|
907
|
+
│ └── run.mjs finds the CLI and hands over, or says how to
|
|
908
|
+
│ install it. Node builtins only, so the plugin
|
|
909
|
+
│ needs no dependencies at all
|
|
910
|
+
│
|
|
911
|
+
├── .claude-plugin/ Claude Code plugin and marketplace manifests
|
|
912
|
+
├── .codex-plugin/ Codex plugin manifest
|
|
913
|
+
├── .github/workflows/ publishes to npm when a release is created
|
|
914
|
+
├── .release-it.json how a release is cut
|
|
915
|
+
│
|
|
916
|
+
├── references/ operating contracts the skills load on demand
|
|
917
|
+
│
|
|
918
|
+
├── scripts/
|
|
919
|
+
│ ├── validate/ fifteen validators, run by npm run validate
|
|
920
|
+
│ ├── check/ the release condition gate
|
|
921
|
+
│ ├── doctor/ environment and provider inspection
|
|
922
|
+
│ ├── providers/ the provider registry and detection
|
|
923
|
+
│ ├── privacy/ the leak scanner
|
|
924
|
+
│ ├── style/ the writing style scanner
|
|
925
|
+
│ └── package/ dashboard build, version propagation
|
|
926
|
+
│
|
|
927
|
+
├── ui/ dashboard source: React, TypeScript, Tailwind.
|
|
928
|
+
│ Compiled into src/service/assets, and not
|
|
929
|
+
│ published: what ships is the compiled file
|
|
930
|
+
│
|
|
931
|
+
├── docs/ requirements, decisions, images
|
|
932
|
+
├── talks/ this project's own generated documentation
|
|
933
|
+
│
|
|
934
|
+
├── package.json the npm package: name, bin, files allowlist
|
|
935
|
+
├── LICENSE Apache 2.0
|
|
936
|
+
└── THIRD-PARTY-NOTICES.md notices for what the dashboard compiles in
|
|
937
|
+
```
|
|
938
|
+
|
|
939
|
+
**Why the split works this way.** The plugin must be installable from git in one
|
|
940
|
+
command, and a git clone never carries `node_modules`. So everything needing the
|
|
941
|
+
database engine lives in the CLI, which npm installs properly, and the plugin
|
|
942
|
+
carries only text plus one dependency-free launcher. `hooks/run.mjs` is the seam:
|
|
943
|
+
it finds the installed `superdev` and hands the hook over, or explains what to
|
|
944
|
+
install.
|
|
945
|
+
|
|
946
|
+
## Development
|
|
947
|
+
|
|
948
|
+
```bash
|
|
949
|
+
git clone https://github.com/superdev-ai/superdev.git
|
|
950
|
+
cd superdev && npm install
|
|
951
|
+
|
|
952
|
+
npm run validate # fifteen validators; must be clean
|
|
953
|
+
npm run check # validators, doctor, and the release conditions
|
|
954
|
+
node src/cli.mjs doctor
|
|
955
|
+
|
|
956
|
+
cd ui && npm install && npm run lint # the dashboard
|
|
957
|
+
npm run ui:build # compile it into the CLI
|
|
958
|
+
npm run ui:check # confirm the committed file is current
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
To run your checkout instead of the installed CLI, use `node src/cli.mjs` in
|
|
962
|
+
place of `superdev`, or `npm link` once.
|
|
963
|
+
|
|
964
|
+
```bash
|
|
965
|
+
npm test # unit tests on pure functions, node --test, no framework
|
|
966
|
+
```
|
|
967
|
+
|
|
968
|
+
Testing here is deliberately narrow, and the boundary is enforced by a
|
|
969
|
+
validator. A `.test.mjs` beside the source it tests is allowed. A test
|
|
970
|
+
directory, a fixture project and every third-party framework are refused,
|
|
971
|
+
because each earlier attempt at a suite grew one and then measured completion in
|
|
972
|
+
test counts. A task still completes on recorded evidence about the real product:
|
|
973
|
+
a green suite is not evidence and a coverage figure is not progress.
|
|
974
|
+
|
|
975
|
+
What the tests cover is arithmetic no validator can check: version comparison,
|
|
976
|
+
the three-way merge, lease expiry, the gate on what may run unattended, the
|
|
977
|
+
brief parser, and the words the product puts in front of a reader. Products
|
|
978
|
+
built *with* Superdev get their own tests, derived from their accepted test
|
|
979
|
+
plans.
|
|
980
|
+
|
|
981
|
+
## Releasing
|
|
982
|
+
|
|
983
|
+
The CLI and the plugin share one version, so one release moves both.
|
|
984
|
+
|
|
985
|
+
```bash
|
|
986
|
+
npm run release:dry # see what would happen
|
|
987
|
+
npm run release:patch # 0.1.0 to 0.1.1
|
|
988
|
+
npm run release:minor # 0.1.0 to 0.2.0
|
|
989
|
+
npm run release:major # 0.1.0 to 1.0.0
|
|
990
|
+
```
|
|
991
|
+
|
|
992
|
+
What that does, in order:
|
|
993
|
+
|
|
994
|
+
1. Runs the gate: unit tests, validators, doctor, the release conditions, and a
|
|
995
|
+
check that the committed dashboard matches its source. A release that cannot pass its own
|
|
996
|
+
validators is not a release.
|
|
997
|
+
2. Bumps `package.json`, then propagates that version to both plugin manifests,
|
|
998
|
+
the marketplace entry, and the CLI version each plugin declares it needs.
|
|
999
|
+
A validator refuses a mismatch, so this cannot be forgotten quietly.
|
|
1000
|
+
3. Writes `CHANGELOG.md` from conventional commits.
|
|
1001
|
+
4. Commits, tags `v<version>`, pushes, and creates the GitHub release.
|
|
1002
|
+
5. The GitHub release triggers `.github/workflows/release.yml`, which runs the
|
|
1003
|
+
gate again and publishes `superdev-cli` to npm.
|
|
1004
|
+
|
|
1005
|
+
The plugin needs no publish step. It is distributed by git, so the tag is the
|
|
1006
|
+
release, and `claude plugin marketplace update superdev` reads it directly.
|
|
1007
|
+
|
|
1008
|
+
Release tooling is installed for the one command that needs it, with
|
|
1009
|
+
`npm install --no-save`, rather than declared in the manifest. A validator
|
|
1010
|
+
enforces that this repository carries no toolchain of its own, so the published
|
|
1011
|
+
package has exactly one dependency: the storage engine. A maintainer cutting a
|
|
1012
|
+
release is a different case from a user running the product.
|
|
1013
|
+
|
|
1014
|
+
## Contributing
|
|
1015
|
+
|
|
1016
|
+
Contributions are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) first.
|
|
1017
|
+
|
|
1018
|
+
Two rules that surprise people:
|
|
1019
|
+
|
|
1020
|
+
- **Do not add test cases for Superdev itself.** A validator enforces this, and
|
|
1021
|
+
`CONTRIBUTING.md` explains what to write instead.
|
|
1022
|
+
- **No emoji and no em dash** in anything the project owns. This is enforced at
|
|
1023
|
+
the storage boundary and by a validator, not merely requested.
|
|
1024
|
+
|
|
1025
|
+
When you report something, say what you ran and what you saw rather than what you
|
|
1026
|
+
expected. By participating you agree to the
|
|
1027
|
+
[Code of Conduct](CODE_OF_CONDUCT.md).
|
|
1028
|
+
|
|
1029
|
+
**Security.** Superdev holds your project's plans and decisions in a local
|
|
1030
|
+
database. To report a vulnerability see [SECURITY.md](SECURITY.md). Please do not
|
|
1031
|
+
open a public issue for a security problem.
|
|
1032
|
+
|
|
1033
|
+
## License
|
|
1034
|
+
|
|
1035
|
+
Released under the **[Apache License 2.0](LICENSE)**. You may use, modify and
|
|
1036
|
+
distribute it, including commercially, provided you keep the licence and
|
|
1037
|
+
copyright notices and state what you changed. It comes with no warranty.
|
|
1038
|
+
|
|
1039
|
+
The dashboard is compiled from React, Radix UI, xyflow, lucide, cmdk, dagre,
|
|
1040
|
+
zustand and d3, all under MIT, ISC or BSD-3-Clause. Their notices travel with the
|
|
1041
|
+
compiled file and are listed in
|
|
1042
|
+
[THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md).
|
|
1043
|
+
|
|
1044
|
+
The storage engine is `@tursodatabase/database`, installed from npm and not
|
|
1045
|
+
redistributed here.
|
|
1046
|
+
|
|
1047
|
+
---
|
|
1048
|
+
|
|
1049
|
+
<p align="center">
|
|
1050
|
+
<sub>Crafted for developers and agents, with care and precision.</sub>
|
|
1051
|
+
</p>
|