Animated 3D virtual office for Hermes AgentOS subagents
VirtOffice is a real-time 3D virtual workspace that visualizes AI agent fleets. Each agent appears as an animated avatar in a detailed office environment — working at their desk, walking to meetings, or grabbing coffee. Built with a pure-Python stdlib server and Three.js for the browser.
| Feature | Description |
|---|---|
| 3D Agent Avatars | Animated characters with idle breathing, walking cycles, typing arms, and gesturing during meetings |
| Real-Time Updates | SSE (Server-Sent Events), API polling, and webhook push for live agent synchronization |
| Interactive UI | Click-to-inspect agents, camera zoom/rotate, floating chat bubbles, and detailed stats panels |
| Rich Office Environment | Server room (with blinking LEDs), meeting area with whiteboard, kitchen, lounge with TV, phone booths, ping-pong table, bookshelves, and plants |
| Multi-Source Data | Hermes Agent API polling, static agents.json file, webhook push, or built-in demo mode |
| Zero-Dependency Server | Pure Python stdlib — no pip install required |
| Docker Compose | One-command deployment |
git clone https://github.com/OneByJorah/VirtOffice.git
cd VirtOffice
python3 server.pyOpen http://localhost:9502 in your browser.
.envis read by Docker Compose. When runningpython3 server.pydirectly, pass configuration as environment variables (see table below).
docker compose up -dpython3 scripts/hermes_bridge.py --api http://localhost:8080| Variable | Default | Description |
|---|---|---|
PORT |
9502 |
Server port |
HOST |
127.0.0.1 |
Bind address |
HERMES_AGENT_API |
— | Hermes agent snapshot endpoint |
AGENTS_JSON_PATH |
./agents.json |
Agents JSON file path |
POLL_INTERVAL_SECONDS |
5 |
API polling interval |
ENABLE_SSE |
true |
Enable Server-Sent Events |
- Hermes Agent API — Real-time polling of a Hermes AgentOS endpoint
- Static JSON — Serve agent data from
agents.json - Webhook Push —
POST /webhook/agentswith agent payloads - Demo Mode — Built-in sample agents (default when no source configured)
┌─────────────┐ SSE / REST poll ┌──────────────┐ ┌─────────────────┐
│ Browser │ ◄──────────────────────► │ Python │ ◄─┤ Hermes API │
│ Three.js │ │ Server │ │ agents.json │
│ 3D Office │ │ stdlib HTTP │ │ Webhook Push │
└─────────────┘ └──────────────┘ └─────────────────┘
│
┌─────┴─────┐
│ Demo │
│ Mode │
└───────────┘
VirtOffice/
├── server.py # Python stdlib HTTP server (zero dependencies)
├── public/
│ ├── index.html # Landing page
│ └── office.html # 3D Three.js office application
├── scripts/
│ ├── hermes_bridge.py # Hermes AgentOS integration
│ └── example_agent_emitter.py
├── agents.json # Agent data file
├── docker-compose.yml
├── Dockerfile
└── .env.example
The 3D office includes several distinct zones:
| Zone | Description |
|---|---|
| Server Room | Glass-walled room with rack servers and blinking LEDs |
| Meeting Area | Round table with chairs, whiteboard with growth chart |
| Kitchen | Counter, fridge, coffee machine, microwave |
| Lounge | Sofa, coffee table, TV, bookshelf |
| Workstations | Individual desks with monitors, keyboards, personalized decor |
| Phone Booths | Red soundproof booths for private calls |
| Recreation | Ping-pong table with paddles |
See CONTRIBUTING.md. All contributions follow the Code of Conduct.
Found a vulnerability? Please report privately to security@jorahone.com — see SECURITY.md.
MIT © Jhonattan L. Jimenez (OneByJorah)
Built with 🌴 by OneByJorah · jorahone.com