learnship 2.3.1 → 2.3.3
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/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/README.md +5 -5
- package/bin/install.js +8 -0
- package/cursor-rules/learnship.mdc +44 -13
- package/gemini-extension.json +1 -1
- package/learnship/references/planning-config.md +1 -1
- package/learnship/workflows/audit-milestone.md +5 -0
- package/learnship/workflows/challenge.md +12 -0
- package/learnship/workflows/compound.md +5 -0
- package/learnship/workflows/debug.md +12 -0
- package/learnship/workflows/diagnose-issues.md +7 -0
- package/learnship/workflows/discuss-milestone.md +2 -0
- package/learnship/workflows/discuss-phase.md +10 -0
- package/learnship/workflows/docs-update.md +92 -0
- package/learnship/workflows/execute-phase.md +10 -0
- package/learnship/workflows/execute-plan.md +5 -0
- package/learnship/workflows/help.md +1 -1
- package/learnship/workflows/ideate.md +12 -0
- package/learnship/workflows/list-phase-assumptions.md +2 -0
- package/learnship/workflows/map-codebase.md +5 -0
- package/learnship/workflows/new-milestone.md +10 -0
- package/learnship/workflows/new-project.md +123 -19
- package/learnship/workflows/plan-phase.md +24 -6
- package/learnship/workflows/quick.md +27 -0
- package/learnship/workflows/research-phase.md +11 -4
- package/learnship/workflows/review.md +5 -0
- package/learnship/workflows/secure-phase.md +9 -0
- package/learnship/workflows/settings.md +8 -2
- package/learnship/workflows/validate-phase.md +7 -0
- package/learnship/workflows/verify-work.md +15 -0
- package/package.json +2 -2
- package/references/planning-config.md +1 -1
- package/templates/config.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learnship",
|
|
3
3
|
"description": "Agentic engineering done right — 57 structured workflows, 17 specialist agent personas, persistent memory across sessions, integrated learning partner, and impeccable UI design system. Works with Claude Code, Windsurf, Cursor, Gemini CLI, OpenCode, and Codex.",
|
|
4
|
-
"version": "2.3.
|
|
4
|
+
"version": "2.3.3",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Favio Vazquez",
|
|
7
7
|
"email": "favio.vazquezp@gmail.com"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "learnship",
|
|
3
3
|
"displayName": "learnship",
|
|
4
4
|
"description": "Agentic engineering done right — 57 structured workflows, 17 specialist agent personas, persistent memory across sessions, integrated learning partner, and impeccable UI design system.",
|
|
5
|
-
"version": "2.3.
|
|
5
|
+
"version": "2.3.3",
|
|
6
6
|
"logo": "assets/logo.png",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Favio Vazquez",
|
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
npx learnship
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
**Works on Mac, Windows, and Linux.** Requires Node.js ≥
|
|
41
|
+
**Works on Mac, Windows, and Linux.** Requires Node.js ≥ 22 and Git. The installer auto-detects your platform.
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
44
|
npx learnship --global # all projects
|
|
@@ -521,7 +521,7 @@ Project settings live in `.planning/config.json`. Set during `/new-project` or e
|
|
|
521
521
|
|
|
522
522
|
| Setting | Options | Default | What it controls |
|
|
523
523
|
|---------|---------|---------|-----------------|
|
|
524
|
-
| `mode` | `
|
|
524
|
+
| `mode` | `auto`, `interactive` | `auto` | `auto` auto-approves steps; `interactive` confirms at each decision |
|
|
525
525
|
| `granularity` | `coarse`, `standard`, `fine` | `standard` | Phase size: 3-5 / 5-8 / 8-12 phases |
|
|
526
526
|
| `model_profile` | `quality`, `balanced`, `budget` | `balanced` | Agent model tier (see table below) |
|
|
527
527
|
| `learning_mode` | `auto`, `manual` | `auto` | `auto` offers learning at checkpoints; `manual` requires explicit invocation |
|
|
@@ -579,8 +579,8 @@ Project settings live in `.planning/config.json`. Set during `/new-project` or e
|
|
|
579
579
|
|
|
580
580
|
| Scenario | `mode` | `granularity` | `model_profile` | Research | Plan Check | Verifier |
|
|
581
581
|
|----------|--------|--------------|----------------|----------|------------|---------|
|
|
582
|
-
| Prototyping | `
|
|
583
|
-
| Normal dev | `
|
|
582
|
+
| Prototyping | `auto` | `coarse` | `budget` | off | off | off |
|
|
583
|
+
| Normal dev | `auto` | `standard` | `balanced` | on | on | on |
|
|
584
584
|
| Production | `interactive` | `fine` | `quality` | on | on | on |
|
|
585
585
|
|
|
586
586
|
---
|
|
@@ -896,7 +896,7 @@ learnship/
|
|
|
896
896
|
├── bin/
|
|
897
897
|
│ └── install.js # Multi-platform installer (Claude Code, OpenCode, Gemini CLI, Codex CLI, Windsurf)
|
|
898
898
|
├── tests/
|
|
899
|
-
│ └──
|
|
899
|
+
│ └── run_all.sh # 15 test suites, 1200+ checks across 6 platforms
|
|
900
900
|
├── SKILL.md # Meta-skill: platform context loaded by Cascade / AI agents
|
|
901
901
|
├── install.sh # Shell installer wrapper
|
|
902
902
|
├── package.json # npm package (npx learnship)
|
package/bin/install.js
CHANGED
|
@@ -503,11 +503,18 @@ function verifyInstalled(dirPath, description) {
|
|
|
503
503
|
return true;
|
|
504
504
|
}
|
|
505
505
|
|
|
506
|
+
// Internal-only workflows that should never be installed to user projects.
|
|
507
|
+
// These are used to maintain the learnship repo itself.
|
|
508
|
+
const INTERNAL_ONLY_WORKFLOWS = new Set([
|
|
509
|
+
'sync-upstream-skills.md',
|
|
510
|
+
]);
|
|
511
|
+
|
|
506
512
|
/** Recursively copy dir, replacing path references in .md files */
|
|
507
513
|
function copyDir(srcDir, destDir, pathPrefix, platform) {
|
|
508
514
|
if (fs.existsSync(destDir)) fs.rmSync(destDir, { recursive: true });
|
|
509
515
|
fs.mkdirSync(destDir, { recursive: true });
|
|
510
516
|
for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
|
|
517
|
+
if (INTERNAL_ONLY_WORKFLOWS.has(entry.name)) continue;
|
|
511
518
|
const src = path.join(srcDir, entry.name);
|
|
512
519
|
const dest = path.join(destDir, entry.name);
|
|
513
520
|
if (entry.isDirectory()) {
|
|
@@ -1503,6 +1510,7 @@ function install(platform, isGlobal) {
|
|
|
1503
1510
|
let count = 0;
|
|
1504
1511
|
for (const f of fs.readdirSync(path.join(learnshipSrc, 'workflows'))) {
|
|
1505
1512
|
if (!f.endsWith('.md')) continue;
|
|
1513
|
+
if (INTERNAL_ONLY_WORKFLOWS.has(f)) continue;
|
|
1506
1514
|
let c = fs.readFileSync(path.join(learnshipSrc, 'workflows', f), 'utf8');
|
|
1507
1515
|
c = replacePaths(c, pathPrefix, platform);
|
|
1508
1516
|
if (f === 'new-project.md') c = rewriteNewProject(c, platform);
|
|
@@ -64,32 +64,42 @@ Suggest the appropriate workflow slash command when relevant:
|
|
|
64
64
|
| Workflow | When to suggest |
|
|
65
65
|
|----------|----------------|
|
|
66
66
|
| `/new-project` | User wants to start a new project from scratch |
|
|
67
|
+
| `/new-milestone` | Start a new milestone cycle on an existing project |
|
|
67
68
|
| `/discuss-phase [N]` | Before planning a phase — capture user's implementation vision |
|
|
69
|
+
| `/discuss-milestone` | Capture milestone-level goals before `/new-milestone` |
|
|
68
70
|
| `/plan-phase [N]` | After discussing a phase — create executable plans |
|
|
69
71
|
| `/execute-phase [N]` | Plans exist and are ready to run |
|
|
70
72
|
| `/verify-work [N]` | Phase execution complete — user acceptance testing |
|
|
73
|
+
| `/review` | Code ready for review — multi-persona quality check |
|
|
74
|
+
| `/ship` | Tests pass, code reviewed — ship it (test → lint → commit → push → PR) |
|
|
75
|
+
| `/complete-milestone` | All phases in the current milestone are done |
|
|
71
76
|
| `/ls` | User asks "where are we?", "what's next?", or starts a new session |
|
|
72
77
|
| `/next` | User wants to keep moving without deciding what to do |
|
|
73
|
-
| `/quick [task]` | Small ad-hoc task that doesn't need full phase ceremony |
|
|
74
78
|
| `/progress` | Status overview and routing |
|
|
79
|
+
| `/quick [task]` | Small ad-hoc task that doesn't need full phase ceremony |
|
|
80
|
+
| `/debug [symptom]` | Bug report — systematic hypothesis-driven debugging |
|
|
81
|
+
| `/map-codebase` | Analyze existing codebase structure before planning (brownfield projects) |
|
|
82
|
+
| `/ideate` | Codebase-grounded idea generation (`--explore` for Socratic mode) |
|
|
83
|
+
| `/challenge` | Stress-test a proposal with product + engineering forcing questions |
|
|
84
|
+
| `/settings` | Change project configuration after setup |
|
|
85
|
+
| `/health` | Project health check — stale files, uncommitted changes, config drift |
|
|
86
|
+
| `/compound` | Just solved a problem or learned a pattern — capture it while fresh |
|
|
75
87
|
| `/pause-work` | User is stopping mid-phase |
|
|
76
88
|
| `/resume-work` | User is returning to an in-progress project |
|
|
77
|
-
| `/
|
|
78
|
-
| `/compound` | Just solved a problem or learned a pattern — capture it while fresh |
|
|
79
|
-
| `/review` | Code ready for review — multi-persona quality check |
|
|
80
|
-
| `/challenge` | About to commit to a milestone or big feature — stress-test the scope |
|
|
81
|
-
| `/ship` | Tests pass, code reviewed — ship it (test → lint → commit → push → PR) |
|
|
82
|
-
| `/ideate` | Looking for what to build next — codebase-grounded idea generation (add `--explore` for Socratic mode) |
|
|
83
|
-
| `/guard` | Working on sensitive files — enable safety mode with destructive command warnings |
|
|
84
|
-
| `/sync-docs` | After code changes — detect stale documentation |
|
|
85
|
-
| `/forensics` | Something went wrong — post-mortem investigation (read-only) |
|
|
86
|
-
| `/undo` | Need to revert commits safely — preserves git history |
|
|
89
|
+
| `/guard` | Working on sensitive files — enable safety mode |
|
|
87
90
|
| `/note [text]` | Quick idea capture — zero friction, no questions |
|
|
88
91
|
| `/session-report` | End of session — generate summary for stakeholders |
|
|
89
92
|
| `/secure-phase [N]` | After execution — per-phase STRIDE security verification |
|
|
93
|
+
| `/validate-phase [N]` | Retroactive test coverage audit for a completed phase |
|
|
94
|
+
| `/diagnose-issues` | Batch-diagnose multiple UAT issues after `/verify-work` |
|
|
90
95
|
| `/docs-update` | Generate or update project documentation |
|
|
96
|
+
| `/sync-docs` | After code changes — detect stale documentation |
|
|
91
97
|
| `/extract-learnings [N]` | After phase completion — structured learning extraction |
|
|
92
98
|
| `/milestone-summary` | Generate comprehensive milestone summary for team onboarding |
|
|
99
|
+
| `/forensics` | Something went wrong — post-mortem investigation (read-only) |
|
|
100
|
+
| `/undo` | Need to revert commits safely — preserves git history |
|
|
101
|
+
| `/knowledge-base` | Aggregate learnings across sessions into searchable KNOWLEDGE.md |
|
|
102
|
+
| `/transition` | Hand off project context to a new session or collaborator |
|
|
93
103
|
|
|
94
104
|
## Planning Artifacts
|
|
95
105
|
|
|
@@ -150,15 +160,36 @@ Set `"parallelization": { "enabled": true|false }` in `.planning/config.json` ba
|
|
|
150
160
|
|
|
151
161
|
## Structured Questions
|
|
152
162
|
|
|
153
|
-
When workflows include `AskUserQuestion()` blocks, **Cursor has no native structured question tool**. Present each question as a numbered text list with descriptions and ask the user to reply with their choice number or label.
|
|
163
|
+
When workflows include `AskUserQuestion()` blocks, **Cursor has no native structured question tool**. Present each question as a numbered text list with descriptions and ask the user to reply with their choice number or label. Present questions in rounds (Round 1: core settings, Round 2: workflow agents, Round 3: pipeline & git, Round 4: parallelization). **Wait for the user's reply after EACH round before showing the next.** Do NOT present all questions at once.
|
|
154
164
|
|
|
165
|
+
Example:
|
|
155
166
|
```
|
|
156
167
|
**Working Style**
|
|
157
168
|
How do you want to work?
|
|
158
|
-
1.
|
|
169
|
+
1. Auto (Recommended) — Auto-approve steps, just execute
|
|
159
170
|
2. Interactive — Confirm at each step
|
|
160
171
|
```
|
|
161
172
|
|
|
173
|
+
## Config Schema
|
|
174
|
+
|
|
175
|
+
After all configuration rounds are answered, write `.planning/config.json` with this EXACT schema. Map user answers to these keys — do NOT invent keys like `working_style`, `model_tier`, `platform`, `milestone`, or `phases`:
|
|
176
|
+
|
|
177
|
+
- Working Style → `"mode"`: `"auto"` or `"interactive"`
|
|
178
|
+
- Granularity → `"granularity"`: `"coarse"`, `"standard"`, or `"fine"`
|
|
179
|
+
- Learning Partner → `"learning_mode"`: `"auto"` or `"manual"`
|
|
180
|
+
- AI Models → `"model_profile"`: `"balanced"`, `"quality"`, or `"budget"`
|
|
181
|
+
- Research → `"workflow.research"`: `true` or `false`
|
|
182
|
+
- Plan Check → `"workflow.plan_check"`: `true` or `false`
|
|
183
|
+
- Verifier → `"workflow.verifier"`: `true` or `false`
|
|
184
|
+
- Review → `"workflow.review"`: `true` or `false`
|
|
185
|
+
- TDD → `"test_first"`: `true` or `false`
|
|
186
|
+
- Ship Pipeline → `"ship.auto_test"`, `"ship.conventional_commits"`, `"ship.pr_template"`
|
|
187
|
+
- Git Tracking → `"planning.commit_docs"`: `true` or `false`
|
|
188
|
+
- Commit Mode → `"planning.commit_mode"`: `"auto"` or `"manual"`
|
|
189
|
+
- Parallel Execution → `"parallelization.enabled"`: `true` or `false`
|
|
190
|
+
|
|
191
|
+
Run the config verification gate after writing — it must print `CONFIG_VALID`.
|
|
192
|
+
|
|
162
193
|
## Learning Mode
|
|
163
194
|
|
|
164
195
|
Read `learning_mode` from `.planning/config.json` (default: "auto"):
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learnship",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.3",
|
|
4
4
|
"description": "Agentic engineering done right — 57 structured workflows, 17 specialist agent personas, persistent memory across sessions, integrated learning partner, and impeccable UI design system.",
|
|
5
5
|
"author": "Favio Vazquez",
|
|
6
6
|
"homepage": "https://faviovazquez.github.io/learnship/",
|
|
@@ -229,7 +229,7 @@ The `parallelization` field is now an object. Legacy flat `"parallelization": tr
|
|
|
229
229
|
|
|
230
230
|
### Gates Section
|
|
231
231
|
|
|
232
|
-
Controls which confirmation prompts are shown during workflows. Set to `false` to skip specific confirmations (useful for experienced users in
|
|
232
|
+
Controls which confirmation prompts are shown during workflows. Set to `false` to skip specific confirmations (useful for experienced users in auto mode).
|
|
233
233
|
|
|
234
234
|
| Option | Default | Description |
|
|
235
235
|
|--------|---------|-------------|
|
|
@@ -72,6 +72,11 @@ You are now the **learnship verifier** in integration mode. Check cross-phase wi
|
|
|
72
72
|
Every requirement must trace to at least one completed phase. Flag gaps, stubs, and broken integration points.
|
|
73
73
|
</persona_context>
|
|
74
74
|
|
|
75
|
+
> **Announce persona** — print this before proceeding:
|
|
76
|
+
> ```bash
|
|
77
|
+
> printf "\n \033[35m learnship-verifier(In integration mode)\033[0m\n\n"
|
|
78
|
+
> ```
|
|
79
|
+
|
|
75
80
|
Read `@./agents/verifier.md` for the full persona definition. In integration mode, check cross-phase wiring:
|
|
76
81
|
|
|
77
82
|
Read all SUMMARY.md files to understand what each phase exported (APIs, components, utilities).
|
|
@@ -85,6 +85,11 @@ Product lens: Is this worth building? Who needs it? What happens if we don't bui
|
|
|
85
85
|
Be adversarial but constructive — the goal is to find fatal flaws before investing effort.
|
|
86
86
|
</persona_context>
|
|
87
87
|
|
|
88
|
+
> **Announce persona** — print this before proceeding:
|
|
89
|
+
> ```bash
|
|
90
|
+
> printf "\n \033[38;5;208m learnship-challenger(Stress-test this idea with forcing questions)\033[0m\n\n"
|
|
91
|
+
> ```
|
|
92
|
+
|
|
88
93
|
Read `@./agents/challenger.md` for the full persona definition. Ask the 3-5 product forcing questions and answer them based on available context.
|
|
89
94
|
|
|
90
95
|
## Step 3: Engineering Challenge
|
|
@@ -136,6 +141,11 @@ Engineering lens: Can we actually build this? What's the hardest part? What will
|
|
|
136
141
|
Be adversarial but constructive — find technical risks before they become production incidents.
|
|
137
142
|
</persona_context>
|
|
138
143
|
|
|
144
|
+
> **Announce persona** — print this before proceeding:
|
|
145
|
+
> ```bash
|
|
146
|
+
> printf "\n \033[38;5;208m learnship-challenger(In engineering mode)\033[0m\n\n"
|
|
147
|
+
> ```
|
|
148
|
+
|
|
139
149
|
Read `@./agents/challenger.md` for the full persona definition. Switch to the engineering lens and ask the 3-5 engineering forcing questions.
|
|
140
150
|
|
|
141
151
|
## Step 4: Synthesize Verdict
|
|
@@ -181,6 +191,8 @@ AskUserQuestion([
|
|
|
181
191
|
])
|
|
182
192
|
```
|
|
183
193
|
|
|
194
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
195
|
+
|
|
184
196
|
## Step 5: Record Decision
|
|
185
197
|
|
|
186
198
|
If the user makes a decision based on the challenge:
|
|
@@ -115,6 +115,11 @@ You are now the **learnship solution writer**. Capture and document a solution a
|
|
|
115
115
|
Analyze the problem, research the domain, document the fix with full context, and explain the "why" not just the "what."
|
|
116
116
|
</persona_context>
|
|
117
117
|
|
|
118
|
+
> **Announce persona** — print this before proceeding:
|
|
119
|
+
> ```bash
|
|
120
|
+
> printf "\n \033[36m learnship-solution-writer(Capture and document a solution at the moment of solving)\033[0m\n\n"
|
|
121
|
+
> ```
|
|
122
|
+
|
|
118
123
|
Read `@./agents/solution-writer.md` for the full persona definition. Perform all research in sequence:
|
|
119
124
|
|
|
120
125
|
1. Extract from conversation history: problem, symptoms, what was tried, what worked
|
|
@@ -64,6 +64,8 @@ AskUserQuestion([
|
|
|
64
64
|
])
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
68
|
+
|
|
67
69
|
Then ask as follow-ups (one at a time):
|
|
68
70
|
- "What did you expect to happen?"
|
|
69
71
|
- "What have you already tried?"
|
|
@@ -137,6 +139,11 @@ You are now the **learnship debugger**. Diagnose the root cause, not the symptom
|
|
|
137
139
|
One variable at a time. Add logging to track state. Reproduce before fixing. Never guess — verify.
|
|
138
140
|
</persona_context>
|
|
139
141
|
|
|
142
|
+
> **Announce persona** — print this before proceeding:
|
|
143
|
+
> ```bash
|
|
144
|
+
> printf "\n \033[38;5;208m learnship-debugger(Diagnose the root cause, not the symptoms)\033[0m\n\n"
|
|
145
|
+
> ```
|
|
146
|
+
|
|
140
147
|
Read `@./agents/debugger.md` for the full persona definition. As your investigation persona:
|
|
141
148
|
|
|
142
149
|
For the most likely hypothesis, investigate the codebase (read-only):
|
|
@@ -205,6 +212,11 @@ You are now the **learnship executor**. Implement the fix surgically — minimal
|
|
|
205
212
|
Commit atomically. Verify the fix resolves the original issue. Don't improve adjacent code.
|
|
206
213
|
</persona_context>
|
|
207
214
|
|
|
215
|
+
> **Announce persona** — print this before proceeding:
|
|
216
|
+
> ```bash
|
|
217
|
+
> printf "\n \033[33m learnship-executor(Implement the fix surgically — minimal change, maximum precision)\033[0m\n\n"
|
|
218
|
+
> ```
|
|
219
|
+
|
|
208
220
|
Read `@./agents/executor.md` for the full persona definition. Once confirmed, implement the fix:
|
|
209
221
|
- Make only the changes needed to fix the root cause
|
|
210
222
|
- No scope creep — don't fix other things while you're in there
|
|
@@ -55,6 +55,11 @@ You are now the **learnship debugger** in diagnosis mode (read-only — no imple
|
|
|
55
55
|
Diagnose root cause, not symptoms. One variable at a time. Trace from symptom to root cause.
|
|
56
56
|
</persona_context>
|
|
57
57
|
|
|
58
|
+
> **Announce persona** — print this before proceeding:
|
|
59
|
+
> ```bash
|
|
60
|
+
> printf "\n \033[38;5;208m learnship-debugger(In diagnosis mode (read-only — no implementation changes))\033[0m\n\n"
|
|
61
|
+
> ```
|
|
62
|
+
|
|
58
63
|
Read `@./agents/debugger.md` for the full persona definition. For each open issue, in diagnosis mode:
|
|
59
64
|
|
|
60
65
|
1. **Trace the symptom** — follow the user-reported behavior inward through the codebase
|
|
@@ -127,6 +132,8 @@ AskUserQuestion([
|
|
|
127
132
|
])
|
|
128
133
|
```
|
|
129
134
|
|
|
135
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
136
|
+
|
|
130
137
|
## Step 6: Create Fix Plans
|
|
131
138
|
|
|
132
139
|
For each fix group, write a PLAN.md in the phase directory:
|
|
@@ -73,6 +73,8 @@ AskUserQuestion([
|
|
|
73
73
|
])
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
77
|
+
|
|
76
78
|
If "Skip" → exit workflow.
|
|
77
79
|
|
|
78
80
|
If no CONTEXT.md exists but plans already exist for this phase:
|
|
@@ -91,6 +93,8 @@ AskUserQuestion([
|
|
|
91
93
|
])
|
|
92
94
|
```
|
|
93
95
|
|
|
96
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
97
|
+
|
|
94
98
|
## Step 3: Scout Codebase
|
|
95
99
|
|
|
96
100
|
Do a lightweight scan to inform the discussion. Look for:
|
|
@@ -164,6 +168,8 @@ AskUserQuestion([
|
|
|
164
168
|
])
|
|
165
169
|
```
|
|
166
170
|
|
|
171
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
172
|
+
|
|
167
173
|
If "All clear" → skip to Step 6.
|
|
168
174
|
|
|
169
175
|
**For each selected area, discuss:**
|
|
@@ -186,6 +192,8 @@ AskUserQuestion([
|
|
|
186
192
|
])
|
|
187
193
|
```
|
|
188
194
|
|
|
195
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
196
|
+
|
|
189
197
|
3. After 4 questions, ask: "More questions about [area], or move to next?"
|
|
190
198
|
4. If more → ask 4 more, then check again
|
|
191
199
|
|
|
@@ -207,6 +215,8 @@ AskUserQuestion([
|
|
|
207
215
|
])
|
|
208
216
|
```
|
|
209
217
|
|
|
218
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
219
|
+
|
|
210
220
|
<scope_guardrail>
|
|
211
221
|
**No scope creep.** The phase boundary comes from ROADMAP.md and is FIXED. Discussion clarifies HOW to implement what's scoped, never WHETHER to add new capabilities.
|
|
212
222
|
|
|
@@ -77,6 +77,57 @@ Docs to update: [M]
|
|
|
77
77
|
|
|
78
78
|
## Step 4: Write/Update Docs
|
|
79
79
|
|
|
80
|
+
Read `parallelization` from `.planning/config.json` (defaults to `false`).
|
|
81
|
+
|
|
82
|
+
**If `parallelization.enabled` is `true` (subagent mode — Claude Code, OpenCode, Codex):**
|
|
83
|
+
|
|
84
|
+
Spawn a dedicated doc-writer agent for each doc in the queue:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
Task(
|
|
88
|
+
subagent_type="learnship-doc-writer",
|
|
89
|
+
description="Write/update [doc_name]",
|
|
90
|
+
prompt="
|
|
91
|
+
<agent_definition>
|
|
92
|
+
You are a learnship doc writer. Write and update project documentation grounded in the actual codebase.
|
|
93
|
+
Every claim must be verifiable against real code. Read source files BEFORE writing.
|
|
94
|
+
For updates: preserve the author's voice and structure. Only update stale sections.
|
|
95
|
+
</agent_definition>
|
|
96
|
+
|
|
97
|
+
<objective>
|
|
98
|
+
[Create/Update] [doc_name] for this project.
|
|
99
|
+
Read relevant source files first, then write the doc grounded in what you find.
|
|
100
|
+
</objective>
|
|
101
|
+
|
|
102
|
+
<files_to_read>
|
|
103
|
+
- [relevant source files for this doc]
|
|
104
|
+
- [existing doc if update mode]
|
|
105
|
+
</files_to_read>
|
|
106
|
+
|
|
107
|
+
<quality_gate>
|
|
108
|
+
- [ ] Every file path mentioned actually exists
|
|
109
|
+
- [ ] Every command shown actually works
|
|
110
|
+
- [ ] Config examples match the actual schema
|
|
111
|
+
- [ ] No stale references to renamed/removed items
|
|
112
|
+
</quality_gate>
|
|
113
|
+
"
|
|
114
|
+
)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**If `parallelization.enabled` is `false` (sequential mode):**
|
|
118
|
+
|
|
119
|
+
<persona_context>
|
|
120
|
+
You are now the **learnship doc writer**. Write documentation grounded in the actual codebase.
|
|
121
|
+
Every claim must be verifiable. Read source files BEFORE writing. For updates: preserve the author's voice, only fix stale sections.
|
|
122
|
+
</persona_context>
|
|
123
|
+
|
|
124
|
+
> **Announce persona** — print this before proceeding:
|
|
125
|
+
> ```bash
|
|
126
|
+
> printf "\n \033[36m learnship-doc-writer(Write documentation grounded in the actual codebase)\033[0m\n\n"
|
|
127
|
+
> ```
|
|
128
|
+
|
|
129
|
+
Read `@./agents/doc-writer.md` for the full persona definition.
|
|
130
|
+
|
|
80
131
|
For each doc in the queue:
|
|
81
132
|
|
|
82
133
|
### Create mode
|
|
@@ -94,6 +145,47 @@ git add [doc path]
|
|
|
94
145
|
|
|
95
146
|
## Step 5: Verify Docs Against Codebase
|
|
96
147
|
|
|
148
|
+
**If `parallelization.enabled` is `true` (subagent mode):**
|
|
149
|
+
|
|
150
|
+
Spawn a doc-verifier agent:
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
Task(
|
|
154
|
+
subagent_type="learnship-doc-verifier",
|
|
155
|
+
description="Verify documentation against codebase",
|
|
156
|
+
prompt="
|
|
157
|
+
<agent_definition>
|
|
158
|
+
You are a learnship doc verifier. Verify that documentation matches the live codebase.
|
|
159
|
+
Check file paths, commands, config examples, API endpoints. Flag stale, missing, or incorrect content.
|
|
160
|
+
Be thorough — false negatives (missed stale docs) are worse than false positives.
|
|
161
|
+
</agent_definition>
|
|
162
|
+
|
|
163
|
+
<objective>
|
|
164
|
+
Verify all written/updated docs against the live codebase.
|
|
165
|
+
Check every factual claim. Fix simple issues directly. Flag complex issues for manual review.
|
|
166
|
+
</objective>
|
|
167
|
+
|
|
168
|
+
<files_to_read>
|
|
169
|
+
- [list of docs written/updated in Step 4]
|
|
170
|
+
</files_to_read>
|
|
171
|
+
"
|
|
172
|
+
)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**If `parallelization.enabled` is `false` (sequential mode):**
|
|
176
|
+
|
|
177
|
+
<persona_context>
|
|
178
|
+
You are now the **learnship doc verifier**. Verify documentation matches the live codebase.
|
|
179
|
+
Check file paths, commands, config examples, API endpoints. Catch stale, missing, or incorrect content.
|
|
180
|
+
</persona_context>
|
|
181
|
+
|
|
182
|
+
> **Announce persona** — print this before proceeding:
|
|
183
|
+
> ```bash
|
|
184
|
+
> printf "\n \033[32m learnship-doc-verifier(Verify documentation matches the live codebase)\033[0m\n\n"
|
|
185
|
+
> ```
|
|
186
|
+
|
|
187
|
+
Read `@./agents/doc-verifier.md` for the full persona definition.
|
|
188
|
+
|
|
97
189
|
For each written/updated doc, verify factual claims:
|
|
98
190
|
|
|
99
191
|
- File paths mentioned in docs actually exist
|
|
@@ -202,6 +202,11 @@ Read task files, action, verify, and done fields. Implement exactly what the act
|
|
|
202
202
|
Commit atomically after each task. Never skip verification. Never modify code outside the task scope.
|
|
203
203
|
</persona_context>
|
|
204
204
|
|
|
205
|
+
> **Announce persona** — print this before proceeding:
|
|
206
|
+
> ```bash
|
|
207
|
+
> printf "\n \033[33m learnship-executor(Implement code from plans, one task at a time)\033[0m\n\n"
|
|
208
|
+
> ```
|
|
209
|
+
|
|
205
210
|
Read `@./agents/executor.md` for the full persona definition. For each plan in the wave:
|
|
206
211
|
|
|
207
212
|
Read the full plan file. Execute each task in sequence:
|
|
@@ -317,6 +322,11 @@ Every must_have from the plan must be met. Success criteria must be observable a
|
|
|
317
322
|
Flag gaps, missing coverage, and broken tests.
|
|
318
323
|
</persona_context>
|
|
319
324
|
|
|
325
|
+
> **Announce persona** — print this before proceeding:
|
|
326
|
+
> ```bash
|
|
327
|
+
> printf "\n \033[35m learnship-verifier(Check implementation against plan requirements)\033[0m\n\n"
|
|
328
|
+
> ```
|
|
329
|
+
|
|
320
330
|
Read `@./agents/verifier.md` for the full persona definition. Check:
|
|
321
331
|
- Do the `must_haves` from each plan's frontmatter match reality in the codebase?
|
|
322
332
|
- Are all requirement IDs for this phase accounted for?
|
|
@@ -96,6 +96,11 @@ Read task files, action, verify, and done fields. Implement exactly what the act
|
|
|
96
96
|
Commit atomically after each task. Never skip verification. Never modify code outside the task scope.
|
|
97
97
|
</persona_context>
|
|
98
98
|
|
|
99
|
+
> **Announce persona** — print this before proceeding:
|
|
100
|
+
> ```bash
|
|
101
|
+
> printf "\n \033[33m learnship-executor(Implement code from the plan, one task at a time)\033[0m\n\n"
|
|
102
|
+
> ```
|
|
103
|
+
|
|
99
104
|
Read `@./agents/executor.md` for the full persona definition. Execute each task in the plan sequentially:
|
|
100
105
|
|
|
101
106
|
1. Read the task's `<files>`, `<action>`, `<verify>`, and `<done>` fields
|
|
@@ -178,6 +178,6 @@ Edit project settings with `/settings` or directly:
|
|
|
178
178
|
cat .planning/config.json
|
|
179
179
|
```
|
|
180
180
|
|
|
181
|
-
Key settings: `mode` (
|
|
181
|
+
Key settings: `mode` (auto/interactive), `model_profile` (quality/balanced/budget), `learning_mode` (auto/manual).
|
|
182
182
|
|
|
183
183
|
See `README.md` for the full configuration reference.
|
|
@@ -89,6 +89,8 @@ AskUserQuestion([
|
|
|
89
89
|
])
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
93
|
+
|
|
92
94
|
If yes: read `parallelization` from `.planning/config.json`. If `parallelization.enabled` is true, spawn a researcher agent:
|
|
93
95
|
```
|
|
94
96
|
Task(
|
|
@@ -112,6 +114,11 @@ You are now the **learnship researcher**. Do a quick research pass on the ideati
|
|
|
112
114
|
Use WebSearch to discover current state. Tag confidence levels. Share findings before ideation begins.
|
|
113
115
|
</persona_context>
|
|
114
116
|
|
|
117
|
+
> **Announce persona** — print this before proceeding:
|
|
118
|
+
> ```bash
|
|
119
|
+
> printf "\n \033[36m learnship-researcher(Do a quick research pass on the ideation domain)\033[0m\n\n"
|
|
120
|
+
> ```
|
|
121
|
+
|
|
115
122
|
If parallelization is false, read `@./agents/researcher.md` for the full persona definition. Do a quick research pass. Share findings and continue.
|
|
116
123
|
|
|
117
124
|
**Crystallize outputs (after 3-6 exchanges):**
|
|
@@ -207,6 +214,11 @@ You are now the **learnship ideation agent**. Generate ideas across multiple cre
|
|
|
207
214
|
Quantity first, quality later. Push past the obvious. Use contrarian thinking and cross-domain analogies.
|
|
208
215
|
</persona_context>
|
|
209
216
|
|
|
217
|
+
> **Announce persona** — print this before proceeding:
|
|
218
|
+
> ```bash
|
|
219
|
+
> printf "\n \033[35m learnship-ideation-agent(Generate ideas across multiple creative frames)\033[0m\n\n"
|
|
220
|
+
> ```
|
|
221
|
+
|
|
210
222
|
Read `@./agents/ideation-agent.md` for the full persona definition. Generate 15-25 ideas across all four frames sequentially.
|
|
211
223
|
|
|
212
224
|
## Step 5: Deduplicate & Filter
|
|
@@ -119,6 +119,8 @@ AskUserQuestion([
|
|
|
119
119
|
])
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
123
|
+
|
|
122
124
|
Note: Any corrections discussed here are not automatically captured. Run `discuss-phase [N]` to write them to a CONTEXT.md that planners will read.
|
|
123
125
|
|
|
124
126
|
---
|
|
@@ -52,6 +52,11 @@ You are now the **learnship researcher** in codebase mapping mode. Explore the c
|
|
|
52
52
|
Document what exists: architecture, dependencies, patterns, and concerns. Be specific — cite file paths.
|
|
53
53
|
</persona_context>
|
|
54
54
|
|
|
55
|
+
> **Announce persona** — print this before proceeding:
|
|
56
|
+
> ```bash
|
|
57
|
+
> printf "\n \033[36m learnship-researcher(In codebase mapping mode)\033[0m\n\n"
|
|
58
|
+
> ```
|
|
59
|
+
|
|
55
60
|
Read `@./agents/researcher.md` for the full persona definition. For each dimension below, explore the codebase thoroughly and write the document directly.
|
|
56
61
|
|
|
57
62
|
```
|
|
@@ -226,6 +226,11 @@ Use WebSearch for ecosystem discovery (always include current year), WebFetch fo
|
|
|
226
226
|
Tag confidence: HIGH/MEDIUM/LOW. Be comprehensive but opinionated.
|
|
227
227
|
</persona_context>
|
|
228
228
|
|
|
229
|
+
> **Announce persona** — print this before proceeding:
|
|
230
|
+
> ```bash
|
|
231
|
+
> printf "\n \033[36m learnship-project-researcher(Your training data is stale — verify before asserting)\033[0m\n\n"
|
|
232
|
+
> ```
|
|
233
|
+
|
|
229
234
|
Read `@./agents/project-researcher.md` for the full persona definition. In project research mode, investigate the new feature domain:
|
|
230
235
|
- Focus ONLY on the new capabilities — not the existing codebase
|
|
231
236
|
- Write STACK.md, FEATURES.md, ARCHITECTURE.md, PITFALLS.md to `.planning/research/`
|
|
@@ -257,6 +262,11 @@ Every v1 requirement maps to exactly one phase. Every phase has observable succe
|
|
|
257
262
|
Dependencies drive order. Phases should be deliverable.
|
|
258
263
|
</persona_context>
|
|
259
264
|
|
|
265
|
+
> **Announce persona** — print this before proceeding:
|
|
266
|
+
> ```bash
|
|
267
|
+
> printf "\n \033[35m learnship-roadmapper(Transform requirements into a phased roadmap)\033[0m\n\n"
|
|
268
|
+
> ```
|
|
269
|
+
|
|
260
270
|
Read `@./agents/roadmapper.md` for the full persona definition. Read PROJECT.md, REQUIREMENTS.md, research (if exists).
|
|
261
271
|
|
|
262
272
|
Create a new `.planning/ROADMAP.md` with phases for this milestone only. Map every v1 requirement to exactly one phase.
|
|
@@ -121,10 +121,14 @@ Note the tech stack, key directories, and any README content internally. Use thi
|
|
|
121
121
|
|
|
122
122
|
## Step 2: Configuration
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
> **🔴 MANDATORY INTERACTIVE QUESTIONS — You MUST present each round as a blocking question using `AskUserQuestion` (or your platform's equivalent: `ask_user_question` on Windsurf, `ask_user` on Gemini, `request_user_input` on Codex). Each round is a SEPARATE blocking call. Do NOT combine all rounds into one. Do NOT render questions as plain text or markdown lists — you MUST use the interactive question tool so the user clicks options. Wait for the user's reply after EACH round before showing the next round.**
|
|
125
|
+
>
|
|
126
|
+
> **🛑 FORBIDDEN:** Do NOT present all questions at once as a text wall. Do NOT skip any question. Do NOT invent answers. Do NOT proceed to the config.json write step until ALL 4 rounds have been answered by the user.
|
|
125
127
|
|
|
126
128
|
**Round 1 — Core settings (4 questions):**
|
|
127
129
|
|
|
130
|
+
> Present these 4 questions as a SINGLE blocking `AskUserQuestion` call. STOP and wait for the user's reply before proceeding to Round 2.
|
|
131
|
+
|
|
128
132
|
```
|
|
129
133
|
AskUserQuestion([
|
|
130
134
|
{
|
|
@@ -132,7 +136,7 @@ AskUserQuestion([
|
|
|
132
136
|
question: "How do you want to work?",
|
|
133
137
|
multiSelect: false,
|
|
134
138
|
options: [
|
|
135
|
-
{ label: "
|
|
139
|
+
{ label: "Auto (Recommended)", description: "Auto-approve steps, just execute" },
|
|
136
140
|
{ label: "Interactive", description: "Confirm at each step" }
|
|
137
141
|
]
|
|
138
142
|
},
|
|
@@ -168,8 +172,12 @@ AskUserQuestion([
|
|
|
168
172
|
])
|
|
169
173
|
```
|
|
170
174
|
|
|
175
|
+
> 🛑 STOP. Wait for the user's Round 1 reply before continuing.
|
|
176
|
+
|
|
171
177
|
**Round 2 — Workflow agents (5 questions):**
|
|
172
178
|
|
|
179
|
+
> Present these 5 questions as a SINGLE blocking `AskUserQuestion` call. STOP and wait for the user's reply before proceeding to Round 3.
|
|
180
|
+
|
|
173
181
|
```
|
|
174
182
|
AskUserQuestion([
|
|
175
183
|
{
|
|
@@ -220,8 +228,12 @@ AskUserQuestion([
|
|
|
220
228
|
])
|
|
221
229
|
```
|
|
222
230
|
|
|
231
|
+
> 🛑 STOP. Wait for the user's Round 2 reply before continuing.
|
|
232
|
+
|
|
223
233
|
**Round 3 — Pipeline & git (4 questions):**
|
|
224
234
|
|
|
235
|
+
> Present these 4 questions as a SINGLE blocking `AskUserQuestion` call. STOP and wait for the user's reply before proceeding to Round 4.
|
|
236
|
+
|
|
225
237
|
```
|
|
226
238
|
AskUserQuestion([
|
|
227
239
|
{
|
|
@@ -264,13 +276,35 @@ AskUserQuestion([
|
|
|
264
276
|
])
|
|
265
277
|
```
|
|
266
278
|
|
|
279
|
+
> 🛑 STOP. Wait for the user's Round 3 reply before continuing.
|
|
280
|
+
|
|
267
281
|
<!-- LEARNSHIP_PARALLEL_BLOCK -->
|
|
268
282
|
|
|
283
|
+
> 🛑 STOP. Wait for the user's Round 4 reply (parallelization) before continuing.
|
|
284
|
+
|
|
285
|
+
**Now create `.planning/config.json`** — use EXACTLY this schema. Map the user's answers to these keys. Do NOT invent keys. Do NOT use flat keys like `working_style`, `model_tier`, `platform`, `milestone`, or `phases` — those are WRONG.
|
|
286
|
+
|
|
287
|
+
**Key mapping from questions to config:**
|
|
288
|
+
- Working Style → `"mode"`: `"auto"` or `"interactive"`
|
|
289
|
+
- Granularity → `"granularity"`: `"coarse"`, `"standard"`, or `"fine"`
|
|
290
|
+
- Learning Partner → `"learning_mode"`: `"auto"` or `"manual"`
|
|
291
|
+
- AI Models → `"model_profile"`: `"balanced"`, `"quality"`, or `"budget"`
|
|
292
|
+
- Research → `"workflow.research"`: `true` or `false`
|
|
293
|
+
- Plan Check → `"workflow.plan_check"`: `true` or `false`
|
|
294
|
+
- Verifier → `"workflow.verifier"`: `true` or `false`
|
|
295
|
+
- Review → `"workflow.review"`: `true` or `false`
|
|
296
|
+
- Solutions Search → `"workflow.solutions_search"`: `true` or `false`
|
|
297
|
+
- TDD → `"test_first"`: `true` or `false`
|
|
298
|
+
- Ship Pipeline → `"ship.auto_test"`, `"ship.conventional_commits"`, `"ship.pr_template"`: each `true` or `false`
|
|
299
|
+
- Git Tracking → `"planning.commit_docs"`: `true` or `false`
|
|
300
|
+
- Commit Mode → `"planning.commit_mode"`: `"auto"` or `"manual"`
|
|
301
|
+
- Parallel Execution → `"parallelization.enabled"`: `true` or `false`
|
|
302
|
+
|
|
269
303
|
Create `.planning/config.json` with all settings:
|
|
270
304
|
|
|
271
305
|
```json
|
|
272
306
|
{
|
|
273
|
-
"mode": "
|
|
307
|
+
"mode": "auto|interactive",
|
|
274
308
|
"granularity": "coarse|standard|fine",
|
|
275
309
|
"model_profile": "quality|balanced|budget",
|
|
276
310
|
"learning_mode": "auto|manual",
|
|
@@ -332,6 +366,38 @@ Create `.planning/config.json` with all settings:
|
|
|
332
366
|
|
|
333
367
|
**Note:** The `parallelization` field is now an object (not a flat boolean). Legacy flat `"parallelization": true` is still honored for backward compatibility. The `gates` and `safety` sections use sensible defaults — only ask users about them if they specifically want to customize.
|
|
334
368
|
|
|
369
|
+
**Verify config.json was written correctly:**
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
node -e "
|
|
373
|
+
const fs=require('fs');
|
|
374
|
+
try{
|
|
375
|
+
const c=JSON.parse(fs.readFileSync('.planning/config.json','utf8'));
|
|
376
|
+
const errs=[];
|
|
377
|
+
if(!['auto','interactive'].includes(c.mode)) errs.push('mode must be auto|interactive, got: '+c.mode);
|
|
378
|
+
if(!['coarse','standard','fine'].includes(c.granularity)) errs.push('granularity must be coarse|standard|fine');
|
|
379
|
+
if(!['quality','balanced','budget'].includes(c.model_profile)) errs.push('model_profile must be quality|balanced|budget');
|
|
380
|
+
if(!['auto','manual'].includes(c.learning_mode)) errs.push('learning_mode must be auto|manual');
|
|
381
|
+
if(typeof c.test_first!=='boolean') errs.push('test_first must be boolean');
|
|
382
|
+
if(!c.planning||!['auto','manual'].includes(c.planning.commit_mode)) errs.push('planning.commit_mode must be auto|manual');
|
|
383
|
+
if(!c.workflow||typeof c.workflow.research!=='boolean') errs.push('workflow.research must be boolean');
|
|
384
|
+
if(!c.workflow||typeof c.workflow.plan_check!=='boolean') errs.push('workflow.plan_check must be boolean');
|
|
385
|
+
if(!c.workflow||typeof c.workflow.verifier!=='boolean') errs.push('workflow.verifier must be boolean');
|
|
386
|
+
if(!c.workflow||typeof c.workflow.review!=='boolean') errs.push('workflow.review must be boolean');
|
|
387
|
+
if(!c.parallelization||typeof c.parallelization.enabled!=='boolean') errs.push('parallelization.enabled must be boolean');
|
|
388
|
+
if(!c.ship||typeof c.ship.auto_test!=='boolean') errs.push('ship.auto_test must be boolean');
|
|
389
|
+
const bad=['working_style','model_tier','platform','milestone','phases','commit_mode'];
|
|
390
|
+
for(const k of bad){if(k in c)errs.push('FORBIDDEN top-level key: '+k+' — use the nested schema');}
|
|
391
|
+
if(errs.length){console.log('CONFIG_INVALID');errs.forEach(e=>console.log(' - '+e));}
|
|
392
|
+
else console.log('CONFIG_VALID');
|
|
393
|
+
}catch(e){console.log('CONFIG_MISSING_OR_CORRUPT: '+e.message);}
|
|
394
|
+
"
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**If `CONFIG_INVALID` or `CONFIG_MISSING_OR_CORRUPT`:** The config file is wrong. Fix it to match the schema above exactly, then re-run the verification. Do NOT proceed until it passes.
|
|
398
|
+
|
|
399
|
+
**If `CONFIG_VALID`:** Continue.
|
|
400
|
+
|
|
335
401
|
If `planning.commit_docs` is false, add `.planning/` to `.gitignore`:
|
|
336
402
|
```bash
|
|
337
403
|
echo ".planning/" >> .gitignore
|
|
@@ -520,13 +586,15 @@ Spawn 4 parallel researcher agents — one per research dimension. Each agent wr
|
|
|
520
586
|
|
|
521
587
|
```
|
|
522
588
|
Task(
|
|
523
|
-
subagent_type="learnship-researcher",
|
|
589
|
+
subagent_type="learnship-project-researcher",
|
|
524
590
|
description="Stack research",
|
|
525
591
|
prompt="
|
|
526
592
|
<agent_definition>
|
|
527
|
-
You are a learnship researcher.
|
|
528
|
-
|
|
593
|
+
You are a learnship project researcher. You answer 'What does this domain ecosystem look like?' and produce research files that inform roadmap creation.
|
|
594
|
+
Your training data is 6-18 months stale — treat it as hypothesis, not fact. Verify before asserting.
|
|
595
|
+
Flag uncertainty with confidence levels (HIGH/MEDIUM/LOW). Be prescriptive: 'Use X because Y' not 'Options are X, Y, Z.'
|
|
529
596
|
Tool priority: 1. WebSearch (ecosystem discovery — always include current year), 2. WebFetch (official docs), 3. Codebase scan.
|
|
597
|
+
Investigation, not confirmation — gather evidence first, recommend second.
|
|
530
598
|
</agent_definition>
|
|
531
599
|
|
|
532
600
|
<objective>
|
|
@@ -566,13 +634,15 @@ Task(
|
|
|
566
634
|
)
|
|
567
635
|
|
|
568
636
|
Task(
|
|
569
|
-
subagent_type="learnship-researcher",
|
|
637
|
+
subagent_type="learnship-project-researcher",
|
|
570
638
|
description="Features research",
|
|
571
639
|
prompt="
|
|
572
640
|
<agent_definition>
|
|
573
|
-
You are a learnship researcher.
|
|
574
|
-
|
|
641
|
+
You are a learnship project researcher. You answer 'What does this domain ecosystem look like?' and produce research files that inform roadmap creation.
|
|
642
|
+
Your training data is 6-18 months stale — treat it as hypothesis, not fact. Verify before asserting.
|
|
643
|
+
Flag uncertainty with confidence levels (HIGH/MEDIUM/LOW). Be prescriptive: 'Use X because Y' not 'Options are X, Y, Z.'
|
|
575
644
|
Tool priority: 1. WebSearch (ecosystem discovery — always include current year), 2. WebFetch (official docs), 3. Codebase scan.
|
|
645
|
+
Investigation, not confirmation — gather evidence first, recommend second.
|
|
576
646
|
</agent_definition>
|
|
577
647
|
|
|
578
648
|
<objective>
|
|
@@ -612,13 +682,15 @@ Task(
|
|
|
612
682
|
)
|
|
613
683
|
|
|
614
684
|
Task(
|
|
615
|
-
subagent_type="learnship-researcher",
|
|
685
|
+
subagent_type="learnship-project-researcher",
|
|
616
686
|
description="Architecture research",
|
|
617
687
|
prompt="
|
|
618
688
|
<agent_definition>
|
|
619
|
-
You are a learnship researcher.
|
|
620
|
-
|
|
689
|
+
You are a learnship project researcher. You answer 'What does this domain ecosystem look like?' and produce research files that inform roadmap creation.
|
|
690
|
+
Your training data is 6-18 months stale — treat it as hypothesis, not fact. Verify before asserting.
|
|
691
|
+
Flag uncertainty with confidence levels (HIGH/MEDIUM/LOW). Be prescriptive: 'Use X because Y' not 'Options are X, Y, Z.'
|
|
621
692
|
Tool priority: 1. WebSearch (ecosystem discovery — always include current year), 2. WebFetch (official docs), 3. Codebase scan.
|
|
693
|
+
Investigation, not confirmation — gather evidence first, recommend second.
|
|
622
694
|
</agent_definition>
|
|
623
695
|
|
|
624
696
|
<objective>
|
|
@@ -658,13 +730,15 @@ Task(
|
|
|
658
730
|
)
|
|
659
731
|
|
|
660
732
|
Task(
|
|
661
|
-
subagent_type="learnship-researcher",
|
|
733
|
+
subagent_type="learnship-project-researcher",
|
|
662
734
|
description="Pitfalls research",
|
|
663
735
|
prompt="
|
|
664
736
|
<agent_definition>
|
|
665
|
-
You are a learnship researcher.
|
|
666
|
-
|
|
737
|
+
You are a learnship project researcher. You answer 'What does this domain ecosystem look like?' and produce research files that inform roadmap creation.
|
|
738
|
+
Your training data is 6-18 months stale — treat it as hypothesis, not fact. Verify before asserting.
|
|
739
|
+
Flag uncertainty with confidence levels (HIGH/MEDIUM/LOW). Be prescriptive: 'Use X because Y' not 'Options are X, Y, Z.'
|
|
667
740
|
Tool priority: 1. WebSearch (ecosystem discovery — always include current year), 2. WebFetch (official docs), 3. Codebase scan.
|
|
741
|
+
Investigation, not confirmation — gather evidence first, recommend second.
|
|
668
742
|
</agent_definition>
|
|
669
743
|
|
|
670
744
|
<objective>
|
|
@@ -708,12 +782,19 @@ After all 4 agents complete, spawn a synthesizer to create SUMMARY.md from the o
|
|
|
708
782
|
|
|
709
783
|
```
|
|
710
784
|
Task(
|
|
711
|
-
subagent_type="learnship-
|
|
712
|
-
description="Synthesize research",
|
|
785
|
+
subagent_type="learnship-research-synthesizer",
|
|
786
|
+
description="Synthesize research into SUMMARY.md",
|
|
713
787
|
prompt="
|
|
788
|
+
<agent_definition>
|
|
789
|
+
You are a learnship research synthesizer. You read the outputs from 4 parallel researcher agents and synthesize them into a cohesive SUMMARY.md.
|
|
790
|
+
Synthesize, don't concatenate — integrate findings across all 4 files into a unified narrative.
|
|
791
|
+
Be opinionated: the roadmapper needs clear recommendations, not wishy-washy summaries.
|
|
792
|
+
Derive roadmap implications from combined research. Identify confidence levels and gaps.
|
|
793
|
+
</agent_definition>
|
|
794
|
+
|
|
714
795
|
<objective>
|
|
715
796
|
Synthesize the 4 research files into a single SUMMARY.md.
|
|
716
|
-
Read all 4 files, extract the key findings, and write a cohesive summary.
|
|
797
|
+
Read all 4 files, extract the key findings, and write a cohesive summary that informs roadmap creation.
|
|
717
798
|
</objective>
|
|
718
799
|
|
|
719
800
|
<files_to_read>
|
|
@@ -723,10 +804,23 @@ Task(
|
|
|
723
804
|
- .planning/research/PITFALLS.md
|
|
724
805
|
</files_to_read>
|
|
725
806
|
|
|
807
|
+
<downstream_consumer>
|
|
808
|
+
Your SUMMARY.md is consumed by the roadmapper which uses it to structure phases.
|
|
809
|
+
Executive Summary → quick understanding. Key Findings → tech decisions. Implications → phase structure.
|
|
810
|
+
Research Flags → which phases need deeper research. Gaps → what to flag for validation.
|
|
811
|
+
</downstream_consumer>
|
|
812
|
+
|
|
726
813
|
<output>
|
|
727
814
|
Write to: .planning/research/SUMMARY.md
|
|
728
|
-
Required sections: ## Recommended Stack, ## Table Stakes Features, ## Key Architecture Decisions, ## Top Pitfalls
|
|
815
|
+
Required sections: ## Executive Summary, ## Recommended Stack, ## Table Stakes Features, ## Key Architecture Decisions, ## Top Pitfalls, ## Implications for Roadmap, ## Confidence Assessment, ## Gaps
|
|
729
816
|
</output>
|
|
817
|
+
|
|
818
|
+
<quality_gate>
|
|
819
|
+
- [ ] Synthesized, not concatenated — findings are integrated
|
|
820
|
+
- [ ] Opinionated — clear recommendations emerge
|
|
821
|
+
- [ ] Actionable — roadmapper can structure phases from implications
|
|
822
|
+
- [ ] Honest — confidence levels reflect actual source quality
|
|
823
|
+
</quality_gate>
|
|
730
824
|
"
|
|
731
825
|
)
|
|
732
826
|
```
|
|
@@ -744,6 +838,11 @@ Investigation, not confirmation — gather evidence first, recommend second.
|
|
|
744
838
|
Your research feeds the roadmapper: STACK.md → tech decisions, FEATURES.md → what to build, ARCHITECTURE.md → system structure, PITFALLS.md → risk flags.
|
|
745
839
|
</persona_context>
|
|
746
840
|
|
|
841
|
+
> **Announce persona** — print this before proceeding:
|
|
842
|
+
> ```bash
|
|
843
|
+
> printf "\n \033[36m learnship-project-researcher(Your training data is 6–18 months stale — verify before asserting)\033[0m\n\n"
|
|
844
|
+
> ```
|
|
845
|
+
|
|
747
846
|
Read `@./agents/project-researcher.md` for the full persona definition.
|
|
748
847
|
|
|
749
848
|
**Step 5b-pre — Online research (BEFORE writing any files).**
|
|
@@ -919,6 +1018,11 @@ Goal-backward: start from what the user needs, work backward to what must be bui
|
|
|
919
1018
|
Dependencies drive order. Phases should be deliverable — each produces something testable.
|
|
920
1019
|
</persona_context>
|
|
921
1020
|
|
|
1021
|
+
> **Announce persona** — print this before proceeding:
|
|
1022
|
+
> ```bash
|
|
1023
|
+
> printf "\n \033[35m learnship-roadmapper(Transform requirements into a phased roadmap)\033[0m\n\n"
|
|
1024
|
+
> ```
|
|
1025
|
+
|
|
922
1026
|
Read `@./agents/roadmapper.md` for the full persona definition.
|
|
923
1027
|
|
|
924
1028
|
1. Derive phases from requirements (don't impose structure — let requirements drive phases)
|
|
@@ -107,13 +107,15 @@ Display:
|
|
|
107
107
|
Spawn a dedicated researcher agent:
|
|
108
108
|
```
|
|
109
109
|
Task(
|
|
110
|
-
subagent_type="learnship-researcher",
|
|
110
|
+
subagent_type="learnship-phase-researcher",
|
|
111
111
|
description="Phase [phase_number] research",
|
|
112
112
|
prompt="
|
|
113
113
|
<agent_definition>
|
|
114
|
-
You are a learnship researcher.
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
You are a learnship phase researcher. You answer 'What do I need to know to PLAN this phase well?' and produce a single RESEARCH.md that the planner consumes.
|
|
115
|
+
Your training data is 6-18 months stale — treat it as hypothesis, not fact. Verify before asserting.
|
|
116
|
+
Flag uncertainty with confidence levels (HIGH/MEDIUM/LOW). Be prescriptive: 'Use X because Y' not 'Options are X, Y, Z.'
|
|
117
|
+
Tool priority: 1. WebSearch (implementation patterns — always include current year), 2. WebFetch (official docs), 3. Codebase scan (existing patterns to reuse).
|
|
118
|
+
Investigation, not confirmation — gather evidence first, recommend second.
|
|
117
119
|
</agent_definition>
|
|
118
120
|
|
|
119
121
|
<objective>
|
|
@@ -154,6 +156,11 @@ Tag every claim: [VERIFIED: source], [CITED: url], or [ASSUMED]. Never present a
|
|
|
154
156
|
Use WebSearch for implementation patterns, WebFetch for official docs, codebase scan for existing patterns to reuse.
|
|
155
157
|
</persona_context>
|
|
156
158
|
|
|
159
|
+
> **Announce persona** — print this before proceeding:
|
|
160
|
+
> ```bash
|
|
161
|
+
> printf "\n \033[34m learnship-phase-researcher(Your training data is stale — verify before asserting)\033[0m\n\n"
|
|
162
|
+
> ```
|
|
163
|
+
|
|
157
164
|
Read `@./agents/phase-researcher.md` for the full persona definition. Investigate how to implement this phase.
|
|
158
165
|
|
|
159
166
|
**Online research first.** Before writing anything, run at least 3 WebSearch queries relevant to this phase's domain. Use WebFetch to read official docs for any libraries discovered. Then read:
|
|
@@ -233,6 +240,11 @@ Each plan covers one logical unit of work. Tasks use XML format. Include YAML fr
|
|
|
233
240
|
Right-size plans: too small = overhead, too large = risk. Aim for plans completable in one focused session.
|
|
234
241
|
</persona_context>
|
|
235
242
|
|
|
243
|
+
> **Announce persona** — print this before proceeding:
|
|
244
|
+
> ```bash
|
|
245
|
+
> printf "\n \033[32m learnship-planner(Create implementation plans that are executable in a single context window)\033[0m\n\n"
|
|
246
|
+
> ```
|
|
247
|
+
|
|
236
248
|
Read `@./agents/planner.md` for the full persona definition. Read all available context:
|
|
237
249
|
- `.planning/STATE.md`
|
|
238
250
|
- `.planning/ROADMAP.md`
|
|
@@ -300,12 +312,18 @@ If still failing after 3 iterations: present issues and ask — **Force proceed*
|
|
|
300
312
|
**If `parallelization` is `false` (sequential mode):**
|
|
301
313
|
|
|
302
314
|
<persona_context>
|
|
303
|
-
You are now the **learnship
|
|
315
|
+
You are now the **learnship plan checker**. Verify plans are complete, correct, and executable.
|
|
304
316
|
Every v1 requirement must map to at least one plan task. Success criteria must be observable and testable.
|
|
305
317
|
Flag gaps, missing coverage, unrealistic estimates, and circular dependencies.
|
|
318
|
+
Check: phase goal coverage, requirement IDs, CONTEXT.md decisions honored, task completeness, wave/dependency correctness.
|
|
306
319
|
</persona_context>
|
|
307
320
|
|
|
308
|
-
|
|
321
|
+
> **Announce persona** — print this before proceeding:
|
|
322
|
+
> ```bash
|
|
323
|
+
> printf "\n \033[36m learnship-plan-checker(Verify plans are complete, correct, and executable)\033[0m\n\n"
|
|
324
|
+
> ```
|
|
325
|
+
|
|
326
|
+
Read `@./agents/plan-checker.md` for the full persona definition. Check the plans against:
|
|
309
327
|
- The phase goal from ROADMAP.md
|
|
310
328
|
- All requirement IDs assigned to this phase
|
|
311
329
|
- CONTEXT.md decisions (are they honored?)
|
|
@@ -91,6 +91,8 @@ AskUserQuestion([
|
|
|
91
91
|
])
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
95
|
+
|
|
94
96
|
If "All clear" → skip to Step 4.
|
|
95
97
|
|
|
96
98
|
For each selected area, ask 1-2 focused questions with concrete options using structured questions. Max 2 questions per area — keep it lightweight.
|
|
@@ -145,6 +147,11 @@ Use WebSearch for current best practices, WebFetch for official docs, codebase s
|
|
|
145
147
|
Tag confidence: HIGH/MEDIUM/LOW. Investigation, not confirmation.
|
|
146
148
|
</persona_context>
|
|
147
149
|
|
|
150
|
+
> **Announce persona** — print this before proceeding:
|
|
151
|
+
> ```bash
|
|
152
|
+
> printf "\n \033[36m learnship-researcher(Your training data is stale — verify before asserting)\033[0m\n\n"
|
|
153
|
+
> ```
|
|
154
|
+
|
|
148
155
|
Read `@./agents/researcher.md` for the full persona definition. Do a focused research pass on the task:
|
|
149
156
|
- What libraries or approaches are relevant?
|
|
150
157
|
- What pitfalls should the implementation avoid?
|
|
@@ -159,6 +166,11 @@ You are now the **learnship planner**. Create a focused implementation plan.
|
|
|
159
166
|
Single plan with 1-3 tasks. Each task must be completable in one context window. Include must_haves.
|
|
160
167
|
</persona_context>
|
|
161
168
|
|
|
169
|
+
> **Announce persona** — print this before proceeding:
|
|
170
|
+
> ```bash
|
|
171
|
+
> printf "\n \033[32m learnship-planner(Create a focused implementation plan)\033[0m\n\n"
|
|
172
|
+
> ```
|
|
173
|
+
|
|
162
174
|
Read `@./agents/planner.md` for the full persona definition. Read:
|
|
163
175
|
- `.planning/STATE.md`
|
|
164
176
|
- CONTEXT.md if it exists (from `--discuss`)
|
|
@@ -195,6 +207,11 @@ You are now the **learnship verifier**. Check the plan against the task descript
|
|
|
195
207
|
Flag gaps, missing coverage, and unrealistic scope.
|
|
196
208
|
</persona_context>
|
|
197
209
|
|
|
210
|
+
> **Announce persona** — print this before proceeding:
|
|
211
|
+
> ```bash
|
|
212
|
+
> printf "\n \033[35m learnship-verifier(Check the plan against the task description)\033[0m\n\n"
|
|
213
|
+
> ```
|
|
214
|
+
|
|
198
215
|
Read `@./agents/verifier.md` for the full persona definition. Verify the plan against the task description:
|
|
199
216
|
- Does the plan address the task description?
|
|
200
217
|
- Do tasks have files, action, verify, done fields?
|
|
@@ -212,6 +229,11 @@ You are now the **learnship executor**. Implement code from the plan, one task a
|
|
|
212
229
|
Read task files, action, verify, and done fields. Commit atomically after each task.
|
|
213
230
|
</persona_context>
|
|
214
231
|
|
|
232
|
+
> **Announce persona** — print this before proceeding:
|
|
233
|
+
> ```bash
|
|
234
|
+
> printf "\n \033[33m learnship-executor(Implement code from the plan, one task at a time)\033[0m\n\n"
|
|
235
|
+
> ```
|
|
236
|
+
|
|
215
237
|
Read `@./agents/executor.md` for the full persona definition. Read the PLAN.md and execute each task:
|
|
216
238
|
|
|
217
239
|
1. Read the task's `<files>`, `<action>`, `<verify>`, `<done>` fields
|
|
@@ -256,6 +278,11 @@ After all tasks complete, write `${NEXT_NUM}-SUMMARY.md`:
|
|
|
256
278
|
You are now the **learnship verifier**. Check must_haves from the plan against the actual codebase.
|
|
257
279
|
</persona_context>
|
|
258
280
|
|
|
281
|
+
> **Announce persona** — print this before proceeding:
|
|
282
|
+
> ```bash
|
|
283
|
+
> printf "\n \033[35m learnship-verifier(Check must_haves from the plan against the actual codebase)\033[0m\n\n"
|
|
284
|
+
> ```
|
|
285
|
+
|
|
259
286
|
Read `@./agents/verifier.md` for the full persona definition. Check `must_haves` from the plan against the actual codebase.
|
|
260
287
|
|
|
261
288
|
Write `${NEXT_NUM}-VERIFICATION.md`. Store status as `VERIFICATION_STATUS`.
|
|
@@ -77,13 +77,15 @@ Read `parallelization` from `.planning/config.json` (defaults to `false`).
|
|
|
77
77
|
Spawn a dedicated researcher agent:
|
|
78
78
|
```
|
|
79
79
|
Task(
|
|
80
|
-
subagent_type="learnship-researcher",
|
|
80
|
+
subagent_type="learnship-phase-researcher",
|
|
81
81
|
description="Phase [N] research",
|
|
82
82
|
prompt="
|
|
83
83
|
<agent_definition>
|
|
84
|
-
You are a learnship researcher.
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
You are a learnship phase researcher. You answer 'What do I need to know to PLAN this phase well?' and produce a single RESEARCH.md that the planner consumes.
|
|
85
|
+
Your training data is 6-18 months stale — treat it as hypothesis, not fact. Verify before asserting.
|
|
86
|
+
Flag uncertainty with confidence levels (HIGH/MEDIUM/LOW). Be prescriptive: 'Use X because Y' not 'Options are X, Y, Z.'
|
|
87
|
+
Tool priority: 1. WebSearch (implementation patterns — always include current year), 2. WebFetch (official docs), 3. Codebase scan (existing patterns to reuse).
|
|
88
|
+
Investigation, not confirmation — gather evidence first, recommend second.
|
|
87
89
|
</agent_definition>
|
|
88
90
|
|
|
89
91
|
<objective>
|
|
@@ -122,6 +124,11 @@ Tag every claim: [VERIFIED: source], [CITED: url], or [ASSUMED]. Never present a
|
|
|
122
124
|
Use WebSearch for implementation patterns, WebFetch for official docs, codebase scan for existing patterns to reuse.
|
|
123
125
|
</persona_context>
|
|
124
126
|
|
|
127
|
+
> **Announce persona** — print this before proceeding:
|
|
128
|
+
> ```bash
|
|
129
|
+
> printf "\n \033[34m learnship-phase-researcher(Your training data is stale — verify before asserting)\033[0m\n\n"
|
|
130
|
+
> ```
|
|
131
|
+
|
|
125
132
|
Read `@./agents/phase-researcher.md` for the full persona definition. In **phase research mode**:
|
|
126
133
|
|
|
127
134
|
**Online research first.** Before writing anything, run at least 3 WebSearch queries relevant to this phase's domain:
|
|
@@ -127,6 +127,11 @@ You are now the **learnship code reviewer**. Review code for correctness, testin
|
|
|
127
127
|
Be specific — cite file:line, explain the issue, propose the fix. Severity: critical/major/minor/nit.
|
|
128
128
|
</persona_context>
|
|
129
129
|
|
|
130
|
+
> **Announce persona** — print this before proceeding:
|
|
131
|
+
> ```bash
|
|
132
|
+
> printf "\n \033[31m learnship-code-reviewer(Review code for correctness, testing, security, and performance)\033[0m\n\n"
|
|
133
|
+
> ```
|
|
134
|
+
|
|
130
135
|
Read `@./agents/code-reviewer.md` for the full persona definition. Run each selected persona sequentially. For each persona:
|
|
131
136
|
|
|
132
137
|
1. Adopt the persona's focus lens
|
|
@@ -94,6 +94,8 @@ AskUserQuestion([
|
|
|
94
94
|
])
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
98
|
+
|
|
97
99
|
## Step 5: Resolve Open Threats
|
|
98
100
|
|
|
99
101
|
Read `parallelization` from `.planning/config.json` (defaults to `false`).
|
|
@@ -131,6 +133,11 @@ You are now the **learnship security auditor**. Run STRIDE threat analysis again
|
|
|
131
133
|
Check each open threat. Verify mitigations are implemented correctly. Update status based on findings.
|
|
132
134
|
</persona_context>
|
|
133
135
|
|
|
136
|
+
> **Announce persona** — print this before proceeding:
|
|
137
|
+
> ```bash
|
|
138
|
+
> printf "\n \033[31m learnship-security-auditor(Run STRIDE threat analysis against the codebase)\033[0m\n\n"
|
|
139
|
+
> ```
|
|
140
|
+
|
|
134
141
|
Read `@./agents/security-auditor.md` for the full persona definition. Check each open threat against the codebase. Update status based on findings.
|
|
135
142
|
|
|
136
143
|
**For "Accept all":** Add each to the Accepted Risks Log with user's rationale.
|
|
@@ -152,6 +159,8 @@ AskUserQuestion([
|
|
|
152
159
|
])
|
|
153
160
|
```
|
|
154
161
|
|
|
162
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
163
|
+
|
|
155
164
|
## Step 6: Write SECURITY.md
|
|
156
165
|
|
|
157
166
|
Write `.planning/phases/[padded_phase]-[phase_slug]/[padded_phase]-SECURITY.md` using `@./templates/security.md`:
|
|
@@ -18,7 +18,7 @@ If missing, create from template:
|
|
|
18
18
|
```bash
|
|
19
19
|
cp templates/config.json .planning/config.json 2>/dev/null || cat > .planning/config.json << 'EOF'
|
|
20
20
|
{
|
|
21
|
-
"mode": "
|
|
21
|
+
"mode": "auto",
|
|
22
22
|
"granularity": "standard",
|
|
23
23
|
"model_profile": "balanced",
|
|
24
24
|
"learning_mode": "auto",
|
|
@@ -117,7 +117,7 @@ AskUserQuestion([
|
|
|
117
117
|
question: "Working style?",
|
|
118
118
|
multiSelect: false,
|
|
119
119
|
options: [
|
|
120
|
-
{ label: "
|
|
120
|
+
{ label: "Auto", description: "Auto-approve steps, just execute" },
|
|
121
121
|
{ label: "Interactive", description: "Confirm at each step, more control" }
|
|
122
122
|
]
|
|
123
123
|
},
|
|
@@ -143,6 +143,8 @@ AskUserQuestion([
|
|
|
143
143
|
])
|
|
144
144
|
```
|
|
145
145
|
|
|
146
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
147
|
+
|
|
146
148
|
**Round 2 — Workflow agents (6 questions):**
|
|
147
149
|
|
|
148
150
|
```
|
|
@@ -204,6 +206,8 @@ AskUserQuestion([
|
|
|
204
206
|
])
|
|
205
207
|
```
|
|
206
208
|
|
|
209
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
210
|
+
|
|
207
211
|
**Round 3 — Pipeline & git (4 questions):**
|
|
208
212
|
|
|
209
213
|
```
|
|
@@ -249,6 +253,8 @@ AskUserQuestion([
|
|
|
249
253
|
])
|
|
250
254
|
```
|
|
251
255
|
|
|
256
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
257
|
+
|
|
252
258
|
## Step 5: Save Config
|
|
253
259
|
|
|
254
260
|
After user types "done", read the current config, apply all changes, and write the complete updated JSON. Preserve any fields not shown in the menu (gates, hooks, etc.) — never drop fields the user didn't modify.
|
|
@@ -97,6 +97,8 @@ AskUserQuestion([
|
|
|
97
97
|
])
|
|
98
98
|
```
|
|
99
99
|
|
|
100
|
+
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
101
|
+
|
|
100
102
|
**If "Fill all gaps":**
|
|
101
103
|
|
|
102
104
|
Read `parallelization` from `.planning/config.json` (defaults to `false`).
|
|
@@ -135,6 +137,11 @@ You are now the **learnship verifier**. Write missing test files to close valida
|
|
|
135
137
|
Tests must be observable and runnable. Cover the must_haves from each plan. Don't weaken existing tests.
|
|
136
138
|
</persona_context>
|
|
137
139
|
|
|
140
|
+
> **Announce persona** — print this before proceeding:
|
|
141
|
+
> ```bash
|
|
142
|
+
> printf "\n \033[35m learnship-verifier(Write missing test files to close validation gaps)\033[0m\n\n"
|
|
143
|
+
> ```
|
|
144
|
+
|
|
138
145
|
Read `@./agents/verifier.md` for the full persona definition. Write the missing test files. Rules:
|
|
139
146
|
- Never touch implementation files
|
|
140
147
|
- Match the existing test framework and style
|
|
@@ -282,6 +282,11 @@ You are now the **learnship debugger**. Diagnose the root cause of each gap.
|
|
|
282
282
|
One variable at a time. Reproduce before diagnosing. Trace from symptom to root cause.
|
|
283
283
|
</persona_context>
|
|
284
284
|
|
|
285
|
+
> **Announce persona** — print this before proceeding:
|
|
286
|
+
> ```bash
|
|
287
|
+
> printf "\n \033[38;5;208m learnship-debugger(Diagnose the root cause of each gap)\033[0m\n\n"
|
|
288
|
+
> ```
|
|
289
|
+
|
|
285
290
|
Read `@./agents/debugger.md` for the full persona definition. For each issue in the Gaps section, investigate:
|
|
286
291
|
- Read the relevant source files
|
|
287
292
|
- Trace the issue to its root cause
|
|
@@ -311,12 +316,22 @@ You are now the **learnship planner**. Create fix plans for diagnosed gaps.
|
|
|
311
316
|
Each plan covers one logical unit of work. Include gap_closure: true in frontmatter.
|
|
312
317
|
</persona_context>
|
|
313
318
|
|
|
319
|
+
> **Announce persona** — print this before proceeding:
|
|
320
|
+
> ```bash
|
|
321
|
+
> printf "\n \033[32m learnship-planner(Create fix plans for diagnosed gaps)\033[0m\n\n"
|
|
322
|
+
> ```
|
|
323
|
+
|
|
314
324
|
Read `@./agents/planner.md` for the full persona definition. Read the UAT.md file with diagnosed gaps. Create fix plans in the phase directory with `gap_closure: true` in frontmatter.
|
|
315
325
|
|
|
316
326
|
<persona_context>
|
|
317
327
|
You are now the **learnship verifier**. Verify fix plans close the diagnosed gaps.
|
|
318
328
|
</persona_context>
|
|
319
329
|
|
|
330
|
+
> **Announce persona** — print this before proceeding:
|
|
331
|
+
> ```bash
|
|
332
|
+
> printf "\n \033[35m learnship-verifier(Verify fix plans close the diagnosed gaps)\033[0m\n\n"
|
|
333
|
+
> ```
|
|
334
|
+
|
|
320
335
|
Verify fix plans (max 3 iterations — read `@./agents/verifier.md` for the full persona definition) — same loop as `plan-phase`.
|
|
321
336
|
|
|
322
337
|
Present when ready:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learnship",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.3",
|
|
4
4
|
"description": "Learn as you build. Build with intent. — A multi-platform agentic engineering system for Windsurf, Claude Code, Cursor, OpenCode, Gemini CLI, and Codex: 57 spec-driven workflows, 17 specialist agent personas, integrated learning, and production-grade design.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agentic",
|
|
@@ -56,6 +56,6 @@
|
|
|
56
56
|
"test": "bash tests/run_all.sh"
|
|
57
57
|
},
|
|
58
58
|
"engines": {
|
|
59
|
-
"node": ">=
|
|
59
|
+
"node": ">=22.0.0"
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -229,7 +229,7 @@ The `parallelization` field is now an object. Legacy flat `"parallelization": tr
|
|
|
229
229
|
|
|
230
230
|
### Gates Section
|
|
231
231
|
|
|
232
|
-
Controls which confirmation prompts are shown during workflows. Set to `false` to skip specific confirmations (useful for experienced users in
|
|
232
|
+
Controls which confirmation prompts are shown during workflows. Set to `false` to skip specific confirmations (useful for experienced users in auto mode).
|
|
233
233
|
|
|
234
234
|
| Option | Default | Description |
|
|
235
235
|
|--------|---------|-------------|
|
package/templates/config.json
CHANGED