prjct-cli 0.28.0 → 0.28.2

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 (46) hide show
  1. package/CHANGELOG.md +64 -12
  2. package/CLAUDE.md +48 -22
  3. package/core/agentic/agent-router.ts +15 -0
  4. package/core/agentic/command-executor.ts +53 -5
  5. package/core/agentic/prompt-builder.ts +83 -2
  6. package/core/agentic/template-loader.ts +107 -32
  7. package/core/commands/command-data.ts +0 -33
  8. package/core/commands/commands.ts +4 -12
  9. package/core/commands/registry.ts +0 -37
  10. package/core/domain/agent-loader.ts +7 -9
  11. package/core/domain/context-estimator.ts +15 -15
  12. package/core/index.ts +0 -2
  13. package/core/infrastructure/config-manager.ts +25 -4
  14. package/core/infrastructure/setup.ts +0 -99
  15. package/core/session/session-log-manager.ts +17 -0
  16. package/core/types/config.ts +1 -1
  17. package/core/types/index.ts +0 -2
  18. package/core/types/integrations.ts +2 -47
  19. package/core/types/storage.ts +0 -8
  20. package/core/types/task.ts +0 -4
  21. package/dist/bin/prjct.mjs +341 -316
  22. package/package.json +1 -1
  23. package/templates/agentic/subagent-generation.md +14 -1
  24. package/templates/commands/cleanup.md +15 -74
  25. package/templates/commands/init.md +1 -44
  26. package/templates/commands/ship.md +92 -12
  27. package/templates/commands/sync.md +25 -10
  28. package/templates/commands/task.md +41 -0
  29. package/templates/global/CLAUDE.md +196 -25
  30. package/templates/mcp-config.json +0 -28
  31. package/core/integrations/notion/client.ts +0 -413
  32. package/core/integrations/notion/index.ts +0 -46
  33. package/core/integrations/notion/setup.ts +0 -235
  34. package/core/integrations/notion/sync.ts +0 -818
  35. package/core/integrations/notion/templates.ts +0 -246
  36. package/core/plugin/builtin/notion.ts +0 -178
  37. package/templates/commands/feature.md +0 -46
  38. package/templates/commands/now.md +0 -53
  39. package/templates/hooks/prjct-session-start.sh +0 -50
  40. package/templates/skills/notion-push.md +0 -116
  41. package/templates/skills/notion-setup.md +0 -199
  42. package/templates/skills/notion-sync.md +0 -290
  43. package/templates/skills/prjct-done/SKILL.md +0 -97
  44. package/templates/skills/prjct-ship/SKILL.md +0 -150
  45. package/templates/skills/prjct-sync/SKILL.md +0 -108
  46. package/templates/skills/prjct-task/SKILL.md +0 -101
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prjct-cli",
3
- "version": "0.28.0",
3
+ "version": "0.28.2",
4
4
  "description": "Built for Claude - Ship fast, track progress, stay focused. Developer momentum tool for indie hackers.",
5
5
  "main": "core/index.ts",
6
6
  "bin": {
@@ -18,16 +18,29 @@ Write sub-agents to: `{globalPath}/agents/` (global storage, NOT local project)
18
18
  ```markdown
19
19
  ---
20
20
  name: agent-name
21
+ agentId: p.agent.{name}
21
22
  description: When to use this agent. Include "Use PROACTIVELY" for auto-invocation.
22
23
  tools: Read, Write, Glob, Grep, Bash
23
24
  model: sonnet
24
25
  skills: [skill-name]
26
+ projectId: {projectId}
27
+ projectPath: {projectPath}
25
28
  ---
26
29
 
27
30
  Agent system prompt here...
28
31
  ```
29
32
 
30
- **The `skills` field links the agent to Claude Code skills from claude-plugins.dev.**
33
+ **Required fields:**
34
+ - `agentId`: Unique identifier for mentions. Format: `p.agent.{name}` (e.g., `p.agent.backend`, `p.agent.frontend`)
35
+ - `skills`: Links the agent to Claude Code skills from claude-plugins.dev
36
+ - `projectId`: Links agent to specific project
37
+ - `projectPath`: Path to project root
38
+
39
+ **Agent ID Convention:**
40
+ - All prjct agents use prefix `p.agent.`
41
+ - The `{name}` is derived from the agent filename without `.md`
42
+ - Examples: `p.agent.backend`, `p.agent.frontend`, `p.agent.workflow`, `p.agent.planner`
43
+ - Users can mention agents in prompts using this ID
31
44
 
32
45
  ## Generation Rules
33
46
 
@@ -1,83 +1,24 @@
1
1
  ---
2
- allowed-tools: [Read, Edit, Write, Bash, Glob, Grep, Task]
3
- description: 'Deep code cleanup - dead code, comments, docs'
2
+ allowed-tools: [Read, Edit, Bash]
3
+ description: 'Code cleanup'
4
+ tool-permissions:
5
+ bash:
6
+ allow: ["git status", "find . -type f", "wc -l"]
7
+ ask: ["rm *", "git clean"]
8
+ deny: ["rm -rf /", "rm -rf ~", "rm -rf .", "git reset --hard"]
4
9
  ---
5
10
 
6
11
  # /p:cleanup
7
12
 
8
- Limpieza profunda del código del proyecto.
9
-
10
- ## Alcance
11
-
12
- ### 1. Código Muerto
13
- - Funciones/métodos no usados
14
- - Variables declaradas sin usar
15
- - Imports no utilizados
16
- - Exports sin consumidores
17
- - Código comentado (bloques `// old code...`)
18
- - Condicionales siempre true/false
19
-
20
- ### 2. Comentarios Inútiles
21
- - `// TODO` sin contexto útil
22
- - `// fix this` genéricos
23
- - Comentarios obvios (`// increment i`)
24
- - Comentarios desactualizados vs código
25
- - Console.log de debug olvidados
26
-
27
- ### 3. Documentación
28
- - Actualizar README si hay cambios estructurales
29
- - Sincronizar JSDoc/TSDoc con firmas actuales
30
- - Limpiar docs de funciones eliminadas
13
+ ## Types
14
+ - **code**: Remove logs, dead code
15
+ - **imports**: Clean unused
16
+ - **files**: Remove temp/empty
17
+ - **deps**: Find unused
18
+ - **all**: Everything
31
19
 
32
20
  ## Flow
33
-
34
- ```
35
- 1. ANALYZE: Escanear codebase con Task(Explore)
36
- - Buscar dead code patterns
37
- - Identificar comentarios verbose
38
-
39
- 2. REPORT: Mostrar hallazgos al usuario
40
- - Listar archivos afectados
41
- - Mostrar qué se eliminará
42
-
43
- 3. CONFIRM: Pedir confirmación antes de cambios destructivos
44
-
45
- 4. CLEAN: Aplicar limpieza
46
- - Editar archivos uno por uno
47
- - Mantener formato/estilo existente
48
-
49
- 5. VALIDATE: Verificar que el código compila/funciona
50
- - Run build si existe
51
- - Run tests si existen
52
-
53
- 6. UPDATE DOCS: Si hay cambios significativos
54
- - Actualizar README
55
- - Actualizar CHANGELOG si existe
56
- ```
57
-
58
- ## Comandos
59
-
60
- | Variante | Acción |
61
- |----------|--------|
62
- | `p. cleanup` | Análisis + reporte (sin cambios) |
63
- | `p. cleanup fix` | Aplicar limpieza con confirmación |
64
- | `p. cleanup --force` | Aplicar sin confirmación |
21
+ Parse type → Backup → Clean → Validate → Log
65
22
 
66
23
  ## Response
67
-
68
- ```
69
- 🧹 Cleanup Analysis
70
-
71
- Dead Code:
72
- - {file}: {N} unused functions
73
- - {file}: {N} unused imports
74
-
75
- Comments:
76
- - {file}: {N} debug logs
77
- - {file}: {N} TODO sin contexto
78
-
79
- Docs:
80
- - README.md: {status}
81
-
82
- Total: {N} issues | Run `p. cleanup fix` to apply
83
- ```
24
+ `🧹 Cleaned: {N} logs, {N} dead code, {N} imports | Freed: {X}MB`
@@ -136,45 +136,6 @@ WRITE: `.prjct/prjct.config.json`
136
136
  }
137
137
  ```
138
138
 
139
- ## Step: Optional Integrations
140
-
141
- After core setup, offer optional integrations.
142
-
143
- ### Notion Integration (Optional)
144
-
145
- Ask: "Would you like to connect with Notion for dashboards and progress tracking?"
146
-
147
- If yes:
148
- 1. Guide user to create Notion integration at https://www.notion.so/my-integrations
149
- 2. Ask for API token (starts with `ntn_`)
150
- 3. Ask for parent page ID (where to create databases)
151
- 4. Create 4 databases:
152
- - prjct: Shipped Features
153
- - prjct: Roadmap
154
- - prjct: Ideas
155
- - prjct: Active Tasks
156
- 5. Store config in `project.json`:
157
-
158
- ```json
159
- {
160
- "integrations": {
161
- "notion": {
162
- "enabled": true,
163
- "workspaceName": "{workspace}",
164
- "databases": {
165
- "shipped": "{dbId}",
166
- "roadmap": "{dbId}",
167
- "ideas": "{dbId}",
168
- "tasks": "{dbId}"
169
- },
170
- "syncOn": { "ship": true, "idea": true }
171
- }
172
- }
173
- }
174
- ```
175
-
176
- If no: Skip and continue (integration can be added later with `/p:notion setup`).
177
-
178
139
  ## Response
179
140
 
180
141
  ```
@@ -189,13 +150,9 @@ Structure:
189
150
  ├── sync/ # Backend events
190
151
  └── agents/ # Specialists
191
152
 
192
- Integrations:
193
- • Notion: {enabled|disabled}
194
-
195
153
  Next:
196
154
  • /p:sync - Analyze project and generate agents
197
- • /p:feature "{first_feature}" - Start first feature
198
- • /p:notion setup - Connect Notion (if skipped)
155
+ • /p:task "{first_task}" - Start first task
199
156
  • /p:help - See all commands
200
157
  ```
201
158
 
@@ -1,6 +1,11 @@
1
1
  ---
2
2
  allowed-tools: [Read, Write, Bash, Glob, Grep, AskUserQuestion]
3
3
  description: 'Ship feature with automated PR workflow'
4
+ tool-permissions:
5
+ bash:
6
+ allow: ["git status", "git log", "git diff", "git add", "git commit", "git push", "gh pr create", "gh pr view", "npm test", "npm run", "bun test", "bun run"]
7
+ ask: ["npm publish", "npm version", "git tag"]
8
+ deny: ["git push --force", "git reset --hard", "git clean -fd", "rm -rf"]
4
9
  ---
5
10
 
6
11
  # /p:ship - Ship Feature
@@ -214,21 +219,96 @@ IF {issues}.length > 0:
214
219
  ELSE:
215
220
  OUTPUT: "Code review passed. No high-confidence issues found."
216
221
 
217
- ### Step 5: Version Bump
218
- READ: `package.json` (or Cargo.toml, pyproject.toml)
219
- EXTRACT: current version
222
+ ### Step 5: Version Bump (REQUIRED)
220
223
 
221
- BASH: `git log --oneline -10`
222
- Determine bump type:
223
- - "BREAKING" or "major:" → major
224
- - "feat:" or "feature:" → minor
225
- - else → patch
224
+ **CRITICAL: Version MUST be bumped before creating PR.**
226
225
 
227
- UPDATE version file with new version
226
+ #### 5.1 Read current version
227
+ READ: `package.json` (or Cargo.toml, pyproject.toml, version.txt)
228
+ EXTRACT: {currentVersion}
228
229
 
229
- ### Step 6: Update CHANGELOG
230
- BASH: `git log --oneline -20 --pretty=format:"- %s"`
231
- INSERT new entry in CHANGELOG.md
230
+ #### 5.2 Determine bump type from commits
231
+ BASH: `git log --oneline $(git describe --tags --abbrev=0 2>/dev/null || echo "HEAD~20")..HEAD`
232
+ ANALYZE commits:
233
+ - "BREAKING" or "major:" → major bump
234
+ - "feat:" or "feature:" → minor bump
235
+ - else → patch bump
236
+
237
+ SET: {bumpType} = detected type
238
+ SET: {newVersion} = calculated version
239
+
240
+ #### 5.3 Update version file
241
+ UPDATE version in package.json (or equivalent):
242
+ ```bash
243
+ # For Node.js projects
244
+ npm version {bumpType} --no-git-tag-version
245
+ ```
246
+
247
+ IF version update fails:
248
+ OUTPUT: "❌ Failed to update version. Fix manually and retry."
249
+ STOP
250
+
251
+ OUTPUT: "📦 Version: {currentVersion} → {newVersion}"
252
+
253
+ ### Step 6: Update CHANGELOG (REQUIRED)
254
+
255
+ **CRITICAL: CHANGELOG.md MUST be updated before creating PR.**
256
+
257
+ #### 6.1 Check if CHANGELOG exists
258
+ BASH: `test -f CHANGELOG.md && echo "exists" || echo "missing"`
259
+
260
+ IF missing:
261
+ CREATE `CHANGELOG.md` with header:
262
+ ```markdown
263
+ # Changelog
264
+
265
+ All notable changes to this project will be documented in this file.
266
+
267
+ ## [Unreleased]
268
+
269
+ ## [{newVersion}] - {date}
270
+ ```
271
+
272
+ #### 6.2 Get commits since last tag
273
+ BASH: `git log --oneline --pretty=format:"- %s" $(git describe --tags --abbrev=0 2>/dev/null || echo "HEAD~20")..HEAD`
274
+ SET: {commits} = result
275
+
276
+ #### 6.3 Categorize changes
277
+ PARSE commits and categorize:
278
+ - `feat:` → ### Added
279
+ - `fix:` → ### Fixed
280
+ - `refactor:` → ### Changed
281
+ - `docs:` → ### Documentation
282
+ - `perf:` → ### Performance
283
+ - `BREAKING:` → ### Breaking Changes
284
+
285
+ #### 6.4 Insert changelog entry
286
+ GET date: `date +%Y-%m-%d`
287
+ SET: {today} = result
288
+
289
+ INSERT after `## [Unreleased]` in CHANGELOG.md:
290
+ ```markdown
291
+
292
+ ## [{newVersion}] - {today}
293
+
294
+ ### Added
295
+ {feat commits}
296
+
297
+ ### Fixed
298
+ {fix commits}
299
+
300
+ ### Changed
301
+ {other commits}
302
+ ```
303
+
304
+ OUTPUT: "📝 CHANGELOG.md updated for v{newVersion}"
305
+
306
+ #### 6.5 Verify changes are staged
307
+ BASH: `git add package.json CHANGELOG.md`
308
+
309
+ IF no changes staged:
310
+ OUTPUT: "❌ Version or CHANGELOG not updated. Cannot ship."
311
+ STOP
232
312
 
233
313
  ### Step 7: Create Pull Request
234
314
 
@@ -675,40 +675,48 @@ This template contains:
675
675
 
676
676
  ### 7.3 Generate Workflow Agents (ALWAYS)
677
677
 
678
- These 3 agents are ALWAYS created for every prjct project:
678
+ These 3 agents are ALWAYS created for every prjct project.
679
+
680
+ **CRITICAL: Each agent MUST include `agentId` in frontmatter.**
681
+
682
+ The `agentId` format is: `p.agent.{name}` where `{name}` is derived from filename without `.md`.
679
683
 
680
684
  **prjct-workflow.md** - Handles: /p:now, /p:done, /p:next, /p:pause, /p:resume
681
685
  READ template: `templates/subagents/workflow/prjct-workflow.md`
682
686
  ADAPT with: projectId, projectPath
687
+ ADD to frontmatter: `agentId: p.agent.workflow`
683
688
  WRITE to: `{globalPath}/agents/prjct-workflow.md`
684
689
 
685
690
  **prjct-planner.md** - Handles: /p:feature, /p:idea, /p:spec, /p:bug
686
691
  READ template: `templates/subagents/workflow/prjct-planner.md`
687
692
  ADAPT with: projectId, projectPath
693
+ ADD to frontmatter: `agentId: p.agent.planner`
688
694
  WRITE to: `{globalPath}/agents/prjct-planner.md`
689
695
 
690
696
  **prjct-shipper.md** - Handles: /p:ship
691
697
  READ template: `templates/subagents/workflow/prjct-shipper.md`
692
698
  ADAPT with: projectId, projectPath, detected test/lint commands
699
+ ADD to frontmatter: `agentId: p.agent.shipper`
693
700
  WRITE to: `{globalPath}/agents/prjct-shipper.md`
694
701
 
695
702
  ### 7.4 Generate Domain Agents (Based on Stack)
696
703
 
697
704
  Analyze `{techStack}` from Step 3 and generate ONLY relevant domain agents:
698
705
 
699
- | If Detected | Generate | Template |
700
- |-------------|----------|----------|
701
- | React, Vue, Angular, Svelte, CSS | `frontend.md` | `templates/subagents/domain/frontend.md` |
702
- | Node.js, Express, Go, Python API | `backend.md` | `templates/subagents/domain/backend.md` |
703
- | PostgreSQL, MySQL, MongoDB, Prisma | `database.md` | `templates/subagents/domain/database.md` |
704
- | Docker, Kubernetes, GitHub Actions | `devops.md` | `templates/subagents/domain/devops.md` |
705
- | Bun test, Jest, Pytest, testing | `testing.md` | `templates/subagents/domain/testing.md` |
706
- | **{hasFrontendUI} = true** | `uxui.md` | `templates/agentic/agents/uxui.md` |
706
+ | If Detected | Generate | Template | agentId |
707
+ |-------------|----------|----------|---------|
708
+ | React, Vue, Angular, Svelte, CSS | `frontend.md` | `templates/subagents/domain/frontend.md` | `p.agent.frontend` |
709
+ | Node.js, Express, Go, Python API | `backend.md` | `templates/subagents/domain/backend.md` | `p.agent.backend` |
710
+ | PostgreSQL, MySQL, MongoDB, Prisma | `database.md` | `templates/subagents/domain/database.md` | `p.agent.database` |
711
+ | Docker, Kubernetes, GitHub Actions | `devops.md` | `templates/subagents/domain/devops.md` | `p.agent.devops` |
712
+ | Bun test, Jest, Pytest, testing | `testing.md` | `templates/subagents/domain/testing.md` | `p.agent.testing` |
713
+ | **{hasFrontendUI} = true** | `uxui.md` | `templates/agentic/agents/uxui.md` | `p.agent.uxui` |
707
714
 
708
715
  For EACH detected stack:
709
716
  1. READ template from `templates/subagents/domain/{name}.md`
710
717
  2. ADAPT description with detected frameworks (e.g., "React specialist" not just "frontend")
711
- 3. WRITE to `{globalPath}/agents/{name}.md`
718
+ 3. ADD to frontmatter: `agentId: p.agent.{name}` (e.g., `p.agent.backend`)
719
+ 4. WRITE to `{globalPath}/agents/{name}.md`
712
720
 
713
721
  ### 7.5 Generate UX/UI Agent (CRITICAL for Frontend Projects)
714
722
 
@@ -990,6 +998,13 @@ IF cloudSync AND no syncError:
990
998
  └── 🎨 UX/UI: uxui.md (Priority: UX > UI)
991
999
  {ENDIF}
992
1000
 
1001
+ 🏷️ Agent Mentions (use in prompts)
1002
+ ├── p.agent.workflow, p.agent.planner, p.agent.shipper
1003
+ {IF domainAgents.length > 0}
1004
+ ├── {domainAgents.map(a => 'p.agent.' + a).join(', ')}
1005
+ {ENDIF}
1006
+ └── Example: "p.agent.backend help me create an API endpoint"
1007
+
993
1008
  📦 Skills ({totalSkills})
994
1009
  ├── Installed: {skillsInstalled.length ? skillsInstalled.join(', ') : 'none'}
995
1010
  ├── Verified: {skillsVerified.length ? skillsVerified.join(', ') : 'none'}
@@ -7,6 +7,47 @@ description: 'Unified task workflow with intelligent classification'
7
7
 
8
8
  Start any work with automatic classification and intelligent breakdown.
9
9
 
10
+ ## @ Agent Mentions
11
+
12
+ Invoke specific agents directly in your task using @ notation:
13
+
14
+ | Mention | Agent | Use Case |
15
+ |---------|-------|----------|
16
+ | `@frontend` | frontend.md | UI components, React/Vue |
17
+ | `@backend` | backend.md | APIs, server logic |
18
+ | `@database` | database.md | Schema, queries |
19
+ | `@uxui` | uxui.md | UX patterns, design |
20
+ | `@testing` | testing.md | Tests, coverage |
21
+ | `@devops` | devops.md | CI/CD, Docker |
22
+
23
+ **Examples:**
24
+ - `p. task @frontend add button` - Loads frontend specialist
25
+ - `p. task @frontend @uxui dark mode` - Loads both agents
26
+ - `p. task @backend optimize API` - Loads backend specialist
27
+
28
+ **Note:** If no @ mention, agents are auto-assigned based on task analysis.
29
+
30
+ ## Claude Code Subagents
31
+
32
+ Special @ mentions invoke Claude Code's native subagents:
33
+
34
+ | Mention | Subagent | Use Case |
35
+ |---------|----------|----------|
36
+ | `@explore` | Explore | Fast codebase search, find patterns |
37
+ | `@general` | General | Complex multi-step research |
38
+ | `@plan` | Plan | Architecture design, implementation planning |
39
+
40
+ **Examples:**
41
+ - `p. task @explore find all API endpoints`
42
+ - `p. task @general research caching strategies`
43
+ - `p. task @plan design authentication system`
44
+
45
+ **Combined:**
46
+ - `p. task @frontend @explore add button like existing ones`
47
+ → Loads frontend agent + uses Explore subagent to find similar buttons
48
+
49
+ ---
50
+
10
51
  ## Context Variables
11
52
 
12
53
  - `{projectId}`: From `.prjct/prjct.config.json`