vibeoffice
v1.1.0
Published
A cozy pixel-art office where your Claude Code agents live
Readme
🏢 vibeoffice
A cozy pixel-art office where your Claude Code agents live.
Every Claude Code session you run becomes a little pixel person at a desk. They type when the agent edits code, leaf through papers when it reads files, walk to the coffee machine when it waits for your permission, fall off the chair when a tool errors out — and confetti flies when the job ships.
It's a meme. It's also a genuinely useful glanceable monitor for multi-agent work: who's running, who's stuck waiting, who's burning tokens, and how much today costs.

What's new in v1.1.0
- Pick the model when you hire — Opus 4.8, Sonnet 5 or Haiku 4.5, right in the hire dialog.
- Visual overhaul — tiled floor with real zones (kitchen, lounge, meeting corner, work rug), redrawn sprites with outlines and shading, day/night lighting with window light beams, and live micro-animations: coffee steam, dust motes in the sun, water-cooler chatter.
Quick start
npx vibeofficeThat's the whole thing — one command downloads it, starts the server and opens the office in your browser (http://localhost:4180). If Claude Code is running anywhere on your machine, the office is already alive.
- Run it again: same command, every time
- Stop it:
Ctrl+Cin that terminal - Port taken?
npx vibeoffice --port 4200 - Want a permanent command?
npm i -g vibeoffice, then justvibeoffice
No Claude Code right now? Watch the show anyway:
npx vibeoffice --demoOr from source: git clone https://github.com/acost1a/vibeoffice && cd vibeoffice && npm i && npm run build && node dist/server/cli.js
What you're looking at
| In the log | In the office |
|---|---|
| New session starts | Character walks in through the door |
| Read / Grep / Glob | Leafs through papers 📄 |
| Edit / Write | Types furiously, code scrolls on the monitor ⌨️ |
| Bash | Terminal window blinks on the desk 🖥️ |
| WebSearch / WebFetch | Globe thought-bubble 🌐 |
| Spawns a subagent (Task) | New hire walks in, gets a whiteboard briefing ✏️, sits next to the parent |
| Waiting for permission | Walks to the coffee machine, bell rings by the door ☕🔔 |
| Tool fails | Falls off the chair, red alarm spins, a coworker comes to gawk ❗ |
| Idle 5+ minutes | Naps on the lounge couch 💤 |
| Session ends | Waves goodbye, confetti, +1 on the shipped counter 🎉 |
Plus an office that lives its own life: NPC coworkers who print, water plants and gossip, a cat that chases the robot vacuum (and sometimes rides it), an aquarium, clouds drifting past the windows, real-time wall clock, day/night lighting after 7pm, pizza at lunch, and a wall TV charting your token burn in real time.
Click any character for details: current action, file being edited, model, tokens, cost, recent tool calls.
Run the office, don't just watch it
- ➕ HIRE AGENT — pick a specialization (📊 Excel Master, 📝 Word Master, 📽️ PowerPoint Master, 🧑💻 Coder, 🔍 Researcher), a model (🧠 Opus 4.8 / ⚖️ Sonnet 5 / 🐇 Haiku 4.5), type a task, choose a folder. A real Claude session spawns and walks in through the door.
- Chat at the desk — click a hired agent and message it straight from the office.
- Permissions at the coffee machine — when a hired agent needs a risky tool, it walks off for a coffee and an ALLOW / DENY card pops up for you.
- 🛑 Fire them whenever you like.
Hiring runs on the Claude Agent SDK with your existing local Claude login. Sessions started from your own terminal stay read-only («👁 observed») — their stdin belongs to your terminal, not the office.
How it works
Claude Code writes every session to JSONL files in ~/.claude/projects/. vibeoffice tails those files (read-only — it never touches Claude Code itself), normalizes them into events, runs a small state machine per agent, and streams updates to the browser over WebSocket. The scene is PixiJS; every sprite is drawn in code, no asset files.
~/.claude/projects/**/*.jsonl → tail → adapter → state machine → WebSocket → pixel officeZero configuration. Zero hooks. Nothing phones home — everything stays on your machine.
Flags
--port <n> port to listen on (default 4180)
--dir <path> logs dir, if yours lives somewhere unusual (default ~/.claude/projects; handy for WSL setups)
--demo replay a bundled session — no Claude Code needed
--no-open don't auto-open the browserCross-platform
macOS, Linux, Windows. If Claude Code runs inside WSL but vibeoffice outside (or vice versa), point it at the logs with --dir.
Roadmap
- [ ] Adapters for Codex CLI and Gemini CLI (the
Adapterinterface is already there) - [ ] Project rooms with doors and nameplates
- [ ] Sound (keyboard clatter, coffee machine, cat)
- [ ] Stream overlay mode
License
MIT
