Skip to main content
Glama

agent-foreman-mcp

面向任意 MCP 宿主的通用 AI-Agent 编排 MCP server

由你选择的 MCP 宿主(Claude Desktop / Cursor / ZCode / Cline / Windsurf 等)接入,作为标准 MCP server,调度外部 AI-Agent(Codex 桌面端、TraeWork / TRAE SOLO CN、ZCode 均经 CDP 驱动桌面 UI)完成 项目开发 → 验收 → 失败返修 → 再验收 的闭环。

视觉验收(含可选 AI 内容校验):中文指南 · 验证状态

CI npm version npm downloads License TypeScript Node MCP SDK

English · 简体中文


这是什么

宿主(任何 MCP 宿主)是指挥;本 MCP server 是调度层 + 执行面 + 客观验收仪;外部 AI-Agent(Codex / TraeWork / ZCode GUI)是执行开发的「工人」。server 本身不绑定任何特定宿主——凡支持 stdio 传输的 MCP 宿主都可接入,接入方式见 宿主接入指南

  • 11 个 MCP 工具run_task / continue_task / query_task / list_tasks / get_task_report / cancel_task / verify_task / rework_task / get_profiles,外加视觉验收的 prepare_visual_baseline / approve_visual_baseline

  • 双轨返回:结果同时以「人类可读文本 + ---agent-foreman-meta--- JSON 块」与 MCP 标准 structuredContent 投递,同一份字段、单一事实来源。旧式宿主可正则抽取文本块,现代宿主可直接消费结构化字段;工具已声明 outputSchema,字段名稳定且只增不改

  • 异步契约run_task 秒回 taskId,长任务用 query_task 轮询(长任务不卡 tools/call)。

  • 客观验收:自动命令检查(typecheck/lint/test/build,缺则跳过 + 技术栈推导)+ 程序化代码分析(变更清单/diffstat/TODO·debugger·密钥形态等可疑标记),全部相对 git 基线,不自动 commit/stash。验收引擎 fail-closed:测试命令退出码为 0 但输出显示零用例时判失败;git 项目默认要求相对动工前基线产生变更(纯分析任务可在 .agent-foreman/acceptance.json"requireChanges": false 显式关闭)。

  • 验收并行度:命令检查默认有界并行verifyConcurrency,默认 2、范围 1–4)。检查项之间有顺序依赖时(后续检查读取 build 产物、带 --fix、共享缓存目录)请设 1 完全退化为串行;项目级 .agent-foreman/acceptance.json 可覆盖,server 级在 config.json。报告与日志格式不变(结果按声明顺序返回)。

  • 失败返修闭环:自动返修(autoFixRounds)+ 手动 rework_task;验收失败时自动生成修复计划文件(默认落在项目内 .agent-foreman/plans/)并回填给 agent;轮次用尽 → needs_attention 等宿主裁决。

  • 执行面driver: "gui" 由显式 adapter 驱动桌面 UI(Codex / TraeWork / ZCode 各自使用隔离的 CDP 流程);driver: "spawn" 走外部 CLI 子进程。

  • 无项目派发(ZCode)run_taskprojectPath 可省略——ZCode 在 default 工作区承接任务,不登记/导入项目、不采集 Git 基线、不执行项目验收(结果以 verificationNotApplicable: "no_project" 结构化标注,verify_task/get_task_report 返回不适用说明)。配套 allowCreateProject: false 可在目标目录未登记时于任何导入副作用之前停止派发。详见 ZCode CDP 适配器

  • 调度纪律:每项目串行队列 + 全局并发上限(默认 2,可配)。

  • 可选 AI 内容校验(默认关闭):校验图片或页面截图内容是否符合你显式声明的期望描述。判定完全委托给你自备的本地命令(MCP 不读取、不存储、不转发任何密钥,也不内置模型客户端),默认仅告警、逐规则可升级为致败;采样多数票 + 任务级缓存防抖,票不集中或低于置信度阈值判 uncertain(永不阻塞、不触发返修)。配置与命令契约见 视觉验收

  • 不碰密钥:各 agent 用自己的登录态;本 server 不保存/转发任何 API key。可选 AI 内容校验同样不引入凭证管理——判定命令自己管密钥(见 SECURITY.md)。

  • 可扩展:新 agent = 一个 profile(数据)+(如需)一个 adapter 文件,零改编排核心。

  • 想理解内部结构:见 ARCHITECTURE.md(分层模型、模块边界、状态机、验收流水线、扩展点与已知缺口)。

Related MCP server: Cascade

快速开始

前置条件

要求

Node.js

≥ 20(CI 覆盖 20 / 22 / 24)

包管理器

npm(仓库含 package-lock.json

操作系统

Windows / macOS / Linux(CI 三平台矩阵验证)

被驱动的 agent 需按需自行安装:Codex 桌面端 / TraeWork(TRAE SOLO CN)/ ZCode 桌面端(GUI 驱动),或 codex CLI(无头路径,见下)。本 server 不需要它们的任何密钥

安装 npm 包

npm i -g agent-foreman-mcp
# 或免安装直接用
npx -y agent-foreman-mcp

接入你的宿主

在宿主的 MCP 配置里加一段 stdio server(键名视宿主而定,通常为 mcpServers):

{
  "mcpServers": {
    "agent-foreman": {
      "command": "npx",
      "args": ["-y", "agent-foreman-mcp"]
    }
  }
}

各宿主(Claude Desktop / Cursor / ZCode / Cline / Windsurf)的具体配置位置、环境变量、冒烟步骤与常见问题,见 宿主接入指南

从源码构建

npm ci
npm run build          # 产出 dist/
node dist/index.js     # 以 stdio 启动(由宿主拉起,通常无需手动运行)

开发与门禁命令:npm run devnpm run typechecknpm run lintnpm testnpm run check:stdio(严格校验 stdout 只承载 MCP 协议消息)。

数据目录

默认 ~/.agent-foreman(可用环境变量 AGENT_FOREMAN_HOME 覆盖),首次启动自动创建。项目级验收配置放在项目内 <项目>/.agent-foreman/acceptance.json

工具面(11 个)

工具

能力 / 审批

作用

run_task

write + 审批

派活(可带自动验收/自动返修),异步返回 taskId

continue_task

write + 审批

恢复 needs_user 的原会话

query_task

read

轮询状态 / 进度 / 日志尾

list_tasks

read

历史任务过滤列表

get_task_report

read

某轮验收报告全文(report.md

cancel_task

write + 审批

取消运行中任务:CLI agent kill 进程树;GUI agent 经 CDP 点击停止并在 gui.cancelWaitMs(默认 15s)内有界等待 GUI 空闲,未确认停止时终态明示

verify_task

read

对任务/项目路径做一次验收(不改源码)

rework_task

write + 审批

手动返修(把失败报告喂回同一 agent)

get_profiles

read

查看 agent 适配与可执行探测结果

prepare_visual_baseline

write + 审批

截图或导入参考图,生成待审阅候选和摘要

approve_visual_baseline

write + 审批

用户审阅后校验摘要并写入基准与审批记录

返回值双轨:人类可读文本 + ---agent-foreman-meta--- JSON 块(便于宿主正则抽取),同时以 MCP 标准 structuredContent 返回同一份字段(现代宿主直接消费)。错误路径同样提供 structuredContent(至少含 ok:falsemessage)。

审批由宿主实施:上表的「write + 审批」是暴露给宿主的标注(_meta.requireApproval / annotations),标注本身不是安全边界——实际授权控制必须由宿主提供。

路径安全闸门projectPath 在提交时校验——必须绝对路径、目录必须存在、符号链接经 realpath 归一(回执明示解析来源);主目录本身与系统/根级目录直接拒绝,防止 worker 写权限覆盖整棵系统子树;git 仓库有未提交变更时回执附带共处警示。

无项目派发(ZCode 专用):省略 projectPath 时任务在 ZCode 的 default 工作区运行,跳过项目登记、Git 基线、项目快照、项目锁与项目验收(终态标注 not_applicable: no_project)。allowCreateProject=false 可禁止自动导入未登记的项目。详见 docs/zcode-cdp.md

日志与 stdio 契约

本 server 是标准 MCP stdio server,严格遵守传输契约:

  • stdout 只承载 MCP JSON-RPC 消息。任何诊断日志都不会写入 stdout——否则会破坏 JSON-RPC 流,导致严格客户端握手或工具调用失败。

  • 所有级别日志(DEBUG/INFO/WARN/ERROR)写入 stderr,同时追加到数据目录下的 logs/server.log(UTF-8,ISO 时间戳,含级别标签)。

  • 因此 stderr 里出现 INFO/WARN 不代表服务器出错;它是正常诊断信息。只有启动失败(agent-foreman-mcp 启动失败:)才是致命错误,并会以非 0 退出码结束。

数据目录默认 ~/.agent-foreman(可用 AGENT_FOREMAN_HOME 覆盖),日志文件位于 <数据目录>/logs/server.log。排查连接问题时以 server.log 为准;不要因为 stderr 有输出就判定 server 异常。

技能自装

server 启动时会把自带的编排技能幂等同步到 ~/.agents/skills/agent-foreman-mcp/(Agents Skills 开放标准,用户级):

  • 内容 hash 一致 → 跳过;不一致 → 先把旧版备份为 .bak-<时间戳> 再覆盖;

  • 安装失败只告警、不阻断 server;

  • 该目录由 os.homedir() 决定,不受 AGENT_FOREMAN_HOME 影响

  • 可用 --no-skill-installAGENT_FOREMAN_NO_SKILL_INSTALL=1 关闭。

技能文档(SKILL.md / usage-examples.md)以仓库 skills/agent-foreman-mcp/ 为准,涵盖工具面、任务书模板、meta 字段全表、错误码速查与返修提示语模板。

文档

文档

内容

docs/host-integration.md

宿主接入指南:通用 mcpServers 配置、各宿主位置、环境变量、冒烟步骤、FAQ

ARCHITECTURE.md

架构说明:分层模型与模块边界、启动装配、数据目录、状态机、验收与返修流水线、Agent 驱动层契约、GUI 实例生命周期、跨平台策略、安全红线、扩展点、已知缺口

HANDOFF.md

项目交接文档:当前状态快照、架构导览、硬性红线、已知限制、接手建议

docs/agent-profiles.md

agent profiles 字段说明 + 真实机器样例

docs/adapter-matrix.md

各 Agent 能力调研矩阵(Codex / ZCode / TraeWork / 扩展位)

docs/acceptance-config.md

项目级验收配置(.agent-foreman/acceptance.json)写法

docs/visual-acceptance.md

视觉验收:截图对比、图片规格、基准批准与冻结、AI 内容校验

docs/visual-validation.md

视觉验收的验证口径与覆盖边界(以 CI 矩阵为事实来源)

docs/codex-gui-cdp.md

Codex 桌面端 GUI 驱动:MSIX COM 激活、CDP 接管、选择器、运行检测、验收返修

docs/traework-cdp.md

TraeWork GUI 驱动(CDP):原理、配置、模式切换、选择器、安全红线

docs/zcode-cdp.md

ZCode GUI 驱动:安装探测、精确项目/模型、完全访问、暂停继续、验收返修

docs/npm-publish-guide.md

发布流程(门禁、版本、凭据、发布后核验、GitHub Release)

CONTRIBUTING.md

开发环境、工程规范、提交与发布流程、如何新增 agent

SECURITY.md

安全模型(凭证零管理 / 命令白名单 / 进程与桌面自动化边界)与私密报告渠道

CODE_OF_CONDUCT.md

贡献者行为准则

CHANGELOG.md

版本变更日志

LICENSE

Apache License 2.0(详细说明见下节)

Agent 适配现状

agentId

driver / adapter

status

说明

codex

gui / codex-gui

ready(macOS 为 research

Codex 桌面端 GUI(Windows:MSIX COM 激活 + CDP;macOS:spawn .app + CDP);支持 model/reasoningLevel/planDoc/designSystem;等待用户确认、取消与重派护栏均已真机验证。Windows 真机已验证;macOS 基本闭环已真机验证,取消/返修矩阵补齐前保持 research

zcode

gui / zcode-gui

research

CDP GUI adapter 已实现且 Windows 真机闭环通过;支持模型菜单、项目绑定与回读加固、无项目派发与 allowCreateProject;macOS 基本闭环已真机验证,取消/返修/新建项目矩阵补齐前保持 research

traework

gui / traework-gui

ready

CDP 驱动 TRAE SOLO CN 桌面 UI;三种面板模式真机验证通过

stub

spawn

仅测试

test/stub-agent/stub-agent.mjs 三剧本(good / fix-on-first / never)

新增 agent 通常只需加一个 profile,详见 docs/agent-profiles.mdCONTRIBUTING.md

无头路径:codex-cli(用户 profile)

内置 codex 走桌面端 GUI 驱动。若不想依赖 GUI 自动化,codex CLI 无头模式可用——无需改 server 代码,在数据目录加一个 driver=spawn 的用户 profile 即可。

前置条件:

  • codex CLI(npm i -g @openai/codex)。请保持最新:旧版签名证书曾被吊销,macOS Gatekeeper 会直接 SIGKILL(Killed: 9)。

  • codex login(复用 ~/.codex 登录态)。

~/.agent-foreman/agent-profiles.json

{
  "profiles": {
    "codex-cli": {
      "displayName": "Codex CLI (OpenAI 无头)",
      "type": "cli",
      "driver": "spawn",
      "status": "ready",
      "command": null,
      "argsTemplate": ["exec", "<prompt:arg>", "--skip-git-repo-check", "--sandbox", "workspace-write"],
      "promptMode": "arg",
      "cwd": "task",
      "env": {},
      "timeoutMs": 1800000,
      "killTree": "taskkill",
      "authNote": "复用 ~/.codex 登录态;勿与 --approve-for-me 同用(实测互斥)",
      "executableDiscovery": {
        "dirs": ["/opt/homebrew/bin", "/usr/local/bin"],
        "fileNames": ["codex"],
        "fallbackCommand": "codex"
      }
    }
  }
}

用法与内置 agent 一致:

run_task(projectPath=/path/to/项目, agentId=codex-cli, task="任务书", autoVerify=true, autoFixRounds=2)

行为与限制:

  • get_profiles 会列出 codex-cli 并探测 PATH 上的 codex 可执行。

  • model 参数对 spawn agent 不生效——CLI 使用 ~/.codex/config.toml 的默认模型;要锁模型可在 argsTemplate 追加 "-m", "<模型名>"

  • 写入被 workspace-write 沙箱限制在项目目录内;POSIX 下取消/超时自动对进程组 SIGTERM→SIGKILL(killTree 值在非 Windows 平台被忽略)。

推荐用法

"在项目 D:\xxx 用 codex 实现『任务』。先跑 run_task(autoVerify:true, autoFixRounds:2),完成后用 query_task 看结果;若报告显示 needs_attention,把 get_task_report 的失败项摘要作为 feedback 调 rework_task 再验一轮;全部通过后向我汇报 changedFiles 与 diffstat。"

"在项目 D:\xxx 用 traework、mode=Code 实现『任务』;它会先切到 Code 模式再绑定项目,然后发任务、自动验收,失败自动生成修复计划并返修。"

渊源与切换

渊源:本项目源自 tianshu-mcp v0.5.4(Apache-2.0)独立分化,自 1.0.0 起独立演进。两者是并行维护的两个独立项目:tianshu-mcp 的历史(发布记录、真机验收、里程碑叙事)归属其自身仓库,本仓库不保留、不复述;两个项目互不依赖、互不读取对方数据。

从 tianshu-mcp 切换过来的用户须知(四项用户可见的行为变化):

  1. 数据目录不共享:本项目的默认数据目录是 ~/.agent-foreman(环境变量 AGENT_FOREMAN_HOME)。原 ~/.tianshu-mcp 下的任务历史、项目登记、agent profiles 与配置不会被读取、也不会迁移——本项目从全新目录开始。

  2. 项目级验收配置需重建:本项目只读 <项目>/.agent-foreman/acceptance.json不读取 .tianshu-mcp/acceptance.json。已有项目需把配置复制到新路径(.agent-foreman/)。

  3. Codex GUI profile 目录变更:Codex 桌面端的专属浏览器 profile 目录从 …/tianshu-mcp/codex-gui/profile 改为 …/agent-foreman/codex-gui/profile(Windows 在 %LOCALAPPDATA% 下,macOS 在 ~/.agent-foreman/ 下)。该目录承载登录态,因此首次运行需要重新登录 Codex

  4. Codex 状态备份后缀变更:登记项目前的备份文件后缀改为 .agent-foreman-backup.json并兼容识别旧后缀 .tianshu-mcp-backup.json——若磁盘上已存在旧备份(那是「任何工具动手之前」的干净快照),本项目不会覆盖它、也不会另建新备份,日志会打印实际生效的那份路径。因此仍可按旧文件回滚。

其余对外契约相对 tianshu-mcp v0.5.4 的变化(新包名、structuredContent 双轨返回、技能自装目录迁移到 ~/.agents/skills/、移除 Gitee 集成等),见 CHANGELOG.md

开源协作

贡献者

感谢所有为本项目做出贡献的人。名录按首次参与顺序排列,虚位以待:

想出现在这里?请阅读 CONTRIBUTING.md 后提交 Issue 或 Pull Request。合并后你的名字会按首次参与顺序补入上表。

许可

本项目以 Apache License 2.0 发布,完整法律文本见 LICENSE。版权归 agent-foreman-mcp 贡献者所有(Copyright 2026 agent-foreman-mcp contributors)。

本项目源自 tianshu-mcp(Apache-2.0)独立分化;依 Apache-2.0 要求,原始版权、许可与免责声明随 LICENSE 一并保留。

授予你的权利

  • 商业使用:可在商业产品与服务中使用;

  • 修改:可自由修改源码;

  • 分发:可再分发原始或修改后的版本;

  • 私用:可在组织内部私有使用;

  • 专利使用:贡献者授予你实施其贡献所涉专利的许可(受下述终止条款约束)。

你必须履行的义务

  1. 保留声明:分发时须随附 LICENSE 全文,并保留其中的版权、许可与免责声明;

  2. 标注修改:若修改了文件,须在修改的文件中附带显著的「已修改」声明;

  3. 保留 NOTICE:若原作品含 NOTICE 文件,分发时须保留其内容(本项目当前 NOTICE 文件);

  4. 不得附加限制:不得对本许可授予的权利附加额外限制。

明确不授予 / 授权终止

  • 商标:本许可不授予任何商标、商号或服务标记的使用权;

  • 专利终止:若你对本项目或其贡献者发起专利诉讼(包括交叉诉讼与反诉),本许可授予你的专利授权自动终止

免责声明

软件按 「现状」 提供,不附带任何明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权担保。在任何情况下,作者或版权持有人均不对因软件、软件的使用或其他交易而产生的任何索赔、损害或其他责任负责(无论是在合同诉讼、侵权诉讼还是其他诉讼中)。

第三方依赖许可

运行时依赖主要为 MIT / ISC / Apache-2.0 许可,与 Apache-2.0 兼容:

依赖

许可

用途

@modelcontextprotocol/sdk

MIT

MCP 协议实现

zod

MIT

外部输入校验

cross-spawn

MIT

跨平台子进程

puppeteer-core / @puppeteer/browsers

Apache-2.0

GUI 驱动与受管浏览器

pixelmatch

ISC

视觉像素比对

开发依赖(TypeScript、ESLint、Prettier、Vitest、Vite、tsx 等)各自遵循其开源许可,且不随 npm 发布产物分发。

与安全边界的关系

本 MCP 不保存、不读取、不转发任何 AI-Agent 的 API key 或登录态(详见 SECURITY.md)。许可条款不改变这一设计边界。

Available Tools

11 tools
approve_visual_baselineapprove_visual_baselineA
Destructive

仅在用户明确审阅并授权后批准视觉基准。必须核对候选摘要与批准说明;自动返修禁止调用。宿主必须实施实际审批控制。

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNo
candidateIdYes
approvalNoteYes
expectedDigestYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
modeNo
modelNo
roundNo
checksNo
resultNo
statusNo
taskIdNo
agentIdNo
logFileNo
messageNo
diffstatNo
errorTypeNo
finishedAtNo
abortSourceNo
projectPathNo
reportFilesNo
reportRoundNo
cancelReasonNo
changedFilesNo
keptInstanceNo
lastRunSignalNo
modelProviderNo
needsUserKindNo
agentEndReasonNo
permissionModeNo
zcodeSessionIdNo
pendingQuestionNo
progressSummaryNo
boundProjectPathNo
cancelRequestedAtNo
verificationSourceNo
latestVerificationVerdictNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description discloses essential behavioral safeguards: the agent must verify the candidate digest against the approval note, automatic rework calls are prohibited, and the host must implement real approval controls. These are non-obvious operational constraints that materially affect correct use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short, purposeful sentences with no filler. The most critical constraint—explicit human approval—is front-loaded, followed by verification requirements and the host-level enforcement note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and annotations, the description covers the main behavioral and safety requirements needed to invoke the tool correctly. It is slightly thin on what the approval actually changes in the system's state, but this is largely inferable and covered by schema structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning by tying the expectedDigest to the approvalNote and requiring verification between them, but it leaves candidateId and optional taskId semantically unexplained and relies on schema names and formats for the rest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('approve') and resource ('visual baseline') and adds an unmistakable precondition: approval is only valid after explicit human review and authorization. This clearly differentiates it from sibling tools like prepare_visual_baseline, verify_task, and rework_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when the tool may be invoked (after user review and authorization) and when it may not be invoked (automatic rework), and it requires the host to enforce actual approval control. It does not name a specific sibling alternative, but the prohibition provides strong routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_taskcancel_taskA
Destructive

取消运行中任务:CLI agent 终止进程树;GUI agent(codex 等)尽力点击界面停止按钮并等待 GUI 空闲(有界超时),未确认停止时结果中明示。排队中任务直接移除;终态任务无动作。

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNo
taskIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
modeNo
modelNo
roundNo
checksNo
resultNo
statusNo
taskIdNo
agentIdNo
logFileNo
messageNo
diffstatNo
errorTypeNo
finishedAtNo
abortSourceNo
projectPathNo
reportFilesNo
reportRoundNo
cancelReasonNo
changedFilesNo
keptInstanceNo
lastRunSignalNo
modelProviderNo
needsUserKindNo
agentEndReasonNo
permissionModeNo
zcodeSessionIdNo
pendingQuestionNo
progressSummaryNo
boundProjectPathNo
cancelRequestedAtNo
verificationSourceNo
latestVerificationVerdictNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description details exact mechanisms (CLI process-tree termination, GUI button-click with bounded timeout, explicit indication if stop is unconfirmed) and state-dependent outcomes. This adds significant value beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-structured sentence front-loads the core action, then details state-dependent behavior. No wasted words; all sentences earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists (so return values are covered), the description adequately explains the tool's behavior for all task states. It could mention the reason parameter's purpose, but that's minor given the simple tool and existing output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description must compensate for parameters. It never mentions taskId (obviously the target) or reason (optional). The description focuses on behavior but provides no direct guidance on parameter usage or semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool cancels running tasks, and differentiates behavior for CLI vs GUI agents, plus queued and terminal states. It uses a specific verb ('取消'/cancel) and resource ('任务'/task), making it distinct from siblings like continue_task or run_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains behavior across task states (running, queued, terminal), implying when to use it (for running/queued) and when it does nothing (terminal). It doesn't explicitly name alternatives, but the purpose is unambiguous and no misleading guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

continue_taskcontinue_taskA

恢复处于 needs_user 的任务。zcode:agent_question 时 message 发往原会话,关闭旧实例/登录/系统权限场景中 message 仅作已处理确认。codex:user_confirmation 时重新接入观察 GUI 内运行(不发送消息);login_required 时复检环境后重发任务书。

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYes
messageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
modeNo
modelNo
roundNo
checksNo
resultNo
statusNo
taskIdNo
agentIdNo
logFileNo
messageNo
diffstatNo
errorTypeNo
finishedAtNo
abortSourceNo
projectPathNo
reportFilesNo
reportRoundNo
cancelReasonNo
changedFilesNo
keptInstanceNo
lastRunSignalNo
modelProviderNo
needsUserKindNo
agentEndReasonNo
permissionModeNo
zcodeSessionIdNo
pendingQuestionNo
progressSummaryNo
boundProjectPathNo
cancelRequestedAtNo
verificationSourceNo
latestVerificationVerdictNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the sparse annotations, explaining exactly what happens to the message parameter in different scenarios, including cases where no message is sent at all. It also discloses side effects like reconnecting to observe GUI and rechecking the environment, which is valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loads the core purpose, then branches by runtime mode with semicolon-separated cases. Every clause adds behavioral information, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description covers the major user-facing states and runtime modes with specific message behavior for each. The output schema exists, so return-value documentation is not required here. The main workflow conditions needed to invoke the tool correctly are all present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does clarify the nuanced behavior of the message parameter across zcode and codex states, which is the critical semantic ambiguity. taskId is less explicitly described, but its meaning is reasonably inferable from the tool's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: resumes tasks in the needs_user state. It further distinguishes behavior across zcode and codex modes and specific sub-states, making it clearly distinct from siblings like run_task or cancel_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly scopes usage to tasks in needs_user state and provides situational branches for when each behavior applies. It does not explicitly name alternatives or exclusions, but the context is specific enough that an agent can infer when to call this tool versus run_task.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profilesget_profilesA
Read-only

查看当前 agent 适配与可执行探测结果(含未安装/调研占位提示)。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
modeNo
modelNo
roundNo
checksNo
resultNo
statusNo
taskIdNo
agentIdNo
logFileNo
messageNo
diffstatNo
errorTypeNo
finishedAtNo
abortSourceNo
projectPathNo
reportFilesNo
reportRoundNo
cancelReasonNo
changedFilesNo
keptInstanceNo
lastRunSignalNo
modelProviderNo
needsUserKindNo
agentEndReasonNo
permissionModeNo
zcodeSessionIdNo
pendingQuestionNo
progressSummaryNo
boundProjectPathNo
cancelRequestedAtNo
verificationSourceNo
latestVerificationVerdictNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, setting the safety profile. The description adds value by revealing that results may include placeholder prompts for uninstalled/research items, giving the agent insight into the content of the output. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, tightly worded sentence that front-loads the purpose and immediately communicates the scope. No filler or unnecessary detail. Every word contributes to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (no parameters, read-only, output schema exists), the description is fully sufficient. It clearly states what the tool does and what kind of results to expect. No additional details are needed for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty schema. Per the baseline rule for 0 parameters, the score is 4. The description adds no parameter information, which is appropriate since no parameters exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('查看/view') and resource ('当前 agent 适配与可执行探测结果' - current agent adaptation and executable probing results), and also notes placeholder hints. It distinguishes itself from siblings, which are all task-related (run_task, query_task, etc.), by focusing on profiling results rather than task execution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: if you want to view agent adaptation and probing results, call this tool. However, it provides no explicit when/when-not guidance or mention of alternative tools. Since siblings are fundamentally different, no exclusion is needed, but the lack of explicit context leaves this at an implied level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_task_reportget_task_reportA
Read-only

取某轮验收报告全文(report.md)。round 缺省取最新一轮。

ParametersJSON Schema
NameRequiredDescriptionDefault
roundNo
taskIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
modeNo
modelNo
roundNo
checksNo
resultNo
statusNo
taskIdNo
agentIdNo
logFileNo
messageNo
diffstatNo
errorTypeNo
finishedAtNo
abortSourceNo
projectPathNo
reportFilesNo
reportRoundNo
cancelReasonNo
changedFilesNo
keptInstanceNo
lastRunSignalNo
modelProviderNo
needsUserKindNo
agentEndReasonNo
permissionModeNo
zcodeSessionIdNo
pendingQuestionNo
progressSummaryNo
boundProjectPathNo
cancelRequestedAtNo
verificationSourceNo
latestVerificationVerdictNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only profile is covered by structured data. The description adds useful context beyond that: the report is fetched from report.md and round defaults to the latest. It does not describe pagination, error behavior, or report length, but for a simple read tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, dense sentence that front-loads the core action (fetch full report) and then the parameter default. Zero wasted words, and the most important behavioral nuance (round default) is placed second, right after the verb.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with an output schema and readOnlyHint annotations, the description covers the essentials: what is fetched, which file, and the round default. No missing critical information prevents correct invocation; taskId's role is inferable from context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It does clarify that round is optional and defaults to the latest round, and that the result is the full text of report.md. However, taskId's semantics are only implied by the tool name and are not explicitly described, so compensation is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb (取/get), a specific resource (验收报告全文/report.md), and the round-scoping behavior. This clearly distinguishes it from sibling tools like query_task or list_tasks, which are about task state rather than report file content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage rule: round defaults to the latest round when omitted. However, it does not explicitly state when to use this tool instead of siblings such as query_task or verify_task, nor does it mention any exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_taskslist_tasksA
Read-only

列出历史任务(可按项目路径 / 状态过滤,limit 默认 50)。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statusNo
projectPathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
modeNo
modelNo
roundNo
checksNo
resultNo
statusNo
taskIdNo
agentIdNo
logFileNo
messageNo
diffstatNo
errorTypeNo
finishedAtNo
abortSourceNo
projectPathNo
reportFilesNo
reportRoundNo
cancelReasonNo
changedFilesNo
keptInstanceNo
lastRunSignalNo
modelProviderNo
needsUserKindNo
agentEndReasonNo
permissionModeNo
zcodeSessionIdNo
pendingQuestionNo
progressSummaryNo
boundProjectPathNo
cancelRequestedAtNo
verificationSourceNo
latestVerificationVerdictNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context about the 'historical' scope and the default limit of 50, but does not describe return format or pagination behavior. This is comparable to the calibration example where a filtered-list tool with read-only annotations earned a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence delivers the verb, resource, scope, filter options, and default limit. Every element earns its place and the key action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with three optional parameters and an output schema, the description covers all functional essentials: what the tool lists, how to filter, and the default limit. Annotations cover safety and the output schema covers return values, so nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It does name projectPath and status as filter dimensions and adds the default limit of 50, which the schema does not specify. However, it does not clarify valid status values, projectPath format, or the limit maximum, so the compensation is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: '列出历史任务' (list historical tasks). It also mentions the key filtering dimensions, making the core purpose unambiguous. It does not explicitly differentiate from sibling tools such as query_task, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (to list historical tasks with optional filters) but provides no explicit guidance on when not to use it or which sibling tool might be a better alternative. The usage context is clear but there are no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_visual_baselineprepare_visual_baselineC

准备视觉基准候选,返回摘要与预览;不采用正式基准。需要用户授权。

ParametersJSON Schema
NameRequiredDescriptionDefault
caseIdsNo
importsNo
projectPathYes
viewportIdsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
modeNo
modelNo
roundNo
checksNo
resultNo
statusNo
taskIdNo
agentIdNo
logFileNo
messageNo
diffstatNo
errorTypeNo
finishedAtNo
abortSourceNo
projectPathNo
reportFilesNo
reportRoundNo
cancelReasonNo
changedFilesNo
keptInstanceNo
lastRunSignalNo
modelProviderNo
needsUserKindNo
agentEndReasonNo
permissionModeNo
zcodeSessionIdNo
pendingQuestionNo
progressSummaryNo
boundProjectPathNo
cancelRequestedAtNo
verificationSourceNo
latestVerificationVerdictNo

TDQS

C2.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations readOnlyHint=false and destructiveHint=false, the safety profile is partially conveyed Equipment. The description adds useful behavioral context: it requires user authorization, returns a summary and preview, and does not commit to a formal baseline. This exceeds what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The primary action and the most important outcome (summary/preview) are front-loaded. It relies on the reader already knowing the tool's context, but the length is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema presumably covers the return structure, but the input schema has no descriptions and the description doesn't explain the parameters. No usage scenarios, exclusions, or ordering with sibling tools are provided. For a 4-parameter tool with meaningful semantics, this is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description mentions no parameter names or roles. projectPath, caseIds, imports, and viewportIds are completely undocumented in both schema and description, so an agent has no guidance on what values to provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('prepare') and a specific resource ('visual baseline candidate'), and clarifies it returns a summary and preview. The phrase 'does not adopt a formal baseline' distinguishes it from formal approval tools like approve_visual_baseline without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is given. The statement that it does not adopt a formal baseline implies it is a preparatory step before approval, but the description never says to use it before approve_visual_baseline or before other editing tools. Sibling differentiation is left entirely to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_taskquery_taskA
Read-only

查询任务状态 / 进度 / 最近日志尾部(默认 agent.log 末 40 行)。返回任务 meta 与日志片段。

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYes
tailLinesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
modeNo
modelNo
roundNo
checksNo
resultNo
statusNo
taskIdNo
agentIdNo
logFileNo
messageNo
diffstatNo
errorTypeNo
finishedAtNo
abortSourceNo
projectPathNo
reportFilesNo
reportRoundNo
cancelReasonNo
changedFilesNo
keptInstanceNo
lastRunSignalNo
modelProviderNo
needsUserKindNo
agentEndReasonNo
permissionModeNo
zcodeSessionIdNo
pendingQuestionNo
progressSummaryNo
boundProjectPathNo
cancelRequestedAtNo
verificationSourceNo
latestVerificationVerdictNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile, and the description is consistent with those (a query operation). It adds value beyond annotations by specifying the default log tail behavior (last 40 lines) and the two-part return shape (meta + log snippet). No contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence conveys purpose, default behavior, and return content with zero filler. Every clause earns its place, and the most important information (status/progress/log tail) appears first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The presence of an output schema covers the return values, so the description needn't detail them. For a moderate 2-parameter read tool, it covers purpose, default behavior, and return content adequately. The only gap is the lack of explicit guidance on when to choose this over get_task_report/verify_task, which is minor given the clarity of the read-only purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description bears the compensation burden. It explains tailLines behavior implicitly via the 'default last 40 lines' note, which clarifies the default when tailLines is omitted. taskId is not described but is self-evident from its name. The description partially compensates for the coverage gap but doesn't fully document parameter syntax or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('查询'/query), the resource (task), and the precise scope: status, progress, and recent log tail with a stated default of the last 40 lines of agent.log. It also names the return content (task meta and log snippet), which distinguishes it from siblings like run_task (execution), cancel_task (cancellation), and list_tasks (listing). It doesn't explicitly name a sibling alternative, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied — an agent would infer this tool is for checking task state/progress/logs — but there is no explicit when-to-use vs. when-not guidance and no named alternatives or exclusions. The description leaves sibling differentiation (e.g., vs. get_task_report or verify_task) to the agent's inference rather than stating it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rework_taskrework_taskB
Destructive

手动返修:把终态任务(failed/needs_attention)重新入队续跑,同一 agent/项目与轮次记账。feedback 为追加指示(建议带上一次验收失败摘要)。

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYes
feedbackNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
modeNo
modelNo
roundNo
checksNo
resultNo
statusNo
taskIdNo
agentIdNo
logFileNo
messageNo
diffstatNo
errorTypeNo
finishedAtNo
abortSourceNo
projectPathNo
reportFilesNo
reportRoundNo
cancelReasonNo
changedFilesNo
keptInstanceNo
lastRunSignalNo
modelProviderNo
needsUserKindNo
agentEndReasonNo
permissionModeNo
zcodeSessionIdNo
pendingQuestionNo
progressSummaryNo
boundProjectPathNo
cancelRequestedAtNo
verificationSourceNo
latestVerificationVerdictNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

注释已提供 destructiveHint=true 和 readOnlyHint=false,描述未与之矛盾。描述补充了'同一 agent/项目与轮次记账'以及 feedback 的追加指示语义,这些是注释之外的有用信息。但未说明具体副作用(如是否会覆盖原有结果),对破坏性工具而言透明度中等。

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

描述为单句,信息密度高,无冗余内容。虽然未使用分段或强调结构,但精炼且关键信息(状态限制、行为、反馈用途)均在前半句呈现,符合高效表达。

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

工具简单(2个参数),且有输出 schema(未提供内容)。描述覆盖了核心操作和反馈语义,但未提及返回内容、可能的错误条件或前置条件(如是否需要先验收)。由于存在破坏性注释,缺少关于执行后影响的说明,完整性略逊。

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema 描述覆盖率为 0%,描述需承担全部参数解释责任。描述明确解释了 feedback 作为'追加指示'并建议携带验收失败摘要,这对该参数提供了有用语义;但 taskId 仅从'终态任务'中隐含,未直接说明其标识作用,且未给出任何格式或示例。补偿不充分。

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

描述以明确的动词'返修'指出了操作,并限定了资源(终态任务 failed/needs_attention)和行为(重新入队续跑),能够与兄弟工具如 run_task(启动新任务)和 continue_task(可能继续非终态任务)大致区分。但未显式提及与这些工具的差异,因此扣一分。

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

描述隐含了使用条件(当任务处于 failed 或 needs_attention 终态时),但未明确说明何时不应使用此工具,也未提及替代方案(如 verify_task 或 cancel_task)。使用情境可从状态限制推断,但缺少显式的 when-not 指导。

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_taskrun_taskA

派活:启动外部 AI-Agent 开发任务并可自动验收返修,异步返回 taskId。ZCode 要求 model=供应商/模型,不支持 mode;TraeWork 的 model 可选并支持 Work/Code/Design mode。task/context 内的 ZCode 项目路径引用会在发送前校验。

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
taskYes
modelNo
agentIdNo
contextNo
planDocNo
autoVerifyNo
projectPathNo
designSystemNo
autoFixRoundsNo
taskTimeoutMsNo
reasoningLevelNo
allowCreateProjectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
modeNo
modelNo
roundNo
checksNo
resultNo
statusNo
taskIdNo
agentIdNo
logFileNo
messageNo
diffstatNo
errorTypeNo
finishedAtNo
abortSourceNo
projectPathNo
reportFilesNo
reportRoundNo
cancelReasonNo
changedFilesNo
keptInstanceNo
lastRunSignalNo
modelProviderNo
needsUserKindNo
agentEndReasonNo
permissionModeNo
zcodeSessionIdNo
pendingQuestionNo
progressSummaryNo
boundProjectPathNo
cancelRequestedAtNo
verificationSourceNo
latestVerificationVerdictNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=false and openWorldHint=true already signaling a mutating external operation, the description adds valuable behavior: asynchronous execution returning taskId, automatic verify/rework capability, and pre-send validation of ZCode path references in task/context. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core function and async result appear first, followed by platform-specific parameter rules and a validation note. Every sentence adds information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 13 parameters and 0% schema-level explanations, this description is not complete enough. The output schema helps with return values, but the agent still lacks semantic guidance on most parameters required to configure a task correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are 13 parameters, but the description only clarifies model, mode, and path-reference validation in task/context. It does not explain agentId, planDoc, autoVerify, autoFixRounds, taskTimeoutMs, reasoningLevel, designSystem, projectPath, or allowCreateProject, leaving the agent to guess for the majority of inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete action ('启动外部 AI-Agent 开发任务') and a distinctive outcome ('异步返回 taskId'), going well beyond the bare title. This clearly separates a launch/dispatch operation from sibling tools like continue_task, query_task, or rework_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the core phrasing '派活' and '启动外部 AI-Agent 开发任务', but the description does not explicitly state when to choose run_task over a sibling such as continue_task or rework_task. The platform-specific model/mode rules are useful configuration guidance but are not tool-selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_taskverify_taskA
Read-only

对已完成任务或项目路径执行一次验收(不改源码):自动命令检查 + 代码分析(相对 git 基线)。可用 extraChecks 临时加验。需任务/项目二选一。

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNo
checksModeNo
baselineRefNo
extraChecksNo
projectPathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
modeNo
modelNo
roundNo
checksNo
resultNo
statusNo
taskIdNo
agentIdNo
logFileNo
messageNo
diffstatNo
errorTypeNo
finishedAtNo
abortSourceNo
projectPathNo
reportFilesNo
reportRoundNo
cancelReasonNo
changedFilesNo
keptInstanceNo
lastRunSignalNo
modelProviderNo
needsUserKindNo
agentEndReasonNo
permissionModeNo
zcodeSessionIdNo
pendingQuestionNo
progressSummaryNo
boundProjectPathNo
cancelRequestedAtNo
verificationSourceNo
latestVerificationVerdictNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavior beyond that: it explicitly says source code is not modified, checks are run against a git baseline, and extraChecks are temporary. No contradiction with annotations is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: purpose first, non-mutation note second, method and custom-check capability after. Every clause adds information, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Together with the output schema and readOnly/destructive annotations, the description is mostly sufficient for an agent to invoke the tool correctly: it knows the target, the non-mutating scope, the git-baseline context, and the task/project selection rule. The missing checksMode explanation and lack of explicit sibling routing keep it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It usefully explains that taskId/projectPath are a one-of requirement, that extraChecks are temporary additions, and that analysis is relative to a git baseline. The main gap is checksMode, whose append/replace semantics are left unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('executes acceptance/verification'), a specific target ('completed task or project path'), and a concrete method ('automatic command checks + code analysis relative to git baseline'). This clearly distinguishes verify_task from siblings like run_task, continue_task, or query_task, even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear use context: verify completed tasks or project paths, and requires exactly one of task/project. It does not explicitly name alternative tools or state when not to use it, but the '已完成' constraint and the verification framing are enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv1.0.0
    • Changedapprove_visual_baseline1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "abortSource": {
        +      "type": "string"
        +    },
        +    "agentEndReason": {
        +      "type": "string"
        +    },
        +    "agentId": {
        +      "type": "string"
        +    },
        +    "boundProjectPath": {
        +      "type": "string"
        +    },
        +    "cancelReason": {
        +      "type": "string"
        +    },
        +    "cancelRequestedAt": {
        +      "type": "string"
        +    },
        +    "changedFiles": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "checks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "durationMs": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "passed": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "passed",
        +          "durationMs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diffstat": {
        +      "type": "string"
        +    },
        +    "errorType": {
        +      "type": "string"
        +    },
        +    "finishedAt": {
        +      "type": "string"
        +    },
        +    "keptInstance": {
        +      "type": "boolean"
        +    },
        +    "lastRunSignal": {
        +      "type": "string"
        +    },
        +    "latestVerificationVerdict": {
        +      "type": "string"
        +    },
        +    "logFile": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelProvider": {
        +      "type": "string"
        +    },
        +    "needsUserKind": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pendingQuestion": {
        +      "type": "string"
        +    },
        +    "permissionMode": {
        +      "type": "string"
        +    },
        +    "progressSummary": {
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "type": "string"
        +    },
        +    "reportFiles": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json": {
        +          "type": "string"
        +        },
        +        "md": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "reportRound": {
        +      "type": "number"
        +    },
        +    "result": {},
        +    "round": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "taskId": {
        +      "type": "string"
        +    },
        +    "verificationSource": {
        +      "type": "string"
        +    },
        +    "zcodeSessionId": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcancel_task1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "abortSource": {
        +      "type": "string"
        +    },
        +    "agentEndReason": {
        +      "type": "string"
        +    },
        +    "agentId": {
        +      "type": "string"
        +    },
        +    "boundProjectPath": {
        +      "type": "string"
        +    },
        +    "cancelReason": {
        +      "type": "string"
        +    },
        +    "cancelRequestedAt": {
        +      "type": "string"
        +    },
        +    "changedFiles": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "checks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "durationMs": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "passed": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "passed",
        +          "durationMs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diffstat": {
        +      "type": "string"
        +    },
        +    "errorType": {
        +      "type": "string"
        +    },
        +    "finishedAt": {
        +      "type": "string"
        +    },
        +    "keptInstance": {
        +      "type": "boolean"
        +    },
        +    "lastRunSignal": {
        +      "type": "string"
        +    },
        +    "latestVerificationVerdict": {
        +      "type": "string"
        +    },
        +    "logFile": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelProvider": {
        +      "type": "string"
        +    },
        +    "needsUserKind": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pendingQuestion": {
        +      "type": "string"
        +    },
        +    "permissionMode": {
        +      "type": "string"
        +    },
        +    "progressSummary": {
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "type": "string"
        +    },
        +    "reportFiles": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json": {
        +          "type": "string"
        +        },
        +        "md": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "reportRound": {
        +      "type": "number"
        +    },
        +    "result": {},
        +    "round": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "taskId": {
        +      "type": "string"
        +    },
        +    "verificationSource": {
        +      "type": "string"
        +    },
        +    "zcodeSessionId": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcontinue_task1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "abortSource": {
        +      "type": "string"
        +    },
        +    "agentEndReason": {
        +      "type": "string"
        +    },
        +    "agentId": {
        +      "type": "string"
        +    },
        +    "boundProjectPath": {
        +      "type": "string"
        +    },
        +    "cancelReason": {
        +      "type": "string"
        +    },
        +    "cancelRequestedAt": {
        +      "type": "string"
        +    },
        +    "changedFiles": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "checks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "durationMs": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "passed": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "passed",
        +          "durationMs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diffstat": {
        +      "type": "string"
        +    },
        +    "errorType": {
        +      "type": "string"
        +    },
        +    "finishedAt": {
        +      "type": "string"
        +    },
        +    "keptInstance": {
        +      "type": "boolean"
        +    },
        +    "lastRunSignal": {
        +      "type": "string"
        +    },
        +    "latestVerificationVerdict": {
        +      "type": "string"
        +    },
        +    "logFile": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelProvider": {
        +      "type": "string"
        +    },
        +    "needsUserKind": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pendingQuestion": {
        +      "type": "string"
        +    },
        +    "permissionMode": {
        +      "type": "string"
        +    },
        +    "progressSummary": {
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "type": "string"
        +    },
        +    "reportFiles": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json": {
        +          "type": "string"
        +        },
        +        "md": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "reportRound": {
        +      "type": "number"
        +    },
        +    "result": {},
        +    "round": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "taskId": {
        +      "type": "string"
        +    },
        +    "verificationSource": {
        +      "type": "string"
        +    },
        +    "zcodeSessionId": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_profiles1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "abortSource": {
        +      "type": "string"
        +    },
        +    "agentEndReason": {
        +      "type": "string"
        +    },
        +    "agentId": {
        +      "type": "string"
        +    },
        +    "boundProjectPath": {
        +      "type": "string"
        +    },
        +    "cancelReason": {
        +      "type": "string"
        +    },
        +    "cancelRequestedAt": {
        +      "type": "string"
        +    },
        +    "changedFiles": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "checks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "durationMs": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "passed": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "passed",
        +          "durationMs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diffstat": {
        +      "type": "string"
        +    },
        +    "errorType": {
        +      "type": "string"
        +    },
        +    "finishedAt": {
        +      "type": "string"
        +    },
        +    "keptInstance": {
        +      "type": "boolean"
        +    },
        +    "lastRunSignal": {
        +      "type": "string"
        +    },
        +    "latestVerificationVerdict": {
        +      "type": "string"
        +    },
        +    "logFile": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelProvider": {
        +      "type": "string"
        +    },
        +    "needsUserKind": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pendingQuestion": {
        +      "type": "string"
        +    },
        +    "permissionMode": {
        +      "type": "string"
        +    },
        +    "progressSummary": {
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "type": "string"
        +    },
        +    "reportFiles": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json": {
        +          "type": "string"
        +        },
        +        "md": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "reportRound": {
        +      "type": "number"
        +    },
        +    "result": {},
        +    "round": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "taskId": {
        +      "type": "string"
        +    },
        +    "verificationSource": {
        +      "type": "string"
        +    },
        +    "zcodeSessionId": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_task_report1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "abortSource": {
        +      "type": "string"
        +    },
        +    "agentEndReason": {
        +      "type": "string"
        +    },
        +    "agentId": {
        +      "type": "string"
        +    },
        +    "boundProjectPath": {
        +      "type": "string"
        +    },
        +    "cancelReason": {
        +      "type": "string"
        +    },
        +    "cancelRequestedAt": {
        +      "type": "string"
        +    },
        +    "changedFiles": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "checks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "durationMs": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "passed": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "passed",
        +          "durationMs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diffstat": {
        +      "type": "string"
        +    },
        +    "errorType": {
        +      "type": "string"
        +    },
        +    "finishedAt": {
        +      "type": "string"
        +    },
        +    "keptInstance": {
        +      "type": "boolean"
        +    },
        +    "lastRunSignal": {
        +      "type": "string"
        +    },
        +    "latestVerificationVerdict": {
        +      "type": "string"
        +    },
        +    "logFile": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelProvider": {
        +      "type": "string"
        +    },
        +    "needsUserKind": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pendingQuestion": {
        +      "type": "string"
        +    },
        +    "permissionMode": {
        +      "type": "string"
        +    },
        +    "progressSummary": {
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "type": "string"
        +    },
        +    "reportFiles": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json": {
        +          "type": "string"
        +        },
        +        "md": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "reportRound": {
        +      "type": "number"
        +    },
        +    "result": {},
        +    "round": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "taskId": {
        +      "type": "string"
        +    },
        +    "verificationSource": {
        +      "type": "string"
        +    },
        +    "zcodeSessionId": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedlist_tasks1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "abortSource": {
        +      "type": "string"
        +    },
        +    "agentEndReason": {
        +      "type": "string"
        +    },
        +    "agentId": {
        +      "type": "string"
        +    },
        +    "boundProjectPath": {
        +      "type": "string"
        +    },
        +    "cancelReason": {
        +      "type": "string"
        +    },
        +    "cancelRequestedAt": {
        +      "type": "string"
        +    },
        +    "changedFiles": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "checks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "durationMs": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "passed": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "passed",
        +          "durationMs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diffstat": {
        +      "type": "string"
        +    },
        +    "errorType": {
        +      "type": "string"
        +    },
        +    "finishedAt": {
        +      "type": "string"
        +    },
        +    "keptInstance": {
        +      "type": "boolean"
        +    },
        +    "lastRunSignal": {
        +      "type": "string"
        +    },
        +    "latestVerificationVerdict": {
        +      "type": "string"
        +    },
        +    "logFile": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelProvider": {
        +      "type": "string"
        +    },
        +    "needsUserKind": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pendingQuestion": {
        +      "type": "string"
        +    },
        +    "permissionMode": {
        +      "type": "string"
        +    },
        +    "progressSummary": {
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "type": "string"
        +    },
        +    "reportFiles": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json": {
        +          "type": "string"
        +        },
        +        "md": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "reportRound": {
        +      "type": "number"
        +    },
        +    "result": {},
        +    "round": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "taskId": {
        +      "type": "string"
        +    },
        +    "verificationSource": {
        +      "type": "string"
        +    },
        +    "zcodeSessionId": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedprepare_visual_baseline1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "abortSource": {
        +      "type": "string"
        +    },
        +    "agentEndReason": {
        +      "type": "string"
        +    },
        +    "agentId": {
        +      "type": "string"
        +    },
        +    "boundProjectPath": {
        +      "type": "string"
        +    },
        +    "cancelReason": {
        +      "type": "string"
        +    },
        +    "cancelRequestedAt": {
        +      "type": "string"
        +    },
        +    "changedFiles": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "checks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "durationMs": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "passed": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "passed",
        +          "durationMs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diffstat": {
        +      "type": "string"
        +    },
        +    "errorType": {
        +      "type": "string"
        +    },
        +    "finishedAt": {
        +      "type": "string"
        +    },
        +    "keptInstance": {
        +      "type": "boolean"
        +    },
        +    "lastRunSignal": {
        +      "type": "string"
        +    },
        +    "latestVerificationVerdict": {
        +      "type": "string"
        +    },
        +    "logFile": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelProvider": {
        +      "type": "string"
        +    },
        +    "needsUserKind": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pendingQuestion": {
        +      "type": "string"
        +    },
        +    "permissionMode": {
        +      "type": "string"
        +    },
        +    "progressSummary": {
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "type": "string"
        +    },
        +    "reportFiles": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json": {
        +          "type": "string"
        +        },
        +        "md": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "reportRound": {
        +      "type": "number"
        +    },
        +    "result": {},
        +    "round": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "taskId": {
        +      "type": "string"
        +    },
        +    "verificationSource": {
        +      "type": "string"
        +    },
        +    "zcodeSessionId": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedquery_task1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "abortSource": {
        +      "type": "string"
        +    },
        +    "agentEndReason": {
        +      "type": "string"
        +    },
        +    "agentId": {
        +      "type": "string"
        +    },
        +    "boundProjectPath": {
        +      "type": "string"
        +    },
        +    "cancelReason": {
        +      "type": "string"
        +    },
        +    "cancelRequestedAt": {
        +      "type": "string"
        +    },
        +    "changedFiles": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "checks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "durationMs": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "passed": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "passed",
        +          "durationMs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diffstat": {
        +      "type": "string"
        +    },
        +    "errorType": {
        +      "type": "string"
        +    },
        +    "finishedAt": {
        +      "type": "string"
        +    },
        +    "keptInstance": {
        +      "type": "boolean"
        +    },
        +    "lastRunSignal": {
        +      "type": "string"
        +    },
        +    "latestVerificationVerdict": {
        +      "type": "string"
        +    },
        +    "logFile": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelProvider": {
        +      "type": "string"
        +    },
        +    "needsUserKind": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pendingQuestion": {
        +      "type": "string"
        +    },
        +    "permissionMode": {
        +      "type": "string"
        +    },
        +    "progressSummary": {
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "type": "string"
        +    },
        +    "reportFiles": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json": {
        +          "type": "string"
        +        },
        +        "md": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "reportRound": {
        +      "type": "number"
        +    },
        +    "result": {},
        +    "round": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "taskId": {
        +      "type": "string"
        +    },
        +    "verificationSource": {
        +      "type": "string"
        +    },
        +    "zcodeSessionId": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedrework_task1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "abortSource": {
        +      "type": "string"
        +    },
        +    "agentEndReason": {
        +      "type": "string"
        +    },
        +    "agentId": {
        +      "type": "string"
        +    },
        +    "boundProjectPath": {
        +      "type": "string"
        +    },
        +    "cancelReason": {
        +      "type": "string"
        +    },
        +    "cancelRequestedAt": {
        +      "type": "string"
        +    },
        +    "changedFiles": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "checks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "durationMs": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "passed": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "passed",
        +          "durationMs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diffstat": {
        +      "type": "string"
        +    },
        +    "errorType": {
        +      "type": "string"
        +    },
        +    "finishedAt": {
        +      "type": "string"
        +    },
        +    "keptInstance": {
        +      "type": "boolean"
        +    },
        +    "lastRunSignal": {
        +      "type": "string"
        +    },
        +    "latestVerificationVerdict": {
        +      "type": "string"
        +    },
        +    "logFile": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelProvider": {
        +      "type": "string"
        +    },
        +    "needsUserKind": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pendingQuestion": {
        +      "type": "string"
        +    },
        +    "permissionMode": {
        +      "type": "string"
        +    },
        +    "progressSummary": {
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "type": "string"
        +    },
        +    "reportFiles": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json": {
        +          "type": "string"
        +        },
        +        "md": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "reportRound": {
        +      "type": "number"
        +    },
        +    "result": {},
        +    "round": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "taskId": {
        +      "type": "string"
        +    },
        +    "verificationSource": {
        +      "type": "string"
        +    },
        +    "zcodeSessionId": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedrun_task1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "abortSource": {
        +      "type": "string"
        +    },
        +    "agentEndReason": {
        +      "type": "string"
        +    },
        +    "agentId": {
        +      "type": "string"
        +    },
        +    "boundProjectPath": {
        +      "type": "string"
        +    },
        +    "cancelReason": {
        +      "type": "string"
        +    },
        +    "cancelRequestedAt": {
        +      "type": "string"
        +    },
        +    "changedFiles": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "checks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "durationMs": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "passed": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "passed",
        +          "durationMs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diffstat": {
        +      "type": "string"
        +    },
        +    "errorType": {
        +      "type": "string"
        +    },
        +    "finishedAt": {
        +      "type": "string"
        +    },
        +    "keptInstance": {
        +      "type": "boolean"
        +    },
        +    "lastRunSignal": {
        +      "type": "string"
        +    },
        +    "latestVerificationVerdict": {
        +      "type": "string"
        +    },
        +    "logFile": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelProvider": {
        +      "type": "string"
        +    },
        +    "needsUserKind": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pendingQuestion": {
        +      "type": "string"
        +    },
        +    "permissionMode": {
        +      "type": "string"
        +    },
        +    "progressSummary": {
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "type": "string"
        +    },
        +    "reportFiles": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json": {
        +          "type": "string"
        +        },
        +        "md": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "reportRound": {
        +      "type": "number"
        +    },
        +    "result": {},
        +    "round": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "taskId": {
        +      "type": "string"
        +    },
        +    "verificationSource": {
        +      "type": "string"
        +    },
        +    "zcodeSessionId": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedverify_task1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "abortSource": {
        +      "type": "string"
        +    },
        +    "agentEndReason": {
        +      "type": "string"
        +    },
        +    "agentId": {
        +      "type": "string"
        +    },
        +    "boundProjectPath": {
        +      "type": "string"
        +    },
        +    "cancelReason": {
        +      "type": "string"
        +    },
        +    "cancelRequestedAt": {
        +      "type": "string"
        +    },
        +    "changedFiles": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "checks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "durationMs": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "passed": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "passed",
        +          "durationMs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "diffstat": {
        +      "type": "string"
        +    },
        +    "errorType": {
        +      "type": "string"
        +    },
        +    "finishedAt": {
        +      "type": "string"
        +    },
        +    "keptInstance": {
        +      "type": "boolean"
        +    },
        +    "lastRunSignal": {
        +      "type": "string"
        +    },
        +    "latestVerificationVerdict": {
        +      "type": "string"
        +    },
        +    "logFile": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelProvider": {
        +      "type": "string"
        +    },
        +    "needsUserKind": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "pendingQuestion": {
        +      "type": "string"
        +    },
        +    "permissionMode": {
        +      "type": "string"
        +    },
        +    "progressSummary": {
        +      "type": "string"
        +    },
        +    "projectPath": {
        +      "type": "string"
        +    },
        +    "reportFiles": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "json": {
        +          "type": "string"
        +        },
        +        "md": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "reportRound": {
        +      "type": "number"
        +    },
        +    "result": {},
        +    "round": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "taskId": {
        +      "type": "string"
        +    },
        +    "verificationSource": {
        +      "type": "string"
        +    },
        +    "zcodeSessionId": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
  2. 11 tool updatesv0.5.4
    • First observedapprove_visual_baseline
    • First observedcancel_task
    • First observedcontinue_task
    • First observedget_profiles
    • First observedget_task_report
    • First observedlist_tasks
    • First observedprepare_visual_baseline
    • First observedquery_task
    • First observedrework_task
    • First observedrun_task
    • First observedverify_task

TDQS

A4/5.0

Scored across 11 tools

Disambiguation5/5

Each tool maps to a clearly distinct action or resource: launching, resuming, reworking, canceling, verifying, retrieving, and baseline prep/approval are all separated. Retrieval tools are split by task status/history/report, so there is no meaningful overlap.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern such as run_task, cancel_task, list_tasks, and get_profiles. The minor get/list and singular/plural variations do not break the predictable naming convention.

Tool Count5/5

11 tools is well within the well-scoped range, and each tool covers a necessary part of the task orchestration and baseline workflow. The set feels complete without being bloated.

Completeness5/5

The tool surface covers the full task lifecycle: start, resume, rework, cancel, verify, query, list, and report, plus environment profiles and visual baseline approval. No obvious dead ends or critical missing operations are apparent.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers