给 OpenClaw 装了个会动的像素办公室,AI 干活状态一目了然
把看不见的 AI 工作状态变成一间像素办公室
用 OpenClaw 这类 AI Agent 时,最让人纠结的不是它能不能完成任务,而是——它到底在不在干活?
聊天窗口里,你发完指令,可能等几秒就收到回复,也可能十几分钟没动静。这时候你心里就开始打鼓:是网络慢?是任务复杂?还是程序卡死了?光看聊天记录,根本分不清它是正在拼命写代码,还是早就挂了。
有人想了个办法:既然没法直接监控底层进程,那就让 Agent 自己“举手报告”状态。更妙的是,把这个状态做成一间会动的像素小办公室,打开网页就能一眼看清它在干嘛。
这个项目叫 Star Office UI,开源在 GitHub 上。它不搞复杂的系统监控,而是依赖 Agent 主动上报 idle、writing、researching、executing、syncing 或 error 这几种状态。网页收到后,就把一个像素小人挪到办公室对应区域,比如“写作区”、“研究角”或“错误警报台”,旁边还飘着气泡文字说明当前任务。

说白了,这是一种“主动汇报 + 可视化”的轻量级方案。虽然不能百分百反映真实运行情况(万一 Agent 忘了汇报呢),但对日常使用来说,已经足够直观。
手动部署:四步跑起来
Star Office UI 的后端是个简单的 Flask 应用,前端是纯静态页面,非常轻量。树莓派、旧笔记本甚至 NAS 都能跑。
部署前确保 Python 版本在 3.10 以上,因为代码里用了新版的类型注解语法。然后照着下面四步走:
# 1) 下载代码
git clone https://github.com/ringhyacinth/Star-Office-UI.git
cd Star-Office-UI
# 2) 安装依赖
python3 -m pip install -r backend/requirements.txt
# 3) 初始化状态文件
cp state.sample.json state.json
# 4) 启动服务
cd backend
python3 app.py看到终端打印出 Running on http://127.0.0.1:19000,就说明成功了。浏览器打开这个地址,就能看到那间可爱的像素办公室,默认只有一个待命的小人坐在工位上。
如果你已经装了 OpenClaw,其实还有更懒的办法:直接把项目的 SKILL.md 文档链接丢给它,让它自己执行部署命令。龙虾会自动拉代码、装依赖、启服务,最后把访问地址发给你——相当于让它给自己装了个办公室。
让 OpenClaw 学会自动汇报状态
光有办公室还不够,得让 OpenClaw 养成“开工前打卡、完工后签退”的习惯。
方法是在它的规则文件(比如 SOUL.md)里加一条硬性规定:
- 接到新任务时,先执行
python3 set_state.py <状态> "<描述>",再开始干活; - 任务完成后,必须执行
python3 set_state.py idle "待命中",才能回复用户。
这样,当你让它“在 D 盘建个目录,写篇关于夏天的文章”时,办公室里的小人会立刻从“待命区”跳到“写作区”,气泡显示“正在处理任务”。等文章写完,它又自动溜回待命位置。

这个机制的好处是,哪怕你人在外面,只要手机能上网,打开这个页面瞄一眼,就知道家里的 AI 是在认真搬砖,还是已经摸鱼宕机了。

拉上其他 Agent 一起上班
一个人的办公室太冷清,不如搞个“AI 共享办公空间”。
Star Office UI 支持多 Agent 协作。每个新来的 Agent 需要先通过 /join-agent 接口申请加入,提供名字、一个共享的 Join Key 和初始状态。服务器会返回一个唯一的 agentId。接着调用 /agent-approve 完成注册。之后,这个 Agent 就可以定期或在状态变化时,通过 /agent-push 接口更新自己的位置和状态。
项目里自带了一个 office-agent-push.py 脚本,填好参数就能用。我在局域网另一台机器上跑了个 OpenClaw,按提示配置后,办公室的访客列表里立刻多了个新名字,休息区也出现了第二个像素小人。

它们各自忙各自的,互不干扰,但都在同一个虚拟空间里“上班”,画面还挺有意思。

用 cpolar 打通公网,出门也能看

局域网内玩得再嗨,出了家门就看不到了。这时候需要内网穿透工具,比如 cpolar。

cpolar 能把本地 19000 端口的服务映射到公网,生成一个外网可访问的链接。免费版会给一个随机域名,但每 24 小时会变一次。如果想长期用同一个地址,可以花点钱保留一个固定的二级子域名,比如 soui.cpolar.top。

配置过程很简单:在 cpolar 的 Web UI 里新建一个 HTTP 隧道,指向本地的 19000 端口,选好地区(比如 China Top),保存就行。几分钟后,就能通过公网地址访问你的像素办公室了。

更关键的是,这个公网地址还能用来邀请远程的 Agent。比如我在家里的 Mac 上部署了另一个 OpenClaw,只要把前面提到的加入指令里的 URL 换成 https://soui.cpolar.top,它就能跨网络加入办公室,状态实时同步。

安全提醒:别把办公室大门敞开

一旦把服务暴露到公网,安全就得提上日程。

Star Office UI 有几个默认的薄弱点:

- 示例 Join Key:项目里自带的
ocj_example_team_01是公开的,任何人都能用它尝试加入。公网使用前一定要换成自己生成的复杂字符串。 - 资产侧边栏密码:页面里有个侧边栏可以配置 Gemini API 密钥用于 AI 生图,但默认密码是
1234。务必第一时间改掉,不然别人可能盗用你的 API 配额。 - Flask Secret Key:用于会话加密的
FLASK_SECRET_KEY在示例配置里也是固定的。应该换成一串随机字符,防止会话被伪造。

另外,尽量通过 HTTPS(cpolar 免费提供)访问,避免状态信息在传输中被截获。这些配置改完,才能放心地把链接分享出去。

这套方案的本质和局限

最后得说清楚,Star Office UI 不是万能监控器。它展示的状态完全依赖 Agent 是否正确执行了状态上报脚本。如果 OpenClaw 在执行任务中途崩溃,来不及发 idle 状态,页面上就会一直显示它在“工作中”,造成误判。

所以,它更适合当作一个辅助的、人性化的状态指示器,而不是故障诊断工具。真要排查问题,还得看系统进程、日志文件和任务的实际输出结果。

不过,对于日常使用来说,这种“看得见”的反馈已经大大降低了不确定性带来的焦虑。看着那个像素小人在办公室里跑来跑去,感觉 AI 好像真的有了生命,不再是黑盒里一段冰冷的代码。

而且,整个项目 MIT 开源,代码不复杂,完全可以根据自己的需求魔改。比如加个新状态“debugging”,或者换个办公室主题。唯一要注意的是,项目里的像素美术素材是非商业用途,商用的话得自己换图。

总之,给你的 AI 装一间像素办公室,成本不高,乐趣不小。至少下次它半天没回消息时,你可以淡定地打开网页,看看它是不是正趴在“研究角”里,为你的需求绞尽脑汁。













