什么跑在
哪里。

EmperorClaw 是一台服务器,不是一个单文件 CLI。Next.js 面板、WebSocket 控制面和 PostgreSQL 跑在 Docker 里;每个智能体有自己的容器,状态存在数据卷和数据库里,所以重启不等于丢掉一天的工作。

安装是一条命令,或者一个 compose 文件

curl -fsSL https://raw.githubusercontent.com/emperorclaw/emperorclaw/main/install.sh | bash

安装脚本把文件放到 ~/emperorclaw,如果 3000 端口(配了域名则是 80/443)被占用会先警告,然后启动整套服务,等应用和数据库报告就绪,再打开浏览器。Ubuntu/Debian 上它能自己安装 Docker Engine;macOS 和 Windows 需要 Docker Desktop。镜像发布的是 amd64,Apple Silicon 通过 Docker Desktop 的模拟运行。

整套服务故意做得很无聊:

服务是什么
appghcr.io/emperorclaw/emperorclaw——面板、REST/MCP 接口和 WebSocket 控制面
postgrespostgres:16-alpine,数据在 pgdata 卷里
caddy给安装脚本一个域名时的可选自动 HTTPS
drive-sync可选的 rclone 边车,用于 Google Drive 备份

也支持和记录了源码构建:Node.js 20+ 与 PostgreSQL,开发服务器是 npm run dev(一个 tsx 包装服务器,因为应用需要 WebSocket),数据库用 db:migrate。我们没有提供的是 npx 式的单文件:这是一个带面板、数据库和控制面的多用户服务器,不是你终端里的进程管理器。

每个智能体有自己的容器

用本地:这台机器雇一个智能体,系统会在 Emperor 主机上把它开成一个同级 Docker 容器,名字是 emperor-<agent>-<id8>,创建时带 RestartPolicy: unless-stopped,加入应用所在的 Docker 网络,注入它自己的 API 令牌和应用的内部地址。你可以 docker exec 进去、看日志,也可以在智能体面板里点重建运行时,把它停掉、删掉、重新开——镜像更新和模型 key 轮换用的就是同一个动作。

重建之后还在的东西才是重点:一个命名数据卷挂在 /home/hermes/.hermes/profiles,里面是模型配置、SOUL.md、会话(state.db)、本地记忆和技能。一个 Emperor 智能体对应一个 Hermes profile,这个 profile 就是记忆、会话和密钥的隔离边界。

智能体不必跑在 Emperor 主机上。设置 → 运行时主机可以通过 SSH 接入另一台机器;主机会报告可用内存和磁盘(对照新智能体的需求)、是否装了浏览器、已经跑了几个智能体。没有 Docker socket 权限的托管部署,可以把 Emperor 放在一处、把 worker 放到另一台机器。也支持 OpenClaw 作为第二种运行时。

状态能扛住重启

任务、备注、审批、消息、运行记录和成本都在 PostgreSQL 里,不在某个终端缓冲区里。三个机制保证出事之后工作还能继续:

这套平台模式要你付出的代价

方面EmperorClaw本地 Node CLI
安装需要 Docker,一条命令npx,仅此而已
隔离每个智能体一个容器一个 profile智能体共用你的 shell 和文件
服务器上 7×24原生:compose 栈 + 重启策略要自己接 systemd、PM2 或 tmux
关掉终端后还在跑在——状态在 Postgres,智能体是容器不在,除非你自己守护进程
最初五分钟慢一些:拉镜像、初始化快:什么都不用装

三个边界要说清楚。容器不是虚拟机:同一台主机上的智能体共用一个内核,而且智能体容器默认加入应用所在的 Docker 网络,所以容器隔离的是文件、密钥和进程,而不是敌意代码沙箱。资源上限是真的,但比较粗:每个智能体容器创建时就带 1 GiB 内存上限和 1.5 个 CPU(src/lib/hermes-provisioning.ts 里的 Memory 与 NanoCpus),所以一个失控的智能体吃不掉整台主机;但面板里没有按智能体的滑杆,也没有设 PID 上限和只读根文件系统。第三:发布的镜像是 amd64。

去哪里核实

下一篇→ 逐条对照能力