nikos 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -4,6 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
<p align="center"><b>Spec-driven development for AI coding agents</b></p>
|
|
6
6
|
|
|
7
|
+
I'm [@nikovijay](https://x.com/nikovijay), a Product Director with 20 years
|
|
8
|
+
of experience in software delivery. nikOS is my personal framework for
|
|
9
|
+
building products with AI coding agents. I'm sharing it to help others get
|
|
10
|
+
started with agentic programming practices. For where I think this is going,
|
|
11
|
+
see my thoughts on
|
|
12
|
+
[the software factory of the near future](https://www.nikovijay.com/software-factory).
|
|
13
|
+
|
|
14
|
+
## What it does
|
|
15
|
+
|
|
7
16
|
AI coding agents are quick to say "done". nikOS makes them prove it. Your
|
|
8
17
|
story map, plans and acceptance criteria live in your repo as plain files,
|
|
9
18
|
each criterion is a Cucumber scenario that runs as a test, and a story can't
|
|
@@ -11,6 +20,10 @@ be marked done until its scenarios pass. Your agent follows a named playbook
|
|
|
11
20
|
for each request instead of improvising, and every decision is written down
|
|
12
21
|
where the next person (or agent) can find it.
|
|
13
22
|
|
|
23
|
+
It works with Claude Code, Codex and Cursor, and brings spec-driven
|
|
24
|
+
development, behaviour-driven development (BDD) with Gherkin and Cucumber,
|
|
25
|
+
user story mapping and acceptance criteria to agentic coding.
|
|
26
|
+
|
|
14
27
|
> Early work in progress. Open source, MIT licensed.
|
|
15
28
|
|
|
16
29
|
## Try it in 10 minutes
|
|
@@ -80,20 +93,6 @@ Every file is plain text you can read, review and diff. The full format:
|
|
|
80
93
|
| `nikos decisions "<q>"` | Quote the decisions about a topic or story |
|
|
81
94
|
| `nikos bet new <id>` | Write a time-boxed bet card linked to its stories |
|
|
82
95
|
|
|
83
|
-
## Working with a team: intentdocs
|
|
84
|
-
|
|
85
|
-
When you want a visual story map, reviews and a team around the same specs,
|
|
86
|
-
[intentdocs](https://www.intentdocs.com) reads the same `intent/` folder:
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
npx intentdocs push # upload intent/ and link this repo
|
|
90
|
-
npx intentdocs pull # bring web edits back, shown as diffs first
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
The repo stays the source of truth for specs and plans; intentdocs runs the
|
|
94
|
-
build and acceptance steps. What maps to what:
|
|
95
|
-
[docs/intentdocs-mapping.md](docs/intentdocs-mapping.md).
|
|
96
|
-
|
|
97
96
|
## Links
|
|
98
97
|
|
|
99
98
|
- Home: https://nikos.tools
|
package/dist/commands/decide.js
CHANGED
|
@@ -2,7 +2,7 @@ import { appendFileSync, existsSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { STORY_ID, findIntentDir, read } from "../lib/project.js";
|
|
4
4
|
import { formatResult, validate } from "./validate.js";
|
|
5
|
-
const CATEGORIES = ["product", "architecture", "design", "
|
|
5
|
+
const CATEGORIES = ["product", "architecture", "design", "process"];
|
|
6
6
|
/** Append a dated entry to decisions.md. Earlier entries are never touched. */
|
|
7
7
|
export function decide(input, dir) {
|
|
8
8
|
const title = input.title.trim();
|
|
@@ -39,7 +39,7 @@ export function runDecide(args) {
|
|
|
39
39
|
return i >= 0 ? rest[i + 1] : undefined;
|
|
40
40
|
};
|
|
41
41
|
if (!title || title.startsWith("--")) {
|
|
42
|
-
console.error('Usage: nikos decide "<title>" --why "<why>" [--story <id>] [--category product|architecture|design|
|
|
42
|
+
console.error('Usage: nikos decide "<title>" --why "<why>" [--story <id>] [--category product|architecture|design|process] [--supersedes "<title>"]');
|
|
43
43
|
return 1;
|
|
44
44
|
}
|
|
45
45
|
const dir = opt("dir") ?? process.cwd();
|
package/docs/format.md
CHANGED
|
@@ -199,9 +199,7 @@ Why this, and what we rejected.
|
|
|
199
199
|
|
|
200
200
|
The heading is `date — title (story id)`; the story id is optional for
|
|
201
201
|
project-wide decisions. Category is one of `product`, `architecture`,
|
|
202
|
-
`design`, `
|
|
203
|
-
must keep to: a command's syntax, an output format, an API's shape. The
|
|
204
|
-
build-a-story playbook reads these before planning.
|
|
202
|
+
`design`, `process`.
|
|
205
203
|
|
|
206
204
|
---
|
|
207
205
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nikos",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.0.4",
|
|
4
|
+
"description": "Spec-driven development for AI coding agents: story maps, Gherkin acceptance criteria and a done gate for Claude Code, Codex and Cursor",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Niko Vijay",
|
|
7
7
|
"homepage": "https://nikos.tools",
|
|
@@ -42,5 +42,19 @@
|
|
|
42
42
|
"@cucumber/messages": "^26.0.1",
|
|
43
43
|
"ajv": "^8.17.1",
|
|
44
44
|
"yaml": "^2.6.1"
|
|
45
|
-
}
|
|
45
|
+
},
|
|
46
|
+
"keywords": [
|
|
47
|
+
"spec-driven-development",
|
|
48
|
+
"ai-coding-agents",
|
|
49
|
+
"agentic-coding",
|
|
50
|
+
"claude-code",
|
|
51
|
+
"codex",
|
|
52
|
+
"cursor",
|
|
53
|
+
"bdd",
|
|
54
|
+
"gherkin",
|
|
55
|
+
"cucumber",
|
|
56
|
+
"acceptance-criteria",
|
|
57
|
+
"user-story-mapping",
|
|
58
|
+
"agent-skills"
|
|
59
|
+
]
|
|
46
60
|
}
|
|
@@ -38,7 +38,7 @@ add what the git history of `intent/` shows (`git log -p -- intent/`), marked
|
|
|
38
38
|
clearly as history, not a recorded decision. Then offer to log one:
|
|
39
39
|
|
|
40
40
|
```
|
|
41
|
-
nikos decide "<title>" --why "<why>" --category <product|architecture|design|
|
|
41
|
+
nikos decide "<title>" --why "<why>" --category <product|architecture|design|process>
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
Log it only once the person tells you the reason. Don't write a reason for
|
|
@@ -5,10 +5,10 @@ scenarios pass, not that you say so.
|
|
|
5
5
|
|
|
6
6
|
1. Run `nikos next` to pick the story, or use the story id the person named.
|
|
7
7
|
2. Check the story with the clear skill, and stop if any of the five checks fails.
|
|
8
|
-
3. Run `nikos
|
|
8
|
+
3. Run `nikos plan new <story-id>` and write the approach into the plan file it creates.
|
|
9
9
|
4. Run `nikos state set <story-id> in_progress`.
|
|
10
10
|
5. Implement the story, with a step definition for each step in its scenarios (see the verify skill).
|
|
11
11
|
6. Run `nikos verify <story-id>`, then `nikos verify` to check every other story still passes, and keep the output.
|
|
12
|
-
7. Record each decision you made with `nikos decide "<title>" --story <story-id> --why "<why>"`.
|
|
12
|
+
7. Record each decision you made with `nikos decide "<title>" --story <story-id> --why "<why>"`.
|
|
13
13
|
8. Run `nikos state set <story-id> done`. If it refuses, fix the failing scenarios and go back to step 6.
|
|
14
14
|
9. Report every step with its evidence or its skip reason.
|