prjct-cli 0.42.0 → 0.44.1

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 (44) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/core/agentic/command-executor.ts +15 -5
  3. package/core/ai-tools/formatters.ts +302 -0
  4. package/core/ai-tools/generator.ts +124 -0
  5. package/core/ai-tools/index.ts +15 -0
  6. package/core/ai-tools/registry.ts +195 -0
  7. package/core/cli/linear.ts +61 -2
  8. package/core/commands/analysis.ts +36 -2
  9. package/core/commands/commands.ts +2 -2
  10. package/core/commands/planning.ts +8 -4
  11. package/core/commands/shipping.ts +9 -7
  12. package/core/commands/workflow.ts +67 -17
  13. package/core/index.ts +3 -1
  14. package/core/infrastructure/ai-provider.ts +11 -36
  15. package/core/integrations/issue-tracker/types.ts +7 -1
  16. package/core/integrations/linear/client.ts +56 -24
  17. package/core/integrations/linear/index.ts +3 -0
  18. package/core/integrations/linear/sync.ts +313 -0
  19. package/core/schemas/index.ts +3 -0
  20. package/core/schemas/issues.ts +144 -0
  21. package/core/schemas/state.ts +3 -0
  22. package/core/services/sync-service.ts +71 -4
  23. package/core/utils/agent-stream.ts +138 -0
  24. package/core/utils/branding.ts +2 -3
  25. package/core/utils/next-steps.ts +95 -0
  26. package/core/utils/output.ts +26 -0
  27. package/core/workflow/index.ts +6 -0
  28. package/core/workflow/state-machine.ts +185 -0
  29. package/dist/bin/prjct.mjs +2382 -541
  30. package/package.json +1 -1
  31. package/templates/_bases/tracker-base.md +11 -0
  32. package/templates/commands/done.md +18 -13
  33. package/templates/commands/git.md +143 -54
  34. package/templates/commands/merge.md +121 -13
  35. package/templates/commands/review.md +1 -1
  36. package/templates/commands/ship.md +165 -20
  37. package/templates/commands/sync.md +17 -0
  38. package/templates/commands/task.md +123 -17
  39. package/templates/global/ANTIGRAVITY.md +2 -4
  40. package/templates/global/CLAUDE.md +115 -28
  41. package/templates/global/CURSOR.mdc +1 -3
  42. package/templates/global/GEMINI.md +2 -4
  43. package/templates/global/WINDSURF.md +1 -3
  44. package/templates/subagents/workflow/prjct-shipper.md +1 -2
@@ -4,50 +4,195 @@ allowed-tools: [Read, Write, Bash, AskUserQuestion]
4
4
 
5
5
  # p. ship "$ARGUMENTS"
6
6
 
7
+ ## ⛔ MANDATORY WORKFLOW - DO NOT SKIP ANY STEP
8
+
9
+ **CRITICAL: Execute steps IN ORDER. Each step MUST complete before proceeding.**
10
+
11
+ ---
12
+
13
+ ### STEP 1: Pre-flight Checks (BLOCKING)
14
+
15
+ ```bash
16
+ # 1a. Check current branch
17
+ BRANCH=$(git branch --show-current)
18
+ ```
19
+
20
+ **⛔ IF branch is `main` or `master`:**
21
+ ```
22
+ STOP. DO NOT PROCEED.
23
+ Tell user: "Cannot ship from main branch. Create a feature branch first."
24
+ ABORT the ship command entirely.
25
+ ```
26
+
7
27
  ```bash
8
- prjct context ship $ARGUMENTS
28
+ # 1b. Check GitHub auth
29
+ gh auth status
9
30
  ```
10
31
 
11
- IF `currentTask` active → Ask: "Complete and ship?" or "Cancel"
32
+ **⛔ IF not authenticated:**
33
+ ```
34
+ STOP. DO NOT PROCEED.
35
+ Tell user: "GitHub CLI not authenticated. Run: gh auth login"
36
+ ABORT the ship command entirely.
37
+ ```
12
38
 
13
39
  ```bash
14
- git status --porcelain # No changes? STOP
15
- git diff --stat HEAD
40
+ # 1c. Check for changes
41
+ git status --porcelain
16
42
  ```
17
43
 
18
- Run lint/tests if configured
44
+ **⛔ IF no changes:**
45
+ ```
46
+ STOP. DO NOT PROCEED.
47
+ Tell user: "No changes to ship."
48
+ ABORT the ship command entirely.
49
+ ```
50
+
51
+ ---
19
52
 
20
- IF not trivial Review for security issues, error handling
53
+ ### STEP 2: Show Plan and Get Approval (BLOCKING)
21
54
 
22
- Version bump (patch default, minor for feat:, major for BREAKING)
23
- Update CHANGELOG.md
55
+ **⛔ DO NOT execute any commits/pushes until user explicitly approves.**
56
+
57
+ Show the user:
58
+ ```
59
+ ## Ship Plan
60
+
61
+ Branch: {branch}
62
+ Changes:
63
+ {git diff --stat}
64
+
65
+ Will do:
66
+ 1. Run tests (if configured)
67
+ 2. Bump version (patch/minor/major)
68
+ 3. Update CHANGELOG.md
69
+ 4. Commit with prjct footer
70
+ 5. Push branch
71
+ 6. Create PR to main
72
+
73
+ Proceed? (yes/no)
74
+ ```
75
+
76
+ **⛔ WAIT for explicit "yes" or approval. Do not assume.**
77
+
78
+ ---
79
+
80
+ ### STEP 3: Quality Checks
24
81
 
25
82
  ```bash
26
- gh auth status # Not auth? STOP
27
- git branch --show-current # On main? STOP
83
+ # Run tests if package.json has test script
84
+ npm test 2>/dev/null || bun test 2>/dev/null || echo "No tests configured"
28
85
  ```
29
86
 
30
- Commit with footer:
87
+ ```bash
88
+ # Run lint if configured
89
+ npm run lint 2>/dev/null || echo "No lint configured"
31
90
  ```
32
- 🤖 Generated with [p/](https://www.prjct.app/)
33
- Designed for [Claude](https://www.anthropic.com/claude)
91
+
92
+ ---
93
+
94
+ ### STEP 4: Version Bump (REQUIRED)
95
+
96
+ Determine version bump type:
97
+ - `fix:` commits → **patch** (0.0.X)
98
+ - `feat:` commits → **minor** (0.X.0)
99
+ - `BREAKING:` in commits → **major** (X.0.0)
100
+
101
+ ```bash
102
+ # Read current version
103
+ OLD_VERSION=$(node -p "require('./package.json').version")
104
+
105
+ # Calculate new version and update package.json
106
+ # Use npm version OR manual edit
34
107
  ```
35
108
 
109
+ ---
110
+
111
+ ### STEP 5: Update CHANGELOG.md (REQUIRED)
112
+
113
+ Add entry at top of CHANGELOG.md:
114
+ ```markdown
115
+ ## [X.X.X] - YYYY-MM-DD
116
+
117
+ ### {Fixed/Added/Changed}
118
+ - {description of changes}
119
+ ```
120
+
121
+ ---
122
+
123
+ ### STEP 6: Commit (REQUIRED FORMAT)
124
+
125
+ ```bash
126
+ git add .
127
+ git commit -m "$(cat <<'EOF'
128
+ {type}: {description}
129
+
130
+ {body if needed}
131
+
132
+ Generated with [p/](https://www.prjct.app/)
133
+ EOF
134
+ )"
135
+ ```
136
+
137
+ **⛔ The prjct footer MUST be included. No exceptions.**
138
+
139
+ ---
140
+
141
+ ### STEP 7: Push and Create PR (REQUIRED)
142
+
36
143
  ```bash
37
- git add . && git commit && git push -u origin {branch}
38
- gh pr create --title "feat: {feature}" --base main
144
+ git push -u origin {branch}
145
+ gh pr create --title "{type}: {description}" --base main --body "$(cat <<'EOF'
146
+ ## Summary
147
+ {bullet points}
148
+
149
+ ## Changes
150
+ {what changed}
151
+
152
+ ## Test Plan
153
+ {how to verify}
154
+
155
+ Generated with [p/](https://www.prjct.app/)
156
+ EOF
157
+ )"
39
158
  ```
40
159
 
41
- **Output**:
160
+ ---
161
+
162
+ ### STEP 8: Update Linear/Issue Tracker (if applicable)
163
+
164
+ If task has `linearId`:
165
+ - Update issue status to "In Review" or appropriate state
166
+ - Add comment with PR link
167
+
168
+ ---
169
+
170
+ ## Output Format
171
+
42
172
  ```
43
173
  🚀 Shipped: {feature}
44
174
 
45
175
  Version: {old} → {new}
46
176
  PR: {url}
47
- CI: {status}
177
+ Branch: {branch}
48
178
 
49
179
  Next:
50
- - CI failed?Fix and push again
51
- - Merge ready? → `p. merge` or merge in GitHub
52
- - New task? → `p. task "description"`
180
+ - Review PR{url}
181
+ - Merge when ready → `p. merge`
53
182
  ```
183
+
184
+ ---
185
+
186
+ ## ⛔ VIOLATIONS
187
+
188
+ **If you skip ANY step, you are BREAKING the prjct workflow.**
189
+
190
+ Common violations:
191
+ - ❌ Committing directly to main
192
+ - ❌ Pushing without creating PR
193
+ - ❌ Skipping version bump
194
+ - ❌ Skipping CHANGELOG update
195
+ - ❌ Not waiting for user approval
196
+ - ❌ Missing prjct footer in commit
197
+
198
+ **These violations make prjct useless. Follow the workflow.**
@@ -10,6 +10,22 @@ prjct sync
10
10
 
11
11
  CLI handles: git analysis, context generation, agents, skills.
12
12
 
13
+ ## Linear Sync (when enabled)
14
+
15
+ ```
16
+ READ: .prjct/prjct.config.json → get projectId
17
+ READ: {globalPath}/project.json → check integrations.linear.enabled
18
+
19
+ IF integrations.linear.enabled:
20
+ # Sync Linear issues to local cache
21
+ RUN: bun $PRJCT_CLI/core/cli/linear.ts --project {projectId} sync
22
+
23
+ # Result stored in {globalPath}/storage/issues.json
24
+ # Contains all assigned issues from Linear
25
+
26
+ OUTPUT: "Linear: {fetched} issues synced"
27
+ ```
28
+
13
29
  ## Cursor Router Regeneration
14
30
 
15
31
  If `.cursor/` exists but `.cursor/rules/prjct.mdc` is missing:
@@ -25,6 +41,7 @@ If `.cursor/` exists but `.cursor/rules/prjct.mdc` is missing:
25
41
 
26
42
  Ecosystem: {ecosystem}
27
43
  Agents: {count} generated
44
+ Linear: {issueCount} issues synced (or "not enabled")
28
45
  Cursor: {regenerated/ready/not detected}
29
46
 
30
47
  Next:
@@ -4,10 +4,62 @@ allowed-tools: [Read, Write, Bash, Task, Glob, Grep, AskUserQuestion]
4
4
 
5
5
  # p. task "$ARGUMENTS"
6
6
 
7
+ ## ⛔ MANDATORY PRE-FLIGHT CHECKS
8
+
9
+ **Execute these checks BEFORE any task creation:**
10
+
11
+ ### Check 1: Validate Arguments
12
+
13
+ ```
14
+ IF $ARGUMENTS is empty:
15
+ ASK: "What task do you want to start?"
16
+ WAIT for response
17
+ DO NOT proceed with empty task
18
+ ```
19
+
20
+ ### Check 2: Check for Active Task
21
+
22
+ ```
23
+ READ: {globalPath}/storage/state.json
24
+
25
+ IF currentTask exists AND currentTask.status == "active":
26
+ OUTPUT:
27
+ """
28
+ ⚠️ Active task detected: {currentTask.description}
29
+
30
+ Options:
31
+ 1. Complete current task first → `p. done`
32
+ 2. Pause current task → `p. pause`
33
+ 3. Switch anyway (current task will be paused)
34
+ """
35
+
36
+ ASK: "What would you like to do?"
37
+ WAIT for explicit choice
38
+ DO NOT automatically switch tasks
39
+ ```
40
+
41
+ ### Check 3: Validate Git State
42
+
7
43
  ```bash
8
- prjct context task $ARGUMENTS
44
+ git status --porcelain
9
45
  ```
10
46
 
47
+ ```
48
+ IF uncommitted changes exist:
49
+ OUTPUT:
50
+ """
51
+ ⚠️ You have uncommitted changes:
52
+ {list of files}
53
+
54
+ Commit or stash them before starting a new task.
55
+ """
56
+
57
+ ASK: "Would you like to commit these changes first?"
58
+ WAIT for response
59
+ ```
60
+
61
+ ---
62
+
11
63
  ## Step 0: Detect Issue Tracker Reference
12
64
 
13
65
  IF `$ARGUMENTS` matches pattern `/^[A-Z]+-\d+$/` (e.g., PRJ-123, PROJ-456):
@@ -17,20 +69,29 @@ READ: {globalPath}/project.json
17
69
  CHECK: integrations.linear OR integrations.jira
18
70
 
19
71
  IF integrations.linear.enabled:
20
- # Linear issue detected
21
- IMPORT: linearService from core/integrations/linear
22
- CALL: linearService.fetchIssue("$ARGUMENTS")
72
+ # Linear issue detected - use LOCAL-FIRST approach
73
+ # Try local cache first (issues.json), then API if not found
74
+
75
+ RUN: bun $PRJCT_CLI/core/cli/linear.ts --project {projectId} get-local "$ARGUMENTS"
76
+
77
+ IF issue found in local cache:
78
+ USE cached issue data (no API call needed)
79
+ ELSE:
80
+ # Fallback to API
81
+ IMPORT: linearSync from core/integrations/linear
82
+ CALL: linearSync.getIssue(projectId, "$ARGUMENTS") # Fetches + caches
23
83
 
24
84
  IF issue found:
25
- SET: task.externalId = issue.externalId
26
- SET: task.externalProvider = "linear"
85
+ SET: task.linearId = issue.identifier # "PRJ-123"
86
+ SET: task.linearUuid = issue.id # Linear internal UUID
27
87
  SET: task.description = issue.title
28
88
  SET: $ARGUMENTS = issue.title # Use title for task
29
89
 
30
- # Mark issue as In Progress in Linear
31
- CALL: linearService.markInProgress(issue.id)
90
+ # Mark issue as In Progress in Linear (pushes status change)
91
+ IMPORT: linearSync from core/integrations/linear
92
+ CALL: linearSync.pushStatus(projectId, issue.identifier, 'in_progress')
32
93
 
33
- OUTPUT: "Linked to Linear: {issue.externalId} - {issue.title}"
94
+ OUTPUT: "Linked to Linear: {issue.identifier} - {issue.title}"
34
95
  OUTPUT: "Linear: In Progress"
35
96
 
36
97
  ELSE IF integrations.jira.enabled:
@@ -58,14 +119,59 @@ ELSE:
58
119
 
59
120
  ## Main Flow
60
121
 
61
- IF `currentTask` active Ask: complete, pause, or cancel?
122
+ ### Step A: Show Plan and Get Approval (BLOCKING)
62
123
 
124
+ **⛔ DO NOT create branches or modify state without user approval.**
125
+
126
+ ```
127
+ OUTPUT:
128
+ """
129
+ ## Task Plan
130
+
131
+ Description: $ARGUMENTS
132
+ Type: {classified type}
133
+ Branch: {type}/{slug}
134
+
135
+ Will do:
136
+ 1. Create feature branch from current branch
137
+ 2. Initialize task tracking in state.json
138
+ 3. Break down into subtasks
139
+ 4. {If Linear: Update issue status to In Progress}
140
+
141
+ Proceed? (yes/no)
142
+ """
143
+
144
+ WAIT for explicit "yes" or approval
145
+ DO NOT assume
146
+ ```
147
+
148
+ ### Step B: Explore Codebase
149
+
150
+ ```
63
151
  USE Task(Explore) → find similar code, affected files
64
- READ `agents[].filePath` → get patterns
65
- Classify: feature|bug|improvement|refactor|chore
66
- Break into subtasks
152
+ READ agents/*.md → get domain patterns
153
+ ```
67
154
 
68
- IF on main `git checkout -b {type}/{slug}`
155
+ ### Step C: Classify Task
156
+
157
+ Determine type: feature | bug | improvement | refactor | chore
158
+
159
+ ### Step D: Create Branch (if needed)
160
+
161
+ ```bash
162
+ CURRENT_BRANCH=$(git branch --show-current)
163
+ ```
164
+
165
+ ```
166
+ IF CURRENT_BRANCH == "main" OR CURRENT_BRANCH == "master":
167
+ OUTPUT: "Creating feature branch: {type}/{slug}"
168
+
169
+ git checkout -b {type}/{slug}
170
+
171
+ IF git command fails:
172
+ OUTPUT: "Failed to create branch. Check git status."
173
+ STOP
174
+ ```
69
175
 
70
176
  ```bash
71
177
  prjct work "$ARGUMENTS"
@@ -83,8 +189,8 @@ WRITE `{globalPath}/storage/state.json`:
83
189
  "subtasks": [...],
84
190
  "currentSubtaskIndex": 0,
85
191
  "parentDescription": "$ARGUMENTS",
86
- "externalId": "{externalId or null}",
87
- "externalProvider": "{linear|jira|null}"
192
+ "linearId": "{identifier or null}", // "PRJ-123" - Linear identifier
193
+ "linearUuid": "{uuid or null}" // Linear internal UUID
88
194
  }
89
195
  }
90
196
  ```
@@ -94,7 +200,7 @@ WRITE `{globalPath}/storage/state.json`:
94
200
  {type}: $ARGUMENTS
95
201
 
96
202
  Branch: {branch} | Subtasks: {count}
97
- {externalId ? "Linked: {externalProvider} {externalId}" : ""}
203
+ {linearId ? "Linear: {linearId} → In Progress" : ""}
98
204
 
99
205
  Next: Work on subtask, then `p. done`
100
206
  ```
@@ -79,12 +79,10 @@ node -e "console.log(require('crypto').randomUUID())"
79
79
  **Every commit made with prjct MUST include this footer:**
80
80
 
81
81
  ```
82
- 🤖 Generated with [p/](https://www.prjct.app/)
83
- Powered by [Antigravity](https://gemini.google.com/app/antigravity)
84
-
82
+ Generated with [p/](https://www.prjct.app/)
85
83
  ```
86
84
 
87
- **This is NON-NEGOTIABLE. The prjct signature (`🤖 Generated with [p/]`) must appear in ALL commits.**
85
+ **This is NON-NEGOTIABLE. The prjct signature must appear in ALL commits.**
88
86
 
89
87
  ### 5. Storage Rules (CROSS-AGENT COMPATIBILITY)
90
88
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  ## HOW TO USE PRJCT (Read This First)
7
7
 
8
- When user types `p. <command>`, load the template from `templates/commands/{command}.md` and execute it intelligently.
8
+ When user types `p. <command>`, load the template from `templates/commands/{command}.md` and execute it.
9
9
 
10
10
  ```
11
11
  p. sync → templates/commands/sync.md
@@ -14,39 +14,70 @@ p. done → templates/commands/done.md
14
14
  p. ship X → templates/commands/ship.md
15
15
  ```
16
16
 
17
- **Key Insight**: Templates are GUIDANCE, not scripts. Use your intelligence to adapt them to the situation.
18
-
19
17
  ---
20
18
 
21
- ## CRITICAL RULES
19
+ ## CRITICAL RULES - READ BEFORE EVERY COMMAND
20
+
21
+ ### 0. FOLLOW TEMPLATES STEP BY STEP (NON-NEGOTIABLE)
22
+
23
+ **Templates are MANDATORY WORKFLOWS, not suggestions.**
24
+
25
+ ```
26
+ ⛔ BEFORE executing ANY p. command:
27
+ 1. READ the template file COMPLETELY
28
+ 2. FOLLOW each step IN ORDER
29
+ 3. DO NOT skip steps - even "obvious" ones
30
+ 4. DO NOT take shortcuts - even for "simple" tasks
31
+ 5. STOP at any ⛔ BLOCKING condition
32
+ ```
22
33
 
23
- ### 0. PLAN BEFORE ACTION (NON-NEGOTIABLE)
34
+ **WHY THIS MATTERS:**
35
+ - Skipping steps breaks the prjct workflow for ALL users
36
+ - "Intelligent adaptation" is NOT permission to skip steps
37
+ - Every step exists for a reason
38
+ - If you skip steps, prjct becomes useless
24
39
 
25
- **For ANY prjct task, you MUST create a plan and get user approval BEFORE executing.**
40
+ ### BLOCKING CONDITIONS
26
41
 
42
+ When a template says "STOP" or has a ⛔ symbol:
27
43
  ```
28
- EVERY prjct command (p. task, p. sync, p. ship, etc.):
29
- 1. STOP - Do not execute anything yet
30
- 2. ANALYZE - Read relevant files, understand scope
31
- 3. PLAN - Write a clear plan with:
32
- - What will be done
33
- - Files that will be modified
34
- - Potential risks
35
- 4. ASK - Present plan to user and wait for explicit approval
36
- 5. EXECUTE - Only after user says "yes", "approved", "go ahead", etc.
44
+ 1. HALT execution immediately
45
+ 2. TELL the user why you stopped
46
+ 3. DO NOT proceed until the condition is resolved
47
+ 4. DO NOT work around the blocker
37
48
  ```
38
49
 
39
- **NEVER:**
40
- - Execute code changes without showing a plan first
41
- - Assume approval - wait for explicit confirmation
42
- - Skip the plan step for "simple" tasks
50
+ **Examples of blockers:**
51
+ - `p. ship` on main branch STOP, tell user to create branch
52
+ - `gh auth status` fails STOP, tell user to authenticate
53
+ - No changes to commit STOP, tell user nothing to ship
54
+
55
+ ### GIT WORKFLOW RULES (CRITICAL)
56
+
57
+ **⛔ NEVER commit directly to main/master**
58
+ - Always create a feature branch first
59
+ - Always create a PR for review
60
+ - Direct pushes to main are FORBIDDEN
43
61
 
44
- **ALWAYS:**
45
- - Show the plan in a clear, readable format
46
- - Wait for user response before proceeding
47
- - If user asks questions, answer them before executing
62
+ **⛔ NEVER push without a PR**
63
+ - All changes go through pull requests
64
+ - No exceptions for "small fixes"
48
65
 
49
- This rule applies to ALL prjct operations. No exceptions.
66
+ **⛔ NEVER skip version bump on ship**
67
+ - Every ship requires version update
68
+ - Every ship requires CHANGELOG entry
69
+
70
+ ### PLAN BEFORE DESTRUCTIVE ACTIONS
71
+
72
+ For commands that modify git state (ship, merge, done):
73
+ ```
74
+ 1. Show the user what will happen
75
+ 2. List all changes/files affected
76
+ 3. WAIT for explicit approval ("yes", "proceed", "do it")
77
+ 4. Only then execute
78
+ ```
79
+
80
+ **DO NOT assume approval. WAIT for it.**
50
81
 
51
82
  ---
52
83
 
@@ -79,12 +110,10 @@ bun -e "console.log(crypto.randomUUID())" 2>/dev/null || node -e "console.log(re
79
110
  **Every commit made with prjct MUST include this footer:**
80
111
 
81
112
  ```
82
- 🤖 Generated with [p/](https://www.prjct.app/)
83
- Designed for [Claude](https://www.anthropic.com/claude)
84
-
113
+ Generated with [p/](https://www.prjct.app/)
85
114
  ```
86
115
 
87
- **This is NON-NEGOTIABLE. The prjct signature (`🤖 Generated with [p/]`) must appear in ALL commits.**
116
+ **This is NON-NEGOTIABLE. The prjct signature must appear in ALL commits.**
88
117
 
89
118
  ### 5. Storage Rules (CROSS-AGENT COMPATIBILITY)
90
119
 
@@ -229,6 +258,64 @@ Next: [suggested action]
229
258
 
230
259
  ---
231
260
 
261
+ ## CLEAN TERMINAL UX (CRITICAL)
262
+
263
+ **Tool calls MUST be user-friendly.** The terminal output represents prjct's quality.
264
+
265
+ ### Rules for Tool Calls
266
+
267
+ 1. **ALWAYS use clear descriptions** in Bash tool calls:
268
+ ```
269
+ GOOD: description: "Building project"
270
+ BAD: description: "bun run build 2>&1 | tail -5"
271
+ ```
272
+
273
+ 2. **Hide implementation details** - Users don't need to see:
274
+ - Pipe chains (`| tail -5`, `| grep`, `2>&1`)
275
+ - Internal paths (`/Users/jj/.prjct-cli/...`)
276
+ - JSON parsing (`jq -r '.field'`)
277
+
278
+ 3. **Use action verbs** for descriptions:
279
+ - "Building project"
280
+ - "Running tests"
281
+ - "Checking git status"
282
+ - "Fetching Linear issues"
283
+
284
+ 4. **Group related operations** - Don't show 5 separate tool calls when 1 will do
285
+
286
+ 5. **Prefer prjct CLI over raw commands**:
287
+ ```
288
+ GOOD: bun $PRJCT_CLI/core/cli/linear.ts list
289
+ BAD: curl -X POST https://api.linear.app/graphql...
290
+ ```
291
+
292
+ ### Examples
293
+
294
+ ```
295
+ # GOOD - Clean, understandable
296
+ ⏺ Bash: Building project
297
+ ✓ Build complete
298
+
299
+ # BAD - Technical noise
300
+ ⏺ Bash(cd /Users/jj/Apps/prjct && bun run build 2>&1 | tail -5)
301
+ → core/infrastructure/editors-config.js
302
+ → core/utils/version.js
303
+ ```
304
+
305
+ ### When Reading Files
306
+
307
+ - Don't announce every file read
308
+ - Group related reads
309
+ - Only mention files relevant to user's question
310
+
311
+ ### When Running Commands
312
+
313
+ - Show WHAT you're doing, not HOW
314
+ - Suppress stderr noise when possible
315
+ - Return only meaningful output
316
+
317
+ ---
318
+
232
319
  ## LOADING DOMAIN AGENTS
233
320
 
234
321
  When working on tasks, load relevant agents from `{globalPath}/agents/`:
@@ -99,9 +99,7 @@ node -e "console.log(require('crypto').randomUUID())"
99
99
  **Every commit made with prjct MUST include this footer:**
100
100
 
101
101
  ```
102
- 🤖 Generated with [p/](https://www.prjct.app/)
103
- Built with [Cursor](https://www.cursor.com/)
104
-
102
+ Generated with [p/](https://www.prjct.app/)
105
103
  ```
106
104
 
107
105
  **This is NON-NEGOTIABLE. The prjct signature must appear in ALL commits.**
@@ -79,12 +79,10 @@ bun -e "console.log(crypto.randomUUID())" 2>/dev/null || node -e "console.log(re
79
79
  **Every commit made with prjct MUST include this footer:**
80
80
 
81
81
  ```
82
- 🤖 Generated with [p/](https://www.prjct.app/)
83
- Designed for [Gemini](https://geminicli.com/)
84
-
82
+ Generated with [p/](https://www.prjct.app/)
85
83
  ```
86
84
 
87
- **This is NON-NEGOTIABLE. The prjct signature (`🤖 Generated with [p/]`) must appear in ALL commits.**
85
+ **This is NON-NEGOTIABLE. The prjct signature must appear in ALL commits.**
88
86
 
89
87
  ### 5. Storage Rules (CROSS-AGENT COMPATIBILITY)
90
88
 
@@ -99,9 +99,7 @@ node -e "console.log(require('crypto').randomUUID())"
99
99
  **Every commit made with prjct MUST include this footer:**
100
100
 
101
101
  ```
102
- 🤖 Generated with [p/](https://www.prjct.app/)
103
- Built with [Windsurf](https://www.windsurf.com/)
104
-
102
+ Generated with [p/](https://www.prjct.app/)
105
103
  ```
106
104
 
107
105
  **This is NON-NEGOTIABLE. The prjct signature must appear in ALL commits.**
@@ -64,8 +64,7 @@ Fix issues and try again.
64
64
 
65
65
  {body if needed}
66
66
 
67
- 🤖 Generated with [p/](https://www.prjct.app/)
68
- Designed for [Claude](https://www.anthropic.com/claude)
67
+ Generated with [p/](https://www.prjct.app/)
69
68
  ```
70
69
  3. Commit: `git commit -m "{message}"`
71
70
  4. Push: `git push origin {current-branch}`