Go to file
王性驊 9e8f8e15e3 Merge pull request 'feat/flow' (#10) from feat/flow into main
Reviewed-on: #10
2026-09-09 07:58:05 +00:00
.cargo fix etc config yaml 2026-09-06 07:32:48 +00:00
apps/web fix group chat and linux cotainer 2026-09-09 06:41:09 +00:00
crates fix group chat and linux cotainer 2026-09-09 06:41:09 +00:00
docs fix readme 2026-09-09 07:55:39 +00:00
image fix group chat and linux cotainer 2026-09-09 06:41:09 +00:00
migrations fix group chat and linux cotainer 2026-09-09 06:41:09 +00:00
scripts fix readme 2026-09-09 07:55:39 +00:00
tests fix group chat and linux cotainer 2026-09-09 06:41:09 +00:00
.dockerignore feat: 排程、保險箱、熱機桌面與 README 2026-09-05 17:41:44 +08:00
.env.example fix group chat and linux cotainer 2026-09-09 06:41:09 +00:00
.gitignore fix cua 2026-09-09 01:14:29 +08:00
Cargo.lock fix job web 2026-09-07 14:23:38 +00:00
Cargo.toml fix job web 2026-09-07 13:08:10 +00:00
LICENSE add readme 2026-09-06 22:09:17 +08:00
Makefile fix cua 2026-09-09 01:14:29 +08:00
README.md fix readme 2026-09-09 07:55:39 +00:00
README.zh-TW.md fix readme 2026-09-09 07:55:39 +00:00
clippy.toml feat: 思考頭像即時記錄、失敗可重試,並加上 workspace lint 2026-09-07 08:27:33 +00:00
deny.toml feat: 思考頭像即時記錄、失敗可重試,並加上 workspace lint 2026-09-07 08:27:33 +00:00
docker-compose.cua.yml fix cua 2026-09-08 21:27:38 +08:00
docker-compose.dev.yml feat: 思考頭像即時記錄、失敗可重試,並加上 workspace lint 2026-09-07 08:27:33 +00:00
docker-compose.yml fix cua 2026-09-08 21:27:38 +08:00

README.md

LazyBoy

English · 繁體中文

LazyBoy

Give AI a computer so it can do the work.

A self-hosted AI agent workspace. Assign tasks in text or voice, watch the desktop live, and take over whenever you need to.

Quick start · Features · Architecture · Operations · Development

LazyBoy group chat routing one message to a single agent, with that agent's live desktop on the right

LazyBoy gives each agent its own Linux desktop in Docker — browser, terminal, and files. You can run several agents, put them in a group, turn a demonstration into a skill, and schedule it to run again.

This is an early 0.1.0 release with desktop and phone browser UIs. You bring your own model API key.

Features

  • A lasting workspace: each agent has its own chats, run history, and optional long-term memory.
  • A real computer: open pages, use the terminal, organize files, drive the GUI — and watch it live.
  • Attachments in chat: send files or images along with the message; the agent can open them on its own desktop, and inbox copies expire on their own.
  • Take over any time: sign in, pass a check, or nudge things by hand on the same desktop, then hand it back.
  • Saved logins: keep site credentials in the agent's encrypted vault, so it can fill them in at a login wall without the password ever passing through the model.
  • Several agents and groups: shared Team computers or private dedicated desktops; @name decides who answers, so a message wakes the one agent it is for instead of all of them.
  • Teach by demo, then schedule: turn a walkthrough into a skill; use cron for repeat work.
  • Your models and tools: xAI, OpenCode Go, OpenAI-compatible endpoints, MCP, and file skills.
  • Voice calls: after you enable a voice provider, you can talk to the agent on a call.
  • Phone-friendly: collapse the chat sidebar; the remote desktop has keyboard, trackpad, right-click, drag, and scroll.
  • English and Traditional Chinese: switch the UI language in the app.

Quick start

You need Docker and Compose, Git, Make, Python 3, and an API key for a supported model. On macOS use Docker Desktop or OrbStack; on Linux use Docker Engine.

From the repo root:

make env

Edit the generated .env and set one of XAI_API_KEY, OPENCODE_GO_API_KEY, or OPENAI_API_KEY. The init tool creates the login and service secrets; running it again keeps existing values.

make up
make health

Open http://127.0.0.1:3101, sign in with LAZYBOY_APP_TOKEN from .env, create an agent, and pick a model.

The first run builds the API and Linux desktop images from source and takes a while. The build toolchain lives in the containers, so a full Docker deploy does not need Rust or Node.js on the host.

Try a concrete task:

Open the site I name, summarize the page, and save the notes as a Markdown file in the workspace.

Status and logs:

make ps
make logs
make down  # stop services, keep PostgreSQL data

For resource limits, environment variables, HTTPS, and in-container sudo, see Operations.

On a phone

Desktop and phone share the same web UI. The API listens on 127.0.0.1 by default, so set LAZYBOY_BIND_IP=0.0.0.0 (or one network card's address) in .env and recreate the api container before a phone on your network can reach it; off-loopback the login token has to be at least 32 characters. Then open that address in the phone browser — 127.0.0.1 there is the phone itself and will not reach another machine.

Tap outside the chat sidebar to collapse it. On the remote desktop you can switch between tap-to-click and trackpad, and use the toolbar for keyboard, right-click, or drag. Put the service behind HTTPS before you expose it; see Operations.

Stack

  • Frontend: React 19, TypeScript, Vite, noVNC
  • Backend: Rust 2024, Axum, Tokio
  • Data: PostgreSQL, pgvector, SQLx
  • Desktop: Docker, Debian, XFCE, Chromium, Xvfb
  • Computer control: Cua Driver over X11, AT-SPI, and Chromium
  • Extensions: MCP, file skills, demonstration playbooks

Flow diagrams, handoff, component roles, and the computer lifecycle live in Architecture. The older interactive diagram is still there — download it and open it in a browser.

Local development

Besides Docker, you need a Rust toolchain that supports the 2024 edition, plus Node.js / npm.

make dev
make dev-supervisor  # terminal 1
make dev-api         # terminal 2

Frontend hot reload in another terminal:

cd apps/web
npm install
npm run dev

Open http://127.0.0.1:5173. Tests and the tree layout are in the development guide.

Docs

The guides below are currently in Traditional Chinese.

Doc Contents
Architecture Task flow, system architecture, computer lifecycle
Interactive diagram Zoomable, searchable HTML chart; download and open
Operations Resources, env vars, security, site checks, sudo
Agent experience Turn limits, persistent terminal, live chat
hermes-agent review Cua harness smoothness: comparison with hermes-agent
Development Local dev, checks and tests, directory layout
Env example Environment variables and defaults

Data

Chats, memory, browser profiles, and encrypted credentials stay on your host. When you use an external model, the prompts, tool results, and screenshots the task needs may still be sent to that provider.

Acknowledgements

LazyBoy is mostly other people's software, carefully assembled. The projects we lean on hardest:

Special thanks

  • Cua — the Linux desktop driver behind every click, keystroke, and screenshot. We rebuild cua-driver-rs v0.23.2 from source with two small patches kept in this repo: one lets the agent cursor wear the bot's own colour, the other swaps the embedded Latin-only badge font for jf open Huninn so Chinese renders. Neither patch touches input handling or permissions.
  • hermes-agent — not a dependency, but the reference we kept returning to while tuning how smooth an agent's desktop should feel. The comparison is written up in the hermes-agent review.

Agents and retrievalrig · rmcp · fastembed-rs and ONNX Runtime, running paraphrase-multilingual-MiniLM-L12-v2

Rust — Tokio · Axum · tower-http · SQLx · reqwest · rustls · Bollard · tracing · aes-gcm and hmac from RustCrypto · cap-std · cron · chrono · uuid · thiserror · dotenvy

Web — React · Vite · TypeScript · noVNC · react-markdown with remark-gfm and remark-breaks · Blobatar avatars · react-useanimations icons

DataPostgreSQL · pgvector

The desktop inside each containerDocker · Debian · XFCE · Chromium · Xvfb · Thunar · x11vnc · websockify · AT-SPI2 · gosu · LXCFS · git · zsh with Powerlevel10k · htop

Type and themejf open Huninn (SIL OFL) in the UI and on the agent badge · Noto CJK, DejaVu, and Liberation as fallbacks · MesloLGS NF in the terminal · Arc Dark and Papirus for the look of the room

Every version above is pinned in Cargo.lock, apps/web/package.json, and image/computer/Dockerfile. LazyBoy is Apache-2.0; each project keeps its own license. Thanks also to the maintainers whose names never make it into a README, and to everyone who files a good bug report.


LazyBoy

LazyBoy is free and open source. If it hands you back an afternoon, a coffee is the nicest way to say so.

Buy Me a Coffee

Apache License 2.0 Release 0.1.0 Rust and React

Daniel Wang Taiwan

igs170911@gmail.com · Apache License 2.0