diff --git a/README.md b/README.md
index bfe085a..59e847e 100644
--- a/README.md
+++ b/README.md
@@ -1,96 +1,164 @@
+
+
+

+
# telecode
**Launch, watch, and steer Claude Code agents on your own machine — from any browser.**
-telecode is an open-source, self-hostable command center for coding agents. The agents run on _your_
-computer, where your code already is; a responsive web app (an installable PWA — no native app) lets you
-launch them, watch them work, and approve each consequential action from your phone or another laptop.
-Session content is end-to-end encrypted, so the server in the middle only ever forwards ciphertext.
+The agents run on _your_ computer, where your code already is. A responsive web app — an installable PWA,
+no native app — lets you launch them, watch them work, and approve each consequential action from your
+phone or another laptop. Session content is **end-to-end encrypted**, so the server in the middle only
+ever forwards ciphertext.
+
+[](LICENSE)
+[](https://www.npmjs.com/package/@telecode/cli)
+[](packages/protocol)
+[](apps/web)
+[](apps/relay)
+[](packages/daemon)
+[](docs/end-to-end-encryption.md)
+
+[Why](#why-its-built-this-way) ·
+[Architecture](#architecture) ·
+[How it connects](#how-it-connects) ·
+[Quick start](#quick-start) ·
+[Security](#security--privacy) ·
+[Docs](#documentation)
+
+
+
+---
## Why it's built this way
-- **Execution stays on your machine.** Agents run locally, with your tools and credentials. There is no
- cloud execution — that's a product promise, not a detail.
-- **Outbound-only.** Both your machine (the daemon) and your browser dial _out_ to a relay; nothing ever
- reaches _into_ your machine. No ports to open, no inbound access.
-- **End-to-end encrypted.** Prompts, output, diffs, and transcripts are encrypted in the browser and the
- daemon. The relay sees only routing metadata (see the [threat model](docs/threat-model.md)).
-- **You hold the gate.** Every consequential tool call pauses for your approval before it runs.
-- **Open and self-hostable.** Run the whole thing yourself; the relay is the only piece that could live
- elsewhere, and even then it sees only ciphertext.
+Remote-control tools for coding agents usually run the agent **in the cloud** and ask you to trust a
+closed service with your code and your keys. Telecode inverts that: the agent runs **where your code
+already is — your machine** — and the network in the middle is reduced to a dumb, blind courier.
-## How it fits together
+| Principle | What it means |
+| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| **Execution stays on your machine** | Agents run locally, with your tools and credentials. There is no cloud execution — a product promise, not a detail. |
+| **Outbound-only** | Both your machine (the daemon) and your browser dial _out_ to a relay; nothing ever reaches _into_ your machine. No ports to open. |
+| **End-to-end encrypted** | Prompts, output, diffs, and transcripts are encrypted in the browser and the daemon. The relay sees only routing metadata. |
+| **You hold the gate** | Every consequential tool call pauses for your approval before it runs. |
+| **Open & self-hostable** | Run the whole thing yourself; the relay is the only piece that could live elsewhere, and even then it sees only ciphertext. |
-| Part | Role |
-| ---------- | ---------------------------------------------------------------------------------------------- |
-| **Daemon** | Runs on your machine via the Claude Agent SDK; spawns and supervises agent sessions. |
-| **Relay** | A stateless multiplexer + device/session registry. Forwards ciphertext; never runs agents. |
-| **Web** | A SvelteKit PWA: launch sessions, watch the stream, approve tool calls, steer with follow-ups. |
+## Architecture
+
+A small TypeScript monorepo: a SvelteKit PWA and a Claude-Agent-SDK daemon talk through a thin Fastify +
+`ws` relay, over one shared, zod-validated wire contract.
```mermaid
flowchart LR
- subgraph machine["Your machine"]
- D["Daemon