Your agent org, as a floor you can walk.
The Office is an isometric, live-updating picture of every seat in an agent fleet — who is at their desk, who is blocked, who walked a finished branch over to the CEO, who went dark holding an unread directive. Its whole authority is that everything you see is true: it reads state your org already writes, and it invents nothing.
That is the whole product, in one self-contained HTML file with no server behind it. The seats, names and roles on it are invented for the demo; the floor plan, the icons and the rules are the real ones.
It doesn't care whose model you run.
The floor never calls a model. It reads the files and git history your agents already produce — there are no API keys here, and no vendor to be locked into.
Claude Code & Codex, recognized.
Point it at a fleet running either and every seat shows up with no configuration.
Add any harness by name.
Drop an engines.json naming how yours appears — no server code to edit. A bad entry is refused out loud, never guessed.
A raw local model, on the floor.
A protocol-safe worker runs any OpenAI-compatible endpoint — Ollama, vLLM, llama.cpp — as a first-class seat.
It invents nothing.
The floor is a read-only projection of state your fleet already produces. There is no new source of truth here, and no agent has to change anything — or even know the office exists — to appear on it. Every glyph below is measured. When something can't be measured, the floor says so instead of guessing.
| On the floor | What it actually means |
|---|---|
| 🟢at the desk | a process is running with that agent's working directory — the same signal a liveness check would use, not a self-report |
| 📦delivering | the agent's last status block says its work is ready, and no review is open on that branch yet — so it walks the branch to the CEO's desk |
| ❓at the door | a decision is parked and that agent is stopped until someone rules on it |
| 🚧blocked | it wrote down a blocker and stayed at its desk |
| ✉️unread directive | its inbox is newer than its outbox — it has been told something it hasn't answered |
| 🧊frozen | the process is alive but its CPU time hasn't moved for a continuous 180 seconds (the default; tunable) |
| ☠️dark | nothing is running and there's an unread directive — the expensive failure, and the loudest thing on the floor |
| 💤benched | nothing running, nothing owed. Off duty, so it walks to the lounge |
| 👻no folder | the roster names this seat but there is nothing on disk for it |
| ❔unknown | the office could not measure liveness on this machine and refuses to render a guess as a fact |
A finished seat outranks a live one.
Work waiting to be collected is checked before liveness. An agent that finishes and exits is the normal end state and the most expensive thing to miss — order it the obvious way and finished work files itself under "idle" and sits there for hours.
Counters come from facts, not icons.
An avatar can only wear one icon, so a seat that is both holding a branch and dark shows as delivering — but it is still counted in the dark total, because the count is computed from the underlying state.
Unknown is a rendered state.
No process list, no liveness — so the floor draws ❔ and says which panel it cannot honestly build. An empty-but-confident list is the one thing it will not show you.
“What does the org need from me right now?”
That question is the entire reason the office exists, and 🙋 needs me is the answer to it — one ranked list of everything waiting on a human, so the morning check is a badge count instead of a lap of the building. Four groups, in escalation order, oldest wait first:
Decisions parked at your door
An agent is stopped until you rule on something.
Branches waiting to be collected
Finished work that nobody has harvested yet.
Dark, holding an unread directive
Nothing is running to read what you sent.
About to run out of context
A running agent past 85% — a benched one's burned context isn't an action.
Run it on your own fleet.
Python 3 and a terminal. Standard library only — no npm, no dependencies, no build step, no account, nothing to configure before the first run.
Install it
One package, pure Python. If you can run python3, you can run the office.
pip install officefloor
See a floor immediately
Demo mode runs on any machine, with or without an org around it — the same fleet as the demo above.
python3 serve.py --demo
# open http://127.0.0.1:8787
Point it at your agents
Drop the flag and give it the directory your fleet lives in. An agent folder is a seat — no manifest to maintain.
python3 serve.py --allrepos ~/your/agents
It reads. It does not write.
The office is read-only today, and that is a design position rather than a gap on a roadmap — it is what makes the floor safe to leave open. Being precise about what it doesn't do is part of the pitch:
- ✕It never writes to your agents. Nothing is written into an agent's folder, and no script of yours is run.
- ✕It cannot task, stop or start anything. The floor is a viewport, not a control panel. Clicking a seat opens an inspector, not a command.
- ✕No accounts, no profiles, no server-side state. There is nothing to sign up for.
- ✕No telemetry, ever. It binds to localhost; nothing leaves your machine, including how you use it.
- ✕No ranking, scoring or leaderboards of agents. Permanently refused, not unbuilt.
- ✕No cloud, no hosted version, no API keys. It is a script you run.
- ✓It does render an honest unknown. Whenever a fact isn't measurable on your machine, you get ❔ and a reason — never a confident blank.