palskills 1.0.3 → 1.0.5
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/README.md +9 -7
- package/bin/palskills.js +336 -152
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -48,17 +48,19 @@ palskills
|
|
|
48
48
|
║ AI Development Pipeline ║
|
|
49
49
|
╚══════════════════════════════════════╝
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
What do you want to do?
|
|
52
52
|
|
|
53
|
-
[1]
|
|
54
|
-
[2]
|
|
55
|
-
[3]
|
|
56
|
-
[4]
|
|
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-
|
|
59
|
+
Choose [1-5]:
|
|
59
60
|
```
|
|
60
61
|
|
|
61
|
-
|
|
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}
|
|
32
|
+
console.log(` ${BOLD}What do you want to do?${NC}`);
|
|
33
33
|
console.log('');
|
|
34
|
-
console.log(` ${MAGENTA}[1]${NC}
|
|
35
|
-
console.log(` ${MAGENTA}[2]${NC}
|
|
36
|
-
console.log(` ${MAGENTA}[3]${NC}
|
|
37
|
-
console.log(` ${MAGENTA}[4]${NC}
|
|
34
|
+
console.log(` ${MAGENTA}[1]${NC} Learn Project → bootstrap .palbox/ (Lyleen)`);
|
|
35
|
+
console.log(` ${MAGENTA}[2]${NC} Codex CLI → .codex.md`);
|
|
36
|
+
console.log(` ${MAGENTA}[3]${NC} Cursor → .cursorrules`);
|
|
37
|
+
console.log(` ${MAGENTA}[4]${NC} Claude Code → CLAUDE.md`);
|
|
38
|
+
console.log(` ${MAGENTA}[5]${NC} All Agents → generate all configs`);
|
|
38
39
|
console.log('');
|
|
39
40
|
|
|
40
|
-
const choice = await ask(` Choose [1-
|
|
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 === '
|
|
45
|
-
else if (choice === '
|
|
46
|
-
else if (choice === '
|
|
47
|
-
else if (choice === '
|
|
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,6 +65,178 @@ async function main() {
|
|
|
57
65
|
console.log(`\n ${GREEN}✅ Done!${NC} Restart Hermes Agent to load skills.\n`);
|
|
58
66
|
}
|
|
59
67
|
|
|
68
|
+
function bootstrapPalbox() {
|
|
69
|
+
const cwd = process.cwd();
|
|
70
|
+
const palbox = path.join(cwd, '.palbox');
|
|
71
|
+
|
|
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;
|
|
76
|
+
}
|
|
77
|
+
|
|
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';
|
|
113
|
+
}
|
|
114
|
+
|
|
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 {}
|
|
122
|
+
}
|
|
123
|
+
|
|
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 {}
|
|
130
|
+
|
|
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 });
|
|
135
|
+
|
|
136
|
+
const date = new Date().toISOString().split('T')[0];
|
|
137
|
+
|
|
138
|
+
// README.md
|
|
139
|
+
fs.writeFileSync(path.join(palbox, 'README.md'), `# ${projectName}
|
|
140
|
+
|
|
141
|
+
**Generated:** ${date}
|
|
142
|
+
**Bootstrapped by:** Lyleen (Palskills)
|
|
143
|
+
|
|
144
|
+
## Overview
|
|
145
|
+
[Project description — update this]
|
|
146
|
+
|
|
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
|
|
179
|
+
\`\`\`
|
|
180
|
+
${projectName}/
|
|
181
|
+
${dirTree}
|
|
182
|
+
\`\`\`
|
|
183
|
+
|
|
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
|
+
|
|
60
240
|
function generate(agent) {
|
|
61
241
|
const cwd = process.cwd();
|
|
62
242
|
|
|
@@ -80,155 +260,159 @@ function generate(agent) {
|
|
|
80
260
|
}
|
|
81
261
|
|
|
82
262
|
function codexRules() {
|
|
83
|
-
return
|
|
84
|
-
# Generated by palskills CLI
|
|
85
|
-
|
|
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.
|
|
92
|
-
|
|
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
|
-
`;
|
|
263
|
+
return palskillsAgentConfig('Codex');
|
|
129
264
|
}
|
|
130
265
|
|
|
131
266
|
function cursorRules() {
|
|
132
|
-
return
|
|
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
|
-
`;
|
|
267
|
+
return palskillsAgentConfig('Cursor');
|
|
178
268
|
}
|
|
179
269
|
|
|
180
270
|
function claudeRules() {
|
|
181
|
-
return
|
|
182
|
-
|
|
183
|
-
|
|
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.
|
|
187
|
-
|
|
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
|
|
203
|
-
\`\`\`
|
|
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
|
|
210
|
-
\`\`\`
|
|
271
|
+
return palskillsAgentConfig('Claude Code');
|
|
272
|
+
}
|
|
211
273
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
274
|
+
function palskillsAgentConfig(agentName) {
|
|
275
|
+
return `# Palskills — Multi-Mode AI Development System
|
|
276
|
+
# Generated for ${agentName}
|
|
277
|
+
#
|
|
278
|
+
# HOW TO USE: Start your prompt with the skill name.
|
|
279
|
+
# "Lyleen: learn the ftz export module"
|
|
280
|
+
# "Jetdragon: plan a forgot-password feature"
|
|
281
|
+
# "Anubis: implement the approved plan"
|
|
282
|
+
# "Panthalus: record this session"
|
|
283
|
+
#
|
|
284
|
+
# Or let Astralym orchestrate the full flow:
|
|
285
|
+
# "Astralym: build a user dashboard"
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## SKILL MODES
|
|
290
|
+
|
|
291
|
+
You are an AI coding agent with **5 selectable skill modes**. When the user starts a prompt with a skill name followed by a colon, activate that mode immediately.
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
### LYLEEN — Palbox Knowledge Graph
|
|
296
|
+
**Trigger:** Prompt starts with "Lyleen:" or "lyleen:"
|
|
297
|
+
**Role:** Read and bootstrap the project knowledge graph.
|
|
298
|
+
|
|
299
|
+
#### If .palbox/ does NOT exist — BOOTSTRAP:
|
|
300
|
+
1. Scan the project structure:
|
|
301
|
+
- Read package.json / requirements.txt / go.mod / Cargo.toml to detect tech stack
|
|
302
|
+
- List top-level directories (skip .git, node_modules, __pycache__)
|
|
303
|
+
- Read existing README.md if present
|
|
304
|
+
- Check git log for contributors and recent activity
|
|
305
|
+
- Find testing patterns (files matching *test*, *spec*)
|
|
306
|
+
2. Create .palbox/ with this structure:
|
|
307
|
+
- .palbox/README.md — project name, tech stack, goals, quick start, knowledge graph links
|
|
308
|
+
- .palbox/architecture.md — folder structure tree, design patterns, key modules table, data flow
|
|
309
|
+
- .palbox/methods.md — coding conventions, testing strategy, git workflow, code review standards
|
|
310
|
+
3. Create subdirectories: flows/, history/, plans/
|
|
311
|
+
4. Every .md file MUST include wikilinks ([[other-file]]) to connect the graph
|
|
312
|
+
5. Report: "Palbox bootstrapped. N files analyzed. Detected: [tech stack]."
|
|
313
|
+
|
|
314
|
+
#### If .palbox/ EXISTS — CONTEXT RETRIEVAL:
|
|
315
|
+
1. Read .palbox/README.md, .palbox/architecture.md, .palbox/methods.md
|
|
316
|
+
2. Search .palbox/flows/ and .palbox/history/ for keywords in the user query
|
|
317
|
+
3. Extract all [[wikilinks]] from matching files. Follow them 1-2 hops deep.
|
|
318
|
+
4. Return a "Context Subgraph" summary:
|
|
319
|
+
- Seed nodes (direct matches)
|
|
320
|
+
- 1-hop neighbors (linked context)
|
|
321
|
+
- 2-hop neighbors (extended context)
|
|
322
|
+
- Relevant conventions and past decisions
|
|
323
|
+
5. If nothing relevant found, say so clearly.
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
### JETDRAGON — Planner
|
|
328
|
+
**Trigger:** Prompt starts with "Jetdragon:" or "jetdragon:"
|
|
329
|
+
**Role:** Create detailed, actionable implementation plans. Ask questions until the plan is crystal clear.
|
|
330
|
+
|
|
331
|
+
1. First, act like Lyleen to gather palbox context (read core docs, search for related work)
|
|
332
|
+
2. Generate a plan saved to .palbox/plans/YYYY-MM-DD-feature-name.md:
|
|
333
|
+
- Overview (2-3 sentences)
|
|
334
|
+
- Scope: in scope / out of scope
|
|
335
|
+
- Tasks ordered by dependency, each with: what, files to touch, verification steps
|
|
336
|
+
- Architecture notes: patterns to use, SOLID focus
|
|
337
|
+
- Risks and mitigations
|
|
338
|
+
- Use [[wikilinks]] to reference .palbox/ entries
|
|
339
|
+
3. If ANYTHING is ambiguous, ASK the user:
|
|
340
|
+
- Scope: "Should this also handle X?"
|
|
341
|
+
- Design: "Class-based or functional?"
|
|
342
|
+
- Edge cases: "What happens when input is empty?"
|
|
343
|
+
- Integration: "Does this touch the existing auth module?"
|
|
344
|
+
- Priority: "Which task first?"
|
|
345
|
+
4. Iterate: user responds → update plan → ask more → repeat
|
|
346
|
+
5. When the user says "Gas", "Go", "Execute", or "Approved":
|
|
347
|
+
- Update status to APPROVED
|
|
348
|
+
- Output: "Plan approved. Ready for Anubis."
|
|
349
|
+
- Include the full plan for the next step
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
### ANUBIS — Developer
|
|
354
|
+
**Trigger:** Prompt starts with "Anubis:" or "anubis:"
|
|
355
|
+
**Role:** Execute an approved plan following SOLID + SRP. All code in English.
|
|
356
|
+
|
|
357
|
+
1. Read the approved plan from .palbox/plans/ or from the provided context
|
|
358
|
+
2. Execute task by task, in order:
|
|
359
|
+
- Read existing files before modifying
|
|
360
|
+
- Write code following SOLID + SRP
|
|
361
|
+
- Write tests if the project has testing patterns
|
|
362
|
+
- Verify acceptance criteria
|
|
363
|
+
3. **SOLID (strict):**
|
|
364
|
+
- Single Responsibility: one class, one reason to change
|
|
365
|
+
- Open/Closed: extend, never modify existing
|
|
366
|
+
- Liskov Substitution: subtypes fully substitutable
|
|
367
|
+
- Interface Segregation: small focused interfaces
|
|
368
|
+
- Dependency Inversion: depend on abstractions, inject deps
|
|
369
|
+
4. **SRP Separation:**
|
|
370
|
+
- Repository → data access ONLY
|
|
371
|
+
- Service → business logic ONLY
|
|
372
|
+
- Validator → validation rules ONLY
|
|
373
|
+
- Model → data structures ONLY
|
|
374
|
+
- If a class mixes these, REFACTOR immediately
|
|
375
|
+
5. **Language:** ALL code, comments, docstrings, variable names, and commit messages MUST be in English
|
|
376
|
+
6. **Git:** one commit per logical change. Conventional commits format
|
|
377
|
+
7. After all tasks complete, output a summary: files changed, commits made, verification results
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
### PANTHALUS — Archivist
|
|
382
|
+
**Trigger:** Prompt starts with "Panthalus:" or "panthalus:"
|
|
383
|
+
**Role:** Record the session to the .palbox/ knowledge graph with bi-directional links.
|
|
384
|
+
|
|
385
|
+
1. Collect artifacts: the plan, git diff summary, commit messages, decisions made
|
|
386
|
+
2. Create .palbox/history/YYYY-MM-DD-feature-name.md:
|
|
387
|
+
- Links section with [[wikilinks]] to related entries (flows, architecture, past history)
|
|
388
|
+
- Original prompt
|
|
389
|
+
- Plan (full, not summarized)
|
|
390
|
+
- Execution: files changed, commits
|
|
391
|
+
- Key decisions table
|
|
392
|
+
- Lessons learned (pitfalls, discoveries, patterns)
|
|
393
|
+
3. **Create backlinks:** For EVERY [[wikilink]] in the history entry, go to that file and add a reference back:
|
|
394
|
+
- Add "## Related Sessions" section if it does not exist
|
|
395
|
+
- Append "- [[history/YYYY-MM-DD-feature]] — [one-line summary]"
|
|
396
|
+
4. Update core docs only if structural knowledge changed (new modules, new conventions)
|
|
397
|
+
5. Report graph stats: new node, edges created, nodes enriched, total nodes/edges
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
### ASTRALYM — Orchestrator
|
|
402
|
+
**Trigger:** Prompt starts with "Astralym:" or "astralym:"
|
|
403
|
+
**Role:** Run the full development pipeline automatically.
|
|
404
|
+
|
|
405
|
+
1. **CHECK_GRAPH** — Act as Lyleen: bootstrap .palbox/ if missing, or retrieve context subgraph
|
|
406
|
+
2. **PLANNING** — Act as Jetdragon: create plan, ask clarifying questions, wait for "Gas"
|
|
407
|
+
3. **DEVELOPING** — Act as Anubis: execute the approved plan with SOLID + SRP
|
|
408
|
+
4. **RECORDING** — Act as Panthalus: record everything to .palbox/ with backlinks
|
|
409
|
+
5. **DONE** — Report summary with graph stats
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
## DEFAULT MODE
|
|
414
|
+
|
|
415
|
+
When no specific skill is triggered, act as **Anubis** by default — write code following SOLID + SRP, all output in English. Before starting any task, quickly check .palbox/ for relevant context (like Lyleen, but minimal — 30 seconds max).
|
|
232
416
|
`;
|
|
233
417
|
}
|
|
234
418
|
|