Skip to content

Hermes 镜像版本固定

日期: 2026-05-16 目标:spawn-profile.sh 里的 HERMES_IMAGEnousresearch/hermes-agent:latest 固定到具体 tag,消除"同脚本不同时刻 spawn 出不同 Hermes 版本"的可重现性漏洞。 不在范围: GHCR 镜像化 Hermes、自动 bump、滚动重建脚本。这些留给后续 plan。


背景

  • scripts/admin/spawn-profile.sh:160 默认 HERMES_IMAGE="${HERMES_IMAGE:-nousresearch/hermes-agent:latest}"
  • Hermes 上游迭代快;:latest 在不同时刻拉到不同 digest
  • 后果:
    • 付费用户 A 周一买到 v0.7,用户 B 周三买到 v0.8,bug 报告对不上
    • 任意上游 push 可能改 CLI/env/skill 契约,连锁炸 Hermes container
    • 无回滚锚点(不知道 "上一个能跑的 tag" 是什么)

决策

只做 pin。

  • spawn-profile.sh 写死具体语义化版本 tag
  • Bump 走 PR:改 tag → review → merge → 后续 ECS 上手动跑 docker pull + spawn-profile.sh 重建(手动可控)
  • 旧 container 保留旧 image 直到主动重建(用户不会突然被换版本)

不做:

  • ❌ 自动 pull / cron refresh — 上游炸跟着炸
  • ❌ GHCR mirror — 等 GFW 拉 Docker Hub 真出问题再上
  • ❌ 滚动重建脚本 — 当前用户少,手动 docker rm + spawn-profile.sh 够用

步骤

1. 选定 pin tag

  • SSH 进 ECS,查当前活跃 container:
    bash
    docker inspect $(docker ps --filter "name=hermes-" -q) \
      --format '{{.Config.Image}} {{.Image}}'
  • 拿 image digest → 反查上游 tag(docker images --digests
  • 选最近 stable tag(避免 dev/rc

2. 改 scripts/admin/spawn-profile.sh:160

bash
HERMES_IMAGE="${HERMES_IMAGE:-nousresearch/hermes-agent:vX.Y.Z}"

环境变量 override 保留 — 调试时仍可临时切 tag。

3. ECS 操作(部署后)

bash
docker pull nousresearch/hermes-agent:vX.Y.Z

不动现有 container。下次 spawn 才生效。

4. 写 ops 笔记

docs/runbooks/hermes-version-bump.md(NEW):

  1. PR 改 spawn-profile.sh:160 HERMES_IMAGE tag
  2. Merge → SSH ECS → docker pull <new-tag>
  3. 对每个 active container:
    bash
    docker rm -f hermes-<profile>
    /home/twilight/twilight/source/scripts/admin/spawn-profile.sh \
      --profile <name> --tier <tier> ...
  4. 验证 dashboard 端口可达;监控日志 5 分钟
  5. 回滚:PR revert + 同样流程

验收

  • [ ] grep ':latest' scripts/admin/spawn-profile.sh 无 hermes 行
  • [ ] ECS docker images | grep hermes 显示 pin 的 tag
  • [ ] 新 spawn 的 container 拿到 pin 版本(docker inspect ... .Config.Image
  • [ ] Runbook merged

后续 plan(不在此次范围)

  • Hermes GHCR mirror(GFW 真断时启动)
  • Hermes 自动 bump GH Action(监听上游 release → 开 PR 改 tag)
  • 滚动重建脚本(用户量 >20 时上)

团队内部文档