@vibescope/mcp-server 0.5.0 → 0.5.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 (161) hide show
  1. package/CHANGELOG.md +84 -84
  2. package/README.md +194 -194
  3. package/dist/api-client/tasks.d.ts +1 -0
  4. package/dist/cli-init.js +21 -21
  5. package/dist/cli.js +26 -26
  6. package/dist/handlers/tasks.js +7 -1
  7. package/dist/handlers/tool-docs.js +1216 -1216
  8. package/dist/index.js +73 -73
  9. package/dist/templates/agent-guidelines.d.ts +1 -1
  10. package/dist/templates/agent-guidelines.js +205 -205
  11. package/dist/templates/help-content.js +1621 -1621
  12. package/dist/tools/bodies-of-work.js +6 -6
  13. package/dist/tools/cloud-agents.js +22 -22
  14. package/dist/tools/milestones.js +2 -2
  15. package/dist/tools/requests.js +1 -1
  16. package/dist/tools/session.js +11 -11
  17. package/dist/tools/sprints.js +9 -9
  18. package/dist/tools/tasks.js +43 -35
  19. package/dist/tools/worktrees.js +14 -14
  20. package/dist/utils.js +11 -11
  21. package/docs/TOOLS.md +2687 -2685
  22. package/package.json +53 -53
  23. package/scripts/generate-docs.ts +212 -212
  24. package/scripts/version-bump.ts +203 -203
  25. package/src/api-client/blockers.ts +86 -86
  26. package/src/api-client/bodies-of-work.ts +194 -194
  27. package/src/api-client/chat.ts +50 -50
  28. package/src/api-client/connectors.ts +152 -152
  29. package/src/api-client/cost.ts +185 -185
  30. package/src/api-client/decisions.ts +87 -87
  31. package/src/api-client/deployment.ts +313 -313
  32. package/src/api-client/discovery.ts +81 -81
  33. package/src/api-client/fallback.ts +52 -52
  34. package/src/api-client/file-checkouts.ts +115 -115
  35. package/src/api-client/findings.ts +100 -100
  36. package/src/api-client/git-issues.ts +88 -88
  37. package/src/api-client/ideas.ts +112 -112
  38. package/src/api-client/index.ts +592 -592
  39. package/src/api-client/milestones.ts +83 -83
  40. package/src/api-client/organizations.ts +185 -185
  41. package/src/api-client/progress.ts +94 -94
  42. package/src/api-client/project.ts +181 -181
  43. package/src/api-client/requests.ts +54 -54
  44. package/src/api-client/session.ts +220 -220
  45. package/src/api-client/sprints.ts +227 -227
  46. package/src/api-client/subtasks.ts +57 -57
  47. package/src/api-client/tasks.ts +451 -450
  48. package/src/api-client/types.ts +32 -32
  49. package/src/api-client/validation.ts +60 -60
  50. package/src/api-client/worktrees.ts +53 -53
  51. package/src/api-client.test.ts +847 -847
  52. package/src/api-client.ts +2728 -2728
  53. package/src/cli-init.ts +558 -558
  54. package/src/cli.test.ts +284 -284
  55. package/src/cli.ts +204 -204
  56. package/src/handlers/__test-setup__.ts +240 -240
  57. package/src/handlers/__test-utils__.ts +89 -89
  58. package/src/handlers/blockers.test.ts +468 -468
  59. package/src/handlers/blockers.ts +172 -172
  60. package/src/handlers/bodies-of-work.test.ts +704 -704
  61. package/src/handlers/bodies-of-work.ts +526 -526
  62. package/src/handlers/chat.test.ts +185 -185
  63. package/src/handlers/chat.ts +101 -101
  64. package/src/handlers/cloud-agents.test.ts +438 -438
  65. package/src/handlers/cloud-agents.ts +156 -156
  66. package/src/handlers/connectors.test.ts +834 -834
  67. package/src/handlers/connectors.ts +229 -229
  68. package/src/handlers/cost.test.ts +462 -462
  69. package/src/handlers/cost.ts +285 -285
  70. package/src/handlers/decisions.test.ts +382 -382
  71. package/src/handlers/decisions.ts +153 -153
  72. package/src/handlers/deployment.test.ts +551 -551
  73. package/src/handlers/deployment.ts +570 -570
  74. package/src/handlers/discovery.test.ts +206 -206
  75. package/src/handlers/discovery.ts +433 -433
  76. package/src/handlers/fallback.test.ts +537 -537
  77. package/src/handlers/fallback.ts +194 -194
  78. package/src/handlers/file-checkouts.test.ts +750 -750
  79. package/src/handlers/file-checkouts.ts +185 -185
  80. package/src/handlers/findings.test.ts +633 -633
  81. package/src/handlers/findings.ts +239 -239
  82. package/src/handlers/git-issues.test.ts +631 -631
  83. package/src/handlers/git-issues.ts +136 -136
  84. package/src/handlers/ideas.test.ts +644 -644
  85. package/src/handlers/ideas.ts +207 -207
  86. package/src/handlers/index.ts +93 -93
  87. package/src/handlers/milestones.test.ts +475 -475
  88. package/src/handlers/milestones.ts +180 -180
  89. package/src/handlers/organizations.test.ts +826 -826
  90. package/src/handlers/organizations.ts +315 -315
  91. package/src/handlers/progress.test.ts +269 -269
  92. package/src/handlers/progress.ts +77 -77
  93. package/src/handlers/project.test.ts +546 -546
  94. package/src/handlers/project.ts +245 -245
  95. package/src/handlers/requests.test.ts +303 -303
  96. package/src/handlers/requests.ts +99 -99
  97. package/src/handlers/roles.test.ts +305 -305
  98. package/src/handlers/roles.ts +219 -219
  99. package/src/handlers/session.test.ts +998 -998
  100. package/src/handlers/session.ts +1105 -1105
  101. package/src/handlers/sprints.test.ts +732 -732
  102. package/src/handlers/sprints.ts +537 -537
  103. package/src/handlers/tasks.test.ts +931 -931
  104. package/src/handlers/tasks.ts +1144 -1137
  105. package/src/handlers/tool-categories.test.ts +66 -66
  106. package/src/handlers/tool-docs.test.ts +511 -511
  107. package/src/handlers/tool-docs.ts +1595 -1595
  108. package/src/handlers/types.test.ts +259 -259
  109. package/src/handlers/types.ts +176 -176
  110. package/src/handlers/validation.test.ts +582 -582
  111. package/src/handlers/validation.ts +164 -164
  112. package/src/handlers/version.ts +63 -63
  113. package/src/index.test.ts +674 -674
  114. package/src/index.ts +884 -884
  115. package/src/setup.test.ts +243 -243
  116. package/src/setup.ts +410 -410
  117. package/src/templates/agent-guidelines.ts +233 -233
  118. package/src/templates/help-content.ts +1751 -1751
  119. package/src/token-tracking.test.ts +463 -463
  120. package/src/token-tracking.ts +167 -167
  121. package/src/tools/blockers.ts +122 -122
  122. package/src/tools/bodies-of-work.ts +283 -283
  123. package/src/tools/chat.ts +72 -72
  124. package/src/tools/cloud-agents.ts +101 -101
  125. package/src/tools/connectors.ts +191 -191
  126. package/src/tools/cost.ts +111 -111
  127. package/src/tools/decisions.ts +111 -111
  128. package/src/tools/deployment.ts +455 -455
  129. package/src/tools/discovery.ts +76 -76
  130. package/src/tools/fallback.ts +111 -111
  131. package/src/tools/features.ts +154 -154
  132. package/src/tools/file-checkouts.ts +145 -145
  133. package/src/tools/findings.ts +101 -101
  134. package/src/tools/git-issues.ts +130 -130
  135. package/src/tools/ideas.ts +162 -162
  136. package/src/tools/index.ts +145 -145
  137. package/src/tools/milestones.ts +118 -118
  138. package/src/tools/organizations.ts +224 -224
  139. package/src/tools/persona-templates.ts +25 -25
  140. package/src/tools/progress.ts +73 -73
  141. package/src/tools/project.ts +210 -210
  142. package/src/tools/requests.ts +68 -68
  143. package/src/tools/roles.ts +112 -112
  144. package/src/tools/session.ts +181 -181
  145. package/src/tools/sprints.ts +298 -298
  146. package/src/tools/tasks.ts +583 -575
  147. package/src/tools/tools.test.ts +222 -222
  148. package/src/tools/types.ts +9 -9
  149. package/src/tools/validation.ts +75 -75
  150. package/src/tools/version.ts +34 -34
  151. package/src/tools/worktrees.ts +66 -66
  152. package/src/tools.test.ts +416 -416
  153. package/src/utils.test.ts +1014 -1014
  154. package/src/utils.ts +586 -586
  155. package/src/validators.test.ts +223 -223
  156. package/src/validators.ts +249 -249
  157. package/src/version.ts +162 -162
  158. package/tsconfig.json +16 -16
  159. package/vitest.config.ts +14 -14
  160. package/dist/tools.d.ts +0 -2
  161. package/dist/tools.js +0 -3602
@@ -18,7 +18,7 @@
18
18
  export const bodiesOfWorkTools = [
19
19
  {
20
20
  name: 'create_body_of_work',
21
- description: `Create a new body of work to group tasks into phases (pre/core/post).
21
+ description: `Create a new body of work to group tasks into phases (pre/core/post).
22
22
  Bodies of work allow organizing related tasks with optional auto-deployment on completion.`,
23
23
  inputSchema: {
24
24
  type: 'object',
@@ -148,7 +148,7 @@ Bodies of work allow organizing related tasks with optional auto-deployment on c
148
148
  },
149
149
  {
150
150
  name: 'add_task_to_body_of_work',
151
- description: `Add a task to a body of work in a specific phase.
151
+ description: `Add a task to a body of work in a specific phase.
152
152
  Phases control execution order: pre tasks run first, then core, then post.`,
153
153
  inputSchema: {
154
154
  type: 'object',
@@ -190,7 +190,7 @@ Phases control execution order: pre tasks run first, then core, then post.`,
190
190
  },
191
191
  {
192
192
  name: 'activate_body_of_work',
193
- description: `Activate a draft body of work to start execution.
193
+ description: `Activate a draft body of work to start execution.
194
194
  Requires at least one task. Once active, tasks can be worked on following phase order.`,
195
195
  inputSchema: {
196
196
  type: 'object',
@@ -205,7 +205,7 @@ Requires at least one task. Once active, tasks can be worked on following phase
205
205
  },
206
206
  {
207
207
  name: 'add_task_dependency',
208
- description: `Add a dependency between tasks in a body of work.
208
+ description: `Add a dependency between tasks in a body of work.
209
209
  The dependent task cannot start until the dependency is completed. Prevents circular dependencies.`,
210
210
  inputSchema: {
211
211
  type: 'object',
@@ -263,8 +263,8 @@ The dependent task cannot start until the dependency is completed. Prevents circ
263
263
  },
264
264
  {
265
265
  name: 'get_next_body_of_work_task',
266
- description: `Get the next available task from a body of work.
267
- Considers phase order (pre → core → post) and task dependencies.
266
+ description: `Get the next available task from a body of work.
267
+ Considers phase order (pre → core → post) and task dependencies.
268
268
  Only returns tasks where all dependencies are completed.`,
269
269
  inputSchema: {
270
270
  type: 'object',
@@ -8,16 +8,16 @@
8
8
  export const cloudAgentTools = [
9
9
  {
10
10
  name: 'cleanup_stale_cloud_agents',
11
- description: `Clean up stale cloud agents that failed to start or lost connection.
12
-
13
- Finds agents stuck in 'starting' status (or optionally 'running' with no heartbeat)
14
- and marks them as failed. Only operates on the current session's project.
15
-
16
- Use this when:
17
- - You see agents stuck in "starting" status on the dashboard
18
- - Cloud agents failed to spawn but weren't cleaned up
19
- - You want to clear ghost agents from a previous session
20
-
11
+ description: `Clean up stale cloud agents that failed to start or lost connection.
12
+
13
+ Finds agents stuck in 'starting' status (or optionally 'running' with no heartbeat)
14
+ and marks them as failed. Only operates on the current session's project.
15
+
16
+ Use this when:
17
+ - You see agents stuck in "starting" status on the dashboard
18
+ - Cloud agents failed to spawn but weren't cleaned up
19
+ - You want to clear ghost agents from a previous session
20
+
21
21
  SECURITY: This only affects agents in YOUR current project. Cannot access other users' projects.`,
22
22
  inputSchema: {
23
23
  type: 'object',
@@ -44,9 +44,9 @@ SECURITY: This only affects agents in YOUR current project. Cannot access other
44
44
  },
45
45
  {
46
46
  name: 'list_cloud_agents',
47
- description: `List cloud agents for a project.
48
-
49
- Returns all spawned cloud agents for the project with their current status.
47
+ description: `List cloud agents for a project.
48
+
49
+ Returns all spawned cloud agents for the project with their current status.
50
50
  Use this to check the state of cloud agents before/after cleanup.`,
51
51
  inputSchema: {
52
52
  type: 'object',
@@ -66,15 +66,15 @@ Use this to check the state of cloud agents before/after cleanup.`,
66
66
  },
67
67
  {
68
68
  name: 'update_agent_status',
69
- description: `Report what you're currently doing. This updates the status message shown on the dashboard.
70
-
71
- Call this at key milestones during boot and work:
72
- - "Installing dependencies..."
73
- - "Running start_work_session..."
74
- - "Working on: <task title>"
75
- - "Running tests..."
76
- - "Committing changes..."
77
-
69
+ description: `Report what you're currently doing. This updates the status message shown on the dashboard.
70
+
71
+ Call this at key milestones during boot and work:
72
+ - "Installing dependencies..."
73
+ - "Running start_work_session..."
74
+ - "Working on: <task title>"
75
+ - "Running tests..."
76
+ - "Committing changes..."
77
+
78
78
  Keep messages short (under 80 chars). The dashboard shows this in real-time.`,
79
79
  inputSchema: {
80
80
  type: 'object',
@@ -11,8 +11,8 @@
11
11
  export const milestoneTools = [
12
12
  {
13
13
  name: 'add_milestone',
14
- description: `Add a milestone to a task.
15
- Milestones help break down large tasks into smaller trackable steps.
14
+ description: `Add a milestone to a task.
15
+ Milestones help break down large tasks into smaller trackable steps.
16
16
  Use this to show progress on complex tasks and help gauge completion.`,
17
17
  inputSchema: {
18
18
  type: 'object',
@@ -45,7 +45,7 @@ export const requestTools = [
45
45
  },
46
46
  {
47
47
  name: 'answer_question',
48
- description: `Answer a question from the user. Use this when the user has asked a question via the dashboard.
48
+ description: `Answer a question from the user. Use this when the user has asked a question via the dashboard.
49
49
  The answer will be displayed to the user and the question marked as answered.`,
50
50
  inputSchema: {
51
51
  type: 'object',
@@ -14,11 +14,11 @@
14
14
  export const sessionTools = [
15
15
  {
16
16
  name: 'start_work_session',
17
- description: `CALL THIS FIRST when beginning work on a project.
18
- Returns session info, persona, role, and next_task. Start the next_task IMMEDIATELY without asking the user.
19
-
20
- IMPORTANT: If the user gives you direct work that isn't tracked as a task (e.g., "add feature X", "fix bug Y"), you MUST call add_task() first to create a task before starting work. This ensures all work is tracked and visible on the dashboard.
21
-
17
+ description: `CALL THIS FIRST when beginning work on a project.
18
+ Returns session info, persona, role, and next_task. Start the next_task IMMEDIATELY without asking the user.
19
+
20
+ IMPORTANT: If the user gives you direct work that isn't tracked as a task (e.g., "add feature X", "fix bug Y"), you MUST call add_task() first to create a task before starting work. This ensures all work is tracked and visible on the dashboard.
21
+
22
22
  Use mode:'full' for complete context, mode:'lite' (default) for minimal tokens.`,
23
23
  inputSchema: {
24
24
  type: 'object',
@@ -61,8 +61,8 @@ Use mode:'full' for complete context, mode:'lite' (default) for minimal tokens.`
61
61
  },
62
62
  {
63
63
  name: 'confirm_agent_setup',
64
- description: `Confirm that agent setup is complete for this project. Call this after creating your agent's configuration file (e.g., .claude/CLAUDE.md, .gemini/GEMINI.md).
65
-
64
+ description: `Confirm that agent setup is complete for this project. Call this after creating your agent's configuration file (e.g., .claude/CLAUDE.md, .gemini/GEMINI.md).
65
+
66
66
  This marks your agent type as fully onboarded to the project, so you won't receive setup instructions again.`,
67
67
  inputSchema: {
68
68
  type: 'object',
@@ -104,10 +104,10 @@ This marks your agent type as fully onboarded to the project, so you won't recei
104
104
  },
105
105
  {
106
106
  name: 'report_token_usage',
107
- description: `Report actual Claude API token usage for accurate cost tracking.
108
-
109
- IMPORTANT: MCP can only estimate tokens from tool I/O (~1-5% of actual usage). Call this tool after each API response to report actual usage from the Claude API response headers.
110
-
107
+ description: `Report actual Claude API token usage for accurate cost tracking.
108
+
109
+ IMPORTANT: MCP can only estimate tokens from tool I/O (~1-5% of actual usage). Call this tool after each API response to report actual usage from the Claude API response headers.
110
+
111
111
  The Claude API response includes 'usage.input_tokens' and 'usage.output_tokens' - pass those values here for accurate cost attribution.`,
112
112
  inputSchema: {
113
113
  type: 'object',
@@ -17,7 +17,7 @@
17
17
  export const sprintTools = [
18
18
  {
19
19
  name: 'create_sprint',
20
- description: `Create a new sprint. Sprints are time-bounded bodies of work with velocity tracking.
20
+ description: `Create a new sprint. Sprints are time-bounded bodies of work with velocity tracking.
21
21
  Sprints start in 'planning' status where tasks can be added with story points.`,
22
22
  inputSchema: {
23
23
  type: 'object',
@@ -106,8 +106,8 @@ Sprints start in 'planning' status where tasks can be added with story points.`,
106
106
  },
107
107
  {
108
108
  name: 'get_sprint',
109
- description: `Get a sprint with all its tasks organized by phase (pre/core/post).
110
- Includes progress percentage, velocity points, and committed points.
109
+ description: `Get a sprint with all its tasks organized by phase (pre/core/post).
110
+ Includes progress percentage, velocity points, and committed points.
111
111
  Use summary_only: true to get task counts and next task instead of full task arrays (saves tokens).`,
112
112
  inputSchema: {
113
113
  type: 'object',
@@ -126,7 +126,7 @@ Use summary_only: true to get task counts and next task instead of full task arr
126
126
  },
127
127
  {
128
128
  name: 'get_sprints',
129
- description: `List sprints for a project with velocity metrics.
129
+ description: `List sprints for a project with velocity metrics.
130
130
  Returns sprints sorted by sprint_number descending (most recent first).`,
131
131
  inputSchema: {
132
132
  type: 'object',
@@ -164,7 +164,7 @@ Returns sprints sorted by sprint_number descending (most recent first).`,
164
164
  },
165
165
  {
166
166
  name: 'start_sprint',
167
- description: `Start a sprint. Transitions from 'planning' to 'active' status.
167
+ description: `Start a sprint. Transitions from 'planning' to 'active' status.
168
168
  Locks the committed_points at the current total story points.`,
169
169
  inputSchema: {
170
170
  type: 'object',
@@ -179,7 +179,7 @@ Locks the committed_points at the current total story points.`,
179
179
  },
180
180
  {
181
181
  name: 'complete_sprint',
182
- description: `Complete a sprint. Handles retrospective phase and auto-deployment if configured.
182
+ description: `Complete a sprint. Handles retrospective phase and auto-deployment if configured.
183
183
  Status flow: active → in_review → retrospective → completed`,
184
184
  inputSchema: {
185
185
  type: 'object',
@@ -202,7 +202,7 @@ Status flow: active → in_review → retrospective → completed`,
202
202
  },
203
203
  {
204
204
  name: 'add_task_to_sprint',
205
- description: `Add a task to a sprint with optional story points.
205
+ description: `Add a task to a sprint with optional story points.
206
206
  Tasks can be added during 'planning' status. Story points contribute to committed_points.`,
207
207
  inputSchema: {
208
208
  type: 'object',
@@ -248,7 +248,7 @@ Tasks can be added during 'planning' status. Story points contribute to committe
248
248
  },
249
249
  {
250
250
  name: 'get_sprint_backlog',
251
- description: `Get tasks from backlog/pending that can be added to a sprint with pagination.
251
+ description: `Get tasks from backlog/pending that can be added to a sprint with pagination.
252
252
  Returns tasks not already assigned to any body of work or sprint.`,
253
253
  inputSchema: {
254
254
  type: 'object',
@@ -275,7 +275,7 @@ Returns tasks not already assigned to any body of work or sprint.`,
275
275
  },
276
276
  {
277
277
  name: 'get_sprint_velocity',
278
- description: `Get velocity metrics for completed sprints.
278
+ description: `Get velocity metrics for completed sprints.
279
279
  Returns committed vs completed points and average velocity.`,
280
280
  inputSchema: {
281
281
  type: 'object',
@@ -164,8 +164,8 @@ export const taskTools = [
164
164
  },
165
165
  {
166
166
  name: 'get_next_task',
167
- description: `Get highest priority pending task. Start it IMMEDIATELY by calling update_task(task_id, status: "in_progress").
168
-
167
+ description: `Get highest priority pending task. Start it IMMEDIATELY by calling update_task(task_id, status: "in_progress").
168
+
169
169
  Do NOT ask the user for permission. Follow the directive in the response.`,
170
170
  inputSchema: {
171
171
  type: 'object',
@@ -180,12 +180,12 @@ Do NOT ask the user for permission. Follow the directive in the response.`,
180
180
  },
181
181
  {
182
182
  name: 'add_task',
183
- description: `Add a new task. Priority 1=highest, 5=lowest. Include estimated_minutes. Use blocking=true for deployment finalization tasks that must complete before other work.
184
-
185
- WHEN TO USE: If the user gives you work directly (e.g., "implement feature X", "fix this bug") that isn't already tracked as a task in Vibescope, you MUST create a task first using this tool. This ensures:
186
- - The work is visible on the dashboard
187
- - Progress can be tracked
188
- - Other agents won't duplicate the work
183
+ description: `Add a new task. Priority 1=highest, 5=lowest. Include estimated_minutes. Use blocking=true for deployment finalization tasks that must complete before other work.
184
+
185
+ WHEN TO USE: If the user gives you work directly (e.g., "implement feature X", "fix this bug") that isn't already tracked as a task in Vibescope, you MUST create a task first using this tool. This ensures:
186
+ - The work is visible on the dashboard
187
+ - Progress can be tracked
188
+ - Other agents won't duplicate the work
189
189
  - The human can see what you're working on`,
190
190
  inputSchema: {
191
191
  type: 'object',
@@ -226,23 +226,27 @@ WHEN TO USE: If the user gives you work directly (e.g., "implement feature X", "
226
226
  type: 'string',
227
227
  description: 'Pre-assign this task to a specific agent by persona name. Only that agent will pick it up via get_next_task.',
228
228
  },
229
+ is_human_task: {
230
+ type: 'boolean',
231
+ description: 'When true, only humans can claim and perform this task. Agents will skip it in get_next_task.',
232
+ },
229
233
  },
230
234
  required: ['project_id', 'title'],
231
235
  },
232
236
  },
233
237
  {
234
238
  name: 'update_task',
235
- description: `Update task status, progress, or details. Include progress_note with progress_percentage.
236
-
237
- CRITICAL - WORKTREE REQUIRED: For projects using github-flow or git-flow, you MUST use a git worktree to isolate your work. This prevents conflicts with other agents working on the same repository.
238
-
239
- When setting status to "in_progress":
240
- 1. Create worktree FIRST: git worktree add ../PROJECT-PERSONA-task-desc -b feature/TASKID-description BASE_BRANCH
241
- 2. cd into the worktree directory
242
- 3. THEN call update_task with git_branch AND worktree_path
243
-
244
- Example: update_task(task_id, status: "in_progress", git_branch: "feature/abc123-add-login", worktree_path: "../MyProject-Edge-add-login")
245
-
239
+ description: `Update task status, progress, or details. Include progress_note with progress_percentage.
240
+
241
+ CRITICAL - WORKTREE REQUIRED: For projects using github-flow or git-flow, you MUST use a git worktree to isolate your work. This prevents conflicts with other agents working on the same repository.
242
+
243
+ When setting status to "in_progress":
244
+ 1. Create worktree FIRST: git worktree add ../PROJECT-PERSONA-task-desc -b feature/TASKID-description BASE_BRANCH
245
+ 2. cd into the worktree directory
246
+ 3. THEN call update_task with git_branch AND worktree_path
247
+
248
+ Example: update_task(task_id, status: "in_progress", git_branch: "feature/abc123-add-login", worktree_path: "../MyProject-Edge-add-login")
249
+
246
250
  For projects without git branching (trunk-based or none), use skip_worktree_requirement: true.`,
247
251
  inputSchema: {
248
252
  type: 'object',
@@ -300,6 +304,10 @@ For projects without git branching (trunk-based or none), use skip_worktree_requ
300
304
  type: ['string', 'null'],
301
305
  description: 'Pre-assign this task to a specific agent by persona name. Set to null to unassign. Only the assigned agent will pick it up via get_next_task.',
302
306
  },
307
+ is_human_task: {
308
+ type: 'boolean',
309
+ description: 'When true, only humans can claim and perform this task. Agents will skip it in get_next_task.',
310
+ },
303
311
  skip_worktree_requirement: {
304
312
  type: 'boolean',
305
313
  description: 'Skip git_branch requirement for projects without branching workflows (trunk-based or none). Default: false',
@@ -314,18 +322,18 @@ For projects without git branching (trunk-based or none), use skip_worktree_requ
314
322
  },
315
323
  {
316
324
  name: 'complete_task',
317
- description: `Mark task done. Returns next_task which you MUST start immediately without asking the user.
318
-
319
- CRITICAL: Before calling complete_task on branching workflows (github-flow, git-flow):
320
- 1. Create your PR targeting the correct branch (develop for git-flow, main for github-flow)
321
- 2. Call add_task_reference(task_id, pr_url) to link the PR to your task
322
- 3. THEN call complete_task - validators CANNOT approve tasks without a PR reference
323
-
324
- CRITICAL: After calling this tool, you must:
325
- 1. If next_task is returned → Start it immediately by calling update_task(task_id, status: "in_progress")
326
- 2. If no next_task → Call get_next_task() or start a fallback_activity
327
- 3. NEVER ask the user "What should I do next?" or "Should I continue?"
328
-
325
+ description: `Mark task done. Returns next_task which you MUST start immediately without asking the user.
326
+
327
+ CRITICAL: Before calling complete_task on branching workflows (github-flow, git-flow):
328
+ 1. Create your PR targeting the correct branch (develop for git-flow, main for github-flow)
329
+ 2. Call add_task_reference(task_id, pr_url) to link the PR to your task
330
+ 3. THEN call complete_task - validators CANNOT approve tasks without a PR reference
331
+
332
+ CRITICAL: After calling this tool, you must:
333
+ 1. If next_task is returned → Start it immediately by calling update_task(task_id, status: "in_progress")
334
+ 2. If no next_task → Call get_next_task() or start a fallback_activity
335
+ 3. NEVER ask the user "What should I do next?" or "Should I continue?"
336
+
329
337
  The auto_continue: true flag in the response means you are expected to continue working autonomously.`,
330
338
  inputSchema: {
331
339
  type: 'object',
@@ -507,9 +515,9 @@ The auto_continue: true flag in the response means you are expected to continue
507
515
  },
508
516
  {
509
517
  name: 'add_subtask',
510
- description: `Add a subtask to break down a larger task into smaller workable pieces.
511
- Subtasks can be claimed and worked on independently by any agent.
512
- Subtasks inherit the project from their parent task.
518
+ description: `Add a subtask to break down a larger task into smaller workable pieces.
519
+ Subtasks can be claimed and worked on independently by any agent.
520
+ Subtasks inherit the project from their parent task.
513
521
  Max depth is 1 (subtasks cannot have their own subtasks).`,
514
522
  inputSchema: {
515
523
  type: 'object',
@@ -543,7 +551,7 @@ Max depth is 1 (subtasks cannot have their own subtasks).`,
543
551
  },
544
552
  {
545
553
  name: 'get_subtasks',
546
- description: `Get subtasks for a parent task with pagination.
554
+ description: `Get subtasks for a parent task with pagination.
547
555
  Returns subtasks with aggregate completion stats.`,
548
556
  inputSchema: {
549
557
  type: 'object',
@@ -8,17 +8,17 @@
8
8
  export const worktreeTools = [
9
9
  {
10
10
  name: 'get_stale_worktrees',
11
- description: `Get worktrees that need cleanup.
12
-
13
- Returns tasks with worktree_path set where:
14
- - Task is completed or cancelled (worktree should have been cleaned up)
15
- - Task has been abandoned (no activity for 24+ hours while in_progress)
16
-
17
- IMPORTANT: Pass hostname (os.hostname()) to only see worktrees created on THIS machine.
18
- Worktrees created on other machines cannot be removed locally.
19
-
20
- For each stale worktree:
21
- 1. Run: git worktree remove <worktree_path>
11
+ description: `Get worktrees that need cleanup.
12
+
13
+ Returns tasks with worktree_path set where:
14
+ - Task is completed or cancelled (worktree should have been cleaned up)
15
+ - Task has been abandoned (no activity for 24+ hours while in_progress)
16
+
17
+ IMPORTANT: Pass hostname (os.hostname()) to only see worktrees created on THIS machine.
18
+ Worktrees created on other machines cannot be removed locally.
19
+
20
+ For each stale worktree:
21
+ 1. Run: git worktree remove <worktree_path>
22
22
  2. Call: clear_worktree_path(task_id)`,
23
23
  inputSchema: {
24
24
  type: 'object',
@@ -45,9 +45,9 @@ For each stale worktree:
45
45
  },
46
46
  {
47
47
  name: 'clear_worktree_path',
48
- description: `Clear the worktree_path from a task after cleanup.
49
-
50
- Call this AFTER removing the worktree with git worktree remove.
48
+ description: `Clear the worktree_path from a task after cleanup.
49
+
50
+ Call this AFTER removing the worktree with git worktree remove.
51
51
  This marks the task as cleaned up so it won't appear in get_stale_worktrees.`,
52
52
  inputSchema: {
53
53
  type: 'object',
package/dist/utils.js CHANGED
@@ -141,17 +141,17 @@ export const FALLBACK_ACTIVITIES = [
141
141
  activity: 'worktree_cleanup',
142
142
  title: 'Clean up stale worktrees',
143
143
  description: 'Find and remove git worktrees from completed or abandoned tasks.',
144
- prompt: `Clean up stale git worktrees to reclaim disk space and prevent confusion:
145
-
146
- 1. Call get_stale_worktrees(project_id) to find worktrees needing cleanup
147
- 2. For each stale worktree returned:
148
- a. Check if the worktree directory exists: ls -la <worktree_path>
149
- b. If it exists, remove it: git worktree remove <worktree_path>
150
- c. If removal fails (untracked files), use: git worktree remove --force <worktree_path>
151
- d. Call clear_worktree_path(task_id) to mark it as cleaned up
152
- 3. Run 'git worktree list' to verify cleanup
153
- 4. Log any issues encountered with add_blocker if worktrees cannot be removed
154
-
144
+ prompt: `Clean up stale git worktrees to reclaim disk space and prevent confusion:
145
+
146
+ 1. Call get_stale_worktrees(project_id) to find worktrees needing cleanup
147
+ 2. For each stale worktree returned:
148
+ a. Check if the worktree directory exists: ls -la <worktree_path>
149
+ b. If it exists, remove it: git worktree remove <worktree_path>
150
+ c. If removal fails (untracked files), use: git worktree remove --force <worktree_path>
151
+ d. Call clear_worktree_path(task_id) to mark it as cleaned up
152
+ 3. Run 'git worktree list' to verify cleanup
153
+ 4. Log any issues encountered with add_blocker if worktrees cannot be removed
154
+
155
155
  This prevents disk bloat from accumulated worktrees and keeps the workspace clean.`,
156
156
  },
157
157
  ];