A pixel-art office where your Claude Code sessions come to life as coworkers
JavaScript
1
3 commits
updated Sep 28, 2026
A pixel-art office where your Claude Code sessions come to life as coworkers.

When you run several Claude Code sessions at once, it gets hard to keep track of them: which one is busy, which one is waiting for your permission, which one finished ten minutes ago and is waiting on you. Agent Office reads the session data Claude Code already keeps on your machine and turns every session into a little pixel-art employee with a desk, a status, a personality and a career. You can see at a glance who needs you, jump back into any session with one click, and have some fun along the way.
It is a single zero-dependency Node server plus a canvas front end. Every sprite is drawn procedurally in code; there are no image assets.
Live status comes from ~/.claude/sessions:
--append-system-prompt (a Perfectionist tests everything, a Detective finds the root cause first, a Senior keeps diffs minimal).claude -p run with read-only tools that hands in a 📋 report, shown in the agent's panel.Press D for the office dashboard:
cd <project> && claude --resume <id> and open their panel:
claude --session-id <new id> in the chosen folder, with the personality and role pre-assigned.claude process with SIGTERM (two-step confirm; the transcript is kept).matrix (or click the white rabbit that sometimes hops by) for digital rain and trench coats; type bluepill to leave. The Konami code works too.![]() The office. Cubicles grouped by project, private offices up top, break rooms below. | ![]() Agent panel. A QA Tester that ran in the background and handed in a report. |
![]() Dashboard. Spend, work time and who needs you. | ![]() Employees. Status, motivation, level, cost and context for everyone. |
![]() Hire a new agent. Pick a role, a personality and where they should work. | ![]() Matrix mode. Follow the white rabbit. |
All screenshots use demo mode: the agents, projects and numbers are made up.
git clone https://github.com/alminisl/agent-office && cd agent-office && npm start
Then open http://localhost:4747. Press ? in the app for the legend and shortcuts.
Want to try it without touching your own sessions, or show it in a talk?
npm run demo
Demo mode serves a completely made-up office. Nothing is read from ~/.claude.
There is nothing to install: no dependencies, no build step.
Sessions come from the transcripts in ~/.claude/projects/**.jsonl (the last 14 days, up to 20 cubicles; running sessions are always shown). Transcripts are parsed for titles, prompts, replies, tool calls, files, lines changed, PRs, cost and context usage, and cached by modification time.
Live status comes from ~/.claude/sessions, which tells the office which sessions are running, busy or waiting.
Helpers are the subagent transcripts of a running session that were touched in the last 45 seconds.
Ask has two modes, and both stream the answer word by word:
ASK_MODEL, default haiku) in character. It takes a few seconds whatever the session size.claude -p --resume <id> --fork-session --no-session-persistence --tools "", a throwaway fork of the full conversation with no tools. It has complete memory, but it re-reads the whole context, so it is slow and costs more on big sessions (the Ask tab shows how many tokens).Quirks are generated with a small claude -p --model haiku --tools "" call.
Background roles run claude -p with --allowedTools decided on the server per role, never taken from the browser. Anything not on the list is denied automatically in print mode, so these agents can read and inspect, but not edit, push or merge:
Read, Grep, Glob, and git log / diff / show / status / branch / fetch / blame, ls.gh pr list / view / diff / checks and glab mr list / view / diff.npm test, vitest, jest, pytest, go test, cargo test, make test, rspec, Django tests, ...).The final report is saved to data/reports/ and shown in the agent's panel.
Personalities and hidden cubicles are stored locally in data/ (ignored by git).
All settings are optional environment variables:
| Variable | Default | Description |
|---|---|---|
PORT | 4747 | Port to serve the office on |
MAX_DAYS | 14 | How many days back to look for sessions |
MAX_ROOMS | 20 | Maximum number of cubicles |
CLAUDE_DIR | ~/.claude | Where Claude Code keeps its data |
CLAUDE_BIN | claude | The Claude Code executable |
OFFICE_TERMINAL | iTerm if you run inside iTerm, else Terminal | Terminal app for New session / Open in terminal (iTerm or Terminal) |
ASK_MODEL | haiku | Model used by Quick mode in the Ask tab |
CONTEXT_WINDOW | 200000 (or 1M for [1m] models) | Context window size used for the context bar |
DEMO | unset | Set to 1 for demo mode (same as --demo) |
Example: PORT=8080 MAX_DAYS=7 npm start
| Key | Action |
|---|---|
| ? | Help |
| N | New session (hire an agent) |
| D | Office dashboard |
| S | Show / hide offline agents |
| Tab / Shift+Tab | Cycle through agents |
| O | Open the selected agent in a terminal |
| C | Copy the resume command |
| A | Ask the selected agent a question |
| H | Hide the selected cubicle |
| + / - | Zoom in / out |
| 0 | Fit to window |
| Esc | Close panel / dialogs |
127.0.0.1 only and reads your Claude Code data locally. Your transcripts are never uploaded anywhere by Agent Office.claude CLI with your account. The page also loads its fonts from Google Fonts.claude process.data/, which is git-ignored.npm run demo for screenshots, recordings and talks so no real session data is shown.~/.claude exists)server.mjs Local HTTP server: parses ~/.claude, live status, XP, Ask, roles, terminal control
demo.mjs Made-up agents and projects for demo mode
public/
index.html UI shell: header, side panel, dialogs, dashboard, help
app.js Simulation, rendering, agents' behaviour, panel, dashboard, easter eggs
world.js Office layout: cubicles, private offices, break rooms
sprites.js Procedurally drawn pixel-art characters and furniture
personas.js Personality presets, names, looks and quirks
style.css Styles
docs/ Screenshots and the GIF used in this README
data/ Your personalities, hidden cubicles and reports (git-ignored)
Issues and pull requests are welcome. The project deliberately has no dependencies and no build step, so please keep it that way. Some ideas:
Agent Office is an unofficial fan project. It is not affiliated with, endorsed by or supported by Anthropic. "Claude" and "Claude Code" are trademarks of Anthropic.
TBD
JavaScript
86.2%
HTML
7.3%
CSS
6.5%
A pixel-art office where your Claude Code sessions come to life as coworkers
JavaScript
1
3 commits
updated Sep 28, 2026
A pixel-art office where your Claude Code sessions come to life as coworkers.

When you run several Claude Code sessions at once, it gets hard to keep track of them: which one is busy, which one is waiting for your permission, which one finished ten minutes ago and is waiting on you. Agent Office reads the session data Claude Code already keeps on your machine and turns every session into a little pixel-art employee with a desk, a status, a personality and a career. You can see at a glance who needs you, jump back into any session with one click, and have some fun along the way.
It is a single zero-dependency Node server plus a canvas front end. Every sprite is drawn procedurally in code; there are no image assets.
Live status comes from ~/.claude/sessions:
--append-system-prompt (a Perfectionist tests everything, a Detective finds the root cause first, a Senior keeps diffs minimal).claude -p run with read-only tools that hands in a 📋 report, shown in the agent's panel.Press D for the office dashboard:
cd <project> && claude --resume <id> and open their panel:
claude --session-id <new id> in the chosen folder, with the personality and role pre-assigned.claude process with SIGTERM (two-step confirm; the transcript is kept).matrix (or click the white rabbit that sometimes hops by) for digital rain and trench coats; type bluepill to leave. The Konami code works too.![]() The office. Cubicles grouped by project, private offices up top, break rooms below. | ![]() Agent panel. A QA Tester that ran in the background and handed in a report. |
![]() Dashboard. Spend, work time and who needs you. | ![]() Employees. Status, motivation, level, cost and context for everyone. |
![]() Hire a new agent. Pick a role, a personality and where they should work. | ![]() Matrix mode. Follow the white rabbit. |
All screenshots use demo mode: the agents, projects and numbers are made up.
git clone https://github.com/alminisl/agent-office && cd agent-office && npm start
Then open http://localhost:4747. Press ? in the app for the legend and shortcuts.
Want to try it without touching your own sessions, or show it in a talk?
npm run demo
Demo mode serves a completely made-up office. Nothing is read from ~/.claude.
There is nothing to install: no dependencies, no build step.
Sessions come from the transcripts in ~/.claude/projects/**.jsonl (the last 14 days, up to 20 cubicles; running sessions are always shown). Transcripts are parsed for titles, prompts, replies, tool calls, files, lines changed, PRs, cost and context usage, and cached by modification time.
Live status comes from ~/.claude/sessions, which tells the office which sessions are running, busy or waiting.
Helpers are the subagent transcripts of a running session that were touched in the last 45 seconds.
Ask has two modes, and both stream the answer word by word:
ASK_MODEL, default haiku) in character. It takes a few seconds whatever the session size.claude -p --resume <id> --fork-session --no-session-persistence --tools "", a throwaway fork of the full conversation with no tools. It has complete memory, but it re-reads the whole context, so it is slow and costs more on big sessions (the Ask tab shows how many tokens).Quirks are generated with a small claude -p --model haiku --tools "" call.
Background roles run claude -p with --allowedTools decided on the server per role, never taken from the browser. Anything not on the list is denied automatically in print mode, so these agents can read and inspect, but not edit, push or merge:
Read, Grep, Glob, and git log / diff / show / status / branch / fetch / blame, ls.gh pr list / view / diff / checks and glab mr list / view / diff.npm test, vitest, jest, pytest, go test, cargo test, make test, rspec, Django tests, ...).The final report is saved to data/reports/ and shown in the agent's panel.
Personalities and hidden cubicles are stored locally in data/ (ignored by git).
All settings are optional environment variables:
| Variable | Default | Description |
|---|---|---|
PORT | 4747 | Port to serve the office on |
MAX_DAYS | 14 | How many days back to look for sessions |
MAX_ROOMS | 20 | Maximum number of cubicles |
CLAUDE_DIR | ~/.claude | Where Claude Code keeps its data |
CLAUDE_BIN | claude | The Claude Code executable |
OFFICE_TERMINAL | iTerm if you run inside iTerm, else Terminal | Terminal app for New session / Open in terminal (iTerm or Terminal) |
ASK_MODEL | haiku | Model used by Quick mode in the Ask tab |
CONTEXT_WINDOW | 200000 (or 1M for [1m] models) | Context window size used for the context bar |
DEMO | unset | Set to 1 for demo mode (same as --demo) |
Example: PORT=8080 MAX_DAYS=7 npm start
| Key | Action |
|---|---|
| ? | Help |
| N | New session (hire an agent) |
| D | Office dashboard |
| S | Show / hide offline agents |
| Tab / Shift+Tab | Cycle through agents |
| O | Open the selected agent in a terminal |
| C | Copy the resume command |
| A | Ask the selected agent a question |
| H | Hide the selected cubicle |
| + / - | Zoom in / out |
| 0 | Fit to window |
| Esc | Close panel / dialogs |
127.0.0.1 only and reads your Claude Code data locally. Your transcripts are never uploaded anywhere by Agent Office.claude CLI with your account. The page also loads its fonts from Google Fonts.claude process.data/, which is git-ignored.npm run demo for screenshots, recordings and talks so no real session data is shown.~/.claude exists)server.mjs Local HTTP server: parses ~/.claude, live status, XP, Ask, roles, terminal control
demo.mjs Made-up agents and projects for demo mode
public/
index.html UI shell: header, side panel, dialogs, dashboard, help
app.js Simulation, rendering, agents' behaviour, panel, dashboard, easter eggs
world.js Office layout: cubicles, private offices, break rooms
sprites.js Procedurally drawn pixel-art characters and furniture
personas.js Personality presets, names, looks and quirks
style.css Styles
docs/ Screenshots and the GIF used in this README
data/ Your personalities, hidden cubicles and reports (git-ignored)
Issues and pull requests are welcome. The project deliberately has no dependencies and no build step, so please keep it that way. Some ideas:
Agent Office is an unofficial fan project. It is not affiliated with, endorsed by or supported by Anthropic. "Claude" and "Claude Code" are trademarks of Anthropic.
TBD
JavaScript
86.2%
HTML
7.3%
CSS
6.5%