Getting Started
Go from zero to running local AI in under five minutes.
Friday
A ready-to-run voice assistant with a web UI. Talk to it from the device, a phone, or a tablet.
TTS Server
Local Text-to-Speech. Real-time audio synthesis via HTTP API.
STT Server
Local Speech-to-Text. Streaming transcription via HTTP API.
Agents SDK
C++ framework for agentic AI. Autonomous voice agents, orchestration, and more.
Prerequisites
Supported Platforms
- macOS Apple Silicon (arm64)
- Linux x64 (Ubuntu 22.04+)
- Linux ARM64 (Jetson, RPi 5)
What You Need
- ~500 MB free disk space
- An EdgeAI account — the CLI signs you in via browser
- For headless hosts only: an API key
Quick Install (Recommended)
The installer downloads pre-built binaries and default models for your platform, verifies SHA-256 checksums, and generates launcher scripts.
curl -fsSL https://get.runedge.ai/install.sh | bashThe CLI opens your browser to sign in. Nothing else to set up.
Headless install
On a machine with no browser — a server, a container, a robot, or any CI job — pass an API key instead. This makes the install fully non-interactive.
curl -fsSL https://get.runedge.ai/install.sh | bash -s -- --api-key <YOUR_KEY>Requires an API key. Create one on the API Keys page, then replace YOUR_KEY with it.
Installer Options
| Flag | Default | Description |
|---|---|---|
| --api-key <key> | browser sign-in | For headless installs. Skips browser sign-in and authenticates non-interactively. |
| --products <list> | all | Comma-separated: friday, tts, stt, agents-sdk |
| --skip-models | false | Skip downloading AI models (binaries only) |
| --services | false | Install as launchd (macOS) or systemd (Linux) services |
| --dir <path> | ~/.edgeai | Custom install directory |
Examples:
# Install only TTS
curl -fsSL https://get.runedge.ai/install.sh | bash -s -- --products tts# Install TTS + STT and register as system services
curl -fsSL https://get.runedge.ai/install.sh | bash -s -- --products tts,stt --services# Headless: install TTS on a server with no browser
curl -fsSL https://get.runedge.ai/install.sh | bash -s -- \
--api-key <YOUR_KEY> --products ttsRunning Your First Request
Start Friday
~/.edgeai/bin/edgeai-fridayFriday serves its web UI on port 9000 and starts the STT and TTS servers alongside it. If either is unavailable, Friday still starts — in degraded mode, without voice.
Open the UI on the device
http://127.0.0.1:9000A browser running on the device itself needs no pairing — Friday trusts loopback. This is the happy path for any device with a display: a desk unit, a kiosk, or a car head unit.
Pair a phone or tablet
http://127.0.0.1:9000/?pair=1Open that on the device and Friday shows a QR code. Scan it with the phone or tablet and it pairs itself. Anything that is not the device needs to pair before it can talk to Friday.
Headless devices (no display)
With no screen there is nowhere to show the QR code, and 127.0.0.1 means your own laptop — not the device. Ask Friday for its pairing URL over SSH instead. Run this on the device, substituting its LAN address:
curl -s -H "Host: <DEVICE_IP>:9000" localhost:9000/api/v1/pairingFriday replies with a ready-to-open URL:
{"lan":true,"token":"<token>","url":"http://<DEVICE_IP>:9000/#tk=<token>"}Open that url once in the browser you want to use. Friday stores the token in that browser, so plain http://<DEVICE_IP>:9000 works from then on — and it survives restarts.
Pairing is saved per browser. Chrome and Safari each need their own one-time visit, as does every phone.
Alternative: skip pairing with an SSH tunnel
Useful for development, or any time you would rather not put a token in a browser.
ssh -L 9000:127.0.0.1:9000 <user>@<DEVICE_IP>With the tunnel open, browse to http://127.0.0.1:9000 on your own machine. Your requests reach Friday over loopback, so no pairing is needed at all.
Friday Options
| Flag | Default | Description |
|---|---|---|
| --port <n> | 9000 | UI port. Use 0 to pick a free one automatically. |
Running as a Background Service
Pass --services during installation to register TTS and STT as system services that start on boot.
macOS (launchd)
# Check status
launchctl list | grep runedge
# Stop TTS
launchctl unload ~/Library/LaunchAgents/ai.runedge.tts.plist
# Restart TTS
launchctl load ~/Library/LaunchAgents/ai.runedge.tts.plist
# View logs
tail -f ~/.edgeai/logs/tts.logLinux (systemd)
# Check status
systemctl --user status edgeai-tts edgeai-stt
# Stop TTS
systemctl --user stop edgeai-tts
# Restart TTS
systemctl --user restart edgeai-tts
# View logs
journalctl --user -u edgeai-tts -fTroubleshooting
"Permission denied" when running the installer
Make sure to pipe through bash: curl ... | bash. If downloading manually, run chmod +x install.sh first.
"Model not found" when starting TTS or STT
Models are downloaded separately from binaries. Re-run the installer without --skip-models, or download models manually from the dashboard.
"Connection refused" on port 9999 or 8888
The server may still be loading models. Wait a few seconds and retry. Check logs for errors with: tail -f ~/.edgeai/logs/tts.log
Linux: "libportaudio.so.2: cannot open shared object"
Install the PortAudio runtime: sudo apt-get install libportaudio2
Linux: "libopenblas.so.0: cannot open shared object"
Install OpenBLAS runtime: sudo apt-get install libopenblas0
Friday's UI loads but shows "Reconnecting…" forever
That browser hasn't paired. Friday only trusts loopback, so a browser on any other machine needs a pairing token — without one its event stream is rejected and the UI retries forever. Run this on the device to get the pairing URL: curl -s -H "Host: <DEVICE_IP>:9000" localhost:9000/api/v1/pairing — then open the returned url once. Pairing is saved per browser, so Chrome and Safari each need their own visit.
Friday says "open http://127.0.0.1:9000" but I'm on another machine
127.0.0.1 always means the machine your browser is running on, never the device. If the device has a display, open it there. If it's headless, either pair using the curl above, or forward the port with: ssh -L 9000:127.0.0.1:9000 <user>@<DEVICE_IP> — then open http://127.0.0.1:9000 on your own machine.