diff --git a/README.md b/README.md
index 8316257..ad7aaab 100644
--- a/README.md
+++ b/README.md
@@ -184,6 +184,63 @@ See [doc/REMOTE_EXECUTION.md](doc/REMOTE_EXECUTION.md) for the design.
## Architecture
+```mermaid
+graph TB
+ subgraph Frontends
+ TER[Terminal
b / bfg / sh]
+ ACME[Plan 9 acme]
+ EMACS[Emacs
ellie.el]
+ KDE[KDE
plasmoid / GUI / Kate
KRunner / tray]
+ WEB[Web UI
Preact SPA]
+ end
+
+ subgraph "olliesrv"
+ 9P[9P Filesystem]
+ DBUS[D-Bus Adapter]
+ SM[Session Manager]
+ CORE[Core Library
agent loop · compaction
prompt templates]
+ ROUTE[Router
complete · generate · route]
+ TOOLS[Tool Registry
lazy-load · dispatch]
+ SB[Landlock Sandbox]
+ end
+
+ subgraph "LLM Backends"
+ OLL[Ollama]
+ OAI[OpenAI / OpenRouter]
+ ANT[Anthropic]
+ COP[Copilot]
+ KIRO[Kiro]
+ end
+
+ subgraph Execution
+ LOCAL[Local Tools
file_read · lsp_* · shell
memory_* · gui_*]
+ REMOTE[ollie-remote
via SSH]
+ RTOOL[Remote Tools]
+ end
+
+ HTTPGW[ollie-httpgw
HTTP→9P gateway]
+
+ %% Frontend connections
+ TER & ACME & EMACS -->|9P| 9P
+ KDE -->|D-Bus| DBUS
+ WEB --> HTTPGW --> 9P
+
+ %% Internal layers
+ 9P --> SM
+ DBUS --> SM
+ SM --> CORE
+ CORE --> ROUTE
+ CORE --> TOOLS
+ TOOLS --> SB
+
+ %% Backend connections
+ CORE -->|streaming| OLL & OAI & ANT & COP & KIRO
+
+ %% Tool execution
+ SB --> LOCAL
+ SB -->|SSH| REMOTE --> RTOOL
+```
+
`olliesrv` is a single binary that operates in three modes:
| Mode | Flags | Interface | Frontends |