prjct-cli 0.28.1 → 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.
- package/CHANGELOG.md +31 -0
- package/CLAUDE.md +34 -0
- package/core/agentic/prompt-builder.ts +2 -2
- package/core/commands/command-data.ts +0 -33
- package/core/commands/commands.ts +4 -12
- package/core/commands/registry.ts +0 -37
- package/core/index.ts +0 -2
- package/core/types/config.ts +1 -1
- package/core/types/index.ts +0 -2
- package/core/types/integrations.ts +2 -47
- package/core/types/storage.ts +0 -8
- package/core/types/task.ts +0 -4
- package/dist/bin/prjct.mjs +3 -82
- package/package.json +1 -1
- package/templates/agentic/subagent-generation.md +14 -1
- package/templates/commands/init.md +1 -44
- package/templates/commands/ship.md +87 -12
- package/templates/commands/sync.md +25 -10
- package/templates/mcp-config.json +0 -28
- package/core/integrations/notion/client.ts +0 -413
- package/core/integrations/notion/index.ts +0 -46
- package/core/integrations/notion/setup.ts +0 -235
- package/core/integrations/notion/sync.ts +0 -818
- package/core/integrations/notion/templates.ts +0 -246
- package/core/plugin/builtin/notion.ts +0 -178
- package/templates/commands/feature.md +0 -46
- package/templates/commands/now.md +0 -53
- package/templates/skills/notion-push.md +0 -116
- package/templates/skills/notion-setup.md +0 -199
- package/templates/skills/notion-sync.md +0 -290
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.28.2] - 2026-01-10
|
|
4
|
+
|
|
5
|
+
### Feature: Agent Mentions and Major Cleanup
|
|
6
|
+
|
|
7
|
+
**Agent Mentions (p.agent.{name}):**
|
|
8
|
+
- New `agentId` field in agent frontmatter for identification
|
|
9
|
+
- Users can invoke agents in prompts: `p.agent.backend help me...`
|
|
10
|
+
- Format: `p.agent.workflow`, `p.agent.planner`, `p.agent.frontend`, etc.
|
|
11
|
+
|
|
12
|
+
**Deprecated Commands Removed:**
|
|
13
|
+
- `/p:now` - Use `/p:task` instead
|
|
14
|
+
- `/p:feature` - Use `/p:task` instead
|
|
15
|
+
- `/p:work` - Use `/p:task` instead
|
|
16
|
+
|
|
17
|
+
**Notion Integration Removed:**
|
|
18
|
+
- Removed entire `core/integrations/notion/` directory
|
|
19
|
+
- Removed Notion skills and MCP config
|
|
20
|
+
- Cleaned up type references
|
|
21
|
+
|
|
22
|
+
**Code Cleanup:**
|
|
23
|
+
- Removed `executeWithoutProject()` deprecated method
|
|
24
|
+
- Cleaned dead code in prompt-builder arrays
|
|
25
|
+
- Removed ARCHITECTURE.md (outdated)
|
|
26
|
+
|
|
27
|
+
**Ship Template Enhancement:**
|
|
28
|
+
- Version bump now REQUIRED before PR creation
|
|
29
|
+
- CHANGELOG.md update now REQUIRED before PR creation
|
|
30
|
+
- Better categorization of changes (Added/Fixed/Changed)
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
3
34
|
## [0.28.1] - 2026-01-10
|
|
4
35
|
|
|
5
36
|
### Feature: @ Agent Mentions
|
package/CLAUDE.md
CHANGED
|
@@ -145,6 +145,40 @@ Next: [suggested action]
|
|
|
145
145
|
|
|
146
146
|
---
|
|
147
147
|
|
|
148
|
+
## AGENT MENTIONS (v0.28)
|
|
149
|
+
|
|
150
|
+
Invoke or reference project agents using the `p.agent.{name}` syntax.
|
|
151
|
+
|
|
152
|
+
### Available Agent IDs
|
|
153
|
+
|
|
154
|
+
| Agent ID | Agent File | Purpose |
|
|
155
|
+
|----------|------------|---------|
|
|
156
|
+
| `p.agent.workflow` | `prjct-workflow.md` | Task lifecycle: /p:now, /p:done, /p:next |
|
|
157
|
+
| `p.agent.planner` | `prjct-planner.md` | Planning: /p:feature, /p:idea, /p:spec |
|
|
158
|
+
| `p.agent.shipper` | `prjct-shipper.md` | Shipping: /p:ship |
|
|
159
|
+
| `p.agent.frontend` | `frontend.md` | Frontend/UI work |
|
|
160
|
+
| `p.agent.backend` | `backend.md` | Backend/API work |
|
|
161
|
+
| `p.agent.database` | `database.md` | Database work |
|
|
162
|
+
| `p.agent.testing` | `testing.md` | Testing work |
|
|
163
|
+
| `p.agent.devops` | `devops.md` | DevOps/CI work |
|
|
164
|
+
| `p.agent.uxui` | `uxui.md` | UX/UI design |
|
|
165
|
+
|
|
166
|
+
### Usage in Prompts
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
"p.agent.backend help me create a REST endpoint"
|
|
170
|
+
"p.agent.frontend build a login form"
|
|
171
|
+
"p.agent.testing write tests for the auth module"
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### How It Works
|
|
175
|
+
|
|
176
|
+
1. Each agent has `agentId: p.agent.{name}` in frontmatter
|
|
177
|
+
2. When user mentions an agent ID, load that agent's context
|
|
178
|
+
3. Agent provides domain expertise for the task
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
148
182
|
## SKILL INTEGRATION (v0.27)
|
|
149
183
|
|
|
150
184
|
Agents are linked to Claude Code skills from claude-plugins.dev.
|
|
@@ -283,7 +283,7 @@ class PromptBuilder {
|
|
|
283
283
|
|
|
284
284
|
// Agent assignment (CONDITIONAL - only for code-modifying commands)
|
|
285
285
|
const commandName = template.frontmatter?.name?.replace('p:', '') || ''
|
|
286
|
-
const agentCommands = ['
|
|
286
|
+
const agentCommands = ['task', 'design', 'fix', 'bug', 'test', 'cleanup', 'spec']
|
|
287
287
|
const needsAgent = agentCommands.includes(commandName)
|
|
288
288
|
|
|
289
289
|
if (agent && needsAgent) {
|
|
@@ -332,7 +332,7 @@ class PromptBuilder {
|
|
|
332
332
|
}
|
|
333
333
|
|
|
334
334
|
// OPTIMIZED: Only include patterns for code-modifying commands
|
|
335
|
-
const codeCommands = ['
|
|
335
|
+
const codeCommands = ['task', 'design', 'cleanup', 'fix', 'bug', 'test', 'init', 'spec']
|
|
336
336
|
const needsPatterns = codeCommands.includes(commandName)
|
|
337
337
|
|
|
338
338
|
// Include code patterns analysis for code-modifying commands
|
|
@@ -62,17 +62,6 @@ export const COMMANDS: CommandMeta[] = [
|
|
|
62
62
|
requiresProject: true,
|
|
63
63
|
features: ['Agentic type classification', '7-phase workflow', 'Git branch management', 'Task breakdown'],
|
|
64
64
|
},
|
|
65
|
-
{
|
|
66
|
-
name: 'feature',
|
|
67
|
-
group: 'core',
|
|
68
|
-
description: 'DEPRECATED - Use /p:task instead',
|
|
69
|
-
usage: { claude: '/p:task "<description>"', terminal: 'prjct task "<description>"' },
|
|
70
|
-
params: '<description>',
|
|
71
|
-
implemented: true,
|
|
72
|
-
hasTemplate: true,
|
|
73
|
-
requiresProject: true,
|
|
74
|
-
deprecated: true,
|
|
75
|
-
},
|
|
76
65
|
{
|
|
77
66
|
name: 'spec',
|
|
78
67
|
group: 'core',
|
|
@@ -83,28 +72,6 @@ export const COMMANDS: CommandMeta[] = [
|
|
|
83
72
|
hasTemplate: true,
|
|
84
73
|
requiresProject: true,
|
|
85
74
|
},
|
|
86
|
-
{
|
|
87
|
-
name: 'now',
|
|
88
|
-
group: 'core',
|
|
89
|
-
description: 'DEPRECATED - Use /p:task instead',
|
|
90
|
-
usage: { claude: '/p:task "<description>"', terminal: 'prjct task "<description>"' },
|
|
91
|
-
params: '[task]',
|
|
92
|
-
implemented: true,
|
|
93
|
-
hasTemplate: true,
|
|
94
|
-
requiresProject: true,
|
|
95
|
-
deprecated: true,
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
name: 'work',
|
|
99
|
-
group: 'core',
|
|
100
|
-
description: 'DEPRECATED - Use /p:task instead',
|
|
101
|
-
usage: { claude: '/p:task "<description>"', terminal: 'prjct task "<description>"' },
|
|
102
|
-
params: '[task]',
|
|
103
|
-
implemented: true,
|
|
104
|
-
hasTemplate: true,
|
|
105
|
-
requiresProject: true,
|
|
106
|
-
deprecated: true,
|
|
107
|
-
},
|
|
108
75
|
{
|
|
109
76
|
name: 'pause',
|
|
110
77
|
group: 'core',
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* MD-First Architecture - All state in Markdown files.
|
|
5
5
|
*
|
|
6
|
-
* COMMANDS (
|
|
7
|
-
* - Workflow (
|
|
8
|
-
* - Planning (
|
|
6
|
+
* COMMANDS (20 total):
|
|
7
|
+
* - Workflow (4): done, next, pause, resume
|
|
8
|
+
* - Planning (4): init, bug, idea, spec
|
|
9
9
|
* - Shipping (1): ship
|
|
10
10
|
* - Analytics (2): dash, help
|
|
11
|
-
* - Maintenance (
|
|
11
|
+
* - Maintenance (6): cleanup, design, recover, undo, redo, history
|
|
12
12
|
* - Analysis (2): analyze, sync
|
|
13
13
|
* - Setup (3): start, setup, migrateAll
|
|
14
14
|
*/
|
|
@@ -69,10 +69,6 @@ class PrjctCommands {
|
|
|
69
69
|
|
|
70
70
|
// ========== Workflow Commands ==========
|
|
71
71
|
|
|
72
|
-
async work(task: string | null = null, projectPath: string = process.cwd()): Promise<CommandResult> {
|
|
73
|
-
return this.workflow.now(task, projectPath)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
72
|
async done(projectPath: string = process.cwd()): Promise<CommandResult> {
|
|
77
73
|
return this.workflow.done(projectPath)
|
|
78
74
|
}
|
|
@@ -95,10 +91,6 @@ class PrjctCommands {
|
|
|
95
91
|
return this.planning.init(idea, projectPath)
|
|
96
92
|
}
|
|
97
93
|
|
|
98
|
-
async feature(description: string, projectPath: string = process.cwd()): Promise<CommandResult> {
|
|
99
|
-
return this.planning.feature(description, projectPath)
|
|
100
|
-
}
|
|
101
|
-
|
|
102
94
|
async bug(description: string, projectPath: string = process.cwd()): Promise<CommandResult> {
|
|
103
95
|
return this.planning.bug(description, projectPath)
|
|
104
96
|
}
|
|
@@ -388,43 +388,6 @@ export class CommandRegistry {
|
|
|
388
388
|
}
|
|
389
389
|
}
|
|
390
390
|
|
|
391
|
-
/**
|
|
392
|
-
* Execute without requiring project (for init, setup commands)
|
|
393
|
-
* @deprecated Use execute() - it auto-detects based on command metadata
|
|
394
|
-
*/
|
|
395
|
-
async executeWithoutProject<TParams = void>(
|
|
396
|
-
name: string,
|
|
397
|
-
params: TParams,
|
|
398
|
-
projectPath: string = process.cwd()
|
|
399
|
-
): Promise<CommandResult> {
|
|
400
|
-
const handler = this.handlers.get(name)
|
|
401
|
-
if (handler) {
|
|
402
|
-
const context: ExecutionContext = {
|
|
403
|
-
projectId: '',
|
|
404
|
-
projectPath,
|
|
405
|
-
globalPath: '',
|
|
406
|
-
timestamp: getTimestamp(),
|
|
407
|
-
}
|
|
408
|
-
return handler.execute(params, context)
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
const handlerFn = this.handlerFns.get(name)
|
|
412
|
-
if (handlerFn) {
|
|
413
|
-
const context: ExecutionContext = {
|
|
414
|
-
projectId: '',
|
|
415
|
-
projectPath,
|
|
416
|
-
globalPath: '',
|
|
417
|
-
timestamp: getTimestamp(),
|
|
418
|
-
}
|
|
419
|
-
return handlerFn(params, context)
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
return {
|
|
423
|
-
success: false,
|
|
424
|
-
error: `Command not found: ${name}`,
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
|
|
428
391
|
/**
|
|
429
392
|
* Clear all registrations (useful for testing)
|
|
430
393
|
*/
|
package/core/index.ts
CHANGED
|
@@ -97,14 +97,12 @@ async function main(): Promise<void> {
|
|
|
97
97
|
const param = parsedArgs.join(' ') || null
|
|
98
98
|
const standardCommands: Record<string, (p: string | null) => Promise<CommandResult>> = {
|
|
99
99
|
// Core workflow
|
|
100
|
-
work: (p) => commands.work(p),
|
|
101
100
|
done: () => commands.done(),
|
|
102
101
|
next: () => commands.next(),
|
|
103
102
|
pause: (p) => commands.pause(p || ''),
|
|
104
103
|
resume: (p) => commands.resume(p),
|
|
105
104
|
// Planning
|
|
106
105
|
init: (p) => commands.init(p),
|
|
107
|
-
feature: (p) => commands.feature(p || ''),
|
|
108
106
|
bug: (p) => commands.bug(p || ''),
|
|
109
107
|
idea: (p) => commands.idea(p || ''),
|
|
110
108
|
spec: (p) => commands.spec(p),
|
package/core/types/config.ts
CHANGED
package/core/types/index.ts
CHANGED
|
@@ -225,10 +225,8 @@ export type {
|
|
|
225
225
|
// Integration Types
|
|
226
226
|
// =============================================================================
|
|
227
227
|
export type {
|
|
228
|
-
NotionIntegrationConfig,
|
|
229
228
|
IntegrationsConfig,
|
|
230
229
|
} from './integrations'
|
|
231
|
-
export { DEFAULT_NOTION_CONFIG } from './integrations'
|
|
232
230
|
|
|
233
231
|
// =============================================================================
|
|
234
232
|
// Template Types
|
|
@@ -1,57 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Integration Types
|
|
3
|
-
* Types for external service integrations
|
|
3
|
+
* Types for external service integrations
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
/**
|
|
7
|
-
* Notion Integration Config
|
|
8
|
-
* Stored in GlobalConfig.integrations.notion
|
|
9
|
-
*/
|
|
10
|
-
export interface NotionIntegrationConfig {
|
|
11
|
-
enabled: boolean
|
|
12
|
-
workspaceId?: string
|
|
13
|
-
workspaceName?: string
|
|
14
|
-
|
|
15
|
-
// Database IDs (created on first setup)
|
|
16
|
-
databases: {
|
|
17
|
-
shipped?: string // "prjct: Shipped Features"
|
|
18
|
-
roadmap?: string // "prjct: Roadmap"
|
|
19
|
-
ideas?: string // "prjct: Ideas"
|
|
20
|
-
tasks?: string // "prjct: Active Tasks"
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// Dashboard page (links all databases)
|
|
24
|
-
dashboardPageId?: string
|
|
25
|
-
|
|
26
|
-
// Sync preferences
|
|
27
|
-
syncOn: {
|
|
28
|
-
ship: boolean // Auto-sync on /p:ship
|
|
29
|
-
done: boolean // Sync task completion
|
|
30
|
-
idea: boolean // Sync new ideas
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Setup metadata
|
|
34
|
-
setupAt?: string
|
|
35
|
-
lastSyncAt?: string
|
|
36
|
-
}
|
|
37
|
-
|
|
38
6
|
/**
|
|
39
7
|
* Integrations Config
|
|
40
8
|
* Container for all external integrations
|
|
41
9
|
*/
|
|
42
10
|
export interface IntegrationsConfig {
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Default Notion config (disabled)
|
|
48
|
-
*/
|
|
49
|
-
export const DEFAULT_NOTION_CONFIG: NotionIntegrationConfig = {
|
|
50
|
-
enabled: false,
|
|
51
|
-
databases: {},
|
|
52
|
-
syncOn: {
|
|
53
|
-
ship: true,
|
|
54
|
-
done: false,
|
|
55
|
-
idea: true,
|
|
56
|
-
},
|
|
11
|
+
// Future integrations can be added here
|
|
57
12
|
}
|
package/core/types/storage.ts
CHANGED
|
@@ -43,10 +43,6 @@ export interface ShippedFeature {
|
|
|
43
43
|
quantitativeImpact?: string
|
|
44
44
|
tasksCompleted?: number
|
|
45
45
|
featureId?: string
|
|
46
|
-
/** Notion page ID for bidirectional sync */
|
|
47
|
-
notionPageId?: string
|
|
48
|
-
/** Last sync timestamp for conflict resolution */
|
|
49
|
-
lastSyncedAt?: string
|
|
50
46
|
}
|
|
51
47
|
|
|
52
48
|
export interface ShipChange {
|
|
@@ -117,10 +113,6 @@ export interface Idea {
|
|
|
117
113
|
risks?: string[]
|
|
118
114
|
risksCount?: number
|
|
119
115
|
createdAt?: string
|
|
120
|
-
/** Notion page ID for bidirectional sync */
|
|
121
|
-
notionPageId?: string
|
|
122
|
-
/** Last sync timestamp for conflict resolution */
|
|
123
|
-
lastSyncedAt?: string
|
|
124
116
|
}
|
|
125
117
|
|
|
126
118
|
export interface ImpactEffort {
|
package/core/types/task.ts
CHANGED
|
@@ -11,10 +11,6 @@ export interface Task {
|
|
|
11
11
|
completedAt?: string
|
|
12
12
|
duration?: string
|
|
13
13
|
metadata?: TaskMetadata
|
|
14
|
-
/** Notion page ID for bidirectional sync */
|
|
15
|
-
notionPageId?: string
|
|
16
|
-
/** Last sync timestamp for conflict resolution */
|
|
17
|
-
lastSyncedAt?: string
|
|
18
14
|
}
|
|
19
15
|
|
|
20
16
|
export interface TaskMetadata {
|
package/dist/bin/prjct.mjs
CHANGED
|
@@ -4786,13 +4786,6 @@ var init_memory = __esm({
|
|
|
4786
4786
|
}
|
|
4787
4787
|
});
|
|
4788
4788
|
|
|
4789
|
-
// core/types/integrations.ts
|
|
4790
|
-
var init_integrations = __esm({
|
|
4791
|
-
"core/types/integrations.ts"() {
|
|
4792
|
-
"use strict";
|
|
4793
|
-
}
|
|
4794
|
-
});
|
|
4795
|
-
|
|
4796
4789
|
// core/types/bus.ts
|
|
4797
4790
|
var init_bus = __esm({
|
|
4798
4791
|
"core/types/bus.ts"() {
|
|
@@ -4806,7 +4799,6 @@ var init_types = __esm({
|
|
|
4806
4799
|
"use strict";
|
|
4807
4800
|
init_fs();
|
|
4808
4801
|
init_memory();
|
|
4809
|
-
init_integrations();
|
|
4810
4802
|
init_bus();
|
|
4811
4803
|
}
|
|
4812
4804
|
});
|
|
@@ -5007,7 +4999,7 @@ var init_prompt_builder = __esm({
|
|
|
5007
4999
|
const parts = [];
|
|
5008
5000
|
this._currentContext = context;
|
|
5009
5001
|
const commandName = template.frontmatter?.name?.replace("p:", "") || "";
|
|
5010
|
-
const agentCommands = ["
|
|
5002
|
+
const agentCommands = ["task", "design", "fix", "bug", "test", "cleanup", "spec"];
|
|
5011
5003
|
const needsAgent = agentCommands.includes(commandName);
|
|
5012
5004
|
if (agent && needsAgent) {
|
|
5013
5005
|
parts.push(`# AGENT: ${agent.name}
|
|
@@ -5054,7 +5046,7 @@ Read files before modifying.
|
|
|
5054
5046
|
|
|
5055
5047
|
`);
|
|
5056
5048
|
}
|
|
5057
|
-
const codeCommands = ["
|
|
5049
|
+
const codeCommands = ["task", "design", "cleanup", "fix", "bug", "test", "init", "spec"];
|
|
5058
5050
|
const needsPatterns = codeCommands.includes(commandName);
|
|
5059
5051
|
const codePatternsContent = state?.codePatterns || "";
|
|
5060
5052
|
if (needsPatterns && codePatternsContent && codePatternsContent.trim()) {
|
|
@@ -10730,36 +10722,6 @@ var init_registry = __esm({
|
|
|
10730
10722
|
error: `Command not found: ${name}`
|
|
10731
10723
|
};
|
|
10732
10724
|
}
|
|
10733
|
-
/**
|
|
10734
|
-
* Execute without requiring project (for init, setup commands)
|
|
10735
|
-
* @deprecated Use execute() - it auto-detects based on command metadata
|
|
10736
|
-
*/
|
|
10737
|
-
async executeWithoutProject(name, params, projectPath = process.cwd()) {
|
|
10738
|
-
const handler = this.handlers.get(name);
|
|
10739
|
-
if (handler) {
|
|
10740
|
-
const context = {
|
|
10741
|
-
projectId: "",
|
|
10742
|
-
projectPath,
|
|
10743
|
-
globalPath: "",
|
|
10744
|
-
timestamp: getTimestamp()
|
|
10745
|
-
};
|
|
10746
|
-
return handler.execute(params, context);
|
|
10747
|
-
}
|
|
10748
|
-
const handlerFn = this.handlerFns.get(name);
|
|
10749
|
-
if (handlerFn) {
|
|
10750
|
-
const context = {
|
|
10751
|
-
projectId: "",
|
|
10752
|
-
projectPath,
|
|
10753
|
-
globalPath: "",
|
|
10754
|
-
timestamp: getTimestamp()
|
|
10755
|
-
};
|
|
10756
|
-
return handlerFn(params, context);
|
|
10757
|
-
}
|
|
10758
|
-
return {
|
|
10759
|
-
success: false,
|
|
10760
|
-
error: `Command not found: ${name}`
|
|
10761
|
-
};
|
|
10762
|
-
}
|
|
10763
10725
|
/**
|
|
10764
10726
|
* Clear all registrations (useful for testing)
|
|
10765
10727
|
*/
|
|
@@ -11779,9 +11741,6 @@ var init_commands = __esm({
|
|
|
11779
11741
|
this.prjctDir = ".prjct";
|
|
11780
11742
|
}
|
|
11781
11743
|
// ========== Workflow Commands ==========
|
|
11782
|
-
async work(task = null, projectPath = process.cwd()) {
|
|
11783
|
-
return this.workflow.now(task, projectPath);
|
|
11784
|
-
}
|
|
11785
11744
|
async done(projectPath = process.cwd()) {
|
|
11786
11745
|
return this.workflow.done(projectPath);
|
|
11787
11746
|
}
|
|
@@ -11798,9 +11757,6 @@ var init_commands = __esm({
|
|
|
11798
11757
|
async init(idea = null, projectPath = process.cwd()) {
|
|
11799
11758
|
return this.planning.init(idea, projectPath);
|
|
11800
11759
|
}
|
|
11801
|
-
async feature(description, projectPath = process.cwd()) {
|
|
11802
|
-
return this.planning.feature(description, projectPath);
|
|
11803
|
-
}
|
|
11804
11760
|
async bug(description, projectPath = process.cwd()) {
|
|
11805
11761
|
return this.planning.bug(description, projectPath);
|
|
11806
11762
|
}
|
|
@@ -11941,17 +11897,6 @@ var init_command_data = __esm({
|
|
|
11941
11897
|
requiresProject: true,
|
|
11942
11898
|
features: ["Agentic type classification", "7-phase workflow", "Git branch management", "Task breakdown"]
|
|
11943
11899
|
},
|
|
11944
|
-
{
|
|
11945
|
-
name: "feature",
|
|
11946
|
-
group: "core",
|
|
11947
|
-
description: "DEPRECATED - Use /p:task instead",
|
|
11948
|
-
usage: { claude: '/p:task "<description>"', terminal: 'prjct task "<description>"' },
|
|
11949
|
-
params: "<description>",
|
|
11950
|
-
implemented: true,
|
|
11951
|
-
hasTemplate: true,
|
|
11952
|
-
requiresProject: true,
|
|
11953
|
-
deprecated: true
|
|
11954
|
-
},
|
|
11955
11900
|
{
|
|
11956
11901
|
name: "spec",
|
|
11957
11902
|
group: "core",
|
|
@@ -11962,28 +11907,6 @@ var init_command_data = __esm({
|
|
|
11962
11907
|
hasTemplate: true,
|
|
11963
11908
|
requiresProject: true
|
|
11964
11909
|
},
|
|
11965
|
-
{
|
|
11966
|
-
name: "now",
|
|
11967
|
-
group: "core",
|
|
11968
|
-
description: "DEPRECATED - Use /p:task instead",
|
|
11969
|
-
usage: { claude: '/p:task "<description>"', terminal: 'prjct task "<description>"' },
|
|
11970
|
-
params: "[task]",
|
|
11971
|
-
implemented: true,
|
|
11972
|
-
hasTemplate: true,
|
|
11973
|
-
requiresProject: true,
|
|
11974
|
-
deprecated: true
|
|
11975
|
-
},
|
|
11976
|
-
{
|
|
11977
|
-
name: "work",
|
|
11978
|
-
group: "core",
|
|
11979
|
-
description: "DEPRECATED - Use /p:task instead",
|
|
11980
|
-
usage: { claude: '/p:task "<description>"', terminal: 'prjct task "<description>"' },
|
|
11981
|
-
params: "[task]",
|
|
11982
|
-
implemented: true,
|
|
11983
|
-
hasTemplate: true,
|
|
11984
|
-
requiresProject: true,
|
|
11985
|
-
deprecated: true
|
|
11986
|
-
},
|
|
11987
11910
|
{
|
|
11988
11911
|
name: "pause",
|
|
11989
11912
|
group: "core",
|
|
@@ -12307,7 +12230,7 @@ var require_package = __commonJS({
|
|
|
12307
12230
|
"package.json"(exports, module) {
|
|
12308
12231
|
module.exports = {
|
|
12309
12232
|
name: "prjct-cli",
|
|
12310
|
-
version: "0.
|
|
12233
|
+
version: "0.28.1",
|
|
12311
12234
|
description: "Built for Claude - Ship fast, track progress, stay focused. Developer momentum tool for indie hackers.",
|
|
12312
12235
|
main: "core/index.ts",
|
|
12313
12236
|
bin: {
|
|
@@ -12467,14 +12390,12 @@ Use 'prjct --help' to see available commands.`);
|
|
|
12467
12390
|
const param = parsedArgs.join(" ") || null;
|
|
12468
12391
|
const standardCommands = {
|
|
12469
12392
|
// Core workflow
|
|
12470
|
-
work: /* @__PURE__ */ __name((p) => commands.work(p), "work"),
|
|
12471
12393
|
done: /* @__PURE__ */ __name(() => commands.done(), "done"),
|
|
12472
12394
|
next: /* @__PURE__ */ __name(() => commands.next(), "next"),
|
|
12473
12395
|
pause: /* @__PURE__ */ __name((p) => commands.pause(p || ""), "pause"),
|
|
12474
12396
|
resume: /* @__PURE__ */ __name((p) => commands.resume(p), "resume"),
|
|
12475
12397
|
// Planning
|
|
12476
12398
|
init: /* @__PURE__ */ __name((p) => commands.init(p), "init"),
|
|
12477
|
-
feature: /* @__PURE__ */ __name((p) => commands.feature(p || ""), "feature"),
|
|
12478
12399
|
bug: /* @__PURE__ */ __name((p) => commands.bug(p || ""), "bug"),
|
|
12479
12400
|
idea: /* @__PURE__ */ __name((p) => commands.idea(p || ""), "idea"),
|
|
12480
12401
|
spec: /* @__PURE__ */ __name((p) => commands.spec(p), "spec"),
|
package/package.json
CHANGED
|
@@ -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
|
-
**
|
|
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
|
|
|
@@ -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:
|
|
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
|
|