reyson-spec-gate 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/LICENSE +21 -0
- package/README.md +272 -0
- package/bin/skill-reyson.js +234 -0
- package/docs/spec-workflow.md +171 -0
- package/examples/example-derived-artifacts.md +43 -0
- package/examples/example-input-spec.md +17 -0
- package/package.json +28 -0
- package/skills/generate-checklist/SKILL.md +66 -0
- package/skills/generate-task-list/SKILL.md +56 -0
- package/templates/adapters/AGENTS.md +16 -0
- package/templates/adapters/CLAUDE.md +16 -0
- package/templates/adapters/RULES.md +16 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 skill-reyson contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# skill-reyson
|
|
2
|
+
|
|
3
|
+
An interactive npm installer for a spec-first coding workflow.
|
|
4
|
+
|
|
5
|
+
`skill-reyson` helps teams install a lightweight scaffold that makes coding agents slower in the right place: **before implementation starts**.
|
|
6
|
+
|
|
7
|
+
It enforces a simple rule:
|
|
8
|
+
|
|
9
|
+
> No coding before the spec is clear, the task list exists, and the checklist exists.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## What this package installs
|
|
14
|
+
|
|
15
|
+
By default, the installer copies only the core workflow assets into your target directory:
|
|
16
|
+
|
|
17
|
+
- `docs/spec-workflow.md`
|
|
18
|
+
- `skills/generate-task-list/SKILL.md`
|
|
19
|
+
- `skills/generate-checklist/SKILL.md`
|
|
20
|
+
|
|
21
|
+
By default, it **does not** install agent guidance files.
|
|
22
|
+
|
|
23
|
+
If you choose to install agent guidance files during setup, it can also add one or more of:
|
|
24
|
+
|
|
25
|
+
- `AGENTS.md` for Codex-style workflows
|
|
26
|
+
- `CLAUDE.md` for Claude Code-style workflows
|
|
27
|
+
- `RULES.md` as a generic rules entrypoint
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Installation
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm i -g reyson-spec-gate
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Quick start
|
|
38
|
+
|
|
39
|
+
Install globally, then run the interactive installer:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
skill-reyson
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Fast path examples:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# install only docs + skills into the current project
|
|
49
|
+
skill-reyson install --yes --dir .
|
|
50
|
+
|
|
51
|
+
# install docs + skills + Codex AGENTS.md
|
|
52
|
+
skill-reyson install --yes --dir . --with-agent-files --agents codex
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Then run:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
skill-reyson
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
or:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
skill-reyson install
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Interactive setup
|
|
70
|
+
|
|
71
|
+
The CLI is interactive by default.
|
|
72
|
+
|
|
73
|
+
It asks:
|
|
74
|
+
1. where to install the scaffold
|
|
75
|
+
2. whether to install agent guidance files
|
|
76
|
+
3. which agent adapters to install
|
|
77
|
+
|
|
78
|
+
### Default behavior
|
|
79
|
+
|
|
80
|
+
If you accept the defaults:
|
|
81
|
+
- docs and skills are installed
|
|
82
|
+
- `AGENTS.md` / `CLAUDE.md` / `RULES.md` are **not** installed
|
|
83
|
+
|
|
84
|
+
This matches your desired safe default: **no agent behavior file unless the user opts in**.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Non-interactive setup
|
|
89
|
+
|
|
90
|
+
You can also run the installer non-interactively.
|
|
91
|
+
|
|
92
|
+
### Install core files only
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
skill-reyson install --yes --dir ./my-project
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Install core files plus Codex adapter
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
skill-reyson install --yes --dir ./my-project --with-agent-files --agents codex
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Install multiple agent adapters
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
skill-reyson install --yes --dir ./my-project --with-agent-files --agents codex,claude,generic
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Why this exists
|
|
113
|
+
|
|
114
|
+
In many spec-driven workflows, an agent may produce a decent spec and still move into coding too early.
|
|
115
|
+
|
|
116
|
+
Typical failure modes:
|
|
117
|
+
- the task list is implicit instead of explicit
|
|
118
|
+
- the checklist is missing or too generic
|
|
119
|
+
- the agent starts coding before execution and verification artifacts are aligned
|
|
120
|
+
|
|
121
|
+
`skill-reyson` fixes this by separating the workflow into three responsibilities:
|
|
122
|
+
|
|
123
|
+
- **agent guidance files** tell the agent how to behave
|
|
124
|
+
- **docs** explain the workflow and readiness gate
|
|
125
|
+
- **skills** generate missing artifacts
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Repository structure
|
|
130
|
+
|
|
131
|
+
```text
|
|
132
|
+
skill-reyson/
|
|
133
|
+
├── AGENTS.md
|
|
134
|
+
├── LICENSE
|
|
135
|
+
├── README.md
|
|
136
|
+
├── package.json
|
|
137
|
+
├── bin/
|
|
138
|
+
│ └── skill-reyson.js
|
|
139
|
+
├── docs/
|
|
140
|
+
│ └── spec-workflow.md
|
|
141
|
+
├── examples/
|
|
142
|
+
│ ├── example-derived-artifacts.md
|
|
143
|
+
│ └── example-input-spec.md
|
|
144
|
+
├── skills/
|
|
145
|
+
│ ├── generate-task-list/
|
|
146
|
+
│ │ └── SKILL.md
|
|
147
|
+
│ └── generate-checklist/
|
|
148
|
+
│ └── SKILL.md
|
|
149
|
+
└── templates/
|
|
150
|
+
└── adapters/
|
|
151
|
+
├── AGENTS.md
|
|
152
|
+
├── CLAUDE.md
|
|
153
|
+
└── RULES.md
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Responsibility split
|
|
159
|
+
|
|
160
|
+
### 1. Agent guidance files
|
|
161
|
+
|
|
162
|
+
Optional files such as `AGENTS.md`, `CLAUDE.md`, or `RULES.md` act as the enforcement layer.
|
|
163
|
+
|
|
164
|
+
Their job is to tell the agent:
|
|
165
|
+
- read the workflow doc before coding
|
|
166
|
+
- check whether task list and checklist exist
|
|
167
|
+
- generate missing artifacts before implementation
|
|
168
|
+
- revisit the checklist after coding
|
|
169
|
+
|
|
170
|
+
### 2. `docs/spec-workflow.md`
|
|
171
|
+
|
|
172
|
+
This is the workflow knowledge layer.
|
|
173
|
+
|
|
174
|
+
It defines:
|
|
175
|
+
- the pre-coding gate
|
|
176
|
+
- artifact ordering rules
|
|
177
|
+
- task-list expectations
|
|
178
|
+
- checklist expectations
|
|
179
|
+
- coding readiness rules
|
|
180
|
+
- post-coding review rules
|
|
181
|
+
|
|
182
|
+
### 3. Skills
|
|
183
|
+
|
|
184
|
+
The two included skills are execution helpers.
|
|
185
|
+
|
|
186
|
+
#### `generate-task-list`
|
|
187
|
+
Use this when the workflow has a spec or plan but no explicit task list.
|
|
188
|
+
|
|
189
|
+
#### `generate-checklist`
|
|
190
|
+
Use this when the workflow has a spec and task list but no explicit checklist.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Core workflow
|
|
195
|
+
|
|
196
|
+
1. Read the workflow document
|
|
197
|
+
2. Check whether the current task has a working spec
|
|
198
|
+
3. Check whether a task list exists
|
|
199
|
+
4. Check whether a checklist exists
|
|
200
|
+
5. If task list is missing, generate it
|
|
201
|
+
6. If checklist is missing, generate it
|
|
202
|
+
7. Start coding only after the readiness gate is satisfied
|
|
203
|
+
8. Revisit the checklist after coding
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Included examples
|
|
208
|
+
|
|
209
|
+
See:
|
|
210
|
+
- `examples/example-input-spec.md`
|
|
211
|
+
- `examples/example-derived-artifacts.md`
|
|
212
|
+
|
|
213
|
+
These show how a spec can lead to an explicit task list and checklist before coding begins.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Development
|
|
218
|
+
|
|
219
|
+
Run locally without publishing:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
node bin/skill-reyson.js --help
|
|
223
|
+
node bin/skill-reyson.js install
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Open-source intent
|
|
229
|
+
|
|
230
|
+
This project is meant to stay small, composable, and easy to adapt.
|
|
231
|
+
|
|
232
|
+
Good future extensions:
|
|
233
|
+
- additional agent adapters
|
|
234
|
+
- a readiness report skill
|
|
235
|
+
- templates for Working Spec output
|
|
236
|
+
- project-specific workflow variants
|
|
237
|
+
- validation fixtures and smoke tests
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Publish checklist
|
|
242
|
+
|
|
243
|
+
Before publishing to GitHub or npm, verify:
|
|
244
|
+
|
|
245
|
+
- `node bin/skill-reyson.js --help` works
|
|
246
|
+
- `skill-reyson install --yes --dir /tmp/somewhere` copies the expected files
|
|
247
|
+
- default install does **not** copy agent guidance files
|
|
248
|
+
- `--with-agent-files --agents ...` copies the selected adapter files
|
|
249
|
+
- `README.md` matches current CLI behavior
|
|
250
|
+
- `package.json` name, version, license, and bin entry are correct
|
|
251
|
+
|
|
252
|
+
### Suggested GitHub steps
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
cd /Users/bytedance/Desktop/coding/skill-reyson
|
|
256
|
+
git remote add origin <your-github-repo-url>
|
|
257
|
+
git push -u origin master
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Suggested npm publish steps
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
cd /Users/bytedance/Desktop/coding/skill-reyson
|
|
264
|
+
npm login
|
|
265
|
+
npm publish
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
If you want a safer dry run first:
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
npm pack
|
|
272
|
+
```
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const fs = require('fs');
|
|
3
|
+
const path = require('path');
|
|
4
|
+
const os = require('os');
|
|
5
|
+
const readline = require('readline');
|
|
6
|
+
|
|
7
|
+
const PACKAGE_ROOT = path.resolve(__dirname, '..');
|
|
8
|
+
const DOC_SOURCE = path.join(PACKAGE_ROOT, 'docs', 'spec-workflow.md');
|
|
9
|
+
const SKILL_SOURCES = [
|
|
10
|
+
{
|
|
11
|
+
source: path.join(PACKAGE_ROOT, 'skills', 'generate-task-list', 'SKILL.md'),
|
|
12
|
+
relativeTarget: path.join('skills', 'generate-task-list', 'SKILL.md'),
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
source: path.join(PACKAGE_ROOT, 'skills', 'generate-checklist', 'SKILL.md'),
|
|
16
|
+
relativeTarget: path.join('skills', 'generate-checklist', 'SKILL.md'),
|
|
17
|
+
},
|
|
18
|
+
];
|
|
19
|
+
const ADAPTERS = {
|
|
20
|
+
codex: {
|
|
21
|
+
label: 'Codex',
|
|
22
|
+
source: path.join(PACKAGE_ROOT, 'templates', 'adapters', 'AGENTS.md'),
|
|
23
|
+
target: 'AGENTS.md',
|
|
24
|
+
},
|
|
25
|
+
claude: {
|
|
26
|
+
label: 'Claude Code',
|
|
27
|
+
source: path.join(PACKAGE_ROOT, 'templates', 'adapters', 'CLAUDE.md'),
|
|
28
|
+
target: 'CLAUDE.md',
|
|
29
|
+
},
|
|
30
|
+
generic: {
|
|
31
|
+
label: 'Generic rules',
|
|
32
|
+
source: path.join(PACKAGE_ROOT, 'templates', 'adapters', 'RULES.md'),
|
|
33
|
+
target: 'RULES.md',
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
function printHelp() {
|
|
38
|
+
console.log(`skill-reyson
|
|
39
|
+
|
|
40
|
+
Usage:
|
|
41
|
+
skill-reyson Start interactive installer
|
|
42
|
+
skill-reyson install Start interactive installer
|
|
43
|
+
skill-reyson install --dir <path> [--agents codex,claude,generic] [--with-agent-files]
|
|
44
|
+
skill-reyson install --yes [--dir <path>] [--agents codex,claude,generic] [--with-agent-files]
|
|
45
|
+
skill-reyson --help Show help
|
|
46
|
+
|
|
47
|
+
Defaults:
|
|
48
|
+
- Installs docs/spec-workflow.md
|
|
49
|
+
- Installs skills/generate-task-list/SKILL.md
|
|
50
|
+
- Installs skills/generate-checklist/SKILL.md
|
|
51
|
+
- Does NOT install agent guidance files unless requested
|
|
52
|
+
`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function parseArgs(argv) {
|
|
56
|
+
const args = argv.slice(2);
|
|
57
|
+
const options = { command: 'install', dir: process.cwd(), yes: false, withAgentFiles: false, agents: [] };
|
|
58
|
+
if (args[0] && !args[0].startsWith('-')) {
|
|
59
|
+
options.command = args.shift();
|
|
60
|
+
}
|
|
61
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
62
|
+
const arg = args[i];
|
|
63
|
+
if (arg === '--help' || arg === '-h') {
|
|
64
|
+
options.command = 'help';
|
|
65
|
+
} else if (arg === '--yes' || arg === '-y') {
|
|
66
|
+
options.yes = true;
|
|
67
|
+
} else if (arg === '--with-agent-files') {
|
|
68
|
+
options.withAgentFiles = true;
|
|
69
|
+
} else if (arg === '--dir') {
|
|
70
|
+
options.dir = path.resolve(args[i + 1] || process.cwd());
|
|
71
|
+
i += 1;
|
|
72
|
+
} else if (arg.startsWith('--dir=')) {
|
|
73
|
+
options.dir = path.resolve(arg.split('=')[1]);
|
|
74
|
+
} else if (arg === '--agents') {
|
|
75
|
+
options.agents = (args[i + 1] || '').split(',').map((s) => s.trim()).filter(Boolean);
|
|
76
|
+
i += 1;
|
|
77
|
+
} else if (arg.startsWith('--agents=')) {
|
|
78
|
+
options.agents = arg.split('=')[1].split(',').map((s) => s.trim()).filter(Boolean);
|
|
79
|
+
} else {
|
|
80
|
+
throw new Error(`Unknown argument: ${arg}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return options;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function ensureDir(dirPath) {
|
|
87
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function copyFile(source, target) {
|
|
91
|
+
ensureDir(path.dirname(target));
|
|
92
|
+
fs.copyFileSync(source, target);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function copyCoreArtifacts(targetDir) {
|
|
96
|
+
const docTarget = path.join(targetDir, 'docs', 'spec-workflow.md');
|
|
97
|
+
copyFile(DOC_SOURCE, docTarget);
|
|
98
|
+
for (const skill of SKILL_SOURCES) {
|
|
99
|
+
copyFile(skill.source, path.join(targetDir, skill.relativeTarget));
|
|
100
|
+
}
|
|
101
|
+
return [
|
|
102
|
+
path.relative(targetDir, docTarget),
|
|
103
|
+
...SKILL_SOURCES.map((skill) => skill.relativeTarget),
|
|
104
|
+
];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function copyAgentFiles(targetDir, selectedAgents) {
|
|
108
|
+
const copied = [];
|
|
109
|
+
for (const key of selectedAgents) {
|
|
110
|
+
const adapter = ADAPTERS[key];
|
|
111
|
+
if (!adapter) continue;
|
|
112
|
+
copyFile(adapter.source, path.join(targetDir, adapter.target));
|
|
113
|
+
copied.push(adapter.target);
|
|
114
|
+
}
|
|
115
|
+
return copied;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function normalizeAgents(agentKeys) {
|
|
119
|
+
return Array.from(new Set(agentKeys.filter((key) => ADAPTERS[key])));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function createInterface() {
|
|
123
|
+
return readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function ask(rl, question) {
|
|
127
|
+
return new Promise((resolve) => rl.question(question, resolve));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
async function runInteractive(defaults) {
|
|
131
|
+
const rl = createInterface();
|
|
132
|
+
try {
|
|
133
|
+
console.log('\nskill-reyson interactive installer\n');
|
|
134
|
+
const dirAnswer = await ask(rl, `Target directory [${defaults.dir}]: `);
|
|
135
|
+
const targetDir = path.resolve(dirAnswer.trim() || defaults.dir);
|
|
136
|
+
|
|
137
|
+
const includeAgentAnswer = await ask(rl, 'Install agent guidance files (AGENTS.md / CLAUDE.md / RULES.md)? [y/N]: ');
|
|
138
|
+
const withAgentFiles = /^y(es)?$/i.test(includeAgentAnswer.trim());
|
|
139
|
+
|
|
140
|
+
let agents = [];
|
|
141
|
+
if (withAgentFiles) {
|
|
142
|
+
console.log('\nSelect agent adapters (comma-separated numbers):');
|
|
143
|
+
console.log(' 1) Codex -> AGENTS.md');
|
|
144
|
+
console.log(' 2) Claude Code -> CLAUDE.md');
|
|
145
|
+
console.log(' 3) Generic rules -> RULES.md');
|
|
146
|
+
const agentAnswer = await ask(rl, 'Choice(s) [1]: ');
|
|
147
|
+
const tokens = (agentAnswer.trim() || '1').split(',').map((s) => s.trim());
|
|
148
|
+
const mapping = { '1': 'codex', '2': 'claude', '3': 'generic' };
|
|
149
|
+
agents = normalizeAgents(tokens.map((token) => mapping[token] || token.toLowerCase()));
|
|
150
|
+
if (agents.length === 0) {
|
|
151
|
+
agents = ['codex'];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const confirmation = await ask(rl, `\nProceed installing into ${targetDir}? [Y/n]: `);
|
|
156
|
+
const ok = confirmation.trim() === '' || /^y(es)?$/i.test(confirmation.trim());
|
|
157
|
+
if (!ok) {
|
|
158
|
+
console.log('Installation cancelled.');
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const result = performInstall({ targetDir, withAgentFiles, agents });
|
|
163
|
+
printSummary(result);
|
|
164
|
+
} finally {
|
|
165
|
+
rl.close();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function performInstall({ targetDir, withAgentFiles, agents }) {
|
|
170
|
+
ensureDir(targetDir);
|
|
171
|
+
const coreFiles = copyCoreArtifacts(targetDir);
|
|
172
|
+
const agentFiles = withAgentFiles ? copyAgentFiles(targetDir, normalizeAgents(agents)) : [];
|
|
173
|
+
return { targetDir, coreFiles, agentFiles };
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function printSummary(result) {
|
|
177
|
+
console.log('\nInstalled skill-reyson scaffold:\n');
|
|
178
|
+
console.log(`Target: ${result.targetDir}`);
|
|
179
|
+
console.log('\nCore files:');
|
|
180
|
+
for (const file of result.coreFiles) {
|
|
181
|
+
console.log(` - ${file}`);
|
|
182
|
+
}
|
|
183
|
+
if (result.agentFiles.length > 0) {
|
|
184
|
+
console.log('\nAgent guidance files:');
|
|
185
|
+
for (const file of result.agentFiles) {
|
|
186
|
+
console.log(` - ${file}`);
|
|
187
|
+
}
|
|
188
|
+
} else {
|
|
189
|
+
console.log('\nAgent guidance files: none (default)');
|
|
190
|
+
}
|
|
191
|
+
console.log('\nNext steps:');
|
|
192
|
+
console.log(' 1) Open docs/spec-workflow.md');
|
|
193
|
+
console.log(' 2) Ensure your agent knows to read the workflow before coding');
|
|
194
|
+
console.log(' 3) Use generate-task-list and generate-checklist when artifacts are missing');
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
async function main() {
|
|
198
|
+
let options;
|
|
199
|
+
try {
|
|
200
|
+
options = parseArgs(process.argv);
|
|
201
|
+
} catch (error) {
|
|
202
|
+
console.error(error.message);
|
|
203
|
+
printHelp();
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (options.command === 'help' || options.command === '--help' || options.command === '-h') {
|
|
208
|
+
printHelp();
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (options.command !== 'install') {
|
|
213
|
+
console.error(`Unknown command: ${options.command}`);
|
|
214
|
+
printHelp();
|
|
215
|
+
process.exit(1);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (options.yes) {
|
|
219
|
+
const result = performInstall({
|
|
220
|
+
targetDir: options.dir,
|
|
221
|
+
withAgentFiles: options.withAgentFiles,
|
|
222
|
+
agents: options.agents,
|
|
223
|
+
});
|
|
224
|
+
printSummary(result);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
await runInteractive(options);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
main().catch((error) => {
|
|
232
|
+
console.error(error.stack || error.message);
|
|
233
|
+
process.exit(1);
|
|
234
|
+
});
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Spec Workflow
|
|
2
|
+
|
|
3
|
+
This document defines the workflow for spec-driven coding.
|
|
4
|
+
|
|
5
|
+
Its purpose is to prevent the agent from jumping directly from a user request or a loose spec into implementation without first establishing explicit execution and verification artifacts.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Core principle
|
|
10
|
+
|
|
11
|
+
Before coding starts, the implementation must be constrained by three artifacts:
|
|
12
|
+
|
|
13
|
+
1. a working spec
|
|
14
|
+
2. a task list
|
|
15
|
+
3. a checklist
|
|
16
|
+
|
|
17
|
+
If any required artifact is missing, it must be generated before coding begins.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 2. Pre-coding gate
|
|
22
|
+
|
|
23
|
+
Before any implementation work, the agent must verify whether the current task already has:
|
|
24
|
+
|
|
25
|
+
- a clear working spec
|
|
26
|
+
- an explicit task list
|
|
27
|
+
- an explicit checklist
|
|
28
|
+
|
|
29
|
+
If one or more artifacts are missing, the agent must generate the missing artifacts in the required order.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 3. Required order
|
|
34
|
+
|
|
35
|
+
### Case A: task list missing and checklist missing
|
|
36
|
+
|
|
37
|
+
The agent must:
|
|
38
|
+
1. generate or normalize the working spec if needed
|
|
39
|
+
2. generate the task list first
|
|
40
|
+
3. generate the checklist second
|
|
41
|
+
4. assess coding readiness
|
|
42
|
+
5. only then proceed to coding
|
|
43
|
+
|
|
44
|
+
### Case B: task list exists but checklist missing
|
|
45
|
+
|
|
46
|
+
The agent must:
|
|
47
|
+
1. validate that the current task list still matches the spec
|
|
48
|
+
2. generate the checklist from the spec and task list
|
|
49
|
+
3. assess coding readiness
|
|
50
|
+
4. only then proceed to coding
|
|
51
|
+
|
|
52
|
+
### Case C: checklist exists but task list missing
|
|
53
|
+
|
|
54
|
+
The agent must:
|
|
55
|
+
1. generate the task list first
|
|
56
|
+
2. validate whether the existing checklist still matches the spec and new task list
|
|
57
|
+
3. refine or regenerate the checklist if necessary
|
|
58
|
+
4. assess coding readiness
|
|
59
|
+
5. only then proceed to coding
|
|
60
|
+
|
|
61
|
+
### Case D: both exist
|
|
62
|
+
|
|
63
|
+
The agent must:
|
|
64
|
+
1. verify both artifacts still align with the current spec
|
|
65
|
+
2. assess coding readiness
|
|
66
|
+
3. proceed to coding only if no critical ambiguity remains
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 4. Working spec requirements
|
|
71
|
+
|
|
72
|
+
The working spec should be compact but explicit.
|
|
73
|
+
|
|
74
|
+
It should include:
|
|
75
|
+
- Goal
|
|
76
|
+
- Scope
|
|
77
|
+
- Non-goals
|
|
78
|
+
- Constraints
|
|
79
|
+
- Risks / ambiguities
|
|
80
|
+
|
|
81
|
+
If a spec already exists, the agent should normalize it instead of rewriting it unnecessarily.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 5. Task list requirements
|
|
86
|
+
|
|
87
|
+
The task list is the execution plan.
|
|
88
|
+
|
|
89
|
+
It must:
|
|
90
|
+
- use concrete implementation tasks
|
|
91
|
+
- separate implementation from validation
|
|
92
|
+
- make dependency order visible
|
|
93
|
+
- expose blockers and unresolved decisions
|
|
94
|
+
- be specific enough that each task can be independently checked
|
|
95
|
+
|
|
96
|
+
Minimum sections:
|
|
97
|
+
- Implementation Tasks
|
|
98
|
+
- Validation Tasks
|
|
99
|
+
- Open Questions / Blockers
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 6. Checklist requirements
|
|
104
|
+
|
|
105
|
+
The checklist is the verification plan.
|
|
106
|
+
|
|
107
|
+
It must be derived from the working spec and the task list.
|
|
108
|
+
|
|
109
|
+
It must include:
|
|
110
|
+
- Functional Acceptance
|
|
111
|
+
- Edge Cases
|
|
112
|
+
- Regression Checks
|
|
113
|
+
- Testing
|
|
114
|
+
- Non-functional Checks
|
|
115
|
+
|
|
116
|
+
Checklist items must be testable, reviewable, or otherwise verifiable.
|
|
117
|
+
|
|
118
|
+
The checklist must not be a vague rewrite of the task list.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 7. Coding readiness
|
|
123
|
+
|
|
124
|
+
Coding may begin only when:
|
|
125
|
+
- the spec is clear enough for implementation
|
|
126
|
+
- the task list is explicit
|
|
127
|
+
- the checklist is explicit
|
|
128
|
+
- no critical ambiguity remains
|
|
129
|
+
|
|
130
|
+
Recommended output:
|
|
131
|
+
- Ready / Not Ready
|
|
132
|
+
- Reason
|
|
133
|
+
- Next action
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 8. Post-coding review
|
|
138
|
+
|
|
139
|
+
After implementation, the agent must revisit the checklist.
|
|
140
|
+
|
|
141
|
+
Each relevant item should be treated as:
|
|
142
|
+
- completed
|
|
143
|
+
- partially completed
|
|
144
|
+
- not yet verified
|
|
145
|
+
|
|
146
|
+
The agent should not claim the work is complete if critical checklist items remain unresolved.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 9. Notes for spec workflows without built-in task management
|
|
151
|
+
|
|
152
|
+
Some spec-first approaches produce a spec or plan without a strong task-management layer.
|
|
153
|
+
|
|
154
|
+
Examples may include:
|
|
155
|
+
- lightweight planning mode flows
|
|
156
|
+
- open spec style flows
|
|
157
|
+
- antigravity style flows
|
|
158
|
+
- codex plan style flows
|
|
159
|
+
- superpower style flows
|
|
160
|
+
|
|
161
|
+
For these workflows, the missing task list must be explicitly backfilled before coding.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 10. Summary rule
|
|
166
|
+
|
|
167
|
+
No coding before:
|
|
168
|
+
1. spec is clear
|
|
169
|
+
2. task list exists
|
|
170
|
+
3. checklist exists
|
|
171
|
+
4. readiness is confirmed
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Example Derived Artifacts
|
|
2
|
+
|
|
3
|
+
## Task List
|
|
4
|
+
|
|
5
|
+
### Implementation Tasks
|
|
6
|
+
- add multi-select state to the task list page
|
|
7
|
+
- add bulk archive action trigger in the UI
|
|
8
|
+
- implement batch archive request handling in the action layer
|
|
9
|
+
- preserve single-task archive behavior
|
|
10
|
+
- surface partial-failure and full-success feedback
|
|
11
|
+
|
|
12
|
+
### Validation Tasks
|
|
13
|
+
- test archive with one item, multiple items, and zero selected items
|
|
14
|
+
- verify filters and pagination still behave correctly after archive
|
|
15
|
+
- verify existing single-task archive flow still works
|
|
16
|
+
|
|
17
|
+
### Open Questions / Blockers
|
|
18
|
+
- should archived items disappear immediately or only after refresh?
|
|
19
|
+
|
|
20
|
+
## Checklist
|
|
21
|
+
|
|
22
|
+
### Functional Acceptance
|
|
23
|
+
- user can select multiple tasks and archive them in one action
|
|
24
|
+
- success feedback appears after a successful bulk archive
|
|
25
|
+
- failures are visible and do not silently pass
|
|
26
|
+
|
|
27
|
+
### Edge Cases
|
|
28
|
+
- zero selected items does not trigger archive
|
|
29
|
+
- partial API failure is surfaced clearly
|
|
30
|
+
- archiving items across multiple pages is either supported or explicitly blocked
|
|
31
|
+
|
|
32
|
+
### Regression Checks
|
|
33
|
+
- single-task archive still works
|
|
34
|
+
- filters remain stable after archive
|
|
35
|
+
- pagination state does not break unexpectedly
|
|
36
|
+
|
|
37
|
+
### Testing
|
|
38
|
+
- add unit or integration coverage for batch archive behavior
|
|
39
|
+
- verify UI state resets correctly after success and failure
|
|
40
|
+
|
|
41
|
+
### Non-functional Checks
|
|
42
|
+
- bulk archive does not create duplicate requests
|
|
43
|
+
- loading and error states are observable to the user
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Example Input Spec
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
Add a bulk archive action to the task list page.
|
|
5
|
+
|
|
6
|
+
## Scope
|
|
7
|
+
- allow selecting multiple tasks
|
|
8
|
+
- allow archiving selected tasks in one action
|
|
9
|
+
- show success and error feedback
|
|
10
|
+
|
|
11
|
+
## Non-goals
|
|
12
|
+
- no permanent delete
|
|
13
|
+
- no redesign of the task page layout
|
|
14
|
+
|
|
15
|
+
## Constraints
|
|
16
|
+
- preserve existing single-task archive behavior
|
|
17
|
+
- do not break current filters or pagination
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "reyson-spec-gate",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Interactive installer for a spec-first workflow scaffold with docs, skills, and optional agent guidance files.",
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"bin": {
|
|
7
|
+
"skill-reyson": "bin/skill-reyson.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin",
|
|
11
|
+
"docs",
|
|
12
|
+
"skills",
|
|
13
|
+
"templates",
|
|
14
|
+
"examples",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE"
|
|
17
|
+
],
|
|
18
|
+
"keywords": [
|
|
19
|
+
"codex",
|
|
20
|
+
"agents",
|
|
21
|
+
"skills",
|
|
22
|
+
"spec-first",
|
|
23
|
+
"checklist",
|
|
24
|
+
"task-list",
|
|
25
|
+
"workflow"
|
|
26
|
+
],
|
|
27
|
+
"license": "MIT"
|
|
28
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: generate-checklist
|
|
3
|
+
description: Generate an explicit implementation checklist from a working spec and task list before coding. Use when acceptance criteria, edge cases, regression checks, testing scope, or non-functional checks are missing or still implicit in a spec-first workflow.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Generate Checklist
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
This skill generates a concrete checklist that constrains implementation and verification before coding begins.
|
|
11
|
+
|
|
12
|
+
It should be used after the working spec is available and preferably after the task list has been generated or normalized.
|
|
13
|
+
|
|
14
|
+
## Preferred inputs
|
|
15
|
+
|
|
16
|
+
Use these inputs in order:
|
|
17
|
+
1. Working spec
|
|
18
|
+
2. Explicit task list
|
|
19
|
+
3. Existing acceptance notes or review notes
|
|
20
|
+
|
|
21
|
+
If the task list is missing, request or trigger task-list generation first unless the caller explicitly overrides the process.
|
|
22
|
+
|
|
23
|
+
## Required output
|
|
24
|
+
|
|
25
|
+
Produce a checklist with these sections:
|
|
26
|
+
- Functional Acceptance
|
|
27
|
+
- Edge Cases
|
|
28
|
+
- Regression Checks
|
|
29
|
+
- Testing
|
|
30
|
+
- Non-functional Checks
|
|
31
|
+
|
|
32
|
+
## Rules
|
|
33
|
+
|
|
34
|
+
- Every checklist item must be testable, reviewable, or otherwise verifiable
|
|
35
|
+
- Derive checklist items from actual spec commitments and task-list implications
|
|
36
|
+
- Do not rewrite the task list as vague checklist bullets
|
|
37
|
+
- Include boundary conditions and negative paths when relevant
|
|
38
|
+
- Include migration, compatibility, rollback, observability, performance, security, or documentation checks when relevant
|
|
39
|
+
- Refine generic items until they become implementation-relevant
|
|
40
|
+
|
|
41
|
+
## Quality bar
|
|
42
|
+
|
|
43
|
+
A good checklist should:
|
|
44
|
+
- define what “done” really means
|
|
45
|
+
- reduce implementation drift
|
|
46
|
+
- catch omissions before and after coding
|
|
47
|
+
- force attention to edge cases and regressions
|
|
48
|
+
|
|
49
|
+
## Output template
|
|
50
|
+
|
|
51
|
+
### Checklist
|
|
52
|
+
|
|
53
|
+
#### Functional Acceptance
|
|
54
|
+
- ...
|
|
55
|
+
|
|
56
|
+
#### Edge Cases
|
|
57
|
+
- ...
|
|
58
|
+
|
|
59
|
+
#### Regression Checks
|
|
60
|
+
- ...
|
|
61
|
+
|
|
62
|
+
#### Testing
|
|
63
|
+
- ...
|
|
64
|
+
|
|
65
|
+
#### Non-functional Checks
|
|
66
|
+
- ...
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: generate-task-list
|
|
3
|
+
description: Generate or normalize an explicit task list from a working spec, plan, or user requirement before coding. Use when a spec-first workflow lacks a concrete task list, when an implicit plan needs to be made executable, or when validation tasks and blockers need to be separated clearly.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Generate Task List
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
This skill converts a working spec, plan, or user requirement into an explicit task list that can guide implementation safely.
|
|
11
|
+
|
|
12
|
+
Use it when the workflow has a spec but no concrete task-management layer, or when the existing task list is too vague to support reliable coding.
|
|
13
|
+
|
|
14
|
+
## Inputs
|
|
15
|
+
|
|
16
|
+
Prefer these inputs in order:
|
|
17
|
+
1. Working spec
|
|
18
|
+
2. Existing plan or outline
|
|
19
|
+
3. User request and clarified constraints
|
|
20
|
+
|
|
21
|
+
## Required output
|
|
22
|
+
|
|
23
|
+
Produce a task list with these sections:
|
|
24
|
+
- Implementation Tasks
|
|
25
|
+
- Validation Tasks
|
|
26
|
+
- Open Questions / Blockers
|
|
27
|
+
|
|
28
|
+
## Rules
|
|
29
|
+
|
|
30
|
+
- Use concrete, implementation-relevant tasks
|
|
31
|
+
- Order tasks by execution dependency
|
|
32
|
+
- Split build work from validation work
|
|
33
|
+
- Do not hide ambiguity inside tasks; surface it under blockers or open questions
|
|
34
|
+
- Make each task independently checkable
|
|
35
|
+
- If the input plan is already good, normalize rather than rewrite aggressively
|
|
36
|
+
|
|
37
|
+
## Quality bar
|
|
38
|
+
|
|
39
|
+
A good task list should:
|
|
40
|
+
- make coding order obvious
|
|
41
|
+
- expose missing decisions early
|
|
42
|
+
- reduce the chance of skipping validation
|
|
43
|
+
- be specific enough that another agent could execute from it
|
|
44
|
+
|
|
45
|
+
## Output template
|
|
46
|
+
|
|
47
|
+
### Task List
|
|
48
|
+
|
|
49
|
+
#### Implementation Tasks
|
|
50
|
+
- ...
|
|
51
|
+
|
|
52
|
+
#### Validation Tasks
|
|
53
|
+
- ...
|
|
54
|
+
|
|
55
|
+
#### Open Questions / Blockers
|
|
56
|
+
- ...
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
## Spec-first workflow rules
|
|
4
|
+
|
|
5
|
+
Before any implementation task, read `docs/spec-workflow.md`.
|
|
6
|
+
|
|
7
|
+
Before coding begins, verify whether the current work includes:
|
|
8
|
+
- an explicit task list
|
|
9
|
+
- an explicit checklist
|
|
10
|
+
|
|
11
|
+
If the task list is missing, generate it first.
|
|
12
|
+
If the checklist is missing, generate it second.
|
|
13
|
+
If both are missing, generate both before coding.
|
|
14
|
+
|
|
15
|
+
Do not begin implementation until the pre-coding gate is satisfied.
|
|
16
|
+
After coding, revisit the checklist before claiming completion.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
## Spec-first workflow rules
|
|
4
|
+
|
|
5
|
+
Before any implementation task, read `docs/spec-workflow.md`.
|
|
6
|
+
|
|
7
|
+
Before coding begins, verify whether the current work includes:
|
|
8
|
+
- an explicit task list
|
|
9
|
+
- an explicit checklist
|
|
10
|
+
|
|
11
|
+
If the task list is missing, generate it first.
|
|
12
|
+
If the checklist is missing, generate it second.
|
|
13
|
+
If both are missing, generate both before coding.
|
|
14
|
+
|
|
15
|
+
Do not begin implementation until the pre-coding gate is satisfied.
|
|
16
|
+
After coding, revisit the checklist before claiming completion.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# RULES.md
|
|
2
|
+
|
|
3
|
+
## Spec-first workflow rules
|
|
4
|
+
|
|
5
|
+
Before any implementation task, read `docs/spec-workflow.md`.
|
|
6
|
+
|
|
7
|
+
Before coding begins, verify whether the current work includes:
|
|
8
|
+
- an explicit task list
|
|
9
|
+
- an explicit checklist
|
|
10
|
+
|
|
11
|
+
If the task list is missing, generate it first.
|
|
12
|
+
If the checklist is missing, generate it second.
|
|
13
|
+
If both are missing, generate both before coding.
|
|
14
|
+
|
|
15
|
+
Do not begin implementation until the pre-coding gate is satisfied.
|
|
16
|
+
After coding, revisit the checklist before claiming completion.
|