
Cubicle
A live office for your AI agents, read-only by design
97 followers
A live office for your AI agents, read-only by design
97 followers
Watch Claude Code, Codex, Gemini CLI and Paperclip agents work in a live office: they sit down and type, raise a hand or line up at your desk when they need you, and go to the lounge when done. KPI board for your tasks, Telegram alerts with the agent's questions, phone view, pixel or HD themes, real faces, your logo. One command (npx), zero dependencies, MIT. Read-only by design: it only watches; the one optional write is your own Telegram reply, posted as a comment.





Free
Launch Team

Customer.ioAutomate Messaging Everywhere — Startups Get 12 Months Free
Promoted
Hi Product Hunt!
I built Cubicle because I run a small company of AI agents on Paperclip and could not see who was doing what without reading logs.
So I gave them an office. Working agents sit down and type, an agent that needs you raises its hand (or lines up at your desk), finished ones go to the lounge, errors turn the screen red.
A few choices I care about:
• Read-only by design: it only reads; the one optional write is your own Telegram reply posted as a comment
• Zero dependencies: one Node file and one HTML page, npx @caglarutkuguler/cubicle
• Works with Paperclip, Claude Code, Codex, Gemini CLI or any tool that writes a small JSON file
• KPI board for the tasks you gave, Telegram alerts with the agent's questions, a phone view, HD themes
Try the live demo, no install: https://caglarutkuguler.github.io/cubicle/
I would love to hear what you would want to see in your own office.
Update since launch: Cubicle now handles unattended runs.
If you start Claude Code from cron, CI or an issue bot, set CUBICLE_NAME, CUBICLE_TASK_URL and CUBICLE_LINGER=1. The character is named after the ticket ("ncu-pch #42"), its card links to the issue, and it stays in the office after the run ends (red if the last turn failed). Subagents get their own desks under that name.
Still read-only, still zero dependencies, and no Paperclip needed.
Also fixed: install-hooks via npx no longer points at npm's temporary cache, so hooks survive a cache clean.
Details: github.com/caglarutkuguler/cubicle (examples/claude-code). Feedback welcome, especially from people running agents headless.
Adorable :)
@rrhoover Thanks, Ryan. Typing is a running tool call, a raised hand means that tool already paused, and the lounge is a finished turn. Same office, no install: https://caglarutkuguler.github.i...
read-only by design is the right call, honestly the part I'd be nervous about in a tool like this isn't the design, it's me. I run Claude Code most of the day and I know I'd end up with this open in a second monitor and start treating "the desks are all working, nobody's raised a hand" as proof everything's fine, when really it just means nothing's gone wrong loud enough to ask me a question yet. did you find yourself doing that during testing, checking the office instead of the actual diffs?
@galdayan
That reading is the trap, and the office will not save you from it.
Desks working and no hands means nobody is blocked on you. It does not mean the change is good. A hand is a permission prompt or a board question. Red is a failed run. Quiet typing is only a tool call still going.
The diff stays in the terminal. Cubicle is the glance that tells you when to look up. It stays read-only so it cannot become the place you approve the work.
@caglarutkuguler that's a clean reframe but it slides past my actual question - I wasn't asking whether the design is sound, I was asking if you caught yourself personally doing the lazy read during testing. genuinely curious because I know I would, at least a few times before the discipline kicks in
@galdayan No. I never treated a quiet office as proof the work was fine.
Cubicle is read-only and it mirrors the session one to one. Desks working and no hands means the tools have not paused. It is not a review.
What did go wrong in testing was local, standalone Claude Code: integration and sync between the session and the office. Those are fixed.
@galdayan
That omission is the real bug. If a hook write is dropped, the office is a stale picture and it looks calm.
There is a test for that. Twenty-five Claude Code hook runs at once must all land in the office file, and a lock left behind must be taken over so the next event is not lost. If the write lands, the room matches the session. It still does not say the diff is good.
Your agents get desks, line up with questions, and take coffee breaks in a lounge while a single HTML page makes GET requests against a local JSON file. Tailing a process log feels like executive management once you draw four chairs and a water cooler.
@konstantin_tikhaev
That is the job. A desk while a tool call is running, a place in line when something is waiting on you, the lounge when the turn is over.
The page itself only sends GET requests. Paperclip, Claude Code, Codex and Gemini CLI all show up through that, and anything else can be one JSON file. The water cooler is there so you can see who needs you without tailing the log.
@caglarutkuguler The queue of chairs shows a blocked state faster than multiplexed terminal logs. Physical presence solves the attention problem.
@konstantin_tikhaev That line is only the blocked state. On Paperclip it is an issue waiting on you. On Claude Code, Codex, and Gemini it is a permission prompt or the CLI waiting for input. You still answer in the terminal, or on the Paperclip issue. Cubicle does not continue the run.
@konstantin_tikhaev That is the boundary. The room tells you who is stuck and who is still in a tool call. The terminal stays the place you read the diff and answer. Putting that terminal inside the office would only be a second, worse copy of the log.
agents lining up at your desk when they're blocked on you is a delightful way to show it, and read-only by design is a smart call. how do you detect that an agent is waiting for input across claude code, codex and gemini cli, hooks or reading the terminal?
@nikolas_dimitroulakis Claude Code is hooks. npx @caglarutkuguler/cubicle install-hooks once, then one character per session. A raised hand means the tool already paused: a permission prompt, or the CLI waiting for input. Codex and Gemini use that same paused state. Cubicle only draws it. It does not approve or continue the run. You answer in the terminal.