learnship 1.9.17 → 1.9.19

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "learnship",
3
3
  "description": "Agentic engineering done right — 42 structured workflows, 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": "1.9.17",
4
+ "version": "1.9.19",
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 — 42 structured workflows, persistent memory across sessions, integrated learning partner, and impeccable UI design system.",
5
- "version": "1.9.17",
5
+ "version": "1.9.19",
6
6
  "logo": "assets/logo.png",
7
7
  "author": {
8
8
  "name": "Favio Vazquez",
package/bin/install.js CHANGED
@@ -501,6 +501,7 @@ function copyDir(srcDir, destDir, pathPrefix, platform) {
501
501
  let c = fs.readFileSync(src, 'utf8');
502
502
  c = replacePaths(c, pathPrefix, platform);
503
503
  if (entry.name === 'new-project.md') c = rewriteNewProject(c, platform);
504
+ if (entry.name === 'agents.md') c = rewriteAgentsMd(c, platform, pathPrefix);
504
505
  if (platform === 'opencode') c = convertToOpencode(c);
505
506
  // gemini agents converted separately; body ${VAR} escaping done there
506
507
  fs.writeFileSync(dest, c);
@@ -529,6 +530,62 @@ function replacePaths(content, pathPrefix, platform) {
529
530
  return c;
530
531
  }
531
532
 
533
+ /**
534
+ * Rewrite AGENTS.md markers with platform-specific skill invocation instructions.
535
+ * On Windsurf, @agentic-learning and @impeccable are native @skill invocations.
536
+ * On all other platforms there is no @mention dispatch — the AI must be told
537
+ * explicitly where the skill files live and what to do when the user types @skill-name.
538
+ */
539
+ function rewriteAgentsMd(content, platform, pathPrefix) {
540
+ if (!content.includes('<!-- LEARNSHIP_SKILLS_BLOCK -->')) return content;
541
+
542
+ let block;
543
+ if (platform === 'windsurf') {
544
+ block = `### Learning Partner — \`@agentic-learning\`
545
+
546
+ Windsurf loads \`@agentic-learning\` natively as a skill. When the user (or a workflow) invokes \`@agentic-learning <action>\`, Windsurf automatically routes it to the installed skill.
547
+
548
+ Available actions: \`learn\`, \`quiz\`, \`reflect\`, \`space\`, \`brainstorm\`, \`explain-first\`, \`struggle\`, \`either-or\`, \`interleave\`, \`cognitive-load\`
549
+
550
+ ### Design System — \`@impeccable\`
551
+
552
+ Windsurf loads \`@impeccable\` natively as a skill. When the user (or a workflow) invokes \`@impeccable <action>\`, Windsurf automatically routes it to the installed skill.
553
+
554
+ Available actions: \`adapt\`, \`animate\`, \`arrange\`, \`audit\`, \`bolder\`, \`clarify\`, \`colorize\`, \`critique\`, \`delight\`, \`distill\`, \`extract\`, \`frontend-design\`, \`harden\`, \`normalize\`, \`onboard\`, \`optimize\`, \`overdrive\`, \`polish\`, \`quieter\`, \`teach-impeccable\`, \`typeset\``;
555
+ } else {
556
+ // For all non-Windsurf platforms: @mention is not a native dispatch mechanism.
557
+ // The AI must read the skill file directly and execute the instructions inside it.
558
+ // pathPrefix ends with learnship/ — skills are at learnship/skills/
559
+ const skillsPath = pathPrefix + 'skills';
560
+
561
+ block = `### Learning Partner — \`@agentic-learning\`
562
+
563
+ **There is no native @mention skill dispatch on this platform.** When a workflow checkpoint or the user mentions \`@agentic-learning <action>\`, you must:
564
+
565
+ 1. Read \`${skillsPath}/agentic-learning/SKILL.md\`
566
+ 2. Find the section for the requested action (e.g. \`either-or\`, \`brainstorm\`, \`reflect\`, \`quiz\`, etc.)
567
+ 3. Execute those instructions directly in this conversation
568
+
569
+ Available actions: \`learn\`, \`quiz\`, \`reflect\`, \`space\`, \`brainstorm\`, \`explain-first\`, \`struggle\`, \`either-or\`, \`interleave\`, \`cognitive-load\`
570
+
571
+ **Do NOT say "@agentic-learning isn't installed" — it is installed. Read the SKILL.md and run the action.**
572
+
573
+ ### Design System — \`@impeccable\`
574
+
575
+ **There is no native @mention skill dispatch on this platform.** When a workflow checkpoint or the user mentions \`@impeccable <action>\`, you must:
576
+
577
+ 1. Read \`${skillsPath}/impeccable/SKILL.md\`
578
+ 2. Find the section for the requested action (e.g. \`audit\`, \`critique\`, \`polish\`, etc.)
579
+ 3. Execute those instructions directly in this conversation
580
+
581
+ Available actions: \`adapt\`, \`animate\`, \`arrange\`, \`audit\`, \`bolder\`, \`clarify\`, \`colorize\`, \`critique\`, \`delight\`, \`distill\`, \`extract\`, \`frontend-design\`, \`harden\`, \`normalize\`, \`onboard\`, \`optimize\`, \`overdrive\`, \`polish\`, \`quieter\`, \`teach-impeccable\`, \`typeset\`
582
+
583
+ **Do NOT say "@impeccable isn't installed" — it is installed. Read the SKILL.md and run the action.**`;
584
+ }
585
+
586
+ return content.replace('<!-- LEARNSHIP_SKILLS_BLOCK -->', block);
587
+ }
588
+
532
589
  /** Rewrite new-project.md markers with exact platform-specific content at install time */
533
590
  function rewriteNewProject(content, platform) {
534
591
  const dirName = getDirName(platform);
@@ -1339,6 +1396,7 @@ if (process.env.LEARNSHIP_TEST_MODE) {
1339
1396
  parseJsonc,
1340
1397
  replacePaths,
1341
1398
  rewriteNewProject,
1399
+ rewriteAgentsMd,
1342
1400
  installClaudePlugins,
1343
1401
  toHomePrefix,
1344
1402
  LEARNSHIP_CODEX_MARKER,
@@ -44,6 +44,32 @@ Always read `STATE.md` and `ROADMAP.md` before any planning or execution operati
44
44
  - **Goal-backward verification**: Check that `must_haves` are met, not just that tasks ran.
45
45
  - **Deferred ideas**: Note things outside current phase scope in the roadmap backlog.
46
46
 
47
+ ## Skills — @agentic-learning and @impeccable
48
+
49
+ **There is no native @mention skill dispatch in Cursor.** When a workflow checkpoint or the user mentions `@agentic-learning <action>` or `@impeccable <action>`, you must read the skill file and execute its instructions directly.
50
+
51
+ ### Learning Partner — `@agentic-learning`
52
+
53
+ When `@agentic-learning <action>` is mentioned:
54
+ 1. Read `node_modules/learnship/skills/agentic-learning/SKILL.md` (or `learnship/skills/agentic-learning/SKILL.md` if installed locally)
55
+ 2. Find the section for the requested action
56
+ 3. Execute those instructions in this conversation
57
+
58
+ Available actions: `learn`, `quiz`, `reflect`, `space`, `brainstorm`, `explain-first`, `struggle`, `either-or`, `interleave`, `cognitive-load`
59
+
60
+ **Do NOT say "@agentic-learning isn't installed" — it is installed. Read the SKILL.md and run the action.**
61
+
62
+ ### Design System — `@impeccable`
63
+
64
+ When `@impeccable <action>` is mentioned:
65
+ 1. Read `node_modules/learnship/skills/impeccable/SKILL.md` (or `learnship/skills/impeccable/SKILL.md` if installed locally)
66
+ 2. Find the section for the requested action
67
+ 3. Execute those instructions in this conversation
68
+
69
+ Available actions: `adapt`, `animate`, `arrange`, `audit`, `bolder`, `clarify`, `colorize`, `critique`, `delight`, `distill`, `extract`, `frontend-design`, `harden`, `normalize`, `onboard`, `optimize`, `overdrive`, `polish`, `quieter`, `teach-impeccable`, `typeset`
70
+
71
+ **Do NOT say "@impeccable isn't installed" — it is installed. Read the SKILL.md and run the action.**
72
+
47
73
  ## Parallel Execution
48
74
 
49
75
  Cursor supports real parallel subagents. During `/new-project` setup (Group D), ask:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "learnship",
3
- "version": "1.9.17",
3
+ "version": "1.9.19",
4
4
  "description": "Agentic engineering done right — 42 structured workflows, 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/",
@@ -100,6 +100,10 @@ When a user sends a message — whether it's a vague idea, a specific bug report
100
100
 
101
101
  ### Decision tree — apply in order:
102
102
 
103
+ **0. Is `/new-project` currently in progress?**
104
+
105
+ If `.planning/PROJECT.md` does NOT exist but you are currently running `/new-project` (i.e., you have asked "What do you want to build?" and are waiting for answers, or you are in any step of the new-project ceremony): **the user's message is an answer to your workflow question, not a task to route.** Do NOT apply the routing protocol. Continue the `/new-project` ceremony from where you left off.
106
+
103
107
  **1. Is there a `.planning/PROJECT.md`?**
104
108
  - **No** → Stop. Tell the user: "No project found. Run `/new-project` to initialize." Do nothing else.
105
109
  - **Yes** → Continue to step 2.
@@ -127,6 +131,7 @@ Always tell the user which workflow you're about to invoke and why, then wait fo
127
131
  - User says "the login button is broken" → ❌ Don't fix it directly → ✅ Route to `/quick`
128
132
  - User says "I want to add dark mode" → ❌ Don't start implementing → ✅ Route to `discuss-phase`
129
133
  - User pastes a detailed spec → ❌ Don't treat it as a command to execute → ✅ Classify size, propose workflow, wait for yes
134
+ - `/new-project` asked "What do you want to build?" and user replies with a detailed description → ❌ Don't treat as a task to route → ✅ It is ANSWER_1. Record it and ask Exchange 2.
130
135
 
131
136
  ---
132
137
 
@@ -181,6 +186,8 @@ This project uses **learnship**. Key facts:
181
186
 
182
187
  ## Skills — Operational Knowledge
183
188
 
189
+ <!-- LEARNSHIP_SKILLS_BLOCK -->
190
+
184
191
  ### CHANGELOG Discipline
185
192
 
186
193
  Every significant change gets a dated entry in `CHANGELOG.md` with:
@@ -10,6 +10,8 @@ Initialize a new project with full context gathering, optional research, require
10
10
 
11
11
  <!-- LEARNSHIP_PLATFORM_LABEL -->
12
12
 
13
+ > **Routing protocol suspended.** While this workflow is running, every user message is an answer to a workflow question — not a task to route. Do NOT apply the request routing protocol until `/new-project` is fully complete and `.planning/PROJECT.md` exists.
14
+
13
15
  Check if `.planning/PROJECT.md` already exists:
14
16
 
15
17
  ```bash
@@ -18,6 +20,19 @@ python3 -c "import os; print('EXISTS' if os.path.exists('.planning/PROJECT.md')
18
20
 
19
21
  **If EXISTS:** Stop. Project already initialized. Use the `progress` workflow to see where you are.
20
22
 
23
+ **Check for an existing codebase:**
24
+
25
+ ```bash
26
+ python3 -c "
27
+ import os, pathlib
28
+ files = [p for p in pathlib.Path('.').rglob('*') if p.is_file() and not any(x in p.parts for x in ['.git', 'node_modules', '.planning', '__pycache__', '.venv'])]
29
+ print('HAS_CODE' if len(files) > 2 else 'BLANK')
30
+ print(f'{len(files)} files')
31
+ "
32
+ ```
33
+
34
+ **If HAS_CODE:** Note this internally as `EXISTING_CODEBASE = true`. You will scan the codebase briefly in Step 1b before questioning. Do NOT use existing code as an excuse to skip or shorten the questioning ceremony — the ceremony exists precisely because you need the user's intent, not just their code.
35
+
21
36
  Check if git is initialized:
22
37
 
23
38
  ```bash
@@ -39,6 +54,16 @@ Create the planning directory:
39
54
  mkdir -p .planning/research
40
55
  ```
41
56
 
57
+ ## Step 1b: Existing Codebase Scan (only if EXISTING_CODEBASE = true)
58
+
59
+ If `EXISTING_CODEBASE = true`, do a quick structural scan before questioning so your follow-up questions are grounded in reality:
60
+
61
+ ```bash
62
+ find . -maxdepth 3 -not -path './.git/*' -not -path './node_modules/*' -not -path './.planning/*' -not -path './__pycache__/*' -not -path './.venv/*' | sort | head -40
63
+ ```
64
+
65
+ Note the tech stack, key directories, and any README content internally. Use this ONLY to ask sharper follow-up questions — never to infer the user's intent or skip ceremony steps.
66
+
42
67
  ## Step 2: Configuration
43
68
 
44
69
  Ask the user the following questions to configure the project. Ask them in a conversational way — not all at once, but grouped naturally.
@@ -128,6 +153,8 @@ This step is **strictly sequential**. You must complete each numbered exchange f
128
153
  Ask: **"What do you want to build?"**
129
154
 
130
155
  > 🛑 STOP. Wait for the user's answer. Do not continue until you have received it. Record their answer internally as `ANSWER_1`.
156
+ >
157
+ > ⚠️ **A detailed answer to Exchange 1 does NOT satisfy Exchanges 2–4.** No matter how thorough ANSWER_1 is — a full paragraph, a spec dump, a wall of requirements — it is raw material for the follow-up questions, not a replacement for them. You still MUST ask Exchanges 2, 3, and 4 before proceeding to Step 4. The purpose of follow-ups is not to extract information the user forgot to mention — it is to pressure-test, sharpen, and surface blind spots in what they already said.
131
158
 
132
159
  **Exchange 2 — First follow-up:**
133
160
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "learnship",
3
- "version": "1.9.17",
3
+ "version": "1.9.19",
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: spec-driven workflows, integrated learning, and production-grade design.",
5
5
  "keywords": [
6
6
  "agentic",