简体中文 | English | 한국어 | Français | Deutsch | 日本語 | Русский | Español | Português | Italiano | Tiếng Việt | العربية
A pixel-office dashboard for multi-agent collaboration: it visualizes what your AI assistants (OpenClaw, Lobster, etc.) are doing in real time—who is active, what happened “yesterday,” and who is online—so humans can read the room at a glance.
This repo is a Node.js / Express take on the upstream Star-Office-UI idea. It keeps the same look-and-feel and HTTP contract so existing agents and scripts need little or no change, while the backend is structured for long-running service use—not a single giant script.
This project supports four styles: Pixel, Soft, Night Blue, and Paper, with Pixel style as the default.
- Service-shaped codebase: routes, services, config, and bootstrap live under
src/instead of one monolithic file. Easier to review, test, and extend. - Toolchain is part of the product: pnpm and Node ≥ 20 are enforced (
engines,only-allow,.npmrcengine-strict, plus a startup guard insrc/bootstrap/env-check.js). CI and onboarding behave the same way everywhere. - Ops-friendly process: HTTP server uses graceful shutdown on
SIGTERM/SIGINT(Docker/K8s friendly).GET /healthfor liveness andGET /readyafter persistence is initialized. - State on disk: main status, multi-agent roster, and join keys are JSON files beside the app—simple to back up, diff, and ship with compose volumes.
- Yesterday memo reads markdown from a sibling
memory/directory (seeGET /yesterday-memo), turning diary files into a gentle “what we did last time” blurb.
Upstream lineage and thanks are below; the sections after that cover how to run and integrate.
- Upstream: ringhyacinth/Star-Office-UI
- Original author: Ring Hyacinth (and contributors)
- This repository: Express backend rewrite and project layout by wangmiaozero
Thanks for open-sourcing the pixel-office concept, assets, and interaction design.
Requires Node ≥ 20 and pnpm ≥ 9 (install pnpm if needed).
git clone https://github.com/wangmiaozero/Star-Office-UI-Node.git
cd Star-Office-UI-Node
pnpm install
pnpm startDefault URL: http://127.0.0.1:18791
Development with file watch:
pnpm devIf the port is busy:
PORT=18792 pnpm startOptional env file:
cp .env.example .envSKIP_PNPM_CHECK=1 is documented only for edge cases where you must run node src/server.js without pnpm—it is not recommended for production.
docker compose up -dThen open: http://127.0.0.1:18791
Set the main agent state (CLI helper):
pnpm set-state writing "Drafting docs"Health and readiness:
curl -s http://127.0.0.1:18791/health
curl -s http://127.0.0.1:18791/readyGET /health— livenessGET /ready— readiness (after startup checks)GET /status— main agent statusPOST /set_state— set main agent statusGET /agents— list agents (guest cleanup / offline logic applied)POST /join-agent— guest agent joinPOST /agent-push— guest status pushPOST /leave-agent— guest leavePOST /agent-approve/POST /agent-reject— approve or reject guestGET /yesterday-memo— memo derived frommemory/YYYY-MM-DD.mdGET /,/join,/invite— web entry pages; static assets under/static
idle,writing,researching,executing,syncing,error
Compatibility mapping:
working/busy/write→writingrun/running/execute/exec→executingsync→syncingresearch/search→researching
curl -s -X POST http://127.0.0.1:18791/join-agent \
-H "Content-Type: application/json" \
-d '{
"name": "openclaw-agent-01",
"joinKey": "ocj_starteam02",
"state": "idle",
"detail": "just joined"
}'curl -s -X POST http://127.0.0.1:18791/agent-push \
-H "Content-Type: application/json" \
-d '{
"agentId": "agent_xxx",
"joinKey": "ocj_starteam02",
"name": "openclaw-agent-01",
"state": "writing",
"detail": "working on current task context"
}'curl -s -X POST http://127.0.0.1:18791/leave-agent \
-H "Content-Type: application/json" \
-d '{"agentId":"agent_xxx"}'Suggested lifecycle:
- Call
join-agenton startup - Persist
agentIdlocally - Push on an interval
- Call
leave-agenton graceful shutdown - On
403/404, stop pushing and re-join or alert
- Code: MIT
- Art assets may carry additional terms from upstream; for commercial use, replace with your own assets where needed.
If this project helps you, a star is appreciated.
Made with ❤️ by wangmiaozero



