HiClaw 源码 × 部署 全景图
AgentScope 团队的开源 Multi-Agent OS,把 Higress AI 网关、Tuwunel Matrix 服务器、Element Web、MinIO 和 OpenClaw Agent 运行时**塞进单个 Manager 容器**,通过 docker.sock 动态拉起 Worker 容器,人类在 Matrix 房间里全程围观和介入。
file:line 引证。如果你只想看官方介绍去 higress.ai/hiclaw。
01 这次怎么部的
用户的需求是部署到 VPS 但不能影响其他线上应用(同一台 VPS 跑着 Coolify + 10 个生产服务)。HiClaw 默认安装会挂载宿主 /var/run/docker.sock,等于宿主 root 权限 —— 直接装风险极大。
最终方案:LXC 系统容器隔离 + Coolify Traefik 反代 + nginx 路径改写
公网 https://hiclaw.kang-kang.com (Let's Encrypt)
│
▼
┌─────────────────────────────────────────────────┐
│ VPS 76.13.31.179 Ubuntu 24.04 / 内核 6.8 │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ 宿主 Docker │ │ LXC 容器 hiclaw │ │
│ │ (root) │ │ (10.5.64.46) │ │
│ │ │ │ 4 核 / 8GB │ │
│ │ Coolify Traefik │ │ nesting=true │ │
│ │ ↓ labels │ │ │ │
│ │ hiclaw-traefik- │ │ 内部 Docker 29.4 │ │
│ │ proxy (nginx) │──┼─→ hiclaw-manager │ │
│ │ │ │ (单镜像全家桶) │ │
│ │ Gitea / SmartFile │ │ ├ Higress │ │
│ │ Metabase / 等 9 个│ │ ├ Tuwunel │ │
│ └──────────────────┘ │ ├ Element Web │ │
│ │ ├ MinIO │ │
│ │ └ OpenClaw │ │
│ │ ↓ docker.sock│ │
│ │ worker-* (动态) │ │
│ └──────────────────┘ │
└─────────────────────────────────────────────────┘
nginx 路径路由(让单域名同时承载 Element Web + Matrix Server)
HiClaw 的 Element Web config.json 把 homeserver 硬编码成 http://matrix-local.hiclaw.io:18080 —— 公网无法解析。我们用 nginx 在传输层"现场改写":
location = /config.json {
proxy_pass http://10.5.64.46:18088;
sub_filter_types application/json;
sub_filter "http://matrix-local.hiclaw.io:18080"
"https://hiclaw.kang-kang.com";
sub_filter_once off;
}
# Matrix 服务器路径 -> Higress 网关(带原始 Host 头)
location ~ ^/(_matrix|_synapse) {
proxy_pass http://10.5.64.46:18080;
proxy_set_header Host matrix-local.hiclaw.io;
}
# .well-known matrix 服务发现 -> nginx 直接返回公网域名
location = /.well-known/matrix/client {
return 200 '{"m.homeserver":{"base_url":"https://hiclaw.kang-kang.com"}}';
}
# 其他 -> Element Web
location / {
proxy_pass http://10.5.64.46:18088;
}
关键:不需要新增 DNS 子域名,单 hiclaw.kang-kang.com 同时承载 Element Web 前端 + Matrix Server 后端 + Synapse 兼容路径 + 服务发现。
关键命令
# 1. 创建 LXC 容器(限资源 + 允许嵌套 Docker)
lxc launch ubuntu:24.04 hiclaw \
-c security.nesting=true \
-c limits.cpu=4 -c limits.memory=8GB
# 2. 容器内装 Docker
lxc exec hiclaw -- bash -c "curl -fsSL https://get.docker.com | sh"
# 3. 非交互式安装 HiClaw(必须强制 us-west-1 registry)
lxc exec hiclaw -- bash -c "
HICLAW_NON_INTERACTIVE=1 \
HICLAW_REGISTRY=higress-registry.us-west-1.cr.aliyuncs.com \
HICLAW_LLM_PROVIDER=openai-compat \
HICLAW_OPENAI_BASE_URL=https://api.poe.com/v1 \
HICLAW_LLM_API_KEY=sk-poe-... \
HICLAW_DEFAULT_MODEL=Claude-Sonnet-4.5 \
HICLAW_LOCAL_ONLY=0 \
bash hiclaw-install.sh manager
"
# 4. 立即打 clean-install 快照(随时回滚)
lxc snapshot hiclaw clean-install
# 5. 任何时候出问题,5 秒回滚
lxc restore hiclaw clean-install
02 安全模型 · 影响半径
为什么坚持 LXC 而不是直接装到宿主 Docker?因为 HiClaw 的 Worker 是动态创建的代码执行沙箱,Manager Agent 又是 LLM 驱动的 —— 一旦被 prompt 注入或 Worker 沙箱漏掉,挂载 docker.sock 等于把宿主 root 双手奉上。
| 受害对象 | 裸装风险 | LXC 隔离后 |
|---|---|---|
| Coolify 自身 | 🔴 完全可控 | 🟢 不可见 |
| 同机 9 个生产应用 Gitea / SmartFile / Metabase / Superset / DataEase / WiFi-Sense / AstrBot / Hermes / Open SWE | 🔴 全部可炸 | 🟢 不可见 |
| 宿主 root 文件系统 | 🔴 可读写 /root/.ssh、/etc | 🟢 独立 rootfs |
| SSH / 网络配置 | 🔴 可改 | 🟢 命名空间隔离 |
| CPU / 内存 | 🟡 可耗光 | 🟢 cgroup 限 4 核 8GB |
| LXC 内部 hiclaw + workers | — | ⚠️ 可炸(预期) |
最坏情况下:LXC 内部全炸 → lxc restore hiclaw clean-install → 5 秒回滚到干净状态,VPS 上其他 9 个应用毫无察觉。
HiClaw 自己的安全设计(也不弱)
- docker-proxy sidecar:Manager 不直接碰 docker.sock,所有 Docker API 调用走
hiclaw-docker-proxyGo 中间层,镜像必须命中白名单(higress-registry.*.aliyuncs.com、hiclaw/*)、容器名必须hiclaw-worker-*前缀、禁止 privileged 和 host 路径挂载 docker-proxy/security.go:1-100 - Higress key-auth:每个 Worker 一个 consumer + bearer token,Higress 强制路由级权限,Worker 看不到主 LLM API key manager/scripts/lib/gateway-api.sh:166-200
- Matrix 房间是唯一通信通道:Manager 和 Worker 之间没有任何"私下"对话,人类全程在房间里围观
- Registration token:Matrix 服务器注册需要 64 位随机 token,虽然端点公网可达但实际无法被陌生人注册
03 install.sh · 19 步状态机
官方安装脚本 install/hiclaw-install.sh 2819 行,核心是个 19 步状态机,支持按 b 回退到上一步。每一步既收集配置又即时验证。
| # | step 函数 | 关键变量 | 作用 |
|---|---|---|---|
| 1 | step_lang | HICLAW_LANGUAGE | en / zh / ja |
| 2 | step_mode | HICLAW_MODE | local / aliyun(SAE 云) |
| 3 | step_version | HICLAW_VERSION | 固定版本或 latest |
| 4 | step_existing | — | 检测已有配置,询问覆盖/升级 |
| 5 | step_llm | HICLAW_LLM_PROVIDER HICLAW_DEFAULT_MODEL HICLAW_LLM_API_KEY | qwen 或 openai-compat,本次我们选 openai-compat 接 Poe API |
| 6 | step_admin | HICLAW_ADMIN_USER HICLAW_ADMIN_PASSWORD | admin 账户(默认自动生成 16 位密码) |
| 7 | step_network | — | 检测 DNS / 公网 |
| 8 | step_ports | HICLAW_PORT_GATEWAY/CONSOLE/ELEMENT_WEB | 暴露端口 18080/18001/18088 |
| 9 | step_domains | HICLAW_MATRIX_DOMAIN HICLAW_MATRIX_CLIENT_DOMAIN HICLAW_AI_GATEWAY_DOMAIN HICLAW_FS_DOMAIN HICLAW_CONSOLE_DOMAIN | 5 个内部域名(默认 *-local.hiclaw.io,公网部署需替换) |
| 10 | step_github | HICLAW_GITHUB_TOKEN | 可选,用于 Worker MCP 调用 GitHub |
| 11 | step_skills | HICLAW_SKILLS_API_URL | 技能市场(Nacos) |
| 12 | step_volume | HICLAW_DATA_DIR | 持久化 docker volume |
| 13 | step_workspace | HICLAW_WORKSPACE_DIR | 主机挂载的 Manager 工作区(默认 ~/hiclaw-manager) |
| 14 | step_manager_runtime | HICLAW_MANAGER_RUNTIME | openclaw(Node.js,500MB)或 copaw(Python,150MB) |
| 15 | step_runtime | HICLAW_DEFAULT_WORKER_RUNTIME | 同上,但是 Worker 默认 |
| 16 | step_e2ee | HICLAW_MATRIX_E2EE | Matrix 端到端加密(默认关) |
| 17 | step_docker_proxy | HICLAW_DOCKER_PROXY HICLAW_PROXY_ALLOWED_REGISTRIES | 启用 docker-proxy 安全层(默认开) |
| 18 | step_idle | HICLAW_WORKER_IDLE_TIMEOUT | Worker 空闲超时(默认 720 分钟) |
| 19 | step_hostshare | HICLAW_HOST_SHARE_DIR | 主机文件共享目录(挂载到容器 /host-share) |
非交互模式 HICLAW_NON_INTERACTIVE=1 下,所有 step 跳过询问直接用 env 变量,适合 CI / 自动化部署。install/hiclaw-install.sh:2071-2167
04 整体架构
HiClaw 由 5 个核心组件构成,Manager 是单镜像全家桶(由 supervisord 编排 5 类进程),Workers 是动态拉起的轻量沙箱。
┌───── 人类(Element Web)
│
▼ Matrix 协议
┌────────────────────────────────────────────────────┐
│ Manager 容器(单镜像,supervisord 编排) │
│ │
│ ┌──基础设施层────┐ ┌──网关层────────┐ │
│ │ Tuwunel :6167 │ │ Higress :8080 │ ◀─── LLM 出站│
│ │ MinIO :9000 │ │ apiserver :8001│ │
│ └────────────────┘ │ controller │ │
│ ▲ │ pilot │ │
│ │ │ console │ │
│ ┌──应用层───────┐ └────────────────┘ │
│ │ Element Web │ ▲ │
│ │ :8088 │ │ │
│ │ mc-mirror │ ┌────────────┐ │
│ │ hiclaw- │ │ OpenClaw / │ │
│ │ controller │ │ CoPaw │ │
│ └────────────────┘ │ Agent │ │
│ └────────────┘ │
│ │ docker.sock │
└────────────────────────────┼───────────────────────┘
│ via docker-proxy
▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ worker- │ │ worker-bob │ │ worker-... │
│ alice │ │ │ │ │
│ (无状态) │ │ │ │ │
└────────────┘ └────────────┘ └────────────┘
▲ ▲
│ MinIO mc mirror(双向)
▼
┌──────────────────────────┐
│ MinIO bucket: hiclaw-fs/ │
│ agents//... │
│ shared/tasks/... │
│ shared/projects/... │
└──────────────────────────┘
1. Manager 容器(全家桶)
OpenClaw/CoPaw Agent + Higress 网关 + Tuwunel Matrix + Element Web + MinIO,supervisord 按 priority 50→800 启动 5 个层次
2. Worker 容器(无状态)
启动时从 MinIO 拉所有配置,运行时双向同步,容器随时可销毁重建,状态零丢失
3. hiclaw-controller
Go 写的 K8s 风格 operator,用嵌入式 kine + kube-apiserver,通过 YAML 声明式管理 Worker/Team/Human 三个 CRD
4. docker-proxy
Go 写的 docker.sock 代理,镜像白名单 + 容器策略 + 能力检查,Manager 不直接碰 docker.sock
5. install.sh
2819 行 Bash 状态机,19 个 step,支持本地 / 阿里云 SAE 双模式,非交互可 CI
05 Manager 一体化容器
看见"Manager 容器内同时跑 Higress + Tuwunel + Element Web + MinIO + Agent"第一反应:这违反 Docker "一个容器一个进程"原则。但 HiClaw 选择这么做有道理:对单机部署用户来说,这是开箱即用 vs 编排 5 个 service的取舍。
supervisord 编排 5 个层次
boot 顺序由 priority 字段控制 manager/supervisord.conf:1-143:
| Priority | 层 | 进程 | 端口 |
|---|---|---|---|
| 50 | 基础设施 | MinIO | 9000 / 9001 |
| 100 | Tuwunel(Matrix) | 6167(内部) | |
| 200 | Higress 网关 | apiserver | 8001 内部 |
| 300 | controller | — | |
| 400 | pilot | — | |
| 500 | gateway | 8080 主入口 | |
| 600 | console | 8001 Web UI | |
| 650 | 应用 | Element Web(nginx) | 8088 |
| 700 | mc-mirror(MinIO 同步) | — | |
| 750 | hiclaw-controller | 6443 内部 | |
| 800 | manager-agent(OpenClaw/CoPaw) | — |
对外只暴露 4 个端口:18080(网关)、18001(控制台)、18088(Element Web)、18888(Manager 控制台,本地),通过 install.sh 的 step_ports 配置 install/hiclaw-install.sh:2491-2514。
OpenClaw 镜像构建(关键源码)
# openclaw-base/Dockerfile:54-67
RUN git clone --depth 1 -b hiclaw-v1 \
https://github.com/johnlanni/openclaw.git /opt/openclaw && \
cd /opt/openclaw && \
pnpm install && pnpm build && \
# 验证 matrix-sdk-crypto 原生模块
test -f packages/clawdbot/node_modules/@matrix-org/matrix-sdk-crypto-nodejs/matrix-sdk-crypto.linux-x64.node
OpenClaw 是 HiClaw 的 fork(johnlanni/openclaw#hiclaw-v1),不是原版。HiClaw 通过 shell skill 框架扩展其能力,避免了 fork 维护负担。
06 OpenClaw vs CoPaw · 双运行时
HiClaw 支持两种 Agent 运行时,功能和资源各有取舍 manager/scripts/init/start-manager-agent.sh:1-150:
OpenClaw 默认
- 语言:Node.js
- 体积:~500MB
- Matrix:原生支持(
@matrix-org/matrix-sdk-crypto-nodejs含 E2EE) - 编译来源:
johnlanni/openclaw#hiclaw-v1commit 86dad13 - 启动器:验证
matrix-sdk-crypto.linux-x64.node原生模块存在 openclaw-base/Dockerfile:54-80 - 适用:生产 / 完整功能
CoPaw 轻量
- 语言:Python(基于 AgentScope)
- 体积:~150MB
- Matrix:无原生支持,通过
matrix-nio[e2e]+ 自定义 channel copaw/src/copaw_worker/matrix_channel.py - 依赖:
copaw==0.0.5, matrix-nio[e2e], markdown-it-pycopaw/pyproject.toml:12-17 - 配置桥接:启动时自动
bridge_openclaw_to_copaw(),把 openclaw.json 转 CoPaw 的 config.json + providers.json - 适用:边缘 / 资源受限场景(树莓派等)
07 hiclaw-controller · K8s 风格声明式
这是 HiClaw 最有意思的组件之一:把整个 Kubernetes 控制平面塞进单个 Go 二进制,然后用它来 watch YAML 文件管理 Worker。
架构
- kine:把 SQLite 包装成 etcd(无需真 etcd 集群)
- 嵌入式 kube-apiserver:127.0.0.1:6443,提供标准 K8s API
- controller-runtime:watch → reconcile 循环
- file watcher:监听
/root/hiclaw-fs/hiclaw-config/下的 YAML,自动 import 到 etcd
3 个 CRD
// hiclaw-controller/api/v1beta1/types.go:15-75
type Worker struct {
Spec WorkerSpec // model, runtime, image, skills, mcp-servers, expose ports
Status WorkerStatus // phase, matrix-user-id, room-id, container-state
}
type Team struct {
Leader string
Members []string
TeamAdmin string
ChannelPolicy ChannelPolicy
}
type Human struct {
MatrixID string
Level int // L1: DM 权限, L2: group room 权限
}
工作流
- 用户在
/root/hiclaw-fs/hiclaw-config/workers/alice.yaml写 YAML - file watcher 检测变化 → 解析 → import 到嵌入式 etcd
- controller-runtime reconcile loop 触发
- 调用 shell executor(本质是
create-worker.sh等技能脚本) - 结果写回 Worker.status
这相当于把 GitOps 工作流压缩到单容器内 —— 你可以用 kubectl get workers.hiclaw.io 操作 hiclaw-controller,完全跟操作真 K8s 集群一样。hiclaw-controller/cmd/controller/main.go:25-140
08 docker-proxy · 安全隔离层
Manager Agent 是 LLM 驱动的,理论上可被 prompt 注入。如果它直接 docker.sock,等于"恶意 prompt → 任意宿主命令"。docker-proxy 是 Go 写的 Docker API 中间层,做白名单和策略检查。
POST/DELETE 白名单 docker-proxy/main.go:18-25
POST /containers/create— 允许,但镜像和挂载要过校验POST /containers/{id}/{start|stop|kill|restart}— 允许POST /exec/{id}/start— 允许DELETE /containers/{id}— 允许- 其他全部拒绝(不能拉任意镜像、不能改 Docker 守护进程配置)
镜像白名单 docker-proxy/security.go:1-100
isHigressRegistry(image) // higress-registry-*.cr.aliyuncs.com/*
isLocalImage(image) // hiclaw/*, hiclaw:latest
isLocalhostImage(image) // localhost/*, 127.0.0.1/*
HICLAW_PROXY_ALLOWED_REGISTRIES // 用户自定义额外白名单
容器策略
- 容器名必须以
hiclaw-worker-开头 - 禁止
privileged、net_admin、sys_admin等危险 capability - 禁止挂载宿主任意路径(防逃逸)
设计哲学:既不信任 Manager Agent(可能被 prompt 注入),也不暴露完整 Docker API。安全验证在代理层,不依赖 Agent 的"诚实"。
09 Worker 生命周期 · 全程拆解
Worker 是完全无状态的容器,所有配置和记忆存在 MinIO,启动时拉取,运行时同步。这让 Worker 可以随时被销毁、重建、跨机迁移,代价是启动慢一点(要 mc mirror)。
worker-entrypoint.sh 6 步启动 worker/scripts/worker-entrypoint.sh:1-150
- 设置时区(从
TZenv 读) - 配置 mc 别名:本地模式直接
mc alias set,云模式调用ensure_mc_credentials刷新阿里云 STS 临时凭证 - 拉取 Worker 配置(重试 6 次,每次 5s):
mc mirror "${HICLAW_STORAGE_PREFIX}/agents/${WORKER_NAME}/" \ "${WORKSPACE}/" \ --exclude ".openclaw/matrix/**" \ --exclude ".openclaw/canvas/**" - 符号链接:把 workspace 目录链接成 HOME,让 OpenClaw 读
~/.openclaw/openclaw.json - 启动 file-sync 后台进程:周期性双向 mc cp(增量)
- 启动 OpenClaw / CoPaw
MinIO 文件架构
HICLAW_STORAGE_PREFIX/
├── agents/<WORKER_NAME>/
│ ├── openclaw.json ← Manager 写,Worker 读
│ ├── SOUL.md ← Worker 身份
│ ├── AGENTS.md ← 行为指导
│ ├── skills/ ← 双向同步
│ ├── memory/YYYY-MM-DD.md ← Worker 写日记
│ ├── .openclaw/ ← session 状态(不同步)
│ └── credentials/ ← 凭证(不同步)
└── shared/
├── tasks/<id>/ ← Manager 和 worker 共享
├── knowledge/ ← 知识库
└── projects/<id>/ ← 项目状态(plan.md 等)
10 Matrix 集成
HiClaw 用 Tuwunel(conduwuit fork,Rust 写的 Matrix 服务器)而不是 Synapse —— 性能更好、单二进制、无 Python 依赖。Manager 容器内嵌一个 Tuwunel 实例,所有 Agent 都注册在这里。
账户和房间
- Manager:
@manager:matrix-local.hiclaw.io(管理员账户,自动注册) - Worker:
@<name>:matrix-local.hiclaw.io(create-worker.sh 时通过 registration token 注册) - 每个 Worker 一个私房间:成员 = Human + Manager + Worker(三方可见,Manager 和 Worker 之间没有"私聊")
- 项目房间:多 Worker 协作时创建,Human + Manager + 团队成员
OpenClaw 的 Matrix 集成
来自 @matrix-org/matrix-sdk-crypto-nodejs 原生模块(支持 E2EE)。openclaw-base 镜像构建时验证原生模块存在 openclaw-base/Dockerfile:54-67。OpenClaw 内置 Matrix channel,自动同步加入房间、接收 @mention 消息触发 agent loop。
CoPaw 的 Matrix 集成(替代实现)
CoPaw 没有原生 Matrix 支持,通过自定义 channel 类继承 BaseChannel,使用 matrix-nio[e2e] 库 copaw/src/copaw_worker/matrix_channel.py:1-100。支持 markdown → HTML 转换、斜杠命令(/message /history /new /clear)。
设计洞察:用 Matrix 协议而不是自建 IM 协议,极大降低维护成本 —— Element Web 直接用,移动端可用 FluffyChat / Element Mobile,联邦/E2EE 全免费。
11 LLM 调用全链路
用户在 Element Web 输入 → Manager 回复,中间 LLM 调用走的是 Higress AI Gateway(不是直接 OpenAI API)。
10 步调用链 manager/scripts/lib/gateway-api.sh:166-200
- 用户 Element Web 输入消息 → POST
/_matrix/client/v3/sync - Tuwunel 把消息广播到 Manager 所在 room
- OpenClaw 在 sync() 轮询里检测到
@managermention - 触发 agent loop:读
SOUL.md构造 system prompt - POST
http://127.0.0.1:8080/v1/chat/completions
Header:Authorization: Bearer ${HICLAW_MANAGER_GATEWAY_KEY} - Higress 网关拦截 → 验证 key-auth → 查询 consumer → 检查路由权限
- 转发到配置的后端(Qwen/OpenAI/Anthropic/Poe...)
- 响应流式返回给 OpenClaw
- Agent 解析响应,可能调用 skill 脚本(如
create-worker.sh) - 把结果作为新消息发回 Matrix room
多 provider 路由
# manager/scripts/lib/gateway-api.sh:129-147
# 列出所有 AI 路由
curl http://127.0.0.1:8001/v1/ai/routes -b ${HIGRESS_COOKIE_FILE}
# 给每个路由的 allowedConsumers 加白名单
curl -X PUT http://127.0.0.1:8001/v1/ai/routes/{route} \
-d '{"authConfig": {"allowedConsumers": ["worker-alice", ...]}}'
关键:LLM provider 可以在不改 Agent 代码的前提下动态切换 —— 通过 Higress 控制台改路由配置即可。本次部署我们选 openai-compat + https://api.poe.com/v1,model = Claude-Sonnet-4.5,Higress 把 OpenAI 协议透传给 Poe,工作得很好。
12 MinIO · 单一数据源(SSOT)
HiClaw 把 MinIO 当成整个集群的唯一真相。Manager 和 Worker 之间不直接共享文件,全部通过 MinIO 中转,这是 Worker 无状态的前提。
同步策略
- Manager 主动推:配置文件、技能、共享知识库 → MinIO,每 10s 一次 mc mirror manager/scripts/init/start-mc-mirror.sh
- Worker 启动拉:全量 mc mirror 拉自己 agents/<name>/ 下的所有文件
- Worker 运行同步:后台 file-sync 进程,增量 mc cp,定时把 skills/memory 推回 MinIO
- 排除项:
.openclaw/matrix/**(session 缓存)、.openclaw/canvas/**(本地草稿)、credentials/(凭证不同步)
跨容器/跨机部署的关键
因为 MinIO 是唯一真相,理论上你可以把 Manager 跑在一台机器,Workers 跑在另外几台,只要它们都能访问同一个 MinIO 端点 —— 这是 HiClaw 支持云模式(SAE/Aliyun)的基础。本地模式下 MinIO 直接跑在 Manager 容器内。
13 技能系统 · 19 个 shell 技能
HiClaw Agent 的"工具"不是 LLM function calling 那种,而是一堆 shell 脚本。每个技能一个目录,带 SKILL.md(给 Agent 看)和 scripts/(给 shell 跑)。
典型技能目录
skills/worker-management/
├── SKILL.md # 给 Agent 看:何时调用、参数、陷阱
├── skill.json # 元数据(名称、描述、参数 schema)
├── scripts/
│ ├── create-worker.sh # 创建 worker 全流程
│ ├── lifecycle-worker.sh # 启停/空闲检测
│ └── push-worker-skills.sh
└── references/ # 长篇文档
├── create-worker.md
└── lifecycle.md
核心 19 个技能 manager/agent/skills/
创建/启停 worker
分配/记录任务
processing marker 防冲突
plan.md 维护
Team Leader
授权用户
Room 权限
切 Manager LLM
切 Worker LLM
MCP 服务器配置
Nacos 市场搜索
git 委派
Tuwunel 管理
MinIO 同步
MCP tool 调用器
发布端口到 Higress
为什么是 shell 而不是 TypeScript/Python?
降低运维门槛 —— 任何会写 bash 的人都能加技能,不需要碰 Node.js 包管理器。SKILL.md 文档化 API 和陷阱,Agent 通过自然语言匹配 description 字段决定调用哪个技能。
14 心跳 · 自动停启 Worker
Manager 定期跑心跳检查 manager/agent/HEARTBEAT.md:1-195,7 步流程,核心是检测空闲 Worker 并自动停止以省内存,任务来时自动重启。
7 步心跳
- 初始化 state.json — 读 active_tasks 列表
- 检查 finite tasks — 对每个有限任务,
lifecycle-worker.sh --action ensure-ready,Worker 没起就拉起,起好后 @mention 询问进度 - 检查 infinite tasks — 定时执行类(如"每小时检查邮件"),按 next_scheduled_at 触发
- 项目进度监控 — 遍历 plan.md,找出标
[~](进行中)的任务,Worker 没动就跟进 - 容量评估 — 计数 finite 任务数,识别空 Worker,建议 admin 创建新 Worker
- 容器生命周期 — 同步 Docker 状态到 lifecycle.json,空闲超时 → 自动 stop
- 汇总报告 — 把所有发现 DM 给 admin
空闲检测核心代码 manager/agent/skills/worker-management/scripts/lifecycle-worker.sh:200-300
_worker_has_finite_tasks() {
# 查询 state.json,计 .active_tasks[] 中 assigned_to=worker 的有限任务数
}
# 无任务则记 idle_since,超时停止
if [ $idle_duration -gt $idle_timeout_minutes ]; then
worker_backend_stop "$worker"
_set_worker_field "$worker" "container_status" "stopped"
_set_worker_field "$worker" "auto_stopped_at" "$(_ts)"
fi
空闲超时由 HICLAW_WORKER_IDLE_TIMEOUT 控制,默认 720 分钟(12 小时)。下次任务分配时,ensure-ready 会先 docker start 把停掉的 worker 拉回来,对用户透明。
15 凭证 · 入口 · 管理命令
| 主入口 | https://hiclaw.kang-kang.com |
| 登录 | admin / admina1947bbdaac8 |
| LLM | Poe API → Claude-Sonnet-4.5(可在 Higress 控制台改) |
| VPS | 76.13.31.179(Ubuntu 24.04 / 8 核 31GB) |
| LXC 容器 | hiclaw · IP 10.5.64.46 · 限 4 核 8GB |
| 反代容器 | hiclaw-traefik-proxy(nginx:alpine,joins coolify network) |
| nginx 配置 | /opt/hiclaw-proxy/nginx.conf |
| HiClaw 数据卷 | LXC 内 docker volume hiclaw-data |
| Manager workspace | LXC 内 /root/hiclaw-manager |
| 快照 | clean-install(2026-04-09 15:47 UTC) |
常用运维命令
# SSH 进 VPS
ssh root@76.13.31.179
# 进 LXC
lxc exec hiclaw -- bash
# 看 HiClaw 内部容器状态
lxc exec hiclaw -- docker ps
# 看 Manager 日志
lxc exec hiclaw -- docker logs -f hiclaw-manager
# 重启 LXC(包括内部所有 HiClaw 容器)
lxc restart hiclaw
# 改 nginx 反代配置后必须 down/up(bind mount inode 问题)
cd /opt/hiclaw-proxy && docker compose down && docker compose up -d
# 一键回滚到干净状态
lxc restore hiclaw clean-install
16 源码地图
所有引证都对应 github.com/agentscope-ai/HiClaw 仓库。
install/hiclaw-install.sh | 2819 行,19 步状态机安装器 |
manager/Dockerfile | Manager 全家桶镜像构建 |
manager/supervisord.conf | 5 层进程编排 |
manager/agent/SOUL.md | Manager 身份和行为规范 |
manager/agent/HEARTBEAT.md | 7 步心跳流程 |
manager/agent/skills/*/ | 19 个核心技能(shell) |
manager/scripts/init/start-*.sh | 各服务启动脚本 |
manager/scripts/lib/gateway-api.sh | Higress 网关 API 调用 |
manager/scripts/lib/container-api.sh | docker.sock / docker-proxy 调用 |
worker/Dockerfile | Worker 镜像(基于 openclaw-base + mc) |
worker/scripts/worker-entrypoint.sh | Worker 6 步启动 |
openclaw-base/Dockerfile | OpenClaw 编译基础镜像 |
copaw/src/copaw_worker/ | Python 替代运行时 |
copaw/src/copaw_worker/matrix_channel.py | matrix-nio 自定义 channel |
hiclaw-controller/cmd/controller/main.go | 嵌入式 K8s 控制平面 |
hiclaw-controller/api/v1beta1/types.go | Worker/Team/Human CRD 定义 |
docker-proxy/main.go | docker.sock HTTP 代理 |
docker-proxy/security.go | 镜像白名单 + 容器策略 |