乐于分享
好东西不私藏

OpenClaw多Agent时执行clawhub update,为什么子Agent skills没更新?

OpenClaw多Agent时执行clawhub update,为什么子Agent skills没更新?

这是一个我最近踩到的坑。

场景很简单:我有多个 agent workspace,主 workspace 在 ~/.openclaw/workspace,还有几个子 agent 的 workspace 分散在不同目录。

我想更新某个子 agent 的 skills。于是 cd 到那个子 agent 的 workspace 目录,执行:

clawhubupdate--all

命令跑完了,没报错。但子 agent 目录下的 skills 完全没有变化。

我盯着终端看了半分钟,怀疑人生。

后来查了源码才搞清楚——cd 到子目录 ≠ 更新子目录的 skills

clawhub 怎么决定 workdir

clawhub 有一个 resolveWorkdir 函数,用来确定当前操作的工作目录。它的解析顺序是这样的:

1.--workdir参数有就用
2.CLAWHUB_WORKDIR环境变量有就用
3.当前目录有.clawhub/标记cwd
4.都没有读取openclaw.json回退到mainagentworkspace

看懂这个顺序,前面的问题就清楚了。

当我 cd 到子 agent 目录执行 clawhub update --all 时:

  • 我没传 --workdir 参数,第 1 步跳过
  • 我没设 CLAWHUB_WORKDIR 环境变量,第 2 步跳过
  • 子 agent 目录下没有 .clawhub/ 标记文件夹,可能是我让OpenClaw自己将skill迁移到子agent而不是用的本地命令行,第 3 步跳过
  • 触发第 4 步:读取 openclaw.json,回退到 main agent workspace → 最终更新的是 ~/.openclaw/workspace/skills

所以无论我 cd 到哪里,只要目标目录没有 .clawhub/ 标记,clawhub 都会回退到主 workspace。

这是最常见的坑。因为直觉上 cd 到目标目录就该更新该目录,但 clawhub 的解析逻辑不是这样。

我的解决方案

搞清楚原理后,解决方案其实很直接。有三个步骤来很好的解决这类问题。

方式一:创建 .clawhub/ 标记(推荐)

这是最重要的一步。在你想要管理的子 agent workspace 根目录下创建一个 .clawhub/ 文件夹(如果没有的话,内容参考默认的.openclaw/workspace/.clawhub/的写法):

cd/path/to/sub-agent-workspace
mkdir-p.clawhub

创建后,clawhub update --all 就能识别当前目录为 workdir(命中第 3 步),skills 会更新到 ./skills/ 下。

这样cd 进去直接用,不需要每次带参数。

给每个子 agent 的 workspace 根目录加上 .clawhub/ 标记,之后 cd 进去直接 clawhub update --all 就行。

方式二:每次显式指定 –workdir

如果你不想cd到对应子agent目录结构,可以每次显式指定 workdir:

clawhubupdate--all--workdir/path/to/sub-agent-workspace

优点:不需要改目录结构。

缺点:每次都要记得带参数。路径一长,很容易敲错。

方式三:批量更新脚本

如果你有多个子 agent workspace,可以写一个脚本一次性更新所有(前提是每个子agent下要有.clawhub/内容):

#!/bin/bash
WORKSPACES=(
"$HOME/.openclaw/workspace"
"/path/to/agent-a-workspace"
"/path/to/agent-b-workspace"
)

forwsin"${WORKSPACES[@]}";do
echo">>> Updating: $ws"
if[-d"$ws"];then
clawhubupdate--all--no-input--force--workdir"$ws"
fi
done

优点:一键更新所有子 agent 的 skills,适合子 agent 数量多的场景。

把这个脚本放到一个方便的位置,需要更新时跑一次就行。

我的实际做法

我现在是方案一 + 方案三组合使用。

每个子 agent workspace 都加了 .clawhub/ 标记,这样平时 cd 进去单独更新某个 agent 的 skills 很方便。

同时维护了一个批量更新脚本,每隔一段时间跑一次,确保所有子 agent 的 skills 都保持最新。

讲真,这个坑花了我半个小时才搞明白。clawhub 的设计逻辑本身没问题——它需要一个明确的机制来决定”我现在操作的是哪个 workspace”。只是在多 agent 场景下,这个回退行为容易让人产生误解。

如果你也在用多个 agent workspace,建议现在就检查一下:你的子 agent 目录下有没有 .clawhub/ 标记?如果没有,加上它。

总结

核心就一句话:在多 agent 场景下,给每个子 agent 的 workspace 根目录创建 .clawhub/ 标记文件夹

这样 clawhub update --all 就能正确识别当前目录,不会再回退到主 workspace。

这个标记文件夹不需要任何内容,存在就行。但它能告诉 clawhub:”这个目录就是一个独立的 workspace”。

一劳永逸。