@tencent-ai/codebuddy-code 2.94.2 → 2.94.3

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.
@@ -5,8 +5,10 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, viewport-fit=cover">
6
6
  <title>CodeBuddy Code Remote Control</title>
7
7
  <link rel="icon" type="image/svg+xml" href="/logo.svg">
8
- <meta name="theme-color" content="#fefefe" media="(prefers-color-scheme: light)">
9
- <meta name="theme-color" content="#000000" media="(prefers-color-scheme: dark)">
8
+ <!-- 顶栏色对齐 VSCode Dark+ titleBar.activeBackground (#1f1f1f)
9
+ 比纯黑 body (#000) 柔和、与 sidebar (#242424) 接近,营造无突兀的沉浸感。
10
+ 钉死单值不随系统 prefers-color-scheme 切换(webui 强制 dark)。-->
11
+ <meta name="theme-color" content="#1f1f1f">
10
12
  <meta name="description" content="CodeBuddy Code - AI-powered coding assistant">
11
13
  <!-- PWA / Standalone:隐藏浏览器导航栏 -->
12
14
  <meta name="apple-mobile-web-app-capable" content="yes">
@@ -17,7 +19,7 @@
17
19
  <link rel="preconnect" href="https://fonts.googleapis.com">
18
20
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
19
21
  <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap" rel="stylesheet">
20
- <script type="module" crossorigin src="/assets/index-BainZW7g.js"></script>
22
+ <script type="module" crossorigin src="/assets/index-CTVrXYxd.js"></script>
21
23
  <link rel="modulepreload" crossorigin href="/assets/markdown-Ce2Umeb2.js">
22
24
  <link rel="modulepreload" crossorigin href="/assets/vendor-DpYitQz5.js">
23
25
  <link rel="stylesheet" crossorigin href="/assets/index-pCdeaJFc.css">
@@ -1 +1 @@
1
- {"name":"CodeBuddy Code","short_name":"CodeBuddy","description":"AI-powered coding assistant","start_url":"/","display":"standalone","background_color":"#000000","theme_color":"#000000","lang":"en","scope":"/","icons":[{"src":"/logo.svg","sizes":"any","type":"image/svg+xml","purpose":"any maskable"}]}
1
+ {"name":"CodeBuddy Code","short_name":"CodeBuddy","description":"AI-powered coding assistant","start_url":"/","display":"standalone","background_color":"#1f1f1f","theme_color":"#1f1f1f","lang":"en","scope":"/","icons":[{"src":"/logo.svg","sizes":"any","type":"image/svg+xml","purpose":"any maskable"}]}
package/dist/web-ui/sw.js CHANGED
@@ -1 +1 @@
1
- if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,o)=>{const l=e||("document"in self?document.currentScript.src:"")||location.href;if(s[l])return;let t={};const r=e=>i(e,l),u={module:{uri:l},exports:t,require:r};s[l]=Promise.all(n.map(e=>u[e]||r(e))).then(e=>(o(...e),t))}}define(["./workbox-e082a648"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"logo.svg",revision:"6165db837a6039880af9705aa09be574"},{url:"index.html",revision:"fc6e34bbc798c5f475fd01e997e435ce"},{url:"assets/vendor-DpYitQz5.js",revision:null},{url:"assets/octicons-CaZ_fok2.woff2",revision:null},{url:"assets/mfixx-CpAhKOZz.woff2",revision:null},{url:"assets/markdown-Ce2Umeb2.js",revision:null},{url:"assets/logo-iZVLr450.svg",revision:null},{url:"assets/index-pCdeaJFc.css",revision:null},{url:"assets/index-DixJ0kqk.js",revision:null},{url:"assets/index-BainZW7g.js",revision:null},{url:"assets/fontawesome-B-jkhYfk.woff2",revision:null},{url:"assets/file-icons-C0jOugUK.woff2",revision:null},{url:"assets/devopicons-QN4QXivI.woff2",revision:null},{url:"logo.svg",revision:"6165db837a6039880af9705aa09be574"},{url:"manifest.webmanifest",revision:"35cfb533d72bccfb26065a3c11b74203"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"),{denylist:[/^\/api/,/^\/gateway/,/^\/docs\//]})),e.registerRoute(/^https:\/\/fonts\.googleapis\.com/,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[]}),"GET"),e.registerRoute(/^https:\/\/fonts\.gstatic\.com/,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:20,maxAgeSeconds:31536e3})]}),"GET")});
1
+ if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,o)=>{const l=e||("document"in self?document.currentScript.src:"")||location.href;if(s[l])return;let t={};const r=e=>i(e,l),u={module:{uri:l},exports:t,require:r};s[l]=Promise.all(n.map(e=>u[e]||r(e))).then(e=>(o(...e),t))}}define(["./workbox-e082a648"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"logo.svg",revision:"6165db837a6039880af9705aa09be574"},{url:"index.html",revision:"02b5737b7cc2cc3d54583ae54ea8db2c"},{url:"assets/vendor-DpYitQz5.js",revision:null},{url:"assets/octicons-CaZ_fok2.woff2",revision:null},{url:"assets/mfixx-CpAhKOZz.woff2",revision:null},{url:"assets/markdown-Ce2Umeb2.js",revision:null},{url:"assets/logo-iZVLr450.svg",revision:null},{url:"assets/index-pCdeaJFc.css",revision:null},{url:"assets/index-DixJ0kqk.js",revision:null},{url:"assets/index-CTVrXYxd.js",revision:null},{url:"assets/fontawesome-B-jkhYfk.woff2",revision:null},{url:"assets/file-icons-C0jOugUK.woff2",revision:null},{url:"assets/devopicons-QN4QXivI.woff2",revision:null},{url:"logo.svg",revision:"6165db837a6039880af9705aa09be574"},{url:"manifest.webmanifest",revision:"ed76a251c8eb35918791b0d0a060a0c2"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"),{denylist:[/^\/api/,/^\/gateway/,/^\/docs\//]})),e.registerRoute(/^https:\/\/fonts\.googleapis\.com/,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[]}),"GET"),e.registerRoute(/^https:\/\/fonts\.gstatic\.com/,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:20,maxAgeSeconds:31536e3})]}),"GET")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tencent-ai/codebuddy-code",
3
- "version": "2.94.2",
3
+ "version": "2.94.3",
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",
@@ -399,6 +399,6 @@
399
399
  "ScheduledTasks": true,
400
400
  "SkillManage": false
401
401
  },
402
- "commit": "b3a6bcd10a5e85a660c119a4a4eeac1cf02fd6f3",
403
- "date": "2026-04-28T16:29:02.147Z"
402
+ "commit": "8bbadadbb5725c1bcb4f9cbe9d93aa05947983a8",
403
+ "date": "2026-04-29T04:45:38.914Z"
404
404
  }
@@ -525,7 +525,7 @@
525
525
  }
526
526
  },
527
527
  {
528
- "credits": "x0.00 credits",
528
+ "credits": "x0.37 credits",
529
529
  "id": "hy3-preview",
530
530
  "name": "Hy3 preview",
531
531
  "vendor": "j",
@@ -533,7 +533,7 @@
533
533
  "maxInputTokens": 192000,
534
534
  "maxAllowedSize": 192000,
535
535
  "supportsToolCall": true,
536
- "supportsImages": false,
536
+ "supportsImages": true,
537
537
  "disabledMultimodal": false,
538
538
  "supportsReasoning": true,
539
539
  "temperature": 0.9,
@@ -606,6 +606,6 @@
606
606
  }
607
607
  }
608
608
  },
609
- "commit": "b3a6bcd10a5e85a660c119a4a4eeac1cf02fd6f3",
610
- "date": "2026-04-28T16:29:02.097Z"
609
+ "commit": "8bbadadbb5725c1bcb4f9cbe9d93aa05947983a8",
610
+ "date": "2026-04-29T04:45:38.883Z"
611
611
  }
package/product.ioa.json CHANGED
@@ -585,7 +585,7 @@
585
585
  "maxInputTokens": 192000,
586
586
  "maxAllowedSize": 192000,
587
587
  "supportsToolCall": true,
588
- "supportsImages": false,
588
+ "supportsImages": true,
589
589
  "disabledMultimodal": false,
590
590
  "supportsReasoning": true,
591
591
  "temperature": 0.9,
@@ -1028,6 +1028,6 @@
1028
1028
  }
1029
1029
  }
1030
1030
  },
1031
- "commit": "b3a6bcd10a5e85a660c119a4a4eeac1cf02fd6f3",
1032
- "date": "2026-04-28T16:29:02.099Z"
1031
+ "commit": "8bbadadbb5725c1bcb4f9cbe9d93aa05947983a8",
1032
+ "date": "2026-04-29T04:45:38.960Z"
1033
1033
  }
package/product.json CHANGED
@@ -734,7 +734,7 @@
734
734
  },
735
735
  {
736
736
  "name": "agent-statusline-instructions",
737
- "template": "You are CodeBuddy Code.\n\nYou are a status line setup agent for CodeBuddy Code. Your job is to create or update the statusLine command in the user's CodeBuddy Code settings.\n\nWhen asked to convert the user's shell PS1 configuration, follow these steps:\n1. Read the user's shell configuration files in this order of preference:\n - ~/.zshrc\n - ~/.bashrc\n - ~/.bash_profile\n - ~/.profile\n\n2. Extract the PS1 value using this regex pattern: /(?:^|\\\\n)\\\\s*(?:export\\\\s+)?PS1\\\\s*=\\\\s*[\"']([^\"']+)[\"']/m\n\n3. Convert PS1 escape sequences to shell commands:\n - \\\\u → $(whoami)\n - \\\\h → $(hostname -s)\n - \\\\H → $(hostname)\n - \\\\w → $(pwd)\n - \\\\W → $(basename \"$(pwd)\")\n - \\\\$ → $\n - \\\n → \\\n\n - \\\\t → $(date +%H:%M:%S)\n - \\\\d → $(date \"+%a %b %d\")\n - \\\\@ → $(date +%I:%M%p)\n - \\\\# → #\n - \\\\! → !\n\n4. When using ANSI color codes, be sure to use `printf`. Do not remove colors. Note that the status line will be printed in a terminal using dimmed colors.\n\n5. If the imported PS1 would have trailing \"$\" or \">\" characters in the output, you MUST remove them.\n\n6. If no PS1 is found and user did not provide other instructions, ask for further instructions.\n\nHow to use the statusLine command:\n1. The statusLine command will receive the following JSON input via stdin:\n {\n \"session_id\": \"string\", // Unique session ID\n \"transcript_path\": \"string\", // Path to the conversation transcript\n \"cwd\": \"string\", // Current working directory\n \"model\": {\n \"id\": \"string\", // Model ID (e.g., \"gpt-5.1-codex\")\n \"display_name\": \"string\" // Display name (e.g., \"GPT-5.1-codex\")\n },\n \"workspace\": {\n \"current_dir\": \"string\", // Current working directory path\n \"project_dir\": \"string\" // Project root directory path\n },\n \"version\": \"string\", // CodeBuddy Code app version (e.g., \"1.0.71\")\n \"output_style\": {\n \"name\": \"string\", // Output style name (e.g., \"default\", \"Explanatory\", \"Learning\")\n }\n }\n\n You can use this JSON data in your command like:\n - $(cat | jq -r '.model.display_name')\n - $(cat | jq -r '.workspace.current_dir')\n - $(cat | jq -r '.output_style.name')\n\n Or store it in a variable first:\n - input=$(cat); echo \"$(echo \"$input\" | jq -r '.model.display_name') in $(echo \"$input\" | jq -r '.workspace.current_dir')\"\n\n2. For longer commands, you can save a new file in the user's ~/.codebuddy directory, e.g.:\n - ~/.codebuddy/statusline-command.sh and reference that file in the settings.\n\n3. Update the user's ~/.codebuddy/settings.json with:\n {\n \"statusLine\": {\n \"type\": \"command\",\n \"command\": \"your_command_here\"\n }\n }\n\n4. If ~/.codebuddy/settings.json is a symlink, update the target file instead.\n\nGuidelines:\n- Preserve existing settings when updating\n- Return a summary of what was configured, including the name of the script file if used\n- If the script includes git commands, they should skip optional locks\n- IMPORTANT: At the end of your response, inform the parent agent that this \"statusline-setup\" agent must be used for further status line changes.\n Also ensure that the user is informed that they can ask CodeBuddy to continue to make changes to the status line.\n\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- Configuration summaries and setup instructions shown to the user\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\n"
737
+ "template": "You are CodeBuddy Code.\n\nYou are a status line setup agent for CodeBuddy Code. Your job is to create or update the statusLine command in the user's CodeBuddy Code settings.\n\nWhen asked to convert the user's shell PS1 configuration, follow these steps:\n1. Read the user's shell configuration files in this order of preference:\n - ~/.zshrc\n - ~/.bashrc\n - ~/.bash_profile\n - ~/.profile\n\n2. Extract the PS1 value using this regex pattern: /(?:^|\\\\n)\\\\s*(?:export\\\\s+)?PS1\\\\s*=\\\\s*[\"']([^\"']+)[\"']/m\n\n3. Convert PS1 escape sequences to shell commands:\n - \\\\u → $(whoami)\n - \\\\h → $(hostname -s)\n - \\\\H → $(hostname)\n - \\\\w → $(pwd)\n - \\\\W → $(basename \"$(pwd)\")\n - \\\\$ → $\n - \\\n → \\\n\n - \\\\t → $(date +%H:%M:%S)\n - \\\\d → $(date \"+%a %b %d\")\n - \\\\@ → $(date +%I:%M%p)\n - \\\\# → #\n - \\\\! → !\n\n4. When using ANSI color codes, be sure to use `printf`. Do not remove colors. Note that the status line will be printed in a terminal using dimmed colors.\n\n5. If the imported PS1 would have trailing \"$\" or \">\" characters in the output, you MUST remove them.\n\n6. If no PS1 is found and user did not provide other instructions, ask for further instructions.\n\nHow to use the statusLine command:\n1. The statusLine command will receive the following JSON input via stdin:\n {\n \"session_id\": \"string\", // Unique session ID\n \"transcript_path\": \"string\", // Path to the conversation transcript\n \"cwd\": \"string\", // Current working directory\n \"model\": {\n \"id\": \"string\", // Model ID (e.g., \"gpt-5.1-codex\")\n \"display_name\": \"string\" // Display name (e.g., \"GPT-5.1-codex\")\n },\n \"workspace\": {\n \"current_dir\": \"string\", // Current working directory path\n \"project_dir\": \"string\" // Project root directory path\n },\n \"version\": \"string\", // CodeBuddy Code app version (e.g., \"1.0.71\")\n \"output_style\": {\n \"name\": \"string\", // Output style name (e.g., \"default\", \"Explanatory\", \"Learning\")\n }\n }\n\n You can use this JSON data in your command like:\n - $(cat | jq -r '.model.display_name')\n - $(cat | jq -r '.workspace.current_dir')\n - $(cat | jq -r '.output_style.name')\n\n Or store it in a variable first:\n - input=$(cat); echo \"$(echo \"$input\" | jq -r '.model.display_name') in $(echo \"$input\" | jq -r '.workspace.current_dir')\"\n\n2. For longer commands, you can save a new file in the user's CodeBuddy home directory, e.g.:\n - {{codebuddyHome}}/statusline-command.sh and reference that file in the settings.\n\n3. Update the user's {{codebuddyHome}}/settings.json with:\n {\n \"statusLine\": {\n \"type\": \"command\",\n \"command\": \"your_command_here\"\n }\n }\n\n4. If {{codebuddyHome}}/settings.json is a symlink, update the target file instead.\n\nGuidelines:\n- Preserve existing settings when updating\n- Return a summary of what was configured, including the name of the script file if used\n- If the script includes git commands, they should skip optional locks\n- IMPORTANT: At the end of your response, inform the parent agent that this \"statusline-setup\" agent must be used for further status line changes.\n Also ensure that the user is informed that they can ask CodeBuddy to continue to make changes to the status line.\n\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- Configuration summaries and setup instructions shown to the user\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\n"
738
738
  },
739
739
  {
740
740
  "name": "command-statusline-prompt",
@@ -774,11 +774,11 @@
774
774
  },
775
775
  {
776
776
  "name": "tool-teamcreate-description",
777
- "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 Agent 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 Agent 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 Agent 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."
777
+ "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 Agent 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 Agent 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 `{{codebuddyHome}}/teams/{team-name}.json`\n- A corresponding task list directory at `{{codebuddyHome}}/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 Agent 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**: `{{codebuddyHome}}/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 {{codebuddyHome}}/teams/{team-name}/config.json\n```\n\n## Task List Coordination\n\nTeams share a task list that all teammates can access at `{{codebuddyHome}}/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."
778
778
  },
779
779
  {
780
780
  "name": "tool-teamdelete-description",
781
- "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."
781
+ "template": "# TeamDelete\n\nRemove team and task directories when the swarm work is complete.\n\nThis operation:\n- Removes the team directory (`{{codebuddyHome}}/teams/{team-name}/`)\n- Removes the task directory (`{{codebuddyHome}}/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."
782
782
  },
783
783
  {
784
784
  "name": "tool-sendmessage-description",
@@ -1566,6 +1566,6 @@
1566
1566
  "description": "Send a reply to a WeCom (企业微信) user. For text: pass text (markdown supported)."
1567
1567
  }
1568
1568
  ],
1569
- "commit": "b3a6bcd10a5e85a660c119a4a4eeac1cf02fd6f3",
1570
- "date": "2026-04-28T16:29:02.087Z"
1569
+ "commit": "8bbadadbb5725c1bcb4f9cbe9d93aa05947983a8",
1570
+ "date": "2026-04-29T04:45:38.959Z"
1571
1571
  }
@@ -286,6 +286,6 @@
286
286
  "DeferToolLoading": true,
287
287
  "ScheduledTasks": true
288
288
  },
289
- "commit": "b3a6bcd10a5e85a660c119a4a4eeac1cf02fd6f3",
290
- "date": "2026-04-28T16:29:02.169Z"
289
+ "commit": "8bbadadbb5725c1bcb4f9cbe9d93aa05947983a8",
290
+ "date": "2026-04-29T04:45:38.966Z"
291
291
  }