πŸš€ Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more β†’
Sign In

learnship

Package Overview
Dependencies
Maintainers
1
Versions
50
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

learnship - npm Package Compare versions

Comparing version
2.3.0
to
2.3.1
+1
-1
.claude-plugin/plugin.json
{
"name": "learnship",
"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.",
"version": "2.3.0",
"version": "2.3.1",
"author": {

@@ -6,0 +6,0 @@ "name": "Favio Vazquez",

@@ -5,3 +5,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.",
"version": "2.3.0",
"version": "2.3.1",
"logo": "assets/logo.png",

@@ -8,0 +8,0 @@ "author": {

{
"name": "learnship",
"version": "2.3.0",
"version": "2.3.1",
"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,0 +5,0 @@ "author": "Favio Vazquez",

@@ -9,3 +9,3 @@ ---

**Use before:** `/new-project` on a brownfield (existing) codebase.
**Use before:** `/new-project` on a brownfield (existing) codebase, or before `/new-milestone` when the codebase has changed significantly.

@@ -12,0 +12,0 @@ **Philosophy:** Each agent gets fresh context, explores a specific domain, and writes documents directly. The orchestrator only confirms what was created β€” it never receives document contents.

@@ -103,2 +103,60 @@ ---

## Step 6a: Codebase Map Check
Check if the codebase has changed significantly since the last map:
```bash
node -e "
const fs=require('fs');
const hasCbMap=fs.existsSync('.planning/codebase');
if(!hasCbMap){console.log('NO_MAP');}
else{
const mapFiles=fs.readdirSync('.planning/codebase').filter(f=>f.endsWith('.md'));
const mapAge=mapFiles.length>0?Math.max(...mapFiles.map(f=>fs.statSync('.planning/codebase/'+f).mtimeMs)):0;
const daysSinceMap=Math.floor((Date.now()-mapAge)/(1000*60*60*24));
console.log('HAS_MAP');console.log('map_files: '+mapFiles.length);console.log('days_since_update: '+daysSinceMap);
}
"
```
**If `NO_MAP`:** Offer codebase mapping:
```
AskUserQuestion([
{
header: "Codebase Map",
question: "No codebase map found. The codebase may have evolved since the last milestone. Want to map it before planning new features?",
multiSelect: false,
options: [
{ label: "Map codebase (Recommended)", description: "Run /map-codebase to analyze current architecture, then return here" },
{ label: "Skip", description: "Continue without mapping β€” I know the current state" }
]
}
])
```
- **Map codebase:** Tell the user: "Run `/map-codebase` first, then come back to `/new-milestone`." Then **STOP. Exit this workflow.**
- **Skip:** Continue to Step 6b.
**If `HAS_MAP` and `days_since_update` > 30:** Offer to refresh:
```
AskUserQuestion([
{
header: "Stale Codebase Map",
question: "Your codebase map is [N] days old. Want to refresh it before planning new features?",
multiSelect: false,
options: [
{ label: "Refresh map", description: "Run /map-codebase to update, then return here" },
{ label: "Use existing map", description: "Current map is close enough" }
]
}
])
```
- **Refresh map:** Tell the user: "Run `/map-codebase` first, then come back to `/new-milestone`." Then **STOP. Exit this workflow.**
- **Use existing map:** Continue to Step 6b.
**If `HAS_MAP` and `days_since_update` <= 30:** Continue silently to Step 6b.
## Step 6b: Config Review

@@ -105,0 +163,0 @@

@@ -43,9 +43,14 @@ ---

const fs=require('fs'),path=require('path');
function walk(dir,skip){let n=0;try{for(const e of fs.readdirSync(dir,{withFileTypes:true})){const f=path.join(dir,e.name);if(skip.some(s=>f.includes(s)))continue;n+=e.isDirectory()?walk(f,skip):1;}}catch(e){}return n;}
const n=walk('.',['/.git/','node_modules','.planning','__pycache__','.venv']);
console.log(n>2?'HAS_CODE':'BLANK');console.log(n+' files');
const skip=new Set(['.git','node_modules','.planning','__pycache__','.venv','.windsurf','.claude','.cursor','.codex','.gemini','.opencode','.config']);
const codeExt=new Set(['.ts','.js','.py','.go','.rs','.swift','.java','.kt','.c','.cpp','.h','.cs','.rb','.php','.dart','.scala','.lua','.r','.R','.zig','.ex','.exs','.clj']);
const pkgFiles=['package.json','requirements.txt','Cargo.toml','go.mod','Package.swift','build.gradle','pom.xml','Gemfile','composer.json','pubspec.yaml','CMakeLists.txt','Makefile','mix.exs'];
function hasCode(dir,depth){if(depth>3)return false;try{for(const e of fs.readdirSync(dir,{withFileTypes:true})){if(e.isFile()&&codeExt.has(path.extname(e.name)))return true;if(e.isDirectory()&&!skip.has(e.name)&&hasCode(path.join(dir,e.name),depth+1))return true;}}catch{}return false;}
const hasPkg=pkgFiles.some(f=>fs.existsSync(f));
const hasCodeFiles=hasCode('.',0);
const hasCbMap=fs.existsSync('.planning/codebase');
if(hasCodeFiles||hasPkg){console.log('HAS_CODE');console.log('has_package: '+(hasPkg?'yes':'no'));console.log('has_codebase_map: '+(hasCbMap?'yes':'no'));console.log('needs_map: '+(!hasCbMap?'yes':'no'));}else{console.log('BLANK');}
"
```
**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.
**If HAS_CODE:** Note this internally as `EXISTING_CODEBASE = true`. Also record `needs_map` (true if `.planning/codebase/` doesn't exist yet). You will offer codebase mapping 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.

@@ -73,11 +78,45 @@ Check if git is initialized:

## Step 1b: Existing Codebase Scan (only if EXISTING_CODEBASE = true)
## Step 1b: Existing Codebase Handling (only if EXISTING_CODEBASE = true)
If `EXISTING_CODEBASE = true`, do a quick structural scan before questioning so your follow-up questions are grounded in reality:
If `EXISTING_CODEBASE = true`, first check whether a codebase map is needed.
**If `needs_map` is true** (existing code detected but no `.planning/codebase/`):
```
AskUserQuestion([
{
header: "Existing Codebase Detected",
question: "I detected existing code in this directory. Would you like to map the codebase first? This produces structured reference docs that make the questioning phase sharper.",
multiSelect: false,
options: [
{ label: "Map codebase first (Recommended)", description: "Run /map-codebase to analyze architecture, stack, conventions, and concerns β€” then return here" },
{ label: "Quick scan only", description: "Do a fast structural scan and continue without full mapping" },
{ label: "Skip β€” I know this codebase", description: "Proceed directly to configuration questions" }
]
}
])
```
> πŸ›‘ STOP. Wait for the user's reply before continuing.
- **Map codebase first:** Tell the user: "Run `/map-codebase` first, then come back to `/new-project` β€” the codebase map will be available for the questioning phase." Then **STOP. Exit this workflow.** The user will return to `/new-project` after mapping completes.
- **Quick scan only:** Continue with the quick scan below.
- **Skip:** Continue directly to Step 2 (configuration).
**If `needs_map` is false** (codebase map already exists): Read the existing map for context and continue with the quick scan below.
**Quick structural scan** (for "Quick scan only" or when map already exists):
```bash
find . -maxdepth 3 -not -path './.git/*' -not -path './node_modules/*' -not -path './.planning/*' -not -path './__pycache__/*' -not -path './.venv/*' | sort | head -40
# PowerShell: Get-ChildItem -Recurse -Depth 3 | Where-Object { $_.FullName -notmatch '\.git|node_modules|\.planning|__pycache__|\.venv' } | Select-Object -First 40
find . -maxdepth 3 -not -path './.git/*' -not -path './node_modules/*' -not -path './.planning/*' -not -path './__pycache__/*' -not -path './.venv/*' -not -path './.windsurf/*' -not -path './.claude/*' -not -path './.cursor/*' -not -path './.codex/*' -not -path './.gemini/*' -not -path './.opencode/*' | sort | head -40
# PowerShell: Get-ChildItem -Recurse -Depth 3 | Where-Object { $_.FullName -notmatch '\.git|node_modules|\.planning|__pycache__|\.venv|\.windsurf|\.claude|\.cursor|\.codex|\.gemini|\.opencode' } | Select-Object -First 40
```
If `.planning/codebase/` exists, also read the summary docs:
```bash
cat .planning/codebase/ARCHITECTURE.md 2>/dev/null | head -40
cat .planning/codebase/STACK.md 2>/dev/null | head -40
cat .planning/codebase/CONCERNS.md 2>/dev/null | head -20
```
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.

@@ -1044,2 +1083,4 @@

πŸ’‘ Building on an existing codebase? Run `/ideate` for codebase-grounded idea generation β€” it scans your code for hotspots and improvement opportunities.
πŸ’‘ Working near sensitive areas (auth, payments, migrations)? Run `/guard [scope]` to activate safety mode.

@@ -1046,0 +1087,0 @@

@@ -226,3 +226,3 @@ ---

- **Windsurf** β€” skills already live in `.windsurf/skills/` (updated in place above)
- **Claude Code** β€” `~/.claude/skills/` rebuilt with updated skill content + rewritten `references/` paths
- **Claude Code** β€” Claude skills directory rebuilt with updated skill content + rewritten `references/` paths
- **OpenCode / Gemini CLI / Codex** β€” `learnship/skills/` context files updated

@@ -260,3 +260,3 @@

Windsurf βœ“ skills updated in place
Claude Code βœ“ ~/.claude/skills/ rebuilt
Claude Code βœ“ skills directory rebuilt
Other platforms βœ“ learnship/skills/ context files updated

@@ -263,0 +263,0 @@

{
"name": "learnship",
"version": "2.3.0",
"version": "2.3.1",
"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,0 +5,0 @@ "keywords": [