@tencent-ai/codebuddy-code 2.49.7 → 2.50.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.
- package/CHANGELOG.md +37 -0
- package/dist/codebuddy.js +4 -4
- package/lib/node/index.js +1 -0
- package/package.json +1 -1
- package/product.cloudhosted.json +12 -25
- package/product.internal.json +30 -31
- package/product.ioa.json +30 -5
- package/product.json +48 -10
- package/product.selfhosted.json +11 -5
package/lib/node/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tencent-ai/codebuddy-code",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.50.1",
|
|
4
4
|
"description": "Use CodeBuddy, Tencent's AI assistant, right from your terminal. CodeBuddy can understand your codebase, edit files, run terminal commands, and handle entire workflows for you.",
|
|
5
5
|
"main": "lib/node/index.js",
|
|
6
6
|
"typings": "lib/node/index.d.ts",
|
package/product.cloudhosted.json
CHANGED
|
@@ -7,11 +7,9 @@
|
|
|
7
7
|
"models": [
|
|
8
8
|
"glm-4.7",
|
|
9
9
|
"glm-4.6",
|
|
10
|
-
"glm-4.6v",
|
|
11
10
|
"deepseek-v3-2-volc",
|
|
12
11
|
"deepseek-v3.1",
|
|
13
|
-
"deepseek-v3-0324"
|
|
14
|
-
"kimi-k2-thinking"
|
|
12
|
+
"deepseek-v3-0324"
|
|
15
13
|
],
|
|
16
14
|
"commands": [
|
|
17
15
|
"init",
|
|
@@ -44,7 +42,10 @@
|
|
|
44
42
|
"LSP",
|
|
45
43
|
"StructuredOutput",
|
|
46
44
|
"ToolSearch",
|
|
47
|
-
"ImageGen"
|
|
45
|
+
"ImageGen",
|
|
46
|
+
"TeamCreate",
|
|
47
|
+
"TeamDelete",
|
|
48
|
+
"SendMessage"
|
|
48
49
|
],
|
|
49
50
|
"tags": [
|
|
50
51
|
"cli",
|
|
@@ -73,7 +74,9 @@
|
|
|
73
74
|
"TaskStop",
|
|
74
75
|
"Skill",
|
|
75
76
|
"AskUserQuestion",
|
|
76
|
-
"LSP"
|
|
77
|
+
"LSP",
|
|
78
|
+
"SendMessage",
|
|
79
|
+
"ToolSearch"
|
|
77
80
|
],
|
|
78
81
|
"tags": [
|
|
79
82
|
"cli",
|
|
@@ -188,7 +191,8 @@
|
|
|
188
191
|
"TaskList",
|
|
189
192
|
"WebFetch",
|
|
190
193
|
"WebSearch",
|
|
191
|
-
"Skill"
|
|
194
|
+
"Skill",
|
|
195
|
+
"SendMessage"
|
|
192
196
|
],
|
|
193
197
|
"asTool": true,
|
|
194
198
|
"tags": [
|
|
@@ -271,23 +275,6 @@
|
|
|
271
275
|
"supportsReasoning": true,
|
|
272
276
|
"temperature": 1
|
|
273
277
|
},
|
|
274
|
-
{
|
|
275
|
-
"credits": "x0.10 credits",
|
|
276
|
-
"id": "glm-4.6v",
|
|
277
|
-
"name": "GLM-4.6V",
|
|
278
|
-
"vendor": "e",
|
|
279
|
-
"maxOutputTokens": 32000,
|
|
280
|
-
"maxInputTokens": 128000,
|
|
281
|
-
"supportsToolCall": true,
|
|
282
|
-
"supportsImages": true,
|
|
283
|
-
"supportsReasoning": true,
|
|
284
|
-
"temperature": 1,
|
|
285
|
-
"reasoning": {
|
|
286
|
-
"effort": "medium",
|
|
287
|
-
"summary": "auto"
|
|
288
|
-
},
|
|
289
|
-
"maxAllowedSize": 128000
|
|
290
|
-
},
|
|
291
278
|
{
|
|
292
279
|
"credits": "x0.20 credits",
|
|
293
280
|
"id": "glm-4.6",
|
|
@@ -378,6 +365,6 @@
|
|
|
378
365
|
"DeferToolLoading": true,
|
|
379
366
|
"ImageGen": true
|
|
380
367
|
},
|
|
381
|
-
"commit": "
|
|
382
|
-
"date": "2026-02-
|
|
368
|
+
"commit": "7518b519b407a458012850b036fd10c92b802f57",
|
|
369
|
+
"date": "2026-02-12T15:38:36.639Z"
|
|
383
370
|
}
|
package/product.internal.json
CHANGED
|
@@ -7,13 +7,12 @@
|
|
|
7
7
|
"instructions": "cli-agent-prompt",
|
|
8
8
|
"description": "cli agent",
|
|
9
9
|
"models": [
|
|
10
|
+
"minimax-m2.5",
|
|
10
11
|
"glm-5.0",
|
|
11
12
|
"glm-4.7",
|
|
12
13
|
"glm-4.6",
|
|
13
14
|
"glm-4.6v",
|
|
14
15
|
"deepseek-v3-2-volc",
|
|
15
|
-
"deepseek-v3.1",
|
|
16
|
-
"deepseek-v3-0324",
|
|
17
16
|
"kimi-k2.5",
|
|
18
17
|
"kimi-k2-thinking"
|
|
19
18
|
],
|
|
@@ -48,7 +47,10 @@
|
|
|
48
47
|
"LSP",
|
|
49
48
|
"StructuredOutput",
|
|
50
49
|
"ToolSearch",
|
|
51
|
-
"ImageGen"
|
|
50
|
+
"ImageGen",
|
|
51
|
+
"TeamCreate",
|
|
52
|
+
"TeamDelete",
|
|
53
|
+
"SendMessage"
|
|
52
54
|
],
|
|
53
55
|
"tags": [
|
|
54
56
|
"cli",
|
|
@@ -77,7 +79,9 @@
|
|
|
77
79
|
"TaskStop",
|
|
78
80
|
"Skill",
|
|
79
81
|
"AskUserQuestion",
|
|
80
|
-
"LSP"
|
|
82
|
+
"LSP",
|
|
83
|
+
"SendMessage",
|
|
84
|
+
"ToolSearch"
|
|
81
85
|
],
|
|
82
86
|
"tags": [
|
|
83
87
|
"cli",
|
|
@@ -192,7 +196,8 @@
|
|
|
192
196
|
"TaskList",
|
|
193
197
|
"WebFetch",
|
|
194
198
|
"WebSearch",
|
|
195
|
-
"Skill"
|
|
199
|
+
"Skill",
|
|
200
|
+
"SendMessage"
|
|
196
201
|
],
|
|
197
202
|
"asTool": true,
|
|
198
203
|
"tags": [
|
|
@@ -242,18 +247,6 @@
|
|
|
242
247
|
"supportsImages": false,
|
|
243
248
|
"maxAllowedSize": 56000
|
|
244
249
|
},
|
|
245
|
-
{
|
|
246
|
-
"credits": "x0.43 credits",
|
|
247
|
-
"id": "deepseek-v3.1",
|
|
248
|
-
"name": "DeepSeek-V3.1-Terminus",
|
|
249
|
-
"vendor": "f",
|
|
250
|
-
"maxOutputTokens": 16000,
|
|
251
|
-
"maxInputTokens": 104000,
|
|
252
|
-
"supportsToolCall": true,
|
|
253
|
-
"supportsImages": false,
|
|
254
|
-
"disabledMultimodal": true,
|
|
255
|
-
"maxAllowedSize": 56000
|
|
256
|
-
},
|
|
257
250
|
{
|
|
258
251
|
"credits": "x0.26 credits",
|
|
259
252
|
"id": "deepseek-v3-2-volc",
|
|
@@ -273,6 +266,24 @@
|
|
|
273
266
|
"summary": "auto"
|
|
274
267
|
}
|
|
275
268
|
},
|
|
269
|
+
{
|
|
270
|
+
"credits": "x0.17 credits",
|
|
271
|
+
"id": "minimax-m2.5",
|
|
272
|
+
"name": "MiniMax-M2.5",
|
|
273
|
+
"vendor": "e",
|
|
274
|
+
"maxOutputTokens": 48000,
|
|
275
|
+
"maxInputTokens": 200000,
|
|
276
|
+
"supportsToolCall": true,
|
|
277
|
+
"supportsImages": false,
|
|
278
|
+
"maxAllowedSize": 200000,
|
|
279
|
+
"supportsReasoning": true,
|
|
280
|
+
"onlyReasoning": true,
|
|
281
|
+
"temperature": 1,
|
|
282
|
+
"reasoning": {
|
|
283
|
+
"effort": "medium",
|
|
284
|
+
"summary": "auto"
|
|
285
|
+
}
|
|
286
|
+
},
|
|
276
287
|
{
|
|
277
288
|
"credits": "x0.34 credits",
|
|
278
289
|
"id": "glm-5.0",
|
|
@@ -342,18 +353,6 @@
|
|
|
342
353
|
"supportsImages": false,
|
|
343
354
|
"disabledMultimodal": true
|
|
344
355
|
},
|
|
345
|
-
{
|
|
346
|
-
"credits": "x0.57 credits",
|
|
347
|
-
"id": "deepseek-v3-0324",
|
|
348
|
-
"name": "DeepSeek-V3",
|
|
349
|
-
"vendor": "tencent",
|
|
350
|
-
"maxOutputTokens": 8192,
|
|
351
|
-
"maxInputTokens": 128000,
|
|
352
|
-
"supportsToolCall": true,
|
|
353
|
-
"supportsImages": false,
|
|
354
|
-
"disabledMultimodal": true,
|
|
355
|
-
"maxAllowedSize": 56000
|
|
356
|
-
},
|
|
357
356
|
{
|
|
358
357
|
"credits": "x0.46 credits",
|
|
359
358
|
"id": "kimi-k2-thinking",
|
|
@@ -414,6 +413,6 @@
|
|
|
414
413
|
"DeferToolLoading": true,
|
|
415
414
|
"ImageGen": true
|
|
416
415
|
},
|
|
417
|
-
"commit": "
|
|
418
|
-
"date": "2026-02-
|
|
416
|
+
"commit": "7518b519b407a458012850b036fd10c92b802f57",
|
|
417
|
+
"date": "2026-02-12T15:38:34.008Z"
|
|
419
418
|
}
|
package/product.ioa.json
CHANGED
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"gpt-5.1-codex",
|
|
25
25
|
"gpt-5.1-codex-max",
|
|
26
26
|
"gpt-5.1-codex-mini",
|
|
27
|
+
"minimax-m2.5-ioa",
|
|
27
28
|
"kimi-k2.5-ioa",
|
|
28
29
|
"kimi-k2-thinking",
|
|
29
30
|
"glm-5.0-ioa",
|
|
@@ -64,7 +65,10 @@
|
|
|
64
65
|
"StructuredOutput",
|
|
65
66
|
"ToolSearch",
|
|
66
67
|
"ImageGen",
|
|
67
|
-
"ImageEdit"
|
|
68
|
+
"ImageEdit",
|
|
69
|
+
"TeamCreate",
|
|
70
|
+
"TeamDelete",
|
|
71
|
+
"SendMessage"
|
|
68
72
|
],
|
|
69
73
|
"tags": [
|
|
70
74
|
"cli",
|
|
@@ -94,7 +98,9 @@
|
|
|
94
98
|
"TaskStop",
|
|
95
99
|
"Skill",
|
|
96
100
|
"AskUserQuestion",
|
|
97
|
-
"LSP"
|
|
101
|
+
"LSP",
|
|
102
|
+
"ToolSearch",
|
|
103
|
+
"SendMessage"
|
|
98
104
|
],
|
|
99
105
|
"tags": [
|
|
100
106
|
"cli",
|
|
@@ -218,7 +224,8 @@
|
|
|
218
224
|
"TaskList",
|
|
219
225
|
"WebFetch",
|
|
220
226
|
"WebSearch",
|
|
221
|
-
"Skill"
|
|
227
|
+
"Skill",
|
|
228
|
+
"SendMessage"
|
|
222
229
|
],
|
|
223
230
|
"asTool": true,
|
|
224
231
|
"tags": [
|
|
@@ -280,6 +287,24 @@
|
|
|
280
287
|
"reasoning": "deepseek-v3-2-volc-ioa"
|
|
281
288
|
}
|
|
282
289
|
},
|
|
290
|
+
{
|
|
291
|
+
"credits": "x0.00 credits",
|
|
292
|
+
"id": "minimax-m2.5-ioa",
|
|
293
|
+
"name": "MiniMax-M2.5",
|
|
294
|
+
"vendor": "e",
|
|
295
|
+
"maxOutputTokens": 48000,
|
|
296
|
+
"maxInputTokens": 200000,
|
|
297
|
+
"supportsToolCall": true,
|
|
298
|
+
"supportsImages": false,
|
|
299
|
+
"maxAllowedSize": 200000,
|
|
300
|
+
"supportsReasoning": true,
|
|
301
|
+
"onlyReasoning": true,
|
|
302
|
+
"temperature": 1,
|
|
303
|
+
"reasoning": {
|
|
304
|
+
"effort": "medium",
|
|
305
|
+
"summary": "auto"
|
|
306
|
+
}
|
|
307
|
+
},
|
|
283
308
|
{
|
|
284
309
|
"credits": "x0.46 credits",
|
|
285
310
|
"id": "kimi-k2-thinking",
|
|
@@ -606,6 +631,6 @@
|
|
|
606
631
|
"ImageGen": true,
|
|
607
632
|
"ImageEdit": true
|
|
608
633
|
},
|
|
609
|
-
"commit": "
|
|
610
|
-
"date": "2026-02-
|
|
634
|
+
"commit": "7518b519b407a458012850b036fd10c92b802f57",
|
|
635
|
+
"date": "2026-02-12T15:38:35.305Z"
|
|
611
636
|
}
|
package/product.json
CHANGED
|
@@ -434,7 +434,7 @@
|
|
|
434
434
|
},
|
|
435
435
|
{
|
|
436
436
|
"name": "tool-task-description",
|
|
437
|
-
"template": "Launch a new agent to handle complex, multi-step tasks autonomously.\n\nThe Task tool launches specialized agents (subprocesses) that autonomously handle complex tasks. Each agent type has specific capabilities and tools available to it.\n\nAvailable agent types and the tools they have access to:\n- general-purpose: General-purpose agent for researching complex questions, searching for code, and executing multi-step tasks. When you are searching for a keyword or file and are not confident that you will find the right match in the first few tries use this agent to perform the search for you. (Tools: *)\n{%- if agents and agents.length > 0 -%}\n{%- for agent in agents -%}\n{%- if agent.asTool %}\n- {{agent.name}}: {{agent.description}} (Tools: {%- if agent.tools and agent.tools.length > 0 -%}{{agent.tools.join(',')}}{%- endif -%})\n{%- endif -%}\n{%- endfor -%}\n{%- endif %}\n\nWhen using the Task tool, you must specify a subagent_type parameter to select which agent type to use.\n\nWhen NOT to use the Task tool:\n- If you want to read a specific file path, use the Read or Glob tool instead of the Task tool, to find the match more quickly\n- If you are searching for a specific class definition like \"class Foo\", use the Glob tool instead, to find the match more quickly\n- If you are searching for code within a specific file or set of 2-3 files, use the Read tool instead of the Task tool, to find the match more quickly\n- Other tasks that are not related to the agent descriptions above\n\n\nUsage notes:\n- Launch multiple agents concurrently whenever possible, to maximize performance; to do that, use a single message with multiple tool uses\n- When the agent is done, it will return a single message back to you. The result returned by the agent is not visible to the user. To show the user the result, you should send a text message back to the user with a concise summary of the result.\n-
|
|
437
|
+
"template": "Launch a new agent to handle complex, multi-step tasks autonomously.\n\nThe Task tool launches specialized agents (subprocesses) that autonomously handle complex tasks. Each agent type has specific capabilities and tools available to it.\n\nAvailable agent types and the tools they have access to:\n- general-purpose: General-purpose agent for researching complex questions, searching for code, and executing multi-step tasks. When you are searching for a keyword or file and are not confident that you will find the right match in the first few tries use this agent to perform the search for you. (Tools: *)\n{%- if agents and agents.length > 0 -%}\n{%- for agent in agents -%}\n{%- if agent.asTool %}\n- {{agent.name}}: {{agent.description}} (Tools: {%- if agent.tools and agent.tools.length > 0 -%}{{agent.tools.join(',')}}{%- endif -%})\n{%- endif -%}\n{%- endfor -%}\n{%- endif %}\n\nWhen using the Task tool, you must specify a subagent_type parameter to select which agent type to use.\n\nWhen NOT to use the Task tool:\n- If you want to read a specific file path, use the Read or Glob tool instead of the Task tool, to find the match more quickly\n- If you are searching for a specific class definition like \"class Foo\", use the Glob tool instead, to find the match more quickly\n- If you are searching for code within a specific file or set of 2-3 files, use the Read tool instead of the Task tool, to find the match more quickly\n- Other tasks that are not related to the agent descriptions above\n\n\nUsage notes:\n- Always include a short description (3-5 words) summarizing what the agent will do\n- Launch multiple agents concurrently whenever possible, to maximize performance; to do that, use a single message with multiple tool uses\n- When the agent is done, it will return a single message back to you. The result returned by the agent is not visible to the user. To show the user the result, you should send a text message back to the user with a concise summary of the result.\n- You can optionally run agents in the background using the run_in_background parameter. When an agent runs in the background, the tool result will include a Task ID. To check on the agent's progress or retrieve its results, use the TaskOutput tool.\n- Agents can be resumed using the `resume` parameter by passing the agent ID from a previous invocation. When resumed, the agent continues with its full previous context preserved. When NOT resuming, each invocation starts fresh and you should provide a detailed task description with all necessary context.\n- When the agent is done, it will return a single message back to you along with its agent ID. You can use this ID to resume the agent later if needed for follow-up work.\n- Provide clear, detailed prompts so the agent can work autonomously and return exactly the information you need.\n- Agents with \"access to current context\" can see the full conversation history before the tool call. When using these agents, you can write concise prompts that reference earlier context (e.g., \"investigate the error discussed above\") instead of repeating information. The agent will receive all prior messages and understand the context.\n- The agent's outputs should generally be trusted\n- Clearly tell the agent whether you expect it to write code or just to do research (search, file reads, web fetches, etc.), since it is not aware of the user's intent\n- If the agent description mentions that it should be used proactively, then you should try your best to use it without the user having to ask for it first. Use your judgement.\n- If the user specifies that they want you to run agents \"in parallel\", you MUST send a single message with multiple Task tool use content blocks. For example, if you need to launch both a code-reviewer agent and a test-runner agent in parallel, send a single message with both tool calls.\n\n{%- if teamEnabled %}\n## Spawning Teammates\n\nWhen a team is active (created via TeamCreate), you can spawn teammates by providing the `name` and optionally `team_name` parameters:\n\n- `name`: Name for the spawned agent (e.g., \"researcher\", \"tester\", \"frontend-dev\")\n- `team_name`: Team name for spawning. Uses current team context if omitted.\n- `mode`: Permission mode for the spawned teammate (e.g., \"plan\" to require plan approval)\n- `max_turns`: Maximum number of agentic turns (API round-trips) before the agent stops\n\nTeammates always run in the background in detached mode. They communicate via the SendMessage tool and coordinate through the shared task list.\n{%- endif %}\n\nExample usage:\n\n<example_agent_descriptions>\n\"code-reviewer\": use this agent after you are done writing a signficant piece of code\n\"greeting-responder\": use this agent when to respond to user greetings with a friendly joke\n</example_agent_description>\n\n<example>\nuser: \"Please write a function that checks if a number is prime\"\nassistant: Sure let me write a function that checks if a number is prime\nassistant: First let me use the Write tool to write a function that checks if a number is prime\nassistant: I'm going to use the Write tool to write the following code:\n<code>\nfunction isPrime(n) {\n if (n <= 1) return false\n for (let i = 2; i * i <= n; i++) {\n if (n % i === 0) return false\n }\n return true\n}\n</code>\n<commentary>\nSince a signficant piece of code was written and the task was completed, now use the code-reviewer agent to run the tests\n</commentary>\nassistant: Now let me use the code-reviewer agent to run the tests\nassistant: Uses the Task tool to launch the code-reviewer agent\n</example>\n\n<example>\nuser: \"Hello\"\n<commentary>\nSince the user is greeting, use the greeting-responder agent to respond with a friendly joke\n</commentary>\nassistant: \"I'm going to use the Task tool to launch the greeting-responder agent\"\n</example>\n"
|
|
438
438
|
},
|
|
439
439
|
{
|
|
440
440
|
"name": "tool-bash-description",
|
|
@@ -506,7 +506,7 @@
|
|
|
506
506
|
},
|
|
507
507
|
{
|
|
508
508
|
"name": "tool-tasklist-description",
|
|
509
|
-
"template": "Use this tool to list all tasks in the task list.\n\n## When to Use This Tool\n\n- To see what tasks are available to work on (status: 'pending', no owner, not blocked)\n- To check overall progress on the project\n- To find tasks that are blocked and need dependencies resolved\n- After completing a task, to check for newly unblocked work or claim the next available task\n- **Prefer working on tasks in ID order** (lowest ID first) when multiple tasks are available, as earlier tasks often set up context for later ones\n\n## Output\n\nReturns a summary of each task:\n- **id**: Task identifier (use with TaskGet, TaskUpdate)\n- **subject**: Brief description of the task\n- **status**: 'pending', 'in_progress', or 'completed'\n- **owner**: Agent ID if assigned, empty if available\n- **blockedBy**: List of open task IDs that must be resolved first (tasks with blockedBy cannot be claimed until dependencies resolve)\n\nUse TaskGet with a specific task ID to view full details including description and comments.\n"
|
|
509
|
+
"template": "Use this tool to list all tasks in the task list.\n\n## When to Use This Tool\n\n- To see what tasks are available to work on (status: 'pending', no owner, not blocked)\n- To check overall progress on the project\n- To find tasks that are blocked and need dependencies resolved\n- After completing a task, to check for newly unblocked work or claim the next available task\n- **Prefer working on tasks in ID order** (lowest ID first) when multiple tasks are available, as earlier tasks often set up context for later ones\n\n## Output\n\nReturns a summary of each task:\n- **id**: Task identifier (use with TaskGet, TaskUpdate)\n- **subject**: Brief description of the task\n- **status**: 'pending', 'in_progress', or 'completed'\n- **owner**: Agent ID if assigned, empty if available\n- **blockedBy**: List of open task IDs that must be resolved first (tasks with blockedBy cannot be claimed until dependencies resolve)\n\nUse TaskGet with a specific task ID to view full details including description and comments.\n{%- if teamEnabled %}\n\n## Task List Coordination (Teams)\n\nWhen working in a team, all teammates share the same task list. Teammates should:\n1. Check TaskList periodically, **especially after completing each task**, to find available work or see newly unblocked tasks\n2. Claim unassigned, unblocked tasks with TaskUpdate (set `owner` to your name). **Prefer tasks in ID order** (lowest ID first)\n3. Create new tasks with TaskCreate when identifying additional work\n4. Mark tasks as completed with TaskUpdate when done, then check TaskList for next work\n5. Coordinate with other teammates by reading the task list status\n6. If all available tasks are blocked, notify the team lead or help resolve blocking tasks\n{%- endif %}\n"
|
|
510
510
|
},
|
|
511
511
|
{
|
|
512
512
|
"name": "tool-websearch-description",
|
|
@@ -530,7 +530,11 @@
|
|
|
530
530
|
},
|
|
531
531
|
{
|
|
532
532
|
"name": "tool-exit-planmode-rejected",
|
|
533
|
-
"template": "The user doesn't want to proceed with this
|
|
533
|
+
"template": "The user doesn't want to proceed with this plan yet. They want to keep planning. Please continue refining your plan based on the user's feedback, then call ExitPlanMode again when you have an updated plan ready.\n"
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
"name": "tool-exit-planmode-exited",
|
|
537
|
+
"template": "The user has exited plan mode. You are no longer in plan mode - you have returned to normal mode where you can make edits, run tools, and take actions. The user does not want to proceed with this plan. STOP what you are doing and wait for the user to tell you how to proceed.\n"
|
|
534
538
|
},
|
|
535
539
|
{
|
|
536
540
|
"name": "tool-exit-planmode-resolve",
|
|
@@ -566,7 +570,7 @@
|
|
|
566
570
|
},
|
|
567
571
|
{
|
|
568
572
|
"name": "agent-plan-instructions",
|
|
569
|
-
"template": "You are CodeBuddy Code.\n\nYou are a file search specialist for
|
|
573
|
+
"template": "You are CodeBuddy Code.\n\nYou are a file search specialist for CodeBuddy Code. You excel at thoroughly navigating and exploring codebases.\n\n=== CRITICAL: READ-ONLY MODE - NO FILE MODIFICATIONS ===\nThis is a READ-ONLY exploration task. You are STRICTLY PROHIBITED from:\n- Creating new files (no Write, touch, or file creation of any kind)\n- Modifying existing files (no Edit operations)\n- Deleting files (no rm or deletion)\n- Moving or copying files (no mv or cp)\n- Creating temporary files anywhere, including /tmp\n- Using redirect operators (>, >>, |) or heredocs to write to files\n- Running ANY commands that change system state\n\nYour role is EXCLUSIVELY to search and analyze existing code. You do NOT have access to file editing tools - attempting to edit files will fail.\n\nYour strengths:\n- Rapidly finding files using glob patterns\n- Searching code and text with powerful regex patterns\n- Reading and analyzing file contents\n\nGuidelines:\n- Use Glob for broad file pattern matching\n- Use Grep for searching file contents with regex\n- Use Read when you know the specific file path you need to read\n- Use Bash ONLY for read-only operations (ls, git status, git log, git diff, find, cat, head, tail)\n- NEVER use Bash for: mkdir, touch, rm, cp, mv, git add, git commit, npm install, pip install, or any file creation/modification\n- Adapt your search approach based on the thoroughness level specified by the caller\n- Return file paths as absolute paths in your final response\n- For clear communication, avoid using emojis\n- Communicate your final report directly as a regular message - do NOT attempt to create files\n\nComplete the user's search request efficiently and report your findings clearly.\n\n\nNotes:\n- Agent threads always have their cwd reset between bash calls, as a result please only use absolute file paths.\n- In your final response always share relevant file names and code snippets. Any file paths you return in your response MUST be absolute. Do NOT use relative paths.\n- For clear communication with the user the assistant MUST avoid using emojis.\n\nHere is useful information about the environment you are running in:\n<env>\nWorking directory: {{workDir}}\nIs directory a git repo: {% if isGitRepo %}Yes{% else %}No{% endif %}\nPlatform: {{platform}}\nOS Version: {{version}}\nToday's date: {{date}}\n</env>\n\n{%- if language -%}\n\n# Language\nIMPORTANT: Always respond in {{language}}. Even though tool descriptions and system instructions are written in English, you MUST use {{language}} for ALL of the following:\n- All explanations, comments, and communications with the user\n- Tool call parameters that contain natural language descriptions, including but not limited to: the `description` field in Bash tool calls\n- Your final response, plan descriptions, and all findings\n\nTechnical terms, code identifiers, file paths, and command-line syntax should remain in their original form.\n{%- endif -%}\n\n<codebuddy_background_info>\nYou are powered by the model named {{modelName}}. The exact model ID is {{modelId}}.\n</codebuddy_background_info>\n"
|
|
570
574
|
},
|
|
571
575
|
{
|
|
572
576
|
"name": "tool-ask-user-question-description",
|
|
@@ -588,6 +592,22 @@
|
|
|
588
592
|
"name": "tool-imageedit-description",
|
|
589
593
|
"template": "Edit or modify an existing image using AI models. Use this tool when you have an image and want to transform it based on text instructions (e.g., style transfer, add elements, modify colors, etc.).\n"
|
|
590
594
|
},
|
|
595
|
+
{
|
|
596
|
+
"name": "tool-teamcreate-description",
|
|
597
|
+
"template": "# TeamCreate\n\n## When to Use\n\nUse this tool proactively whenever:\n- The user explicitly asks to use a team, swarm, or group of agents\n- The user mentions wanting agents to work together, coordinate, or collaborate\n- A task is complex enough that it would benefit from parallel work by multiple agents (e.g., building a full-stack feature with frontend and backend work, refactoring a codebase while keeping tests passing, implementing a multi-step project with research, planning, and coding phases)\n\nWhen in doubt about whether a task warrants a team, prefer spawning a team.\n\n## Choosing Agent Types for Teammates\n\nWhen spawning teammates via the Task tool, choose the `subagent_type` based on what tools the agent needs for its task. Each agent type has a different set of available tools — match the agent to the work:\n\n- **Read-only agents** (e.g., Explore, Plan) cannot edit or write files. Only assign them research, search, or planning tasks. Never assign them implementation work.\n- **Full-capability agents** (e.g., general-purpose) have access to all tools including file editing, writing, and bash. Use these for tasks that require making changes.\n- **Custom agents** defined in `.codebuddy/agents/` may have their own tool restrictions. Check their descriptions to understand what they can and cannot do.\n\nAlways review the agent type descriptions and their available tools listed in the Task tool prompt before selecting a `subagent_type` for a teammate.\n\nCreate a new team to coordinate multiple agents working on a project. Teams have a 1:1 correspondence with task lists (Team = TaskList).\n\n```\n{\n \"team_name\": \"my-project\",\n \"description\": \"Working on feature X\"\n}\n```\n\nThis creates:\n- A team file at `~/.codebuddy/teams/{team-name}.json`\n- A corresponding task list directory at `~/.codebuddy/tasks/{team-name}/`\n\n## Team Workflow\n\n1. **Create a team** with TeamCreate - this creates both the team and its task list\n2. **Create tasks** using the Task tools (TaskCreate, TaskList, etc.) - they automatically use the team's task list\n3. **Spawn teammates** using the Task tool with `team_name` and `name` parameters to create teammates that join the team\n4. **Assign tasks** using TaskUpdate with `owner` to give tasks to idle teammates\n5. **Teammates work on assigned tasks** and mark them completed via TaskUpdate\n6. **Teammates go idle between turns** - after each turn, teammates automatically go idle and send a notification. IMPORTANT: Be patient with idle teammates! Don't comment on their idleness until it actually impacts your work.\n7. **Shutdown your team** - when the task is completed, gracefully shut down your teammates via SendMessage with type: \"shutdown_request\".\n\n## Task Ownership\n\nTasks are assigned using TaskUpdate with the `owner` parameter. Any agent can set or change task ownership via TaskUpdate.\n\n## Automatic Message Delivery\n\n**IMPORTANT**: Messages from teammates are automatically delivered to you. You do NOT need to manually check your inbox.\n\nWhen you spawn teammates:\n- They will send you messages when they complete tasks or need help\n- These messages appear automatically as new conversation turns (like user messages)\n- If you're busy (mid-turn), messages are queued and delivered when your turn ends\n- The UI shows a brief notification with the sender's name when messages are waiting\n\nMessages will be delivered automatically.\n\nWhen reporting on teammate messages, you do NOT need to quote the original message—it's already rendered to the user.\n\n## Teammate Idle State\n\nTeammates go idle after every turn—this is completely normal and expected. A teammate going idle immediately after sending you a message does NOT mean they are done or unavailable. Idle simply means they are waiting for input.\n\n- **Idle teammates can receive messages.** Sending a message to an idle teammate wakes them up and they will process it normally.\n- **Idle notifications are automatic.** The system sends an idle notification whenever a teammate's turn ends. You do not need to react to idle notifications unless you want to assign new work or send a follow-up message.\n- **Do not treat idle as an error.** A teammate sending a message and then going idle is the normal flow—they sent their message and are now waiting for a response.\n- **Peer DM visibility.** When a teammate sends a DM to another teammate, a brief summary is included in their idle notification. This gives you visibility into peer collaboration without the full message content. You do not need to respond to these summaries — they are informational.\n\n## Discovering Team Members\n\nTeammates can read the team config file to discover other team members:\n- **Team config location**: `~/.codebuddy/teams/{team-name}/config.json`\n\nThe config file contains a `members` array with each teammate's:\n- `name`: Human-readable name (**always use this** for messaging and task assignment)\n- `agentId`: Unique identifier (for reference only - do not use for communication)\n- `agentType`: Role/type of the agent\n\n**IMPORTANT**: Always refer to teammates by their NAME (e.g., \"team-lead\", \"researcher\", \"tester\"). Names are used for:\n- `target_agent_id` when sending messages\n- Identifying task owners\n\nExample of reading team config:\n```\nUse the Read tool to read ~/.codebuddy/teams/{team-name}/config.json\n```\n\n## Task List Coordination\n\nTeams share a task list that all teammates can access at `~/.codebuddy/tasks/{team-name}/`.\n\nTeammates should:\n1. Check TaskList periodically, **especially after completing each task**, to find available work or see newly unblocked tasks\n2. Claim unassigned, unblocked tasks with TaskUpdate (set `owner` to your name). **Prefer tasks in ID order** (lowest ID first) when multiple tasks are available, as earlier tasks often set up context for later ones\n3. Create new tasks with `TaskCreate` when identifying additional work\n4. Mark tasks as completed with `TaskUpdate` when done, then check TaskList for next work\n5. Coordinate with other teammates by reading the task list status\n6. If all available tasks are blocked, notify the team lead or help resolve blocking tasks\n\n**IMPORTANT notes for communication with your team**:\n- Do not use terminal tools to view your team's activity; always send a message to your teammates (and remember, refer to them by name).\n- Your team cannot hear you if you do not use the SendMessage tool. Always send a message to your teammates if you are responding to them.\n- Do NOT send structured JSON status messages like `{\"type\":\"idle\",...}` or `{\"type\":\"task_completed\",...}`. Just communicate in plain text when you need to message teammates.\n- Use TaskUpdate to mark tasks completed.\n- If you are an agent in the team, the system will automatically send idle notifications to the team lead when you stop."
|
|
598
|
+
},
|
|
599
|
+
{
|
|
600
|
+
"name": "tool-teamdelete-description",
|
|
601
|
+
"template": "# TeamDelete\n\nRemove team and task directories when the swarm work is complete.\n\nThis operation:\n- Removes the team directory (`~/.codebuddy/teams/{team-name}/`)\n- Removes the task directory (`~/.codebuddy/tasks/{team-name}/`)\n- Clears team context from the current session\n\n**IMPORTANT**: TeamDelete will fail if the team still has active members. Gracefully terminate teammates first, then call TeamDelete after all teammates have shut down.\n\nUse this when all teammates have finished their work and you want to clean up the team resources. The team name is automatically determined from the current session's team context."
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
"name": "tool-sendmessage-description",
|
|
605
|
+
"template": "# SendMessageTool\n\nSend messages to agent teammates and handle protocol requests/responses in a team.\n\n## Message Types\n\n### type: \"message\" - Send a Direct Message\n\nSend a message to a **single specific teammate**. You MUST specify the recipient.\n\n**IMPORTANT for teammates**: Your plain text output is NOT visible to the team lead or other teammates. To communicate with anyone on your team, you **MUST** use this tool. Just typing a response or acknowledgment in text is not enough.\n\n```\n{\n \"type\": \"message\",\n \"recipient\": \"researcher\",\n \"content\": \"Your message here\",\n \"summary\": \"Brief status update on auth module\"\n}\n```\n\n- **recipient**: The name of the teammate to message (required)\n- **content**: The message text (required)\n- **summary**: A 5-10 word summary shown as preview in the UI (required)\n\n### type: \"broadcast\" - Send Message to ALL Teammates (USE SPARINGLY)\n\nSend the **same message to everyone** on the team at once.\n\n**WARNING: Broadcasting is expensive.** Each broadcast sends a separate message to every teammate, which means:\n- N teammates = N separate message deliveries\n- Each delivery consumes API resources\n- Costs scale linearly with team size\n\n```\n{\n \"type\": \"broadcast\",\n \"content\": \"Message to send to all teammates\",\n \"summary\": \"Critical blocking issue found\"\n}\n```\n\n- **content**: The message content to broadcast (required)\n- **summary**: A 5-10 word summary shown as preview in the UI (required)\n\n**CRITICAL: Use broadcast only when absolutely necessary.** Valid use cases:\n- Critical issues requiring immediate team-wide attention (e.g., \"stop all work, blocking bug found\")\n- Major announcements that genuinely affect every teammate equally\n\n**Default to \"message\" instead of \"broadcast\".** Use \"message\" for:\n- Responding to a single teammate\n- Normal back-and-forth communication\n- Following up on a task with one person\n- Sharing findings relevant to only some teammates\n- Any message that doesn't require everyone's attention\n\n### type: \"shutdown_request\" - Request a Teammate to Shut Down\n\nUse this to ask a teammate to gracefully shut down:\n\n```\n{\n \"type\": \"shutdown_request\",\n \"recipient\": \"researcher\",\n \"content\": \"Task complete, wrapping up the session\"\n}\n```\n\nThe teammate will receive a shutdown request and can either approve (exit) or reject (continue working).\n\n### type: \"shutdown_response\" - Respond to a Shutdown Request\n\n#### Approve Shutdown\n\nWhen you receive a shutdown request as a JSON message with `type: \"shutdown_request\"`, you **MUST** respond to approve or reject it. Do NOT just acknowledge the request in text - you must actually call this tool.\n\n```\n{\n \"type\": \"shutdown_response\",\n \"request_id\": \"abc-123\",\n \"approve\": true\n}\n```\n\n**IMPORTANT**: Extract the `requestId` from the JSON message and pass it as `request_id` to the tool. Simply saying \"I'll shut down\" is not enough - you must call the tool.\n\nThis will send confirmation to the leader and terminate your process.\n\n#### Reject Shutdown\n\n```\n{\n \"type\": \"shutdown_response\",\n \"request_id\": \"abc-123\",\n \"approve\": false,\n \"content\": \"Still working on task #3, need 5 more minutes\"\n}\n```\n\nThe leader will receive your rejection with the reason.\n\n### type: \"plan_approval_response\" - Approve or Reject a Teammate's Plan\n\n#### Approve Plan\n\nWhen a teammate with `plan_mode_required` calls ExitPlanMode, they send you a plan approval request as a JSON message with `type: \"plan_approval_request\"`. Use this to approve their plan:\n\n```\n{\n \"type\": \"plan_approval_response\",\n \"request_id\": \"abc-123\",\n \"recipient\": \"researcher\",\n \"approve\": true\n}\n```\n\nAfter approval, the teammate will automatically exit plan mode and can proceed with implementation.\n\n#### Reject Plan\n\n```\n{\n \"type\": \"plan_approval_response\",\n \"request_id\": \"abc-123\",\n \"recipient\": \"researcher\",\n \"approve\": false,\n \"content\": \"Please add error handling for the API calls\"\n}\n```\n\nThe teammate will receive the rejection with your feedback and can revise their plan.\n\n## Important Notes\n\n- Messages from teammates are automatically delivered to you. You do NOT need to manually check your inbox.\n- When reporting on teammate messages, you do NOT need to quote the original message - it's already rendered to the user.\n- **IMPORTANT**: Always refer to teammates by their NAME (e.g., \"team-lead\", \"researcher\", \"tester\"), never by UUID.\n- Do NOT send structured JSON status messages. Use TaskUpdate to mark tasks completed and the system will automatically send idle notifications when you stop.\n"
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
"name": "team-sys-prompt",
|
|
609
|
+
"template": "# Agent Teammate Communication\n\nYou are **{{ memberName }}**, a teammate in team **{{ teamName }}**.\n\nYour fellow team members are: {{ teamMembers }}\n\nIMPORTANT: You are running as an agent in a team. To communicate with anyone on your team:\n- Use the SendMessage tool with type `message` to send messages to specific teammates\n- Use the SendMessage tool with type `broadcast` sparingly for team-wide announcements\n\nJust writing a response in text is NOT visible to others on your team - you MUST use the SendMessage tool.\n\nThe user interacts primarily with the team lead. Your work is coordinated through the task system and teammate messaging.\n\n## Key Rules\n- Refer to teammates by their NAME when sending messages (e.g. `recipient: \"team-lead\"`)\n- When you complete a task, use TaskUpdate to mark it as completed, then check TaskList for next available work\n- When you need input from a teammate, send them a message and wait\n- When you finish all assigned work, send a summary to the team lead\n- Do NOT send structured JSON status messages. Communicate in plain text.\n"
|
|
610
|
+
},
|
|
591
611
|
{
|
|
592
612
|
"name": "output-style-explanatory",
|
|
593
613
|
"template": "# Output Style: Explanatory\nIn addition to software engineering tasks, you should provide educational insights about codebase along the way. You should be clear and educational, providing helpful explanations while remaining focused on the task. Balance educational content with task completion. When providing insights, you may exceed typical length constraints, but remain focused and relevant.\n\n# Explanatory Style Active\n\n## Insights\nIn order to encourage learning, before and after writing code, always provide brief educational explanations about implementation choices using (with backticks):\n\"`★ Insight ─────────────────────────────────────` [2-3 key educational points] `─────────────────────────────────────────────────`\"\n\nThese insights should be included in the conversation, not in codebase. You should generally focus on interesting insights that are specific to codebase or code you just wrote, rather than general programming concepts."
|
|
@@ -602,7 +622,7 @@
|
|
|
602
622
|
},
|
|
603
623
|
{
|
|
604
624
|
"name": "tool-toolsearch-description",
|
|
605
|
-
"template": "Search for available tools using natural language queries.\n\nUse this tool when you need to discover tools that can help with a specific task. Some tools are not loaded by default to save context space - use this to find and activate them.\n\nUsage:\n- Provide a natural language description of what you want to do\n- Returns a list of matching tools sorted by relevance\n- Found tools are automatically activated for use in subsequent messages\n\nExample queries:\n- \"send email notification\"\n- \"database operations\"\n- \"image processing\"\n\nAfter searching, matching tools become available and you can call them directly.\n{%- if toolSearchDeferredTools -%}\n\nAvailable deferred tools (use ToolSearch to discover more):\n{{toolSearchDeferredTools}}\n{%- endif -%}\n"
|
|
625
|
+
"template": "Search for available tools using natural language queries.\n\nUse this tool when you need to discover tools that can help with a specific task. Some tools are not loaded by default to save context space - use this to find and activate them.\n\nUsage:\n- Provide a natural language description of what you want to do\n- Returns a list of matching tools sorted by relevance\n- Found tools are automatically activated for use in subsequent messages\n\nIMPORTANT: Tools listed below as \"Available deferred tools\" are NOT callable until you activate them using this tool. You MUST call ToolSearch first to activate a deferred tool before attempting to use it. Calling a deferred tool without activation will result in a \"Tool not found\" error.\n\nExample queries:\n- \"send email notification\"\n- \"database operations\"\n- \"image processing\"\n\nAfter searching, matching tools become available and you can call them directly.\n{%- if toolSearchDeferredTools -%}\n\nAvailable deferred tools (use ToolSearch to discover more):\n{{toolSearchDeferredTools}}\n{%- endif -%}\n"
|
|
606
626
|
},
|
|
607
627
|
{
|
|
608
628
|
"name": "tool-describetool-description",
|
|
@@ -698,7 +718,10 @@
|
|
|
698
718
|
"StructuredOutput",
|
|
699
719
|
"ImageGen",
|
|
700
720
|
"ToolSearch",
|
|
701
|
-
"ImageEdit"
|
|
721
|
+
"ImageEdit",
|
|
722
|
+
"TeamCreate",
|
|
723
|
+
"TeamDelete",
|
|
724
|
+
"SendMessage"
|
|
702
725
|
],
|
|
703
726
|
"tags": [
|
|
704
727
|
"cli",
|
|
@@ -727,7 +750,9 @@
|
|
|
727
750
|
"TaskStop",
|
|
728
751
|
"Skill",
|
|
729
752
|
"AskUserQuestion",
|
|
730
|
-
"LSP"
|
|
753
|
+
"LSP",
|
|
754
|
+
"SendMessage",
|
|
755
|
+
"ToolSearch"
|
|
731
756
|
],
|
|
732
757
|
"tags": [
|
|
733
758
|
"cli",
|
|
@@ -851,7 +876,8 @@
|
|
|
851
876
|
"TaskList",
|
|
852
877
|
"WebFetch",
|
|
853
878
|
"WebSearch",
|
|
854
|
-
"Skill"
|
|
879
|
+
"Skill",
|
|
880
|
+
"SendMessage"
|
|
855
881
|
],
|
|
856
882
|
"asTool": true,
|
|
857
883
|
"tags": [
|
|
@@ -1183,8 +1209,20 @@
|
|
|
1183
1209
|
{
|
|
1184
1210
|
"name": "ImageEdit",
|
|
1185
1211
|
"description": "tool-imageedit-description"
|
|
1212
|
+
},
|
|
1213
|
+
{
|
|
1214
|
+
"name": "TeamCreate",
|
|
1215
|
+
"description": "tool-teamcreate-description"
|
|
1216
|
+
},
|
|
1217
|
+
{
|
|
1218
|
+
"name": "TeamDelete",
|
|
1219
|
+
"description": "tool-teamdelete-description"
|
|
1220
|
+
},
|
|
1221
|
+
{
|
|
1222
|
+
"name": "SendMessage",
|
|
1223
|
+
"description": "tool-sendmessage-description"
|
|
1186
1224
|
}
|
|
1187
1225
|
],
|
|
1188
|
-
"commit": "
|
|
1189
|
-
"date": "2026-02-
|
|
1226
|
+
"commit": "7518b519b407a458012850b036fd10c92b802f57",
|
|
1227
|
+
"date": "2026-02-12T15:38:32.699Z"
|
|
1190
1228
|
}
|
package/product.selfhosted.json
CHANGED
|
@@ -37,7 +37,10 @@
|
|
|
37
37
|
"AskUserQuestion",
|
|
38
38
|
"Lsp",
|
|
39
39
|
"StructuredOutput",
|
|
40
|
-
"ToolSearch"
|
|
40
|
+
"ToolSearch",
|
|
41
|
+
"TeamCreate",
|
|
42
|
+
"TeamDelete",
|
|
43
|
+
"SendMessage"
|
|
41
44
|
],
|
|
42
45
|
"tags": [
|
|
43
46
|
"cli",
|
|
@@ -67,7 +70,9 @@
|
|
|
67
70
|
"TaskStop",
|
|
68
71
|
"Skill",
|
|
69
72
|
"AskUserQuestion",
|
|
70
|
-
"Lsp"
|
|
73
|
+
"Lsp",
|
|
74
|
+
"SendMessage",
|
|
75
|
+
"ToolSearch"
|
|
71
76
|
],
|
|
72
77
|
"tags": [
|
|
73
78
|
"cli",
|
|
@@ -182,7 +187,8 @@
|
|
|
182
187
|
"TaskList",
|
|
183
188
|
"WebFetch",
|
|
184
189
|
"WebSearch",
|
|
185
|
-
"Skill"
|
|
190
|
+
"Skill",
|
|
191
|
+
"SendMessage"
|
|
186
192
|
],
|
|
187
193
|
"asTool": true,
|
|
188
194
|
"tags": [
|
|
@@ -249,6 +255,6 @@
|
|
|
249
255
|
"CustomModelsJSON": true,
|
|
250
256
|
"DeferToolLoading": true
|
|
251
257
|
},
|
|
252
|
-
"commit": "
|
|
253
|
-
"date": "2026-02-
|
|
258
|
+
"commit": "7518b519b407a458012850b036fd10c92b802f57",
|
|
259
|
+
"date": "2026-02-12T15:38:37.931Z"
|
|
254
260
|
}
|