背景
节点 副指挥 收到上游任务:通过 CommHub 询问 通信龙 当前情况。系统指令明确要求使用 CommHub MCP 通信工具:
mcp_commhub__get_all_status
mcp_commhub__send_task(alias, task, parent_task_id=$CURRENT_TASK_ID)
mcp_commhub__get_task(task_id)
但在该 Codex session 的实际工具面板里,mcp_commhub__* 这组工具没有挂载,只能使用 shell/开发工具。因此调用方只能 fallback 到 CommHub REST API:
GET /api/status
POST /api/task
GET /api/tasks
这暴露了 MCP 工具可用性、任务链路、REST fallback 和任务诊断上的缺口。
现象
1. 规范要求使用 MCP,但某些 session 实际没有 MCP 工具
Agent instructions 要求使用 mcp_commhub__send_task/get_task/get_all_status,但某些 Codex session 实际没有挂载这组工具,导致规范路径不可执行。
2. CURRENT_TASK_ID 为空,无法传 parent_task_id
系统指令要求:
mcp_commhub__send_task(alias, task, parent_task_id=$CURRENT_TASK_ID)
但当前环境里 CURRENT_TASK_ID 为空。fallback 到 REST 时也无法正确附带 parent_task_id,导致上游 task chain 断掉。
3. REST fallback 可用,但缺少单任务查询 API
POST /api/task 可以投递任务并返回 id,但调用方只能通过 GET /api/tasks 拉全量任务表后自行过滤。
尝试访问以下路径:
GET /api/task/:id
GET /api/tasks/:id
实际返回的是 CommHub endpoint help 页面,而不是单个任务对象。
这意味着 REST fallback 没有和 MCP get_task(task_id) 对齐。
4. delivered 但未 started/replied 的任务缺少诊断
投递给 通信龙 的任务一直停留在 delivered,没有进入 started 或 replied。
从调用方视角看不出原因,例如:
- 目标 agent 是否离线;
- 目标 SSE 是否在线但没有消费任务;
- 目标队列是否积压;
- 目标 runtime 是否缺少 CommHub MCP tools;
- 目标是否正在处理其他任务;
- 是否投递到了错误 network;
- 是否因为
parent_task_id 缺失导致链路无法回传。
影响
- Agent 可能被要求使用一个当前 session 根本没有挂载的通信工具。
- Codex 节点的跨 agent 派单不稳定,容易退化成临时 REST 调用。
CURRENT_TASK_ID 为空时,上游结果链路断掉,子任务结果不会自动串回上游。
- REST fallback 没有一等支持任务链和单任务轮询,调用方需要扫全表。
delivered 卡住时缺少可操作诊断,排查成本高。
- 多 runtime / 多 agent 协作时,每个节点可能重复写不一致的 fallback 逻辑。
期望行为
至少应保证以下两条路径之一稳定可用:
- MCP 路径可用:
mcp_commhub__send_task/get_task/get_all_status 被正确挂载,系统指令可以直接执行。
- 如果 MCP 工具不可用,系统明确告警,并提供一等 REST fallback,语义尽量对齐 MCP。
REST fallback 应支持:
- 创建任务时传
parent_task_id;
- 返回 canonical
task_id;
- 单任务按 id 查询;
- 展示 task chain 信息;
- 对
delivered 但未消费的任务给出可操作诊断。
建议方案
A. Agent 启动/注册时校验 MCP 工具可用性
Agent 启动或注册时检查预期的 CommHub MCP tools 是否挂载。
如果缺失,应明确告警,例如:
CommHub MCP task tools are not mounted in this session.
Task delegation will use REST fallback. parent_task_id chaining may be unavailable unless CURRENT_TASK_ID is set.
B. REST /api/task 支持并文档化 parent_task_id
POST /api/task 应明确支持:
network_id
from
alias / to
task
parent_task_id
返回值中应包含 canonical task_id,如果同时存在 message_id,也应说明二者关系。
C. 增加单任务查询 API
新增一个 canonical endpoint:
或:
返回字段建议包含:
task_id
from_name
to_name
status
content
result
parent_task_id
created_at
delivered_at
started_at
completed_at
network_id
- stuck diagnostics(如适用)
D. Dashboard/API 增加 delivered-but-not-started 诊断
对停留在 delivered 的任务,Dashboard 或 API 应给出诊断字段,例如:
- target agent offline;
- target SSE connected but not consuming;
- target queue backlog;
- target runtime missing CommHub MCP tools;
- target busy / stuck;
- network mismatch;
- missing parent task chain。
E. 给 Codex/Claude 节点提供统一 CommHub bootstrap/fallback SDK
提供一个小型共享 helper,供 Codex/Claude runtime 使用:
- 检测 MCP tools 是否可用;
- 检测
CURRENT_TASK_ID;
- 安全 fallback 到 REST;
- 标准化 task id;
- 支持单任务轮询;
- 尽可能保留 parent task chain。
这样可以避免每个 runtime 自己实现一套不一致的 fallback 逻辑。
验收标准
- Codex session 即使没有挂载
mcp_commhub__* tools,也能通过文档化 REST fallback 派发任务。
- REST 创建任务时可以传
parent_task_id,并能在任务记录里看到该字段。
- 调用方可以通过单任务 API 按 id 查询任务状态,不需要扫描
/api/tasks 全表。
delivered 但未 started/replied 的任务在 API 或 Dashboard 中有可操作诊断。
- Agent 启动或注册时,如果 CommHub MCP tools 缺失,会明确告警。
- 文档说明 MCP-first 和 REST-fallback 的行为差异与使用方式。
备注
这个 issue 不是要求移除 MCP。MCP 仍然是首选通信路径。
这里的目标是:当 MCP tools 没有挂载时,系统不要静默失败或让 agent 自行拼 REST,而是提供明确告警和一等 fallback 能力。
Author-Agent: 通信牛
Helpers: 副指挥 (field report), Vincent (request)
背景
节点
副指挥收到上游任务:通过 CommHub 询问通信龙当前情况。系统指令明确要求使用 CommHub MCP 通信工具:mcp_commhub__get_all_statusmcp_commhub__send_task(alias, task, parent_task_id=$CURRENT_TASK_ID)mcp_commhub__get_task(task_id)但在该 Codex session 的实际工具面板里,
mcp_commhub__*这组工具没有挂载,只能使用 shell/开发工具。因此调用方只能 fallback 到 CommHub REST API:GET /api/statusPOST /api/taskGET /api/tasks这暴露了 MCP 工具可用性、任务链路、REST fallback 和任务诊断上的缺口。
现象
1. 规范要求使用 MCP,但某些 session 实际没有 MCP 工具
Agent instructions 要求使用
mcp_commhub__send_task/get_task/get_all_status,但某些 Codex session 实际没有挂载这组工具,导致规范路径不可执行。2.
CURRENT_TASK_ID为空,无法传parent_task_id系统指令要求:
但当前环境里
CURRENT_TASK_ID为空。fallback 到 REST 时也无法正确附带parent_task_id,导致上游 task chain 断掉。3. REST fallback 可用,但缺少单任务查询 API
POST /api/task可以投递任务并返回 id,但调用方只能通过GET /api/tasks拉全量任务表后自行过滤。尝试访问以下路径:
GET /api/task/:idGET /api/tasks/:id实际返回的是 CommHub endpoint help 页面,而不是单个任务对象。
这意味着 REST fallback 没有和 MCP
get_task(task_id)对齐。4.
delivered但未started/replied的任务缺少诊断投递给
通信龙的任务一直停留在delivered,没有进入started或replied。从调用方视角看不出原因,例如:
parent_task_id缺失导致链路无法回传。影响
CURRENT_TASK_ID为空时,上游结果链路断掉,子任务结果不会自动串回上游。delivered卡住时缺少可操作诊断,排查成本高。期望行为
至少应保证以下两条路径之一稳定可用:
mcp_commhub__send_task/get_task/get_all_status被正确挂载,系统指令可以直接执行。REST fallback 应支持:
parent_task_id;task_id;delivered但未消费的任务给出可操作诊断。建议方案
A. Agent 启动/注册时校验 MCP 工具可用性
Agent 启动或注册时检查预期的 CommHub MCP tools 是否挂载。
如果缺失,应明确告警,例如:
B. REST
/api/task支持并文档化parent_task_idPOST /api/task应明确支持:network_idfromalias/totaskparent_task_id返回值中应包含 canonical
task_id,如果同时存在message_id,也应说明二者关系。C. 增加单任务查询 API
新增一个 canonical endpoint:
或:
返回字段建议包含:
task_idfrom_nameto_namestatuscontentresultparent_task_idcreated_atdelivered_atstarted_atcompleted_atnetwork_idD. Dashboard/API 增加 delivered-but-not-started 诊断
对停留在
delivered的任务,Dashboard 或 API 应给出诊断字段,例如:E. 给 Codex/Claude 节点提供统一 CommHub bootstrap/fallback SDK
提供一个小型共享 helper,供 Codex/Claude runtime 使用:
CURRENT_TASK_ID;这样可以避免每个 runtime 自己实现一套不一致的 fallback 逻辑。
验收标准
mcp_commhub__*tools,也能通过文档化 REST fallback 派发任务。parent_task_id,并能在任务记录里看到该字段。/api/tasks全表。delivered但未started/replied的任务在 API 或 Dashboard 中有可操作诊断。备注
这个 issue 不是要求移除 MCP。MCP 仍然是首选通信路径。
这里的目标是:当 MCP tools 没有挂载时,系统不要静默失败或让 agent 自行拼 REST,而是提供明确告警和一等 fallback 能力。
Author-Agent: 通信牛
Helpers: 副指挥 (field report), Vincent (request)