Skip to content

Hermes Agent:修复 delegate_task 子 agent 401

贡献者 Vincent Lau · 2026-06-10 生产环境验证通过

症状

主 agent 工作正常,调用 delegate_task 派出子 agent 时失败:

Error code: 401 - {'error': {'message': 'invalid x-api-key'}, 'request_id': 'req_011C...'}

子 agent status: failedapi_calls: 1,主 agent 用同一把 key 却正常。

根因

子 agent 被路由到了 Anthropic 官方端点 api.anthropic.com 而非 kitcoding.com

Hermes 解析子 agent 凭证的优先级为:

  1. delegation.base_url 有值 → 直连该端点
  2. delegation.provider 有值 → 走 credential pool
  3. 两者都空 → 子 agent 完全继承父 agent

当设置了 delegation.provider = anthropic 时进入第 2 条,credential pool 记录的 base_url 因缺少 ANTHROPIC_BASE_URL 回落到 https://api.anthropic.com。子 agent 拿到正确的 key + 错误的官方端点 → 401。

如何区分官方端点 vs Kitcoding

Kitcoding 返回的 401 格式为 {"type":"new_api_error"}request_id=None;官方 Anthropic 返回 req_011C... 格式。日志中出现 req_011C... 即表示请求被路由到了官方。

修复

清空所有 delegation 配置,让子 agent 继承父 agent。

bash
hermes config set delegation.base_url ""
hermes config set delegation.provider ""
hermes config set delegation.api_mode ""
hermes config set delegation.api_key ""

改完后重启 gateway:

bash
/restart
# 或
hermes gateway run --replace

原理

清空 delegation 后进入优先级第 3 条——子 agent 自动继承父 agent 的 model.base_urlhttps://kitcoding.com)、model.provideranthropic)和 API key。主 agent 能正常工作,子 agent 就能正常工作。无需写死额外配置,也不存在切换后端时的遗留问题。

验证

派一个最小子 agent:

goal: 执行 echo delegation-ok 并原样回报 stdout

判定标准:

  • ✅ 子 agent status: completedapi_calls >= 1
  • ❌ 若仍看到 req_011C...,说明未重启生效

致谢

本文由社区用户 Vincent Lau 完成根因分析与生产环境验证,所有结论均附源码与日志依据。