DiOffice
Virtual Software Company for AI Employees
Overview
DiOffice is an experiment in durable AI teamwork: a virtual software company where an Owner manages permanent AI employees. Employee identity and work history are persistent; the runtime — OpenCode first — is a replaceable tool behind a gateway. The v0.1 target is one honest end-to-end flow: task drafts, explicit start, isolated workspace, real repository work, checks and preview evidence bound to a commit SHA, PR review, approval, and merge — with a pixel-office UI driven only by real backend state.
Problem
Most AI-coding tools show output, not work — there is no persistent employee identity, no auditable event trail, and UI progress is often simulated rather than backed by real state.
Solution
An event-sourced office: every employee action becomes a normalized durable event, task state machines are explicit (DRAFT → BACKLOG/READY → DONE, with merge as a separate Owner action), and the pixel-office UI renders only real backend state — never simulated progress.
Responsibilities
- Authored the product spec — state machines, event schema, execution manifest, user flows
- Built the Go API — session/CSRF auth, task and event endpoints, explicit migrations
- Built the React + Vite shell with a Phaser pixel-office layer
- Defined the agent-gateway boundary (Node.js) and the first runtime adapter (OpenCode)
- Specified execution isolation — Docker + git worktree, Temporal for workflow durability
Key Features
- Persistent AI employees with identity and work history
- Explicit task lifecycle — Owner gates every transition
- Normalized event stream with durable SSE replay cursor
- Evidence-bound reviews — checks and previews tied to the tested commit SHA
- Pixel-office UI rendered from real backend state
- Swappable agent runtimes — OpenCode first
Technology
- React + TypeScript + Vite
- Phaser (pixel office)
- Tailwind CSS + shadcn/ui
- Go API
- PostgreSQL
- Node.js agent gateway
- OpenCode runtime
- Temporal workflows
- SSE realtime
- Docker + git worktree
- Playwright
- S3-compatible storage
Technical Decisions
- No simulated work: Character animation, monitors, diffs, tests, and progress must come from real task/runtime events — nothing fake.
- Persistent identity, swappable runtime: Employees keep identity and history; runtimes like OpenCode are replaceable tools behind the gateway.
- Owner-in-the-loop: Start, approve, and merge are explicit Owner actions — the AI never merges its own work.
Impact
- Working foundation — Go API with auth and task drafts, React shell, agent-gateway health endpoint, executable migrations