@vibescope/mcp-server 0.4.5 → 0.4.7

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 (176) hide show
  1. package/CHANGELOG.md +84 -84
  2. package/README.md +194 -194
  3. package/dist/api-client/project.d.ts +1 -0
  4. package/dist/api-client.d.ts +4 -1
  5. package/dist/api-client.js +24 -7
  6. package/dist/cli-init.js +25 -24
  7. package/dist/cli.js +26 -26
  8. package/dist/handlers/chat.d.ts +2 -0
  9. package/dist/handlers/chat.js +25 -0
  10. package/dist/handlers/discovery.js +12 -0
  11. package/dist/handlers/project.js +4 -2
  12. package/dist/handlers/tool-docs.js +1203 -1137
  13. package/dist/handlers/version.js +1 -1
  14. package/dist/index.js +159 -87
  15. package/dist/setup.js +13 -7
  16. package/dist/templates/agent-guidelines.d.ts +1 -1
  17. package/dist/templates/agent-guidelines.js +205 -187
  18. package/dist/templates/help-content.js +1621 -1621
  19. package/dist/tools/bodies-of-work.js +6 -6
  20. package/dist/tools/chat.d.ts +1 -0
  21. package/dist/tools/chat.js +24 -0
  22. package/dist/tools/cloud-agents.js +22 -22
  23. package/dist/tools/features.d.ts +13 -0
  24. package/dist/tools/features.js +151 -0
  25. package/dist/tools/index.d.ts +3 -1
  26. package/dist/tools/index.js +4 -1
  27. package/dist/tools/milestones.js +2 -2
  28. package/dist/tools/project.js +4 -0
  29. package/dist/tools/requests.js +1 -1
  30. package/dist/tools/session.js +11 -11
  31. package/dist/tools/sprints.js +9 -9
  32. package/dist/tools/tasks.js +35 -35
  33. package/dist/tools/worktrees.js +14 -14
  34. package/dist/tools.d.ts +2 -0
  35. package/dist/tools.js +3602 -0
  36. package/dist/utils.js +11 -11
  37. package/dist/version.d.ts +9 -3
  38. package/dist/version.js +56 -8
  39. package/docs/TOOLS.md +2663 -2559
  40. package/package.json +53 -53
  41. package/scripts/generate-docs.ts +212 -212
  42. package/scripts/version-bump.ts +203 -203
  43. package/src/api-client/blockers.ts +86 -86
  44. package/src/api-client/bodies-of-work.ts +194 -194
  45. package/src/api-client/chat.ts +50 -50
  46. package/src/api-client/connectors.ts +152 -152
  47. package/src/api-client/cost.ts +185 -185
  48. package/src/api-client/decisions.ts +87 -87
  49. package/src/api-client/deployment.ts +313 -313
  50. package/src/api-client/discovery.ts +81 -81
  51. package/src/api-client/fallback.ts +52 -52
  52. package/src/api-client/file-checkouts.ts +115 -115
  53. package/src/api-client/findings.ts +100 -100
  54. package/src/api-client/git-issues.ts +88 -88
  55. package/src/api-client/ideas.ts +112 -112
  56. package/src/api-client/index.ts +592 -592
  57. package/src/api-client/milestones.ts +83 -83
  58. package/src/api-client/organizations.ts +185 -185
  59. package/src/api-client/progress.ts +94 -94
  60. package/src/api-client/project.ts +180 -179
  61. package/src/api-client/requests.ts +54 -54
  62. package/src/api-client/session.ts +220 -220
  63. package/src/api-client/sprints.ts +227 -227
  64. package/src/api-client/subtasks.ts +57 -57
  65. package/src/api-client/tasks.ts +450 -450
  66. package/src/api-client/types.ts +32 -32
  67. package/src/api-client/validation.ts +60 -60
  68. package/src/api-client/worktrees.ts +53 -53
  69. package/src/api-client.test.ts +847 -847
  70. package/src/api-client.ts +2723 -2706
  71. package/src/cli-init.ts +558 -557
  72. package/src/cli.test.ts +284 -284
  73. package/src/cli.ts +204 -204
  74. package/src/handlers/__test-setup__.ts +240 -240
  75. package/src/handlers/__test-utils__.ts +89 -89
  76. package/src/handlers/blockers.test.ts +468 -468
  77. package/src/handlers/blockers.ts +172 -172
  78. package/src/handlers/bodies-of-work.test.ts +704 -704
  79. package/src/handlers/bodies-of-work.ts +526 -526
  80. package/src/handlers/chat.test.ts +185 -185
  81. package/src/handlers/chat.ts +101 -69
  82. package/src/handlers/cloud-agents.test.ts +438 -438
  83. package/src/handlers/cloud-agents.ts +156 -156
  84. package/src/handlers/connectors.test.ts +834 -834
  85. package/src/handlers/connectors.ts +229 -229
  86. package/src/handlers/cost.test.ts +462 -462
  87. package/src/handlers/cost.ts +285 -285
  88. package/src/handlers/decisions.test.ts +382 -382
  89. package/src/handlers/decisions.ts +153 -153
  90. package/src/handlers/deployment.test.ts +551 -551
  91. package/src/handlers/deployment.ts +570 -570
  92. package/src/handlers/discovery.test.ts +206 -206
  93. package/src/handlers/discovery.ts +427 -415
  94. package/src/handlers/fallback.test.ts +537 -537
  95. package/src/handlers/fallback.ts +194 -194
  96. package/src/handlers/file-checkouts.test.ts +750 -750
  97. package/src/handlers/file-checkouts.ts +185 -185
  98. package/src/handlers/findings.test.ts +633 -633
  99. package/src/handlers/findings.ts +239 -239
  100. package/src/handlers/git-issues.test.ts +631 -631
  101. package/src/handlers/git-issues.ts +136 -136
  102. package/src/handlers/ideas.test.ts +644 -644
  103. package/src/handlers/ideas.ts +207 -207
  104. package/src/handlers/index.ts +93 -93
  105. package/src/handlers/milestones.test.ts +475 -475
  106. package/src/handlers/milestones.ts +180 -180
  107. package/src/handlers/organizations.test.ts +826 -826
  108. package/src/handlers/organizations.ts +315 -315
  109. package/src/handlers/progress.test.ts +269 -269
  110. package/src/handlers/progress.ts +77 -77
  111. package/src/handlers/project.test.ts +546 -546
  112. package/src/handlers/project.ts +242 -239
  113. package/src/handlers/requests.test.ts +303 -303
  114. package/src/handlers/requests.ts +99 -99
  115. package/src/handlers/roles.test.ts +305 -305
  116. package/src/handlers/roles.ts +219 -219
  117. package/src/handlers/session.test.ts +998 -998
  118. package/src/handlers/session.ts +1105 -1105
  119. package/src/handlers/sprints.test.ts +732 -732
  120. package/src/handlers/sprints.ts +537 -537
  121. package/src/handlers/tasks.test.ts +931 -931
  122. package/src/handlers/tasks.ts +1133 -1133
  123. package/src/handlers/tool-categories.test.ts +66 -66
  124. package/src/handlers/tool-docs.test.ts +511 -511
  125. package/src/handlers/tool-docs.ts +1571 -1499
  126. package/src/handlers/types.test.ts +259 -259
  127. package/src/handlers/types.ts +176 -176
  128. package/src/handlers/validation.test.ts +582 -582
  129. package/src/handlers/validation.ts +164 -164
  130. package/src/handlers/version.ts +63 -63
  131. package/src/index.test.ts +674 -674
  132. package/src/index.ts +884 -807
  133. package/src/setup.test.ts +243 -233
  134. package/src/setup.ts +410 -404
  135. package/src/templates/agent-guidelines.ts +233 -215
  136. package/src/templates/help-content.ts +1751 -1751
  137. package/src/token-tracking.test.ts +463 -463
  138. package/src/token-tracking.ts +167 -167
  139. package/src/tools/blockers.ts +122 -122
  140. package/src/tools/bodies-of-work.ts +283 -283
  141. package/src/tools/chat.ts +72 -46
  142. package/src/tools/cloud-agents.ts +101 -101
  143. package/src/tools/connectors.ts +191 -191
  144. package/src/tools/cost.ts +111 -111
  145. package/src/tools/decisions.ts +111 -111
  146. package/src/tools/deployment.ts +455 -455
  147. package/src/tools/discovery.ts +76 -76
  148. package/src/tools/fallback.ts +111 -111
  149. package/src/tools/features.ts +154 -0
  150. package/src/tools/file-checkouts.ts +145 -145
  151. package/src/tools/findings.ts +101 -101
  152. package/src/tools/git-issues.ts +130 -130
  153. package/src/tools/ideas.ts +162 -162
  154. package/src/tools/index.ts +141 -137
  155. package/src/tools/milestones.ts +118 -118
  156. package/src/tools/organizations.ts +224 -224
  157. package/src/tools/progress.ts +73 -73
  158. package/src/tools/project.ts +206 -202
  159. package/src/tools/requests.ts +68 -68
  160. package/src/tools/roles.ts +112 -112
  161. package/src/tools/session.ts +181 -181
  162. package/src/tools/sprints.ts +298 -298
  163. package/src/tools/tasks.ts +550 -550
  164. package/src/tools/tools.test.ts +222 -222
  165. package/src/tools/types.ts +9 -9
  166. package/src/tools/validation.ts +75 -75
  167. package/src/tools/version.ts +34 -34
  168. package/src/tools/worktrees.ts +66 -66
  169. package/src/tools.test.ts +416 -416
  170. package/src/utils.test.ts +1014 -1014
  171. package/src/utils.ts +586 -586
  172. package/src/validators.test.ts +223 -223
  173. package/src/validators.ts +249 -249
  174. package/src/version.ts +162 -109
  175. package/tsconfig.json +16 -16
  176. package/vitest.config.ts +14 -14
@@ -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',
@@ -2,6 +2,7 @@
2
2
  * Project chat tools:
3
3
  * - send_project_message
4
4
  * - get_project_messages
5
+ * - post_progress
5
6
  */
6
7
  import type { Tool } from './types.js';
7
8
  export declare const chatTools: Tool[];
@@ -2,6 +2,7 @@
2
2
  * Project chat tools:
3
3
  * - send_project_message
4
4
  * - get_project_messages
5
+ * - post_progress
5
6
  */
6
7
  export const chatTools = [
7
8
  {
@@ -40,4 +41,27 @@ export const chatTools = [
40
41
  required: ['project_id'],
41
42
  },
42
43
  },
44
+ {
45
+ name: 'post_progress',
46
+ description: 'Post a structured progress update to the project chat. Use this at key milestones during your work: when starting a task, creating a PR, hitting a blocker, or completing a task. Messages are attributed to your agent and shown with a type icon.',
47
+ inputSchema: {
48
+ type: 'object',
49
+ properties: {
50
+ project_id: {
51
+ type: 'string',
52
+ description: 'Project UUID',
53
+ },
54
+ message: {
55
+ type: 'string',
56
+ description: 'Progress update message (supports markdown)',
57
+ },
58
+ type: {
59
+ type: 'string',
60
+ enum: ['info', 'milestone', 'blocker', 'question'],
61
+ description: 'Type of update: info (general update), milestone (key achievement), blocker (something blocking progress), question (asking for input). Defaults to info.',
62
+ },
63
+ },
64
+ required: ['project_id', 'message'],
65
+ },
66
+ },
43
67
  ];
@@ -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',
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Feature Tool Definitions
3
+ *
4
+ * Tools for managing feature specs (between ideas and tasks):
5
+ * - add_feature
6
+ * - update_feature
7
+ * - get_feature
8
+ * - get_features
9
+ * - delete_feature
10
+ * - link_idea_to_feature
11
+ */
12
+ import type { Tool } from './types.js';
13
+ export declare const featureTools: Tool[];
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Feature Tool Definitions
3
+ *
4
+ * Tools for managing feature specs (between ideas and tasks):
5
+ * - add_feature
6
+ * - update_feature
7
+ * - get_feature
8
+ * - get_features
9
+ * - delete_feature
10
+ * - link_idea_to_feature
11
+ */
12
+ export const featureTools = [
13
+ {
14
+ name: 'add_feature',
15
+ description: `Create a new feature spec. Features sit between ideas (quick thoughts) and tasks (actionable work). Use features to flesh out a concept into a full spec before breaking it into tasks. Starts as 'draft'.`,
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ project_id: {
20
+ type: 'string',
21
+ description: 'Project UUID',
22
+ },
23
+ title: {
24
+ type: 'string',
25
+ description: 'Feature title',
26
+ },
27
+ body: {
28
+ type: 'string',
29
+ description: 'Markdown spec content — requirements, user stories, acceptance criteria, technical approach',
30
+ },
31
+ priority: {
32
+ type: 'number',
33
+ minimum: 1,
34
+ maximum: 5,
35
+ description: 'Priority 1-5 (1 = highest, default: 2)',
36
+ },
37
+ },
38
+ required: ['project_id', 'title'],
39
+ },
40
+ },
41
+ {
42
+ name: 'update_feature',
43
+ description: `Update a feature's title, body, status, or priority.`,
44
+ inputSchema: {
45
+ type: 'object',
46
+ properties: {
47
+ feature_id: {
48
+ type: 'string',
49
+ description: 'Feature UUID',
50
+ },
51
+ title: {
52
+ type: 'string',
53
+ description: 'Updated title',
54
+ },
55
+ body: {
56
+ type: 'string',
57
+ description: 'Updated markdown spec content',
58
+ },
59
+ status: {
60
+ type: 'string',
61
+ enum: ['draft', 'refining', 'specced', 'ready', 'building', 'shipped'],
62
+ description: 'New status',
63
+ },
64
+ priority: {
65
+ type: 'number',
66
+ minimum: 1,
67
+ maximum: 5,
68
+ description: 'Updated priority (1 = highest)',
69
+ },
70
+ },
71
+ required: ['feature_id'],
72
+ },
73
+ },
74
+ {
75
+ name: 'get_feature',
76
+ description: `Get a single feature by ID. More token-efficient than get_features when you need details for a specific feature.`,
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ feature_id: {
81
+ type: 'string',
82
+ description: 'Feature UUID',
83
+ },
84
+ },
85
+ required: ['feature_id'],
86
+ },
87
+ },
88
+ {
89
+ name: 'get_features',
90
+ description: `Get features for a project, optionally filtered by status. Features represent fleshed-out specs between ideas and tasks.`,
91
+ inputSchema: {
92
+ type: 'object',
93
+ properties: {
94
+ project_id: {
95
+ type: 'string',
96
+ description: 'Project UUID',
97
+ },
98
+ status: {
99
+ type: 'string',
100
+ enum: ['draft', 'refining', 'specced', 'ready', 'building', 'shipped'],
101
+ description: 'Filter by status (optional)',
102
+ },
103
+ limit: {
104
+ type: 'number',
105
+ description: 'Max number of features to return (default 20, max 100)',
106
+ },
107
+ offset: {
108
+ type: 'number',
109
+ description: 'Number of features to skip for pagination (default 0)',
110
+ },
111
+ search_query: {
112
+ type: 'string',
113
+ description: 'Search features by title or body content',
114
+ },
115
+ },
116
+ required: ['project_id'],
117
+ },
118
+ },
119
+ {
120
+ name: 'delete_feature',
121
+ description: `Delete a feature spec. This also removes all linked idea and task associations.`,
122
+ inputSchema: {
123
+ type: 'object',
124
+ properties: {
125
+ feature_id: {
126
+ type: 'string',
127
+ description: 'Feature UUID',
128
+ },
129
+ },
130
+ required: ['feature_id'],
131
+ },
132
+ },
133
+ {
134
+ name: 'link_idea_to_feature',
135
+ description: `Link an existing idea to a feature spec. This associates the idea as inspiration for the feature.`,
136
+ inputSchema: {
137
+ type: 'object',
138
+ properties: {
139
+ feature_id: {
140
+ type: 'string',
141
+ description: 'Feature UUID',
142
+ },
143
+ idea_id: {
144
+ type: 'string',
145
+ description: 'Idea UUID to link',
146
+ },
147
+ },
148
+ required: ['feature_id', 'idea_id'],
149
+ },
150
+ },
151
+ ];
@@ -31,6 +31,7 @@ import { gitIssueTools } from './git-issues.js';
31
31
  import { connectorTools } from './connectors.js';
32
32
  import { cloudAgentTools } from './cloud-agents.js';
33
33
  import { versionTools } from './version.js';
34
+ import { featureTools } from './features.js';
34
35
  /**
35
36
  * All MCP tool definitions combined
36
37
  */
@@ -69,5 +70,6 @@ export declare const toolCategories: {
69
70
  readonly connectors: string[];
70
71
  readonly cloudAgents: string[];
71
72
  readonly version: string[];
73
+ readonly features: string[];
72
74
  };
73
- export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, versionTools, };
75
+ export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, versionTools, featureTools, };
@@ -31,6 +31,7 @@ import { connectorTools } from './connectors.js';
31
31
  import { cloudAgentTools } from './cloud-agents.js';
32
32
  import { versionTools } from './version.js';
33
33
  import { chatTools } from './chat.js';
34
+ import { featureTools } from './features.js';
34
35
  /**
35
36
  * All MCP tool definitions combined
36
37
  */
@@ -61,6 +62,7 @@ export const tools = [
61
62
  ...cloudAgentTools,
62
63
  ...versionTools,
63
64
  ...chatTools,
65
+ ...featureTools,
64
66
  ];
65
67
  /**
66
68
  * Build the complete tool list from all domain modules
@@ -98,6 +100,7 @@ export const toolCategories = {
98
100
  connectors: connectorTools.map((t) => t.name),
99
101
  cloudAgents: cloudAgentTools.map((t) => t.name),
100
102
  version: versionTools.map((t) => t.name),
103
+ features: featureTools.map((t) => t.name),
101
104
  };
102
105
  // Re-export domain tools for selective imports
103
- export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, versionTools, };
106
+ export { sessionTools, costTools, discoveryTools, worktreeTools, projectTools, taskTools, progressTools, blockerTools, decisionTools, ideaTools, findingTools, validationTools, deploymentTools, fallbackTools, requestTools, milestoneTools, bodiesOfWorkTools, organizationTools, fileCheckoutTools, roleTools, sprintTools, gitIssueTools, connectorTools, cloudAgentTools, versionTools, featureTools, };
@@ -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',
@@ -160,6 +160,10 @@ export const projectTools = [
160
160
  items: { type: 'string' },
161
161
  description: 'Array of preferred fallback activities (e.g., ["code_review", "security_review"]). Null means all allowed.',
162
162
  },
163
+ allow_agent_task_creation: {
164
+ type: 'boolean',
165
+ description: 'Allow agents to create tasks via add_task (default: false). When disabled, agents receive a helpful error directing them to log suggestions in their completion summary instead.',
166
+ },
163
167
  },
164
168
  required: ['project_id'],
165
169
  },
@@ -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',
@@ -228,17 +228,17 @@ WHEN TO USE: If the user gives you work directly (e.g., "implement feature X", "
228
228
  },
229
229
  {
230
230
  name: 'update_task',
231
- description: `Update task status, progress, or details. Include progress_note with progress_percentage.
232
-
233
- 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.
234
-
235
- When setting status to "in_progress":
236
- 1. Create worktree FIRST: git worktree add ../PROJECT-PERSONA-task-desc -b feature/TASKID-description BASE_BRANCH
237
- 2. cd into the worktree directory
238
- 3. THEN call update_task with git_branch AND worktree_path
239
-
240
- Example: update_task(task_id, status: "in_progress", git_branch: "feature/abc123-add-login", worktree_path: "../MyProject-Edge-add-login")
241
-
231
+ description: `Update task status, progress, or details. Include progress_note with progress_percentage.
232
+
233
+ 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.
234
+
235
+ When setting status to "in_progress":
236
+ 1. Create worktree FIRST: git worktree add ../PROJECT-PERSONA-task-desc -b feature/TASKID-description BASE_BRANCH
237
+ 2. cd into the worktree directory
238
+ 3. THEN call update_task with git_branch AND worktree_path
239
+
240
+ Example: update_task(task_id, status: "in_progress", git_branch: "feature/abc123-add-login", worktree_path: "../MyProject-Edge-add-login")
241
+
242
242
  For projects without git branching (trunk-based or none), use skip_worktree_requirement: true.`,
243
243
  inputSchema: {
244
244
  type: 'object',
@@ -306,18 +306,18 @@ For projects without git branching (trunk-based or none), use skip_worktree_requ
306
306
  },
307
307
  {
308
308
  name: 'complete_task',
309
- description: `Mark task done. Returns next_task which you MUST start immediately without asking the user.
310
-
311
- CRITICAL: Before calling complete_task on branching workflows (github-flow, git-flow):
312
- 1. Create your PR targeting the correct branch (develop for git-flow, main for github-flow)
313
- 2. Call add_task_reference(task_id, pr_url) to link the PR to your task
314
- 3. THEN call complete_task - validators CANNOT approve tasks without a PR reference
315
-
316
- CRITICAL: After calling this tool, you must:
317
- 1. If next_task is returned → Start it immediately by calling update_task(task_id, status: "in_progress")
318
- 2. If no next_task → Call get_next_task() or start a fallback_activity
319
- 3. NEVER ask the user "What should I do next?" or "Should I continue?"
320
-
309
+ description: `Mark task done. Returns next_task which you MUST start immediately without asking the user.
310
+
311
+ CRITICAL: Before calling complete_task on branching workflows (github-flow, git-flow):
312
+ 1. Create your PR targeting the correct branch (develop for git-flow, main for github-flow)
313
+ 2. Call add_task_reference(task_id, pr_url) to link the PR to your task
314
+ 3. THEN call complete_task - validators CANNOT approve tasks without a PR reference
315
+
316
+ CRITICAL: After calling this tool, you must:
317
+ 1. If next_task is returned → Start it immediately by calling update_task(task_id, status: "in_progress")
318
+ 2. If no next_task → Call get_next_task() or start a fallback_activity
319
+ 3. NEVER ask the user "What should I do next?" or "Should I continue?"
320
+
321
321
  The auto_continue: true flag in the response means you are expected to continue working autonomously.`,
322
322
  inputSchema: {
323
323
  type: 'object',
@@ -482,9 +482,9 @@ The auto_continue: true flag in the response means you are expected to continue
482
482
  },
483
483
  {
484
484
  name: 'add_subtask',
485
- description: `Add a subtask to break down a larger task into smaller workable pieces.
486
- Subtasks can be claimed and worked on independently by any agent.
487
- Subtasks inherit the project from their parent task.
485
+ description: `Add a subtask to break down a larger task into smaller workable pieces.
486
+ Subtasks can be claimed and worked on independently by any agent.
487
+ Subtasks inherit the project from their parent task.
488
488
  Max depth is 1 (subtasks cannot have their own subtasks).`,
489
489
  inputSchema: {
490
490
  type: 'object',
@@ -518,7 +518,7 @@ Max depth is 1 (subtasks cannot have their own subtasks).`,
518
518
  },
519
519
  {
520
520
  name: 'get_subtasks',
521
- description: `Get subtasks for a parent task with pagination.
521
+ description: `Get subtasks for a parent task with pagination.
522
522
  Returns subtasks with aggregate completion stats.`,
523
523
  inputSchema: {
524
524
  type: 'object',