palskills 1.0.4 → 1.0.6

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.
Files changed (3) hide show
  1. package/README.md +9 -7
  2. package/bin/palskills.js +293 -166
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -48,17 +48,19 @@ palskills
48
48
  ║ AI Development Pipeline ║
49
49
  ╚══════════════════════════════════════╝
50
50
 
51
- Select coding agent:
51
+ What do you want to do?
52
52
 
53
- [1] Codex CLI → .codex.md
54
- [2] Cursor → .cursorrules
55
- [3] Claude Code CLAUDE.md
56
- [4] All generate all
53
+ [1] Learn Project bootstrap .palbox/ (Lyleen)
54
+ [2] Codex CLI → .codex.md
55
+ [3] Cursor → .cursorrules
56
+ [4] Claude Code CLAUDE.md
57
+ [5] All Agents → generate all configs
57
58
 
58
- Choose [1-4]:
59
+ Choose [1-5]:
59
60
  ```
60
61
 
61
- Select an agent to instantly generate its config file with SOLID + SRP rules + palbox knowledge graph conventions.
62
+ **Step 1:** Pick `[1]` to analyze the project and create a `.palbox/` knowledge graph.
63
+ **Step 2:** Pick `[2-5]` to generate agent configs with SOLID + SRP + palbox conventions.
62
64
 
63
65
  ### One-shot (without installing)
64
66
  ```bash
package/bin/palskills.js CHANGED
@@ -29,22 +29,30 @@ async function main() {
29
29
  box('PALSKILLS\nAI Development Pipeline');
30
30
 
31
31
  console.log('');
32
- console.log(` ${BOLD}Select coding agent:${NC}`);
32
+ console.log(` ${BOLD}What do you want to do?${NC}`);
33
33
  console.log('');
34
- console.log(` ${MAGENTA}[1]${NC} Codex CLI → .codex.md`);
35
- console.log(` ${MAGENTA}[2]${NC} Cursor → .cursorrules`);
36
- console.log(` ${MAGENTA}[3]${NC} Claude Code CLAUDE.md`);
37
- console.log(` ${MAGENTA}[4]${NC} All generate all`);
34
+ console.log(` ${MAGENTA}[1]${NC} Learn Project bootstrap .palbox/ (Lyleen)`);
35
+ console.log(` ${MAGENTA}[2]${NC} Codex CLI → .codex/skills/`);
36
+ console.log(` ${MAGENTA}[3]${NC} Cursor → .cursor/skills/`);
37
+ console.log(` ${MAGENTA}[4]${NC} Claude Code .claude/skills/`);
38
+ console.log(` ${MAGENTA}[5]${NC} All Agents → generate all configs`);
38
39
  console.log('');
39
40
 
40
- const choice = await ask(` Choose [1-4]: `);
41
+ const choice = await ask(` Choose [1-5]: `);
41
42
  console.log('');
42
43
 
44
+ if (choice === '1') {
45
+ bootstrapPalbox();
46
+ installSkills();
47
+ console.log(`\n ${GREEN}✅ Done!${NC} .palbox/ created. Run again to generate agent configs.\n`);
48
+ process.exit(0);
49
+ }
50
+
43
51
  const agents = [];
44
- if (choice === '1') agents.push('codex');
45
- else if (choice === '2') agents.push('cursor');
46
- else if (choice === '3') agents.push('claude');
47
- else if (choice === '4') agents.push('codex', 'cursor', 'claude');
52
+ if (choice === '2') agents.push('codex');
53
+ else if (choice === '3') agents.push('cursor');
54
+ else if (choice === '4') agents.push('claude');
55
+ else if (choice === '5') agents.push('codex', 'cursor', 'claude');
48
56
  else { console.log(' Invalid choice. Exiting.'); process.exit(1); }
49
57
 
50
58
  for (const agent of agents) {
@@ -57,179 +65,298 @@ async function main() {
57
65
  console.log(`\n ${GREEN}✅ Done!${NC} Restart Hermes Agent to load skills.\n`);
58
66
  }
59
67
 
60
- function generate(agent) {
68
+ function bootstrapPalbox() {
61
69
  const cwd = process.cwd();
70
+ const palbox = path.join(cwd, '.palbox');
62
71
 
63
- if (agent === 'codex') {
64
- const file = path.join(cwd, '.codex.md');
65
- fs.writeFileSync(file, codexRules());
66
- console.log(` ${GREEN}✓${NC} .codex.md`);
72
+ if (fs.existsSync(palbox)) {
73
+ console.log(` ${YELLOW}⚠${NC} .palbox/ already exists. Skipping bootstrap.\n`);
74
+ console.log(' To re-analyze, delete .palbox/ and run again.\n');
75
+ return;
67
76
  }
68
77
 
69
- if (agent === 'cursor') {
70
- const file = path.join(cwd, '.cursorrules');
71
- fs.writeFileSync(file, cursorRules());
72
- console.log(` ${GREEN}✓${NC} .cursorrules`);
78
+ console.log(` ${CYAN}🔍 Analyzing project...${NC}\n`);
79
+
80
+ // Detect tech stack
81
+ const files = fs.readdirSync(cwd);
82
+ const hasFile = name => files.includes(name);
83
+ let language = 'Unknown';
84
+ let framework = '';
85
+ let pkgManager = '';
86
+
87
+ if (hasFile('package.json')) {
88
+ const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf8'));
89
+ language = 'TypeScript/JavaScript';
90
+ framework = pkg.dependencies?.next ? 'Next.js' :
91
+ pkg.dependencies?.react ? 'React' :
92
+ pkg.dependencies?.express ? 'Express' :
93
+ pkg.dependencies?.fastify ? 'Fastify' : 'Node.js';
94
+ pkgManager = hasFile('pnpm-lock.yaml') ? 'pnpm' :
95
+ hasFile('yarn.lock') ? 'yarn' : 'npm';
96
+ } else if (hasFile('requirements.txt') || hasFile('pyproject.toml')) {
97
+ language = 'Python';
98
+ framework = hasFile('pyproject.toml') ? 'Poetry' : 'pip';
99
+ if (fs.existsSync(path.join(cwd, 'pyproject.toml'))) {
100
+ try {
101
+ const toml = fs.readFileSync(path.join(cwd, 'pyproject.toml'), 'utf8');
102
+ if (toml.includes('fastapi')) framework = 'FastAPI';
103
+ else if (toml.includes('django')) framework = 'Django';
104
+ else if (toml.includes('flask')) framework = 'Flask';
105
+ } catch {}
106
+ }
107
+ } else if (hasFile('go.mod')) {
108
+ language = 'Go';
109
+ framework = 'Go modules';
110
+ } else if (hasFile('Cargo.toml')) {
111
+ language = 'Rust';
112
+ framework = 'Cargo';
73
113
  }
74
114
 
75
- if (agent === 'claude') {
76
- const file = path.join(cwd, 'CLAUDE.md');
77
- fs.writeFileSync(file, claudeRules());
78
- console.log(` ${GREEN}✓${NC} CLAUDE.md`);
115
+ // Detect project name
116
+ let projectName = path.basename(cwd);
117
+ if (hasFile('package.json')) {
118
+ try {
119
+ const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf8'));
120
+ if (pkg.name) projectName = pkg.name;
121
+ } catch {}
79
122
  }
80
- }
81
123
 
82
- function codexRules() {
83
- return `# Codex Rules — Palskills
84
- # Generated by palskills CLI
124
+ // Get git info
125
+ let gitContributors = '';
126
+ try {
127
+ const { execSync } = require('child_process');
128
+ gitContributors = execSync('git log --format="%an" | sort | uniq -c | sort -rn | head -3', { cwd, encoding: 'utf8' }).trim();
129
+ } catch {}
85
130
 
86
- ## SOLID Principles (Enforced)
87
- 1. **Single Responsibility:** Every class/module/function has exactly ONE reason to change.
88
- 2. **Open/Closed:** Extend via inheritance/composition, never modify existing code.
89
- 3. **Liskov Substitution:** Subtypes must be fully substitutable for their base types.
90
- 4. **Interface Segregation:** Small, focused interfaces. No client depends on unused methods.
91
- 5. **Dependency Inversion:** Depend on abstractions. Inject dependencies.
131
+ // Create palbox structure
132
+ fs.mkdirSync(path.join(palbox, 'flows'), { recursive: true });
133
+ fs.mkdirSync(path.join(palbox, 'history'), { recursive: true });
134
+ fs.mkdirSync(path.join(palbox, 'plans'), { recursive: true });
92
135
 
93
- ## SRP Enforcement
94
- - Repository → data access ONLY
95
- - Service → business logic ONLY
96
- - Validator → validation rules ONLY
97
- - Model → data structures ONLY
98
- - If a class mixes these, REFACTOR immediately.
99
-
100
- ## Code Structure
101
- - No file exceeds 200 lines without strong justification.
102
- - Business logic → services/. Data access → repositories/. Validation → validators/.
103
- - Models are pure data structures — no methods, no logic.
104
-
105
- ## Language
106
- ALL code, comments, docstrings, variable names, and commit messages MUST be in English.
107
-
108
- ## Git
109
- - One commit per logical change.
110
- - Conventional commits: feat(scope): description / fix(scope): description / test(scope): description
111
-
112
- ## Palbox Knowledge Graph (CRITICAL)
113
- ### Before you start ANY task
114
- 1. **Check if .palbox/ exists.** If not, the project has not been bootstrapped yet.
115
- 2. **Read the core nodes:**
116
- - .palbox/README.md — project identity, tech stack, goals
117
- - .palbox/architecture.md — folder structure, design patterns, key modules
118
- - .palbox/methods.md — coding conventions, testing strategy, git workflow
119
- 3. **Search for related past work:**
120
- - Search for keywords in .palbox/flows/ and .palbox/history/
121
- - Follow wikilinks to discover connected context
122
- 4. **Read relevant flows** in .palbox/flows/ — they document how features work end-to-end
123
- 5. **Read relevant history** in .palbox/history/ — past plans, executions, lessons learned
124
-
125
- ### After you complete a task
126
- - Record what you did. The Palskills system (Panthalus) will create a .palbox/history/YYYY-MM-DD-feature.md node with wikilinks to related entries.
127
- - If you discovered new patterns, conventions, or pitfalls, note them — they enrich the graph.
128
- `;
129
- }
136
+ const date = new Date().toISOString().split('T')[0];
130
137
 
131
- function cursorRules() {
132
- return `# Cursor Rules — Palskills
133
- # Generated by palskills CLI
134
-
135
- ## Core Principles
136
- You are working in a project managed by the Palskills development system.
137
- Always follow these rules.
138
-
139
- ### SOLID
140
- 1. **S** — Single Responsibility: one class, one reason to change.
141
- 2. **O** — Open/Closed: extend, don't modify.
142
- 3. **L** — Liskov Substitution: subtypes fully substitutable.
143
- 4. **I** — Interface Segregation: small interfaces, no fat abstractions.
144
- 5. **D** — Dependency Inversion: depend on abstractions, inject deps.
145
-
146
- ### SRP (Single Responsibility Pattern)
147
- - Repository classes: data access ONLY
148
- - Service classes: business logic ONLY
149
- - Validator classes: validation rules ONLY
150
- - Model classes: data structures ONLY
151
- - If any module mixes these, REFACTOR.
152
-
153
- ### Language
154
- ALL code, comments, docs, variable names, and commit messages MUST be in English.
155
-
156
- ### Git
157
- - One commit per logical change
158
- - Conventional commits format: feat(scope): / fix(scope): / test(scope):
159
-
160
- ### Project Context — Palbox Knowledge Graph
161
- Before you start ANY task:
162
- 1. **Check if .palbox/ exists.** Read the core nodes:
163
- - .palbox/README.md — project identity, stack, goals
164
- - .palbox/architecture.md — folder structure, patterns, key modules
165
- - .palbox/methods.md — conventions, testing, git workflow
166
- 2. **Search .palbox/flows/ and .palbox/history/** for related past work.
167
- 3. **Follow wikilinks** — they connect related nodes in the knowledge graph.
168
-
169
- After completing work:
170
- - The Palskills system (Panthalus) records to .palbox/history/ with bi-directional links.
171
-
172
- ### Code Quality
173
- - No file exceeds 200 lines without strong justification.
174
- - Every function has a clear, single purpose.
175
- - Prefer composition over inheritance.
176
- - Write tests for all new logic.
177
- `;
178
- }
138
+ // README.md
139
+ fs.writeFileSync(path.join(palbox, 'README.md'), `# ${projectName}
179
140
 
180
- function claudeRules() {
181
- return `# CLAUDE.md Palskills
182
- # Generated by palskills CLI
141
+ **Generated:** ${date}
142
+ **Bootstrapped by:** Lyleen (Palskills)
183
143
 
184
- ## Who You Are
185
- You are an AI coding assistant working in a Palskills-managed project.
186
- You follow SOLID principles, Single Responsibility Pattern, and write all code in English.
144
+ ## Overview
145
+ [Project description update this]
187
146
 
188
- ## SOLID (Strict)
189
- 1. **Single Responsibility:** Every class, module, and function has exactly ONE reason to change.
190
- 2. **Open/Closed:** Open for extension via inheritance/composition, closed for modification.
191
- 3. **Liskov Substitution:** Derived classes must be fully substitutable for base classes.
192
- 4. **Interface Segregation:** Many small, focused interfaces — no fat abstractions.
193
- 5. **Dependency Inversion:** Depend on abstractions, inject dependencies. Never instantiate collaborators in business logic.
194
-
195
- ## SRP (Single Responsibility Pattern)
196
- - Repository classes data access ONLY
197
- - Service classes → business logic ONLY
198
- - Validator classes → validation rules ONLY
199
- - Model classes data structures ONLY (no methods, no logic)
200
- - If a class mixes these concerns, REFACTOR immediately.
201
-
202
- ## Code Structure
147
+ ## Tech Stack
148
+ - **Language:** ${language}
149
+ - **Framework:** ${framework}${pkgManager ? `\n- **Package Manager:** ${pkgManager}` : ''}
150
+
151
+ ## Project Goal
152
+ [What problem does this project solve? update this]
153
+
154
+ ## Quick Start
155
+ [How to run the project update this]
156
+
157
+ ## Knowledge Graph
158
+ - [[architecture]] folder structure and design patterns
159
+ - [[methods]] coding conventions and standards
160
+ - [[flows/]] — feature workflow documentation
161
+ - [[history/]] — past development sessions
162
+ `);
163
+
164
+ // architecture.md
165
+ let dirTree = '';
166
+ try {
167
+ const result = fs.readdirSync(cwd, { withFileTypes: true })
168
+ .filter(d => d.isDirectory() && !d.name.startsWith('.') && d.name !== 'node_modules' && d.name !== '__pycache__')
169
+ .map(d => `├── ${d.name}/`)
170
+ .join('\n');
171
+ dirTree = result || '(empty)';
172
+ } catch { dirTree = '(unknown)'; }
173
+
174
+ fs.writeFileSync(path.join(palbox, 'architecture.md'), `# Architecture
175
+
176
+ **Last Updated:** ${date}
177
+
178
+ ## Folder Structure
203
179
  \`\`\`
204
- src/
205
- ├── models/ # Pure data structures
206
- ├── repositories/ # Data access layer
207
- ├── services/ # Business logic
208
- ├── validators/ # Validation rules
209
- └── interfaces/ # Abstract bases & protocols
180
+ ${projectName}/
181
+ ${dirTree}
210
182
  \`\`\`
211
183
 
212
- ## Language
213
- ALL code, comments, docstrings, variable names, function names, and commit messages MUST be in English.
214
-
215
- ## Git
216
- - One commit per logical change.
217
- - Conventional commits: feat(scope): / fix(scope): / test(scope):
218
- - Never commit generated files, node_modules, or secrets.
219
-
220
- ## Project Context — Palbox Knowledge Graph
221
- Before starting any task:
222
- 1. Check if .palbox/ exists. Read the core nodes:
223
- - .palbox/README.md — project identity, stack, goals
224
- - .palbox/architecture.mdfolder structure, patterns, key modules
225
- - .palbox/methods.mdconventions, testing, git workflow
226
- 2. Search .palbox/flows/ and .palbox/history/ for related past work.
227
- 3. Follow wikilinks — they connect related nodes in the knowledge graph.
228
-
229
- After completing work:
230
- - The Palskills system (Panthalus) records your session to .palbox/history/ with bi-directional wikilinks.
231
- - If you discovered patterns, pitfalls, or conventions worth preserving, note them.
232
- `;
184
+ ## Design Patterns
185
+ [Detected patterns update this]
186
+
187
+ ## Key Modules
188
+ | Module | Responsibility | Key Files |
189
+ |--------|---------------|-----------|
190
+ | ... | ... | ... |
191
+
192
+ ## Data Flow
193
+ [How data moves through the system]
194
+
195
+ ## Related
196
+ - [[methods]]how we build
197
+ - [[README]]project overview
198
+ `);
199
+
200
+ // methods.md
201
+ fs.writeFileSync(path.join(palbox, 'methods.md'), `# Development Methods
202
+
203
+ **Last Updated:** ${date}
204
+
205
+ ## Coding Conventions
206
+ [Detected from codebase — update this]
207
+
208
+ ## Testing Strategy
209
+ [Detected from test files — update this]
210
+
211
+ ## Git Workflow
212
+ ${gitContributors ? `\n**Top Contributors:**\n\`\`\`\n${gitContributors}\n\`\`\`` : '[Run git log to populate]'}
213
+
214
+ ## Code Review Standards
215
+ - SOLID principles enforced
216
+ - Single Responsibility Pattern required
217
+ - All code in English
218
+
219
+ ## Related
220
+ - [[architecture]] — where things live
221
+ - [[README]] — project overview
222
+ `);
223
+
224
+ console.log(` ${GREEN}✓${NC} .palbox/README.md`);
225
+ console.log(` ${GREEN}✓${NC} .palbox/architecture.md`);
226
+ console.log(` ${GREEN}✓${NC} .palbox/methods.md`);
227
+ console.log(` ${GREEN}✓${NC} .palbox/flows/`);
228
+ console.log(` ${GREEN}✓${NC} .palbox/history/`);
229
+ console.log(` ${GREEN}✓${NC} .palbox/plans/`);
230
+ console.log('');
231
+ console.log(` Detected: ${language} + ${framework}`);
232
+ if (gitContributors) console.log(` Git history found`);
233
+ console.log('');
234
+ console.log(` Next steps:`);
235
+ console.log(` 1. Edit .palbox/README.md with project details`);
236
+ console.log(` 2. Run 'palskills' again to generate agent configs`);
237
+ console.log(` 3. Or use Hermes skills: "Load lyleen, build feature X"`);
238
+ }
239
+
240
+ function generate(agent) {
241
+ const cwd = process.cwd();
242
+ const skillNames = ['lyleen', 'jetdragon', 'anubis', 'panthalus', 'astralym'];
243
+
244
+ let dir;
245
+ if (agent === 'codex') dir = path.join(cwd, '.codex', 'skills');
246
+ else if (agent === 'cursor') dir = path.join(cwd, '.cursor', 'skills');
247
+ else if (agent === 'claude') dir = path.join(cwd, '.claude', 'skills');
248
+
249
+ fs.mkdirSync(dir, { recursive: true });
250
+
251
+ for (const name of skillNames) {
252
+ const file = path.join(dir, `${name}.md`);
253
+ fs.writeFileSync(file, skillContent(agent, name));
254
+ console.log(` ${GREEN}✓${NC} ${dir}/${name}.md`);
255
+ }
256
+ }
257
+
258
+ function skillContent(agent, skill) {
259
+ const skills = {
260
+ lyleen: `# Lyleen — Palbox Knowledge Graph
261
+ **Agent:** ${agent === 'codex' ? 'Codex' : agent === 'cursor' ? 'Cursor' : 'Claude Code'}
262
+
263
+ ## Role
264
+ Read and bootstrap the project knowledge graph (.palbox/).
265
+
266
+ ## If .palbox/ does NOT exist — BOOTSTRAP:
267
+ 1. Scan project: read package.json/requirements.txt/go.mod, list dirs, check git log, find tests
268
+ 2. Create .palbox/README.md — project name, tech stack, goals, [[links]]
269
+ 3. Create .palbox/architecture.md — folder tree, design patterns, key modules
270
+ 4. Create .palbox/methods.md — conventions, testing, git workflow
271
+ 5. Create .palbox/flows/, .palbox/history/, .palbox/plans/
272
+ 6. Report: "Palbox bootstrapped. N files. Detected: [stack]."
273
+
274
+ ## If .palbox/ EXISTS — RETRIEVE:
275
+ 1. Read README.md, architecture.md, methods.md
276
+ 2. Search flows/ and history/ for user keywords
277
+ 3. Extract [[wikilinks]], follow 1-2 hops
278
+ 4. Return context subgraph: seeds → 1-hop → 2-hop → conventions
279
+ `,
280
+ jetdragon: `# Jetdragon — Planner
281
+ **Agent:** ${agent === 'codex' ? 'Codex' : agent === 'cursor' ? 'Cursor' : 'Claude Code'}
282
+
283
+ ## Role
284
+ Create detailed implementation plans. Ask questions until clear.
285
+
286
+ ## Process
287
+ 1. Gather palbox context (read core docs, search related history)
288
+ 2. Generate plan → .palbox/plans/YYYY-MM-DD-feature.md with [[wikilinks]]
289
+ 3. If ambiguous, ASK: scope, design, edge cases, integration, priority
290
+ 4. Iterate until user says "Gas", "Go", "Execute"
291
+ 5. Finalize as APPROVED, hand off to Anubis
292
+
293
+ ## Plan Template
294
+ - Overview, Scope (in/out), Tasks (ordered, with files + verification)
295
+ - Architecture notes, SOLID focus, Risks & Mitigations
296
+ - All references use [[wikilinks]] to .palbox/ entries
297
+ `,
298
+ anubis: `# Anubis — Developer
299
+ **Agent:** ${agent === 'codex' ? 'Codex' : agent === 'cursor' ? 'Cursor' : 'Claude Code'}
300
+
301
+ ## Role
302
+ Execute approved plans. SOLID + SRP enforced. English only.
303
+
304
+ ## SOLID (Strict)
305
+ - **S**: One class, one reason to change
306
+ - **O**: Extend, never modify existing
307
+ - **L**: Subtypes fully substitutable
308
+ - **I**: Small focused interfaces
309
+ - **D**: Depend on abstractions, inject deps
310
+
311
+ ## SRP Separation
312
+ - Repository → data access ONLY
313
+ - Service → business logic ONLY
314
+ - Validator → validation rules ONLY
315
+ - Model → data structures ONLY
316
+
317
+ ## Rules
318
+ - ALL code, comments, docstrings, commits in English
319
+ - One commit per logical change (conventional commits)
320
+ - Read existing files before modifying
321
+ - Write tests if project has testing patterns
322
+ `,
323
+ panthalus: `# Panthalus — Archivist
324
+ **Agent:** ${agent === 'codex' ? 'Codex' : agent === 'cursor' ? 'Cursor' : 'Claude Code'}
325
+
326
+ ## Role
327
+ Record sessions to .palbox/ with bi-directional [[wikilinks]].
328
+
329
+ ## Process
330
+ 1. Collect: plan, git diff, commits, decisions, lessons
331
+ 2. Create .palbox/history/YYYY-MM-DD-feature.md with [[wikilinks]]
332
+ 3. For EVERY link, add backlink to the target file ("Related Sessions")
333
+ 4. Update core docs (architecture/methods) only if structure changed
334
+ 5. Report graph stats: nodes, edges, enriched
335
+
336
+ ## History Entry Template
337
+ - Links ([[flows/]], [[architecture]], [[history/]])
338
+ - Original prompt, Plan, Execution (files + commits)
339
+ - Key Decisions table, Lessons Learned (pitfalls, discoveries)
340
+ - Backlinks section
341
+ `,
342
+ astralym: `# Astralym — Orchestrator
343
+ **Agent:** ${agent === 'codex' ? 'Codex' : agent === 'cursor' ? 'Cursor' : 'Claude Code'}
344
+
345
+ ## Role
346
+ Run the full development pipeline automatically.
347
+
348
+ ## Pipeline
349
+ 1. **CHECK_GRAPH** → Lyleen: bootstrap or retrieve context
350
+ 2. **PLANNING** → Jetdragon: create plan, ask questions, wait for "Gas"
351
+ 3. **DEVELOPING** → Anubis: execute with SOLID + SRP
352
+ 4. **RECORDING** → Panthalus: record with backlinks
353
+ 5. **DONE** → Summary with graph stats
354
+
355
+ ## Usage
356
+ User says "Astralym: build feature X" → full pipeline runs.
357
+ `
358
+ };
359
+ return skills[skill] || '';
233
360
  }
234
361
 
235
362
  function installSkills() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "palskills",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "AI-powered development pipeline — 5 Hermes Agent skills orchestrated as a knowledge graph",
5
5
  "keywords": [
6
6
  "hermes-agent",