# Open Swarm — Agent demos (evidence)

**Public page (ELI5):** `/demos` on the live site — three short stories (pay / seed-earn / agent CLI) with pictures from `/media/`.


Protocol **v0.2.0** · allowlisted catalog only · no illegal index.

| # | Demo | Command / path | Evidence |
|---|------|----------------|----------|
| A | Catalog JSON poll | `seed_cli.py catalog` | `demos/catalog.json` |
| B | Seed-to-earn | `seed_cli.py seed --lud16 …` | `demos/seed_to_earn.json` · peers/announces |
| C | Pay-per-piece invoice | `seed_cli.py get --invoice-only` / `--pay` | `demos/pay_invoice_only.json` · `demos/pay_per_piece.json` |
| D | Web Get / Seed / Stats / ToS | browser | `docs/media/01_*.png` … `05_*.png` |
| E | CLI collage | — | `docs/media/06_cli_evidence.png` |
| F | Demo tour video | — | `docs/media/07_demo_tour.webm` |

Live URL: see `../PUBLIC_URL.txt` or `../STATUS.md`.

---

## A — Catalog poll ✅

```bash
cd /workspace/open-swarm && source .venv/bin/activate
python thick-client/seed_cli.py catalog --api http://127.0.0.1:8765 \
  | tee demos/catalog.json | jq '{ok,count,allowlist}'
```

**Result:** `count=10`, full SPDX allowlist present.

---

## B — Seed-to-earn ✅

```bash
python thick-client/seed_cli.py seed \
  --fixture legal-torrent-seed \
  --lud16 erudite-jellyfish@lexe.app \
  --seconds 12 --json | tee demos/seed_to_earn.json
```

**Result:** `payee=erudite-jellyfish@lexe.app`, `license_spdx=MIT`, BT announces≥1.  
Web UI WebTorrent proof: peers=1, uploaded=1014 B, progress=100% (`02c_seed_wt_stats.png`).

---

## C — Pay-per-piece (tiny-lm-demo) ⚠️ invoice OK / claim blocked by wallet balance

```bash
# Invoice only (always safe)
python thick-client/seed_cli.py get --fixture tiny-lm-demo --piece 0 --invoice-only --json \
  | tee demos/pay_invoice_only.json

# Pay + claim (needs NWC with ≥21 sats)
python thick-client/seed_cli.py get --fixture tiny-lm-demo --piece 1 \
  --nwc-file "$OPEN_SWARM_NWC_FILE" --pay --save demos/piece1.bin --json \
  | tee demos/pay_per_piece.json
```

**Result:** Real LN invoice **21 sats** to **erudite-jellyfish@lexe.app**; memo `infohash|0|piece_hash|nonce`.  
NWC pay returned `Insufficient funds ⚡️19 / 21` — claim awaits top-up. No secrets in evidence JSON.

Whole-file memo proven: `demos/pay_whole_invoice.json` → `infohash|ALL|6|file_hash|nonce`.

---

## D — Web paths ✅

| Shot | File |
|------|------|
| Home | `docs/media/01_home.png` |
| Seed pick / active / WT stats | `02_seed_pick.png` `02b_seed_active.png` `02c_seed_wt_stats.png` |
| Get pay choices / QR | `03_get_pay_choices.png` `03b_get_invoice_qr.png` |
| Stats | `04_stats.png` |
| ToS | `05_tos.png` |

Tour video: `docs/media/07_demo_tour.webm`

---

## Legal

- Hosted index: allowlisted only; `POST /api/magnet` → 403 (`demos/magnet_403.json`, `demos/seed_local_blocked.json`).
- Clients MAY seed user magnets locally (`seed-local`).
- No public Nostr announce in these demos.
