HiClaw 控制面和声明式资源
这一课把“创建一个 Worker”拆成控制面动作:谁接收请求、谁记录期望状态、谁创建容器或 Pod、谁配置网关、房间和共享存储。
1. 这一课要拿下什么
上一课你已经知道 HiClaw 的核心节点。现在要把视角从“有哪些组件”推进到“一个新 agent 如何被系统创建出来”。
学习目标:听到“创建一个 frontend Worker”时,你能说出控制流经过 Manager、`hiclaw` CLI 或 REST API、Worker 资源、controller reconciler、Gateway/Matrix/MinIO 配置,最后落到 Docker container 或 Kubernetes Pod。
2. 控制面解决什么问题
如果只是本地跑一个 agent,进程启动就够了。但 agent harness 要管理多个可替换、可停止、可恢复、可授权的 agent。控制面就是把“我要一个什么样的 agent”变成“系统里真的存在并可用的 agent”。
| 没有控制面 | 有控制面 |
|---|---|
| 用户或脚本直接启动进程。 | 用户、Manager 或 CLI 提交资源声明。 |
| 启动参数散落在命令和环境变量里。 | runtime、image、model、skills、state 写在资源 spec 中。 |
| 进程挂了需要人工判断。 | controller 比较期望状态和实际状态,并执行修正。 |
| 凭据、房间、文件路径容易手工错配。 | controller/reconciler 参与配置 gateway consumer、Matrix room 和 object storage。 |
3. 四类声明式资源
HiClaw architecture 文档把 `hiclaw.io/v1beta1` 下的主要 CRD 分成四类:Worker、Manager、Team、Human。它们不是普通配置文件,而是控制面要持续实现的“期望状态”。
| 资源 | 它描述什么 | 面试式判断问题 |
|---|---|---|
| Worker | 执行者 agent。重点字段包括 model、runtime、image、skills、MCP servers、expose ports、channelPolicy、state。 | 这个 Worker 用哪个 runtime?应该 Running、Sleeping 还是 Stopped?需要哪些工具和暴露端口? |
| Manager | 协调者 agent。包含 model、runtime、image、skills、MCP servers、config、state。 | Manager 的心跳、worker idle timeout、通知渠道应该由谁配置? |
| Team | 一组带 Leader 和 Workers 的协作单元。包含 Leader、Workers、admin、peerMentions、channelPolicy。 | 团队房间、Leader DM、成员 readiness 应该如何聚合? |
| Human | 人类参与者。包含 display name、email、permissionLevel、可访问 teams/workers。 | 谁能进入哪些房间?谁能访问哪些 Worker 或 Team? |
4. 创建 Worker 的控制流
把这句话作为主线:“帮我创建一个叫 alice 的 frontend Worker。”
Human says request in Matrix
-> Manager interprets the intent
-> Manager chooses Worker spec
-> hiclaw CLI or REST API sends request to controller
-> Worker resource becomes desired state
-> Worker reconciler creates infrastructure
-> Gateway consumer, Matrix room, storage prefixes are prepared
-> Docker container or Kubernetes Pod starts
-> Worker joins the room and receives the task
关键点是:Manager 不应该自己“手搓”所有底层动作。它把意图变成资源请求,controller 负责把资源请求落到运行环境和基础设施配置上。
5. Local 和 Kubernetes 的差异
HiClaw 有两种部署形态,但控制面抽象保持一致。
| 维度 | Local single host | Kubernetes |
|---|---|---|
| controller 形态 | embedded controller container 同时包含 Higress、Tuwunel、MinIO、Element Web 和 controller。 | controller 是独立 Deployment,Higress、Tuwunel、MinIO、Element Web 通常是独立工作负载或 chart 依赖。 |
| 创建执行体 | controller 通过 Docker/Podman API 创建 Manager 和 Worker container。 | controller 根据 CR 创建 Manager 和 Worker Pods。 |
| Manager/Worker 镜像 | 轻量镜像,不再内置完整基础设施栈。 | 同样是轻量 agent runtime 镜像,基础设施由集群组件提供。 |
| 你该记住 | 本地是便捷体验,infra 被打包到 embedded controller。 | Kubernetes 是生产/共享部署,组件边界更清楚。 |
6. Retrieval Check
先口头回答,再点开答案。目标是能把控制面讲成因果链,而不是背组件名。
- 为什么 HiClaw 需要 controller,而不是让 Manager 直接启动 Worker?
- Worker spec 至少应该回答哪三类问题?
- `hiclaw` CLI 在控制流里扮演什么角色?
- Local 模式和 Kubernetes 模式最大的差异是什么?
- 如果 Worker 已经声明为 Running,但容器没起来,你应该怀疑哪个层?
- 因为 Manager 负责理解和协调任务,controller 负责生命周期、状态收敛、基础设施配置和运行环境差异。
- 它用什么运行:runtime/image/model;它能做什么:skills/MCP/expose;它该处于什么状态:Running/Sleeping/Stopped。
- 它是 operator-facing 工具,向 controller REST API 发起 create/get/update 等操作,Manager 和 Worker 镜像里也带有它。
- Local 把 infra 放进 embedded controller,并通过 Docker/Podman 创建容器;Kubernetes 把组件拆成工作负载,并通过 CR 创建 Pods。
- 先看 Worker resource/status、controller reconciler 日志、镜像拉取/运行时、以及 gateway/Matrix/storage 初始化是否失败。
References
主要来源:HiClaw architecture.md、HiClaw README。速查表见 HiClaw 控制面速查。