learnship 1.9.22 → 1.9.24

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.22",
4
+ "version": "1.9.24",
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.22",
5
+ "version": "1.9.24",
6
6
  "logo": "assets/logo.png",
7
7
  "author": {
8
8
  "name": "Favio Vazquez",
package/README.md CHANGED
@@ -781,7 +781,7 @@ learnship/
781
781
  **learnship** was built on top of ideas and work from three open-source projects:
782
782
 
783
783
  - **[get-shit-done](https://github.com/davila7/get-shit-done)**: the spec-driven, context-engineered workflow system that inspired the phase lifecycle, planning artifacts, and agent coordination patterns
784
- - **[agentic-learn](https://github.com/faviovazquez/agentic-learn)**: the learning partner skill whose neuroscience-backed techniques (retrieval, spacing, generation, reflection) power the Learning Partner layer
784
+ - **[agentic-learning](https://github.com/FavioVazquez/agentic-learning)**: the learning partner skill whose neuroscience-backed techniques (retrieval, spacing, generation, reflection) power the Learning Partner layer
785
785
  - **[impeccable](https://github.com/pbakaus/impeccable)**: the frontend design skill that raised the bar on UI quality standards and powers the Design System layer
786
786
 
787
787
  learnship adapts, combines, and extends these into a unified, multi-platform system. All three are used as inspiration and learnship is original work built on their shoulders.
package/bin/install.js CHANGED
@@ -519,7 +519,7 @@ function replacePaths(content, pathPrefix, platform) {
519
519
  .replace(/\$HOME\/\.claude\//g, toHomePrefix(pathPrefix))
520
520
  // Local ./.claude/ refs → ./<dirName>/
521
521
  .replace(/\.\/.claude\//g, `./${dirName}/`);
522
- // Also replace platform-specific dir refs that may appear in source
522
+ // Replace platform-specific dir refs that may appear in source
523
523
  if (platform === 'opencode') {
524
524
  c = c.replace(/~\/\.opencode\//g, pathPrefix);
525
525
  } else if (platform === 'gemini') {
@@ -527,6 +527,15 @@ function replacePaths(content, pathPrefix, platform) {
527
527
  } else if (platform === 'codex') {
528
528
  c = c.replace(/~\/\.codex\//g, pathPrefix);
529
529
  }
530
+ // Replace @mention skill syntax — @mention dispatch is Windsurf-native only
531
+ if (platform === 'claude') {
532
+ c = c.replace(/@agentic-learning\b/g, '/agentic-learning');
533
+ c = c.replace(/@impeccable\b/g, '/impeccable');
534
+ } else if (platform === 'opencode' || platform === 'gemini' || platform === 'codex') {
535
+ // Strip @ so tips show plain skill names (no dispatch mechanism on these platforms)
536
+ c = c.replace(/@agentic-learning\b/g, 'agentic-learning');
537
+ c = c.replace(/@impeccable\b/g, 'impeccable');
538
+ }
530
539
  return c;
531
540
  }
532
541
 
@@ -552,15 +561,44 @@ Available actions: \`learn\`, \`quiz\`, \`reflect\`, \`space\`, \`brainstorm\`,
552
561
  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
562
 
554
563
  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\``;
564
+ } else if (platform === 'claude') {
565
+ // Claude Code: skills live at ~/.claude/skills/ (installed by installClaudeSkills).
566
+ // @mention dispatch is Windsurf-native — use /skill-name slash command syntax instead.
567
+ // pathPrefix = targetDir + '/learnship/' so strip 'learnship/' to get the skills parent.
568
+ const claudeDir = pathPrefix.replace(/\/learnship\/$/, '');
569
+ const skillsPath = claudeDir + '/skills';
570
+
571
+ block = `### Learning Partner — \`/agentic-learning\`
572
+
573
+ The \`agentic-learning\` skill is installed at \`${skillsPath}/agentic-learning/SKILL.md\`. When a workflow checkpoint or the user mentions \`/agentic-learning <action>\` or asks you to use the agentic-learning skill:
574
+
575
+ 1. Use the \`agentic-learning\` skill (invoke via the Skill tool or \`/agentic-learning\` slash command, or read \`${skillsPath}/agentic-learning/SKILL.md\`)
576
+ 2. Find the section for the requested action (e.g. \`either-or\`, \`brainstorm\`, \`reflect\`, \`quiz\`, etc.)
577
+ 3. Execute those instructions directly in this conversation
578
+
579
+ Available actions: \`learn\`, \`quiz\`, \`reflect\`, \`space\`, \`brainstorm\`, \`explain-first\`, \`struggle\`, \`either-or\`, \`interleave\`, \`cognitive-load\`
580
+
581
+ **Do NOT say "agentic-learning isn't installed" — it is installed. Run the action.**
582
+
583
+ ### Design System — \`/impeccable\`
584
+
585
+ The \`impeccable\` skill is installed at \`${skillsPath}/impeccable/SKILL.md\`. When a workflow checkpoint or the user mentions \`/impeccable <action>\` or asks you to use the impeccable skill:
586
+
587
+ 1. Use the \`impeccable\` skill (invoke via the Skill tool or \`/impeccable\` slash command, or read \`${skillsPath}/impeccable/SKILL.md\`)
588
+ 2. Find the section for the requested action (e.g. \`audit\`, \`critique\`, \`polish\`, etc.)
589
+ 3. Execute those instructions directly in this conversation
590
+
591
+ 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\`
592
+
593
+ **Do NOT say "impeccable isn't installed" — it is installed. Run the action.**`;
555
594
  } 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/
595
+ // gemini, opencode, codex: @mention is not a native dispatch mechanism.
596
+ // Skills are copied into learnship/skills/ the AI reads SKILL.md directly.
559
597
  const skillsPath = pathPrefix + 'skills';
560
598
 
561
- block = `### Learning Partner — \`@agentic-learning\`
599
+ block = `### Learning Partner — \`agentic-learning\`
562
600
 
563
- **There is no native @mention skill dispatch on this platform.** When a workflow checkpoint or the user mentions \`@agentic-learning <action>\`, you must:
601
+ The \`agentic-learning\` skill is installed at \`${skillsPath}/agentic-learning/SKILL.md\`. When a workflow checkpoint or the user asks you to use the agentic-learning skill:
564
602
 
565
603
  1. Read \`${skillsPath}/agentic-learning/SKILL.md\`
566
604
  2. Find the section for the requested action (e.g. \`either-or\`, \`brainstorm\`, \`reflect\`, \`quiz\`, etc.)
@@ -568,11 +606,11 @@ Available actions: \`adapt\`, \`animate\`, \`arrange\`, \`audit\`, \`bolder\`, \
568
606
 
569
607
  Available actions: \`learn\`, \`quiz\`, \`reflect\`, \`space\`, \`brainstorm\`, \`explain-first\`, \`struggle\`, \`either-or\`, \`interleave\`, \`cognitive-load\`
570
608
 
571
- **Do NOT say "@agentic-learning isn't installed" — it is installed. Read the SKILL.md and run the action.**
609
+ **Do NOT say "agentic-learning isn't installed" — it is installed. Read the SKILL.md file and run the action.**
572
610
 
573
- ### Design System — \`@impeccable\`
611
+ ### Design System — \`impeccable\`
574
612
 
575
- **There is no native @mention skill dispatch on this platform.** When a workflow checkpoint or the user mentions \`@impeccable <action>\`, you must:
613
+ The \`impeccable\` skill is installed at \`${skillsPath}/impeccable/SKILL.md\`. When a workflow checkpoint or the user asks you to use the impeccable skill:
576
614
 
577
615
  1. Read \`${skillsPath}/impeccable/SKILL.md\`
578
616
  2. Find the section for the requested action (e.g. \`audit\`, \`critique\`, \`polish\`, etc.)
@@ -580,7 +618,7 @@ Available actions: \`learn\`, \`quiz\`, \`reflect\`, \`space\`, \`brainstorm\`,
580
618
 
581
619
  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
620
 
583
- **Do NOT say "@impeccable isn't installed" — it is installed. Read the SKILL.md and run the action.**`;
621
+ **Do NOT say "impeccable isn't installed" — it is installed. Read the SKILL.md file and run the action.**`;
584
622
  }
585
623
 
586
624
  return content.replace('<!-- LEARNSHIP_SKILLS_BLOCK -->', block);
@@ -615,6 +653,13 @@ function rewriteNewProject(content, platform) {
615
653
  }
616
654
  content = content.replace('<!-- LEARNSHIP_PARALLEL_BLOCK -->', parallelBlock);
617
655
 
656
+ // Platform-specific AGENTS.md note
657
+ // Gemini CLI reads GEMINI.md automatically but NOT AGENTS.md — copy it so sessions have context
658
+ const agentsMdNote = platform === 'gemini'
659
+ ? `> **Gemini CLI** reads \`GEMINI.md\` automatically at session start, not \`AGENTS.md\`. Copy it now so every future session has project context:\n> \`\`\`bash\n> cp AGENTS.md GEMINI.md\n> git add GEMINI.md && git commit -m "docs: add GEMINI.md for Gemini CLI auto-loading"\n> \`\`\``
660
+ : '';
661
+ content = content.replace('<!-- LEARNSHIP_AGENTSMD_PLATFORM_NOTE -->', agentsMdNote);
662
+
618
663
  return content;
619
664
  }
620
665
 
@@ -634,27 +679,13 @@ function installClaudeCommands(srcDir, targetDir, pathPrefix) {
634
679
  return count;
635
680
  }
636
681
 
637
- /** Install Claude Code native plugin skills (plugins/learnship/skills/) */
638
- function installClaudePlugins(skillsSrc, targetDir) {
639
- const pluginDir = path.join(targetDir, 'plugins', 'learnship');
640
- const pluginSkillsDir = path.join(pluginDir, 'skills');
641
- const pluginMetaDir = path.join(pluginDir, '.claude-plugin');
642
-
643
- // Clean install
644
- if (fs.existsSync(pluginDir)) fs.rmSync(pluginDir, { recursive: true });
645
- fs.mkdirSync(pluginSkillsDir, { recursive: true });
646
- fs.mkdirSync(pluginMetaDir, { recursive: true });
647
-
648
- // Write plugin manifest
649
- const manifest = {
650
- name: 'learnship',
651
- description: 'Learnship skills — agentic-learning partner and impeccable design system',
652
- author: { name: 'favio-vazquez' },
653
- };
654
- fs.writeFileSync(
655
- path.join(pluginMetaDir, 'plugin.json'),
656
- JSON.stringify(manifest, null, 2) + '\n'
657
- );
682
+ /** Install Claude Code native skills to ~/.claude/skills/<skillname>/ */
683
+ function installClaudeSkills(skillsSrc, targetDir) {
684
+ const skillsDir = path.join(targetDir, 'skills');
685
+
686
+ // Clean up legacy plugins/learnship/ if it exists from pre-1.9.23 installs
687
+ const legacyPluginDir = path.join(targetDir, 'plugins', 'learnship');
688
+ if (fs.existsSync(legacyPluginDir)) fs.rmSync(legacyPluginDir, { recursive: true });
658
689
 
659
690
  let count = 0;
660
691
 
@@ -665,13 +696,12 @@ function installClaudePlugins(skillsSrc, targetDir) {
665
696
 
666
697
  if (!fs.existsSync(path.join(srcPath, 'SKILL.md'))) continue;
667
698
 
668
- const dest = path.join(pluginSkillsDir, skillName);
699
+ const dest = path.join(skillsDir, skillName);
669
700
 
670
701
  if (skillName === 'impeccable') {
671
702
  // impeccable: build a single inlined SKILL.md that contains all sub-skill
672
- // content inline — same pattern as agentic-learning.
673
- // Claude Code cannot follow markdown reference links to sibling files, so
674
- // the hollow index approach produced an "@impeccable isn't installed" error.
703
+ // content inline — Claude Code cannot follow markdown reference links to
704
+ // sibling files, so the hollow index approach produced an "isn't installed" error.
675
705
  fs.mkdirSync(dest, { recursive: true });
676
706
 
677
707
  // Read root frontmatter + intro (everything up to the ## Actions section)
@@ -695,23 +725,22 @@ function installClaudePlugins(skillsSrc, targetDir) {
695
725
  const subContent = fs.readFileSync(subSkillPath, 'utf8');
696
726
  // Strip YAML frontmatter, keep body only
697
727
  const subBody = subContent.replace(/^---[\s\S]*?---\n/, '').trim();
698
- // Also copy sub-skill directory (for Windsurf native skill support)
728
+ // Also copy sub-skill directory for reference files
699
729
  const subDest = path.join(dest, subName);
700
730
  copyDir(path.join(srcPath, subName), subDest, '', 'claude');
701
731
  inlinedSections.push(`\n## Action: \`${subName}\`\n\n${subBody}`);
702
732
  }
703
733
 
704
- // Root frontmatter: keep original header but update description to remove
705
- // the "Invoke with @impeccable" preamble that confused Claude Code's matcher
734
+ // Description without @mention syntax Claude Code discovers skills by description
735
+ // content matching the user's request, not by @mention dispatch.
706
736
  const inlinedSkillMd =
707
737
  `---\nname: impeccable\ndescription: >\n` +
708
738
  ` A design quality system for frontend interfaces. 21 focused actions for\n` +
709
739
  ` auditing, refining, and elevating UI quality. Use when the user asks to\n` +
710
740
  ` audit, critique, polish, improve, review, or refine a frontend interface.\n` +
711
- ` Invoke with @impeccable followed by one of: adapt, animate, arrange, audit,\n` +
712
- ` bolder, clarify, colorize, critique, delight, distill, extract,\n` +
713
- ` frontend-design, harden, normalize, onboard, optimize, overdrive, polish,\n` +
714
- ` quieter, teach-impeccable, or typeset.\n` +
741
+ ` Actions: adapt, animate, arrange, audit, bolder, clarify, colorize,\n` +
742
+ ` critique, delight, distill, extract, frontend-design, harden, normalize,\n` +
743
+ ` onboard, optimize, overdrive, polish, quieter, teach-impeccable, typeset.\n` +
715
744
  `---\n\n` +
716
745
  rootBody.replace(/## Actions[\s\S]*?---\n\n## How to use/, '## How to use') +
717
746
  `\n\n` +
@@ -720,8 +749,17 @@ function installClaudePlugins(skillsSrc, targetDir) {
720
749
  fs.writeFileSync(path.join(dest, 'SKILL.md'), inlinedSkillMd);
721
750
  count++;
722
751
  } else {
723
- // agentic-learning and any future top-level skills — copy verbatim
752
+ // agentic-learning and any future top-level skills — copy then fix description
724
753
  copyDir(srcPath, dest, '', 'claude');
754
+ // Remove @mention invocation hint from description — it's Windsurf-only syntax.
755
+ // Claude Code discovers skills by description content, not @mention dispatch.
756
+ const skillMdPath = path.join(dest, 'SKILL.md');
757
+ let skillContent = fs.readFileSync(skillMdPath, 'utf8');
758
+ skillContent = skillContent.replace(
759
+ /\n( +)Invoke with @\S+ followed by one of:[^\n]*(\n\1[^\n]+)*/g,
760
+ ''
761
+ );
762
+ fs.writeFileSync(skillMdPath, skillContent);
725
763
  count++;
726
764
  }
727
765
  }
@@ -1147,11 +1185,11 @@ function install(platform, isGlobal) {
1147
1185
  const aCount = installAgents(agentsSrc, targetDir, pathPrefix, 'claude');
1148
1186
  if (aCount > 0) console.log(` ${green}✓${reset} Installed ${aCount} agents to agents/`);
1149
1187
  else failures.push('agents/');
1150
- const pCount = installClaudePlugins(skillsSrc, targetDir);
1188
+ const pCount = installClaudeSkills(skillsSrc, targetDir);
1151
1189
  if (pCount > 0) {
1152
- console.log(` ${green}✓${reset} Installed ${pCount} skills to plugins/learnship/skills/`);
1190
+ console.log(` ${green}✓${reset} Installed ${pCount} skills to skills/`);
1153
1191
  } else {
1154
- failures.push('plugins/learnship/skills/');
1192
+ failures.push('skills/');
1155
1193
  }
1156
1194
  } else if (platform === 'opencode') {
1157
1195
  const count = installOpencodeCommands(commandsSrc, targetDir, pathPrefix);
@@ -1230,11 +1268,21 @@ function uninstall(platform, isGlobal) {
1230
1268
  if (fs.existsSync(commandsDir)) { fs.rmSync(commandsDir, { recursive: true }); removed++; console.log(` ${green}✓${reset} Removed commands/learnship/`); }
1231
1269
  }
1232
1270
  if (platform === 'claude') {
1271
+ // Remove skills installed to ~/.claude/skills/ (post-1.9.23)
1272
+ for (const skillName of ['agentic-learning', 'impeccable']) {
1273
+ const skillDir = path.join(targetDir, 'skills', skillName);
1274
+ if (fs.existsSync(skillDir)) {
1275
+ fs.rmSync(skillDir, { recursive: true });
1276
+ removed++;
1277
+ console.log(` ${green}✓${reset} Removed skills/${skillName}/`);
1278
+ }
1279
+ }
1280
+ // Remove legacy plugins/learnship/ from pre-1.9.23 installs
1233
1281
  const pluginDir = path.join(targetDir, 'plugins', 'learnship');
1234
1282
  if (fs.existsSync(pluginDir)) {
1235
1283
  fs.rmSync(pluginDir, { recursive: true });
1236
1284
  removed++;
1237
- console.log(` ${green}✓${reset} Removed plugins/learnship/`);
1285
+ console.log(` ${green}✓${reset} Removed plugins/learnship/ (legacy)`);
1238
1286
  }
1239
1287
  }
1240
1288
  if (platform === 'opencode') {
@@ -1397,7 +1445,7 @@ if (process.env.LEARNSHIP_TEST_MODE) {
1397
1445
  replacePaths,
1398
1446
  rewriteNewProject,
1399
1447
  rewriteAgentsMd,
1400
- installClaudePlugins,
1448
+ installClaudeSkills,
1401
1449
  toHomePrefix,
1402
1450
  LEARNSHIP_CODEX_MARKER,
1403
1451
  CODEX_AGENT_SANDBOX,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "learnship",
3
- "version": "1.9.22",
3
+ "version": "1.9.24",
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/",
@@ -21,7 +21,7 @@ Initialize a new project with full context gathering, optional research, require
21
21
 
22
22
  ## Step 1: Setup
23
23
 
24
- You are running on **Windsurf**. Platform config directory: `.windsurf/`
24
+ <!-- LEARNSHIP_PLATFORM_LABEL -->
25
25
 
26
26
  > **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.
27
27
 
@@ -59,7 +59,7 @@ git init
59
59
 
60
60
  Add the platform config directory to `.gitignore` so AI platform files are not tracked in the project repo:
61
61
  ```bash
62
- grep -q '.windsurf/' .gitignore 2>/dev/null || echo '.windsurf/' >> .gitignore
62
+ <!-- LEARNSHIP_GITIGNORE_CMD -->
63
63
  ```
64
64
 
65
65
  Create the planning directory:
@@ -108,7 +108,7 @@ Ask: "Which workflow agents should be enabled?"
108
108
 
109
109
  **Group D — Parallel execution:**
110
110
 
111
- Windsurf does not support real subagents. Parallelization is automatically set to `false`.
111
+ <!-- LEARNSHIP_PARALLEL_BLOCK -->
112
112
 
113
113
  Ask: "Commit planning docs to git?"
114
114
  - **Yes** (recommended) — Planning docs tracked in version control
@@ -379,6 +379,8 @@ Last updated: [today's date]
379
379
  git add AGENTS.md && git commit -m "docs: add AGENTS.md with project context"
380
380
  ```
381
381
 
382
+ <!-- LEARNSHIP_AGENTSMD_PLATFORM_NOTE -->
383
+
382
384
  ## Step 9: Done
383
385
 
384
386
  ```
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Sync agentic-learning and impeccable skills from their upstream repos (FavioVazquez/agentic-learn + pbakaus/impeccable) — run this when upstream skills have been updated
2
+ description: Sync agentic-learning and impeccable skills from their upstream repos (FavioVazquez/agentic-learning + pbakaus/impeccable) — run this when upstream skills have been updated
3
3
  ---
4
4
 
5
5
  # sync-upstream-skills
@@ -33,8 +33,8 @@ If any check fails, stop and report what is missing.
33
33
  Show the user what they're about to pull so there are no surprises:
34
34
 
35
35
  ```bash
36
- # Latest commit on agentic-learn main
37
- git ls-remote https://github.com/FavioVazquez/agentic-learn.git HEAD | awk '{print "agentic-learn HEAD: " $1}'
36
+ # Latest commit on agentic-learning main
37
+ git ls-remote https://github.com/FavioVazquez/agentic-learning.git HEAD | awk '{print "agentic-learning HEAD: " $1}'
38
38
 
39
39
  # Latest commit on impeccable main
40
40
  git ls-remote https://github.com/pbakaus/impeccable.git HEAD | awk '{print "impeccable HEAD: " $1}'
@@ -53,7 +53,7 @@ Display:
53
53
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
54
54
 
55
55
  Will pull from:
56
- agentic-learn → github.com/FavioVazquez/agentic-learn (main)
56
+ agentic-learning → github.com/FavioVazquez/agentic-learning (main)
57
57
  impeccable → github.com/pbakaus/impeccable (main)
58
58
 
59
59
  Files updated:
@@ -75,11 +75,11 @@ Wait for confirmation.
75
75
 
76
76
  ```bash
77
77
  TMPDIR=$(mktemp -d)
78
- AGENTIC_LEARN_TMP="$TMPDIR/agentic-learn"
78
+ AGENTIC_LEARN_TMP="$TMPDIR/agentic-learning"
79
79
  IMPECCABLE_TMP="$TMPDIR/impeccable"
80
80
 
81
- echo "Cloning agentic-learn..."
82
- git clone --depth 1 https://github.com/FavioVazquez/agentic-learn.git "$AGENTIC_LEARN_TMP"
81
+ echo "Cloning agentic-learning..."
82
+ git clone --depth 1 https://github.com/FavioVazquez/agentic-learning.git "$AGENTIC_LEARN_TMP"
83
83
 
84
84
  echo "Cloning impeccable..."
85
85
  git clone --depth 1 https://github.com/pbakaus/impeccable.git "$IMPECCABLE_TMP"
@@ -223,7 +223,7 @@ node bin/install.js --all
223
223
 
224
224
  This ensures:
225
225
  - **Windsurf** — skills already live in `.windsurf/skills/` (updated in place above)
226
- - **Claude Code** — `~/.claude/plugins/learnship/` rebuilt with updated skill content + rewritten `references/` paths
226
+ - **Claude Code** — `~/.claude/skills/` rebuilt with updated skill content + rewritten `references/` paths
227
227
  - **OpenCode / Gemini CLI / Codex** — `learnship/skills/` context files updated
228
228
 
229
229
  ---
@@ -247,7 +247,7 @@ Display summary:
247
247
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
248
248
 
249
249
  agentic-learning:
250
- SKILL.md ✓ synced from FavioVazquez/agentic-learn
250
+ SKILL.md ✓ synced from FavioVazquez/agentic-learning
251
251
  references/ ✓ synced ([N] files)
252
252
 
253
253
  impeccable:
@@ -256,7 +256,7 @@ impeccable:
256
256
 
257
257
  All platforms updated (installer re-run):
258
258
  Windsurf ✓ skills updated in place
259
- Claude Code ✓ plugins/learnship/ rebuilt
259
+ Claude Code ✓ ~/.claude/skills/ rebuilt
260
260
  Other platforms ✓ learnship/skills/ context files updated
261
261
 
262
262
  Backup saved at: .windsurf/skills/.upstream-backup-<timestamp>/
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "learnship",
3
- "version": "1.9.22",
3
+ "version": "1.9.24",
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",