Workspace apps
May 21, 2026 · View on GitHub
The most distinctive thing about Lilo: the agent builds its own apps. Each
app lives as a directory of HTML and assets under $LILO_WORKSPACE_DIR/, runs
in a sandboxed iframe, and can read/write its own files, open chats, and make
HTTP calls through a built-in window.lilo API.
Ask the agent "build me a habit tracker" and it scaffolds one. No build step.
A workspace app is just a directory under $LILO_WORKSPACE_DIR/:
workspace/
├── todo/
│ ├── index.html
│ ├── manifest.json # { "name": "TODO", "icon": "icon.png" }
│ └── icon.png
├── calories/
│ └── index.html
└── …
Each app is served at http://localhost:8787/workspace/<app-name>/ and
rendered inside the Lilo viewer in a sandboxed iframe. Apps can:
- Read/write their own files through a built-in
window.lilo.fsAPI - Open new chats via
window.lilo.os.chats.create(...)— used by the default Desktop's "Chat with Lilo" prompt box - Call other apps (e.g. open another file in the viewer)
- Make HTTP requests through the backend's proxy, so they can talk to external APIs without CORS pain
The agent writes HTML and JavaScript directly into the app directory and opens it in the viewer.
Element picker
Click the cursor icon in the composer while an app is open, hover any element in the app, and click. Its HTML, tag, text preview, and screenshot are attached to your next message — so "make this button bigger" actually means something.