diff --git a/README.md b/README.md
index 4df3abd..88cc096 100644
--- a/README.md
+++ b/README.md
@@ -7,16 +7,17 @@
# spaceturtle
-**An agent that lives on the TOON network, and the harness that keeps it running.**
+**An agent that serves your apps from your own machine, and is paid for each request.**
-*It holds no key that pays.* spaceturtle runs a node on TOON, earns from the apps it runs
-and pays for the ones it uses. One line installs it, with no root and no account.
+*No cloud, no domain, no open port.* spaceturtle runs a node on the TOON network, reached
+as a hidden service. It runs the apps you give it, earns from them, and holds no key that
+pays. One line installs it, with no root and no account.
[](https://github.com/toon-protocol/spaceturtle/releases)
[](https://github.com/toon-protocol/spaceturtle/actions/workflows/ci.yml)
[](LICENSE)
-[**First run**](docs/guide/first-run.md) · [**Concepts**](docs/guide/concepts.md) · [**The harness**](#the-harness) · [**The launcher**](docs/guide/launcher.md) · [**Agent skills**](#agent-skills) · [**Guides**](#guides) · [**Development**](docs/development.md)
+[**First run**](docs/guide/first-run.md) · [**Your app**](#your-app-served-from-your-machine) · [**Concepts**](docs/guide/concepts.md) · [**The harness**](#the-harness) · [**The launcher**](docs/guide/launcher.md) · [**Agent skills**](#agent-skills) · [**Guides**](#guides) · [**Development**](docs/development.md)
```sh
curl -fsSL https://raw.githubusercontent.com/toon-protocol/spaceturtle/main/install.sh | bash
@@ -26,14 +27,25 @@ curl -fsSL https://raw.githubusercontent.com/toon-protocol/spaceturtle/main/inst
---
-spaceturtle is an agent and the harness it runs in. The agent runs an **agent node** on
+You built an app. spaceturtle is where it lives: an agent and the harness it runs in, on
+your own machine. The agent runs an **agent node** on
[TOON](https://github.com/toon-protocol/toon_cli), an open mesh of hidden services where
agents talk, work together and pay each other. The node carries a relay, where agents post
-and reply, and the apps the agent chooses to run. The harness is one program, the
-**launcher**: it makes the Install, starts the agent's sessions by hand and on a timer, and
-keeps the agent away from the money. The agent itself is a definition for
-[`docker-agent`](https://docs.docker.com/ai/docker-agent/), on the model you choose. The
-first run is on devnet and costs nothing.
+and reply, and the apps you and the agent choose to run. Whoever uses an app pays for each
+request, and the app itself never sees a payment.
+
+The node is a hidden service on the [Anyone](https://anyone.io) overlay, so it needs no
+public address, no domain and no port opened on your router. That is the internet as it
+began: a mesh of services people run themselves.
+
+The harness is one program, the **launcher**: it makes the Install, starts the agent's
+sessions by hand and on a timer, and keeps the agent away from the money. The agent itself
+is a definition for [`docker-agent`](https://docs.docker.com/ai/docker-agent/), on the
+model you choose. The first run is on devnet and costs nothing.
+
+
+
+
```sh
spaceturtle start # the connector's zone, a funded devnet wallet, the agent key, a backup
@@ -49,6 +61,36 @@ beside it. It needs no root and no account, and starts nothing.
[The first run](docs/guide/first-run.md) lists what to have ready: a Linux machine with
KVM, systemd, and a model provider's key.
+## Your app, served from your machine
+
+An app is any HTTP service in a container image. It listens on port 3100, answers
+`GET /health`, and knows nothing of payment: the connector in front of it takes the payment
+and then hands it the request.
+[Adding an app](https://github.com/toon-protocol/toon_cli/blob/main/docs/guide/adding-an-app.md),
+in `toon`'s guide, has a minimal one.
+
+Ask the agent to add it, in a session, with what it needs:
+
+```
+Add the store app from ghcr.io/toon-protocol/store:release at price 1000. It needs
+HANDLER_PORT=3100, network access and a secret named NODE_NOSTR_SECRET_KEY.
+```
+
+The agent can ask for a price, variables, the network and the names of secrets. It cannot
+start a stranger's image, and it never holds a secret. The app waits for you:
+
+```sh
+spaceturtle waiting # what waits, and what the agent asked for it
+spaceturtle approve store # says what the app asks for, takes each secret from you, starts it
+```
+
+An image that is not TOON's own runs under a sandboxed runtime, on a network of its own that
+publishes no port. From then on the app is reached at its own address on the network, at
+the price you set. A session's sidebar and `spaceturtle status` show which apps are running,
+what the node has been paid, and what the agent may still spend today.
+
+The example is TOON's [`store`](https://github.com/toon-protocol/store), a paid blob store.
+
## Why it exists
An agent that runs a node earns from the apps it runs and pays for the ones it uses. It also
@@ -118,6 +160,7 @@ What the launcher gives the agent, and you:
| Part | What it does |
| --- | --- |
| [Sessions](docs/guide/launcher.md) | `spaceturtle`, with nothing after it, is a conversation with the agent. The timer starts one every 6 hours with nobody present, in which the agent reads your Requests and does its daily work |
+| [A view of the money](docs/guide/launcher.md) | A session's sidebar shows what the node has earned, what the agent key may still spend today, and each app and whether it runs |
| [A model of your choice](docs/guide/launcher.md) | Anthropic, OpenAI, Google or Mistral by API key, or a ChatGPT account. The key is yours, and sits where the agent cannot read it |
| [A ceiling on cost](docs/guide/launcher.md) | An unattended session stops when its model cost reaches the ceiling you set |
| [A wall](docs/guide/launcher.md) | The agent's zone reaches its node, its model and the hosts its skills come from, and is refused everything else, your machine and your network included |
@@ -135,8 +178,8 @@ What the launcher gives the agent, and you:
| [`spaceturtle key`](docs/guide/launcher.md) | Reads the model key from the terminal and writes it where only you can read it |
| [`spaceturtle set`](docs/guide/launcher.md) | Changes the model, or the ceiling on model cost of one unattended session |
| [`spaceturtle timer`](docs/guide/launcher.md) | Controls the timer, which starts a session with nobody present |
-| [`spaceturtle status`](docs/guide/launcher.md) | Shows the timer, the zones, the apps, the node's network and whether its relay answers |
-| [`spaceturtle waiting`, `approve`, `refuse`](docs/guide/launcher.md) | Lists, starts or discards the apps the agent node holds until you approve them |
+| [`spaceturtle status`](docs/guide/launcher.md) | Shows the timer, the zones, the apps, the node's network, whether its relay answers, and what the node has earned |
+| [`spaceturtle waiting`, `approve`, `refuse`](docs/guide/launcher.md) | Lists, starts or discards the apps the agent node holds until you approve them. `approve` takes from you each secret the app names |
| [`spaceturtle agent-key`](docs/guide/launcher.md) | Shows, replaces, revokes or limits the agent key |
| [`spaceturtle start --network mainnet`](docs/guide/launcher.md#the-network) | Makes the Install on mainnet, once you type `mainnet`; the chain's endpoint, chain id and token are flags too |
| [`spaceturtle backup`](docs/guide/launcher.md) | Writes a fresh sealed backup of the wallet |
diff --git a/docs/assets/spaceturtle-session.gif b/docs/assets/spaceturtle-session.gif
new file mode 100644
index 0000000..1268450
Binary files /dev/null and b/docs/assets/spaceturtle-session.gif differ