by ringhyacinth
A pixel office for your OpenClaw: turn invisible work states into a cozy little space with characters, daily notes, and guest agents. Code under MIT; art assets for non-commercial learning only.
# Add to your Claude Code skills
git clone https://github.com/ringhyacinth/Star-Office-UI本 Skill 面向想快速帮主人搭建"像素办公室看板"的 OpenClaw(龙虾):
你可以先和主人说:
这是一个多人协作的像素办公室仪表盘,你的 AI 助手会根据状态自动走到不同位置,还能看到昨天的工作小记!
在你这台机器执行(按顺序):
# 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
然后告诉主人:
好了,你现在打开 http://127.0.0.1:19000 就能看到像素办公室了!
在项目根目录执行:
# 工作中 → 去办公桌
python3 set_state.py writing "正在帮你整理文档"
# 同步中
python3 set_state.py syncing "同步进度中"
# 报错中 → 去 bug 区
python3 set_state.py error "发现问题,正在排查"
# 待命 → 回休息区
python3 set_state.py idle "待命中,随时准备为你服务"
当前默认验证码是:1234。
你需要这样引导主人:
1234,可以先直接体验;修改方式(示例):
export ASSET_DRAWER_PASS="your-strong-pass"
如果是长期运行(systemd / pm2 / 容器),请把该环境变量写入服务配置,而不是只在当前 shell 临时设置。
"搬新家 / 找中介"装修功能需要 Gemini API,但基础看板不需要,不装也能正常使用。
仓库已自带生图脚本(scripts/gemini_image_generate.py),但运行需要独立的 Python 环境。在项目根目录执行:
# 创建 skill 目录结构
mkdir -p ../skills/gemini-image-generate/scripts
# 复制脚本到 skill 目录
cp scripts/gemini_image_generate.py ../skills/gemini-image-generate/scripts/
# 创建独立虚拟环境并安装依赖
python3 -m venv ../skills/gemini-image-generate/.venv
../skills/gemini-image-generate/.venv/bin/pip install google-genai
安装完成后,后端会自动检测到生图环境,"搬新家 / 找中介"按钮即可使用。
引导用户完成这两项配置:
GEMINI_API_KEYGEMINI_MODEL(推荐:nanobanana-pro 或 nanobanana-2)配置方式有两种:
export GEMINI_API_KEY="your-key"并明确告诉用户:
如果页面提示缺少 key,指导用户在侧边栏里直接填写并保存(运行时配置入口)。
推荐先用 Cloudflare Tunnel(最快):
cloudflared tunnel --url http://127.0.0.1:19000
拿到 https://xxx.trycloudflare.com 后发给主人,并补一句:
这是临时公网链接;如果你愿意,后续我可以一步步带你部署到本地域名。
提醒主人:
1234;提醒主人:
如果有其他 OpenClaw 想加入你主人的办公室:
你可以让其他龙虾:
office-agent-push.py(可以直接从你这个仓库拿)join-agent + 周期 agent-pushjoin-keys.json(ocj_starteam01 ~ ocj_starteam08)如果你主人想看到"昨日小记":
memory/YYYY-MM-DD.md代码玩法可以基于 MIT 用,但美术资产(包括角色/场景)禁止商用;如果你要商用,请务必换成你自己的原创美术资产。
用 join key 加入,然后持续推送状态就行;仓库里有
office-agent-push.py可以给其他龙虾用。
writing/researching/executing),再开始工作;本次重制核心请按四条理解:
- 新增中英日三语
- 新增资产管理(全量美术可自定义)
- 接入生图 API(龙虾自动改房间 + 用户手动装修)
- 美术资产替换与优化(含命名与索引重建)
当用户使用"搬新家 / 找中介"时,优先推荐:
其他模型在房间结构保持与风格一致性上可能不稳定。
推荐配置:
GEMINI_API_KEYGEMINI_MODEL=nanobanana-pro(或 nanobanana-2)并提示用户:缺 key 时可在侧边栏内直接填写并保存。
默认验证码为 1234,但生产/公网场景必须改强密码:
export ASSET_DRAWER_PASS="your-strong-pass"
理由:防止外部访问者修改房间布局、装饰和资产配置。
主角状态素材已切换为无版权争议的小猫,不再沿用旧角色版权说明。
保留统一口径:
在帮助主人安装时,需明确提醒:
建议对主人口径:
先把基础看板跑起来;需要"无限换背景/AI 生图装修"再接入自己的 API。
如果主人之前已经下载过旧版,按以下步骤升级:
state.json、自定义资产)。git pull 或重新克隆到新目录)。python3 -m pip install -r backend/requirements.txt。ASSET_DRAWER_PASSGEMINI_API_KEY / GEMINI_MODEL(如需生图)asset-positions.jsonasset-defaults.json/health本次更新以后,至少提醒主人以下变化:
nanobanana-pro / nanobanana-2)。ASSET_DRAWER_PASS 生产环境建议改强密码。本次更新修复了多个影响线上稳定运行的问题:
phaser.js 被缓存为 404 达 2.7 天)。fetchStatus() 中的 JS 语法错误(多余 else 块),解决页面卡 loading 问题。100dvh 适配、overscroll-behavior: contain。expiresAt)和并发上限(maxConcurrent),join-keys.json 不再入库。详细说明见:
docs/UPDATE_REPORT_2026-03-05.md
Last scanned: 4/18/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-04-18T05:43:43.962Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}🌐 Language: 中文 | English | 日本語

一个像素风格的 AI 办公室看板 —— 把 AI 助手的工作状态实时可视化,让你直观看到"谁在做什么、昨天做了什么、现在是否在线"。
支持多 Agent 协作、中英日三语、AI 生图装修、桌面宠物模式。 与 OpenClaw 深度集成时体验最佳,也可以独立部署作为状态看板使用。
本项目由 Ring Hyacinth 与 Simon Lee 共同创建(co-created project),并与社区开发者(@Zhaohan-Wang、@Jah-yee、@liaoandi)一起持续维护和共建。 欢迎提交 Issue 和 PR,也感谢每一位贡献者的支持。
如果你正在使用 OpenClaw,直接把下面这句话发给你的龙虾:
请按照这个 SKILL.md 帮我完成 Star Office UI 的部署:
https://github.com/ringhyacinth/Star-Office-UI/blob/master/SKILL.md
龙虾会自动完成 clone、安装依赖、启动后端、配置状态同步,并把访问地址发给你。
环境要求:Python 3.10+(代码使用了
X | Yunion type 语法,不支持 3.9 及更低版本)
# 1) 下载仓库
git clone https://github.com/ringhyacinth/Star-Office-UI.git
cd Star-Office-UI
# 2) 安装依赖(需要 Python 3.10+)
python3 -m pip install -r backend/requirements.txt
# 3) 准备状态文件(首次)
cp state.sample.json state.json
# 4) 启动后端
cd backend
python3 app.py
打开 http://127.0.0.1:19000 然后试试切状态:
python3 set_state.py writing "正在整理文档"
python3 set_state.py error "发现问题,排查中"
python3 set_state.py idle "待命中"

这是完整体验。Agent 在工作时自动切换状态,办公室里的像素角色会实时走到对应区域——你只需要打开网页,就能看到 AI 此刻在做什么。
也完全可以部署。你可以:
set_state.py 或 API 手动 / 脚本推送状态idle / writing / researching / executing / syncing / error)自动映射到办公室不同区域,动画 + 气泡实时展示memory/*.md 读取最近一天的工作记录,脱敏后展示为"昨日小记"卡片cd Star-Office-UI
python3 -m pip install -r backend/requirements.txt
cp state.sample.json state.json
cd backend
python3 app.py
打开 http://127.0.0.1:19000
✅ 首次部署可以先保留默认配置;在生产环境中,请复制
.env.example为.env并设置强随机的FLASK_SECRET_KEY与ASSET_DRAWER_PASS,避免弱密码和会话泄露。
python3 set_state.py writing "正在整理文档"
python3 set_state.py syncing "同步进度中"
python3 set_state.py error "发现问题,排查中"
python3 set_state.py idle "待命中"
cloudflared tunnel --url http://127.0.0.1:19000
拿到 https://xxx.trycloudflare.com 链接即可分享。
python3 scripts/smoke_test.py --base-url http://127.0.0.1:19000
所有检查显示 OK 即表示部署成功。
以下内容面向 OpenClaw 用户。如果你不使用 OpenClaw,可以跳过这一节。
在你的 SOUL.md(或 Agent 规则文件)中加入以下规则,让 Agent 自觉维护状态:
## Star Office 状态同步规则
- 接到任务时:先执行 `python3 set_state.py <状态> "<描述>"` 再开始工作
- 完成任务后:执行 `python3 set_state.py idle "待命中"` 再回复
6 种状态 → 3 个区域的映射:
| 状态 | 办公室区域 | 触发场景 |
|------|-----------|---------|
| idle | 🛋 休息区(沙发) | 待命 / 任务完成 |
| writing | 💻 工作区(办公桌) | 写代码 / 写文档 |
| researching | 💻 工作区 | 搜索 / 调研 |
| executing | 💻 工作区 | 执行命令 / 跑任务 |
| syncing | 💻 工作区 | 同步数据 / 推送 |
| error | 🐛 Bug 区 | 报错 / 异常排查 |
Step 1:准备 join key
首次启动后端时,如果当前目录下不存在 join-keys.json,服务会自动根据 join-keys.sample.json 生成一个运行时的 join-keys.json(内含示例 key,例如 ocj_example_team_01)。你可以在生成后的 join-keys.json 中自行添加、修改或删除 key,每个 key 默认支持最多 3 人同时在线。
Step 2:让访客 Agent 运行推送脚本
访客只需下载 office-agent-push.py,填写 3 个变量即可:
JOIN_KEY = "ocj_starteam02" # 你分配的 key
AGENT_NAME = "小明的龙虾" # 显示名称
OFFICE_URL = "https://office.hyacinth.im" # 你的办公室地址
python3 office-agent-push.py
脚本会自动加入办公室并每 15 秒推送一次状态。访客会出现在看板上,根据状态自动走到对应区域。
Step 3(可选):访客安装 Skill
访客也可以把 frontend/join-office-skill.md 作为 Skill 使用,Agent 会自动完成配置和推送。
详细的访客接入说明见
frontend/join-office-skill.md
| 端点 | 说明 |
|------|------|
| GET /health | 健康检查 |
| GET /status | 获取主 Agent 状态 |
| POST /set_state | 设置主 Agent 状态 |
| GET /agents | 获取多 Agent 列表 |
| POST /join-agent | 访客加入办公室 |
| POST /agent-push | 访客推送状态 |
| POST /leave-agent | 访客离开 |
| GET /yesterday-memo | 获取昨日小记 |
| GET /config/gemini | 获取 Gemini API 配置 |
| POST /config/gemini | 设置 Gemini API 配置 |
| GET /assets/generate-rpg-background/poll | 轮询生图进度 |
desktop-pet/ 目录提供了一个基于 Electron 的桌面封装版本,可以把像素办公室变成一个透明窗口的桌面宠物。
cd desktop-pet
npm install
npm run dev
http://127.0.0.1:19000/?desktop=1⚠️ 这是一个可选的实验性功能,目前主要在 macOS 上开发测试。详见
desktop-pet/README.md。🙏 桌面宠物版由 @Zhaohan-Wang 独立开发,感谢他的贡献!
访客角色动画使用了 LimeZu 的免费资产:
请在二次发布 / 演示时保留来源说明,并遵守原作者许可条款。
LICENSE)如需商用,请将所有美术资产替换为你自己的原创素材。
| 日期 | 概要 | 详情 |
|------|------|------|
| 2026-03-06 | 🔌 默认端口调整 — 默认后端端口从 18791 调整为 19000,以避开 OpenClaw Browser Control 端口冲突;同步更新脚本、桌面壳与文档默认值 | docs/CHANGELOG_2026-03.md |
| 2026-03-05 | 📱 稳定性修复 — CDN 缓存修复、生图异步化、移动端侧边栏优化、Join Key 过期与并发控制 | docs/UPDATE_REPORT_2026-03-05.md |
| 2026-03-04 | 🔒 P0/P1 安全加固 — 弱密码拦截、后端模块拆分、stale 状态自动回 idle、首屏骨架屏优化 | docs/UPDATE_REPORT_2026-03-04_P0_P1.md |
| 2026-03-03 | 📋 开源发布检查清单完成 | docs/OPEN_SOURCE_RELEASE_CHECKLIST.md |
| 2026-03-01 | 🎉 v2 重制发布 — 新增三语支持、资产管理系统、AI 生图装修、美术资产全面替换 | docs/FEATURES_NEW_2026-03-01.md |
Star-Office-UI/
├── backend/ # Flask 后端
│ ├── app.py
│ ├── requirements.txt
│ └── run.sh
├── frontend/ # 前端页面与资产
│ ├── index.html
│ ├── join.html
│ ├── invite.html
│ └── layout.js
├── desktop-pet/ # Electron 桌面宠物版(可选)
├── docs/ # 文档与截图
│ └── screenshots/
├── office-agent-push.py # 访客推送脚本
├── set_state.py # 状态切换脚本
├── state.sample.json # 状态文件模板
├── join-keys.sample.json # Join Key 模板(启动时生成 join-keys.json)
├── SKILL.md # OpenClaw Skill
└── LICENSE # MIT 许可
No comments yet. Be the first to share your thoughts!