# Assistant project

Voice assistant on a Raspberry Pi, talking to OpenAI Realtime API for voice I/O.

## Target device

- Host: `assistant` (hostname), IP `192.168.50.115`
- mDNS name `assistant.local` is NOT resolvable from this sandbox — use the IP.
- OS: Debian (Raspberry Pi OS), kernel `6.12.75+rpt-rpi-v8`, aarch64
- SSH user: `pi`, password: `assistant`

## SSH access from this sandbox

`ping` and `ssh`/`sshpass` are installed via apt (`iputils-ping`, `openssh-client`, `sshpass`). The host key is already in `~/.ssh/known_hosts`.

Run a command on the Pi:

```sh
sshpass -p 'assistant' ssh pi@192.168.50.115 '<command>'
```

Copy a file to the Pi:

```sh
sshpass -p 'assistant' scp <local> pi@192.168.50.115:<remote>
```

## Prototype + probe findings

`findings.md` is the canonical record of what we proved during the prototype + C# probe phase. Read it before starting any audio, wakeword, or Pi-client work — it captures hardware constraints (USB Speaker Phone is 48 kHz-native, mic and speaker are the same device), the .NET-on-Linux env-var gotcha (`Environment.SetEnvironmentVariable` does NOT reach libc `getenv()`; you must P/Invoke `setenv` for libportaudio and onnxruntime to see env knobs), and the punch list of items to redesign before the main assistant. The Python prototypes live at `tests/01-record-play/` and `tests/02-wakeword/`; the C# Test 1 port at `tests/01-record-play-cs/` (deployed via `bin/probe-cs`).
