# Owner setup checklist

Short on purpose. Most of what used to be on this list got automated instead — see
"Already handled for you" at the bottom so you know it's covered, not forgotten.

Last updated v9.10.446.

---

## Actually do these

### 1. Restart the fleet

```powershell
cd C:\KAI
.\Start-KAI.ps1
```

Then hard-refresh the dashboard (`Ctrl+Shift+R`). Nothing from tonight is live until you do.

**Or, from anywhere — including your phone (v9.10.446):** Admin -> Server Control ->
**⚠ Restart Full Fleet**. Same thing exactly: it stops the whole stack, waits 5 seconds, runs
`Start-KAI.ps1`, and streams the live log into the modal so you can watch each service come
back. You do not need a terminal for this.

> Do **not** use **⟲ Restart Dashboard Server** for this — that one restarts the :3001
> dashboard ONLY and deliberately leaves the bots running, so it cannot load bot, voice or
> `shared/` changes. The panel now tells you which one you need.

### 2. Put music in Radio

Radio → **Your library** → **Add music**. Pick files off your PC (MP3, M4A, OGG, WAV, FLAC, up to 30MB each).
They upload to your own server and play **with your phone screen off**, with lock-screen controls.

Only you can do this because they're your files. No key, no account, no third party.

---

## Two real decisions (money / judgement — not commands)

### 3. Web search needs one ID

I could not remove this one. `GOOGLE_API_KEY` is already configured, but Google's API
requires a *search engine ID* that only your Google account can mint — there is no
programmatic way for me to create it, and no keyless source whose terms permit this use.

Get it at `programmablesearchengine.google.com` (turn ON "Search the entire web"), then one line in `tools/oracle-discord/.env`:

```
KAI_SEARCH_CX=<the search engine id>
```

Free, 100/day, no card. Until then the browser shows a card explaining exactly this and offers a working "search in my own browser" button — it isn't a dead end.

### 4. TURN for calls — only if calls actually fail for you

Calls use STUN only. When both people are on strict mobile networks there's no direct path and the call now says so plainly instead of ringing forever.

- **Self-host coturn** on this box — costs nothing, but needs a public IP or port-forward on **3478/tcp+udp** and a relay port range. Worth doing only if you hit the failure; see notes below.
- **Cloudflare Calls TURN** — ~$4.50/mo at ~90GB, no networking work.
- **Do nothing** — calls work on most networks and fail honestly on the rest.

I left this to you because it's a spend/networking trade, not a command.

---

## Optional

### Face recognition

```powershell
.\Install-FaceRecognition.ps1
```

One command — installs the packages, self-tests, and sets the flags. Skip unless you want it.

---

## Already handled for you — no action needed

- **Agents going quiet on quota.** Already solved and was already solved before tonight. Every agent has an automatic failover chain: `Groq → Cerebras → Gemini → xAI → local Ollama` (the DJ and limited-mode bots use `Groq → Cerebras → Ollama`; KAI never uses an LLM at all). Per-model cooldowns stop a 429'd model being retried while cold. `Start-KAI.ps1` already auto-starts Ollama as the terminal fallback, so there is a working local backend even with every cloud provider exhausted. **Topping up quota was never required.**
- **The three guest suites.** One command now: `.\Run-GuestSuites.ps1`. They spawn their own throwaway server on a random port — they don't need the fleet up and don't touch live data.
- **Radio screen-off playback.** Built. Your library streams from your own server to a plain `<audio>` element with Media Session controls.
- **Leftover test files.** Harmless; `_probe3.mjs` and the `state/credits/__test_*.json` files affect nothing at runtime. Delete them whenever, or don't.

---

## Known limits — not bugs, don't chase them

- **Screen share on mobile** shares the KAIVERSE view only. Phone browsers have no device-capture API at all; the button correctly greys out when there's nothing shareable.
- **Video mode in Radio** stops when your screen turns off — that's YouTube's terms plus how browsers suspend backgrounded video. Use Your library for screen-off.
- **SomaFM / Radio Paradise** can't be used as sources. SomaFM's terms forbid it without written permission; Radio Paradise's terms could not be retrieved to check. Your own library is the answer.
- **Edge-TTS latency benchmark.** `scripts/measure-edge-tts-latency.mjs` does not exist anywhere in the repo — I checked before asking you to run it. Nothing to run; the item was based on a bad reference.
