One companion layer. Multiple voice providers. No isolation fantasy.
Website · Install · Quick Start · Architecture · Bridge Elements · Release Readiness
S0RA Agent is a voice companion layer for Hermes-style agents. It keeps the useful CLI and plugin pieces for real-time voice, MCP, and VOIP control without pretending to be a separate isolated chat assistant.
This release ships a working CLI (sora), a FastAPI dashboard, a Hermes plugin (sora-hermes), a VOIP plugin (sora-voip), and scaffolding for seven voice providers. The live Discord voice bridge is not spawned by this repo alone — it is provided by the separate Hermes discord-voice plugin, which S0RA can configure, query, and extend.
Relationship to the Gemini bridge: S0RA shares the same bridge-element philosophy as
gemini-live-discord-bridge— operator-facing tools, a sidecar health surface, status truth-tagging, and a public docs/site. It is a separate product/runtime: Gemini bridge is a single Discord voice bridge; S0RA is a multi-provider companion CLI and plugin registry.
| Area | Status | Truthful scope |
|---|---|---|
CLI entry (sora --help, sora status, sora doctor) |
WORKING | Verified commands. 17 pytest tests pass. |
Setup wizard (sora setup) |
WORKING | Interactive provider/API-key configuration. |
Provider registry (sora voice providers) |
WORKING | List/enable/disable TTS/STT/LLM-voice providers. |
| ElevenLabs signed URLs / WebSocket targets | WORKING | URL generation and bridge prep implemented. |
FastAPI dashboard (/health, /api/status) |
WORKING | Default port 8080. Verified with TestClient. |
Hermes plugin (sora-hermes) |
WORKING | Registers sora_voice_* and sora_mcp_* tools. |
Discord voice bridges (sora voice live/vapi/…) |
PARTIAL | CLI validates config and prepares bridge args. Live bridging requires the Hermes discord-voice plugin runtime. |
| MCP server management | PARTIAL | Start/status/catalog CLI works; WebSocket/SSE paths are scaffolding. |
VOIP Asterisk + Dograh bridge (sora-voip) |
PARTIAL | Plugin and ARI/SIP commands exist. Needs Asterisk/Dograh runtime. |
TUI mode (sora tui) |
PLANNED | Stub falls back to REPL. Not a real Ink/React TUI yet. |
Interactive cron creation (sora cron) |
PLANNED | List/show works; create/run are stubs. |
Skill search/browse/audit (sora skills) |
PLANNED | Commands exist but operations are not implemented. |
Session log filtering (sora logs) |
PLANNED | View works; filtering is not implemented. |
Doctor auto-fix (sora doctor --fix) |
PLANNED | Diagnostics work; auto-fix is a stub. |
ACP adapter (sora acp) |
RESEARCH | Entry point stub; no full ACP server implementation. |
See docs/release-readiness.md for the full truth table, hard release rules, and E2E smoke checklist.
┌─────────────────────────────────────────────────────────────────────────────┐
│ User surface: sora CLI │ FastAPI dashboard │ Hermes chat (via plugin) │
└──────────────────────────┴─────────────────────┴───────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ S0RA CLI / API layer │
│ setup · voice · mcp · status · doctor · config · plugins · skills · cron │
└───────────────────────────────┬─────────────────────────────────────────────┘
│
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────────────┐
│ sora-hermes │ │ sora-voip │ │ built-in runtime │
│ plugin │ │ plugin │ │ (MCP scaffolds, │
│ │ │ │ │ provider registry, │
│ Registers │ │ Asterisk ARI │ │ FastAPI dashboard) │
│ sora_voice_* │ │ + Dograh │ │ │
│ tools in │ │ SIP/RTP │ │ │
│ Hermes │ │ │ │ │
└───────┬───────┘ └───────┬───────┘ └───────────┬───────────┘
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────────────┐
│ Hermes │ │ Asterisk │ │ Provider backends │
│ discord-voice │ │ PBX + Dograh │ │ (Gemini, Vapi, │
│ plugin │ │ gateway │ │ ElevenLabs, OpenAI, │
│ │ │ │ │ xAI, Ultravox, Retell)│
│ Live bridge │ │ Phone bridge │ │ │
│ runtime │ │ runtime │ │ │
└───────────────┘ └───────────────┘ └───────────────────────┘
Read the full design in docs/guide/architecture.md.
# 1. Install
pipx install git+https://github.com/Capslockb/sora-agent
# or: git clone ... && pip install -e .
# 2. Run the setup wizard
sora setup
# 3. Verify the install
sora --version
sora doctor
sora status
# 4. Check provider state
sora voice providers list
# 5. Start the dashboard (optional)
sora dashboard start --port 8080
# Open http://127.0.0.1:8080/healthsora --help
sora status --json
sora voice status
sora mcp status
python -m pytest tests/ -qSee docs/guide/quick-start.md for install pitfalls and next steps.
S0RA exposes a small operator-friendly tool surface. When the sora-hermes plugin is enabled, these tools register in Hermes:
| Tool | Status | What it does |
|---|---|---|
sora_voice_live |
PARTIAL | Prepare/start Gemini Live Discord bridge args. Runtime provided by Hermes discord-voice. |
sora_voice_vapi |
PARTIAL | Prepare/start Vapi Discord bridge args. Runtime provided by Hermes discord-voice. |
sora_voice_leave |
PARTIAL | Stop active voice bridge via Hermes discord-voice. |
sora_voice_status |
WORKING | Return structured voice bridge status from S0RA state. |
sora_mcp_start |
PARTIAL | Start MCP server (stdio supported; HTTP/SSE scaffolding). |
sora_mcp_status |
WORKING | Return MCP server status. |
Read the deep doc in docs/bridge-elements.md.
| Feature | Status | Doc | Caveat |
|---|---|---|---|
| CLI help/version/status/doctor | WORKING | reference/cli/sora.md |
— |
| Setup wizard | WORKING | reference/cli/setup.md |
— |
| Provider enable/disable | WORKING | guide/voice/providers.md |
— |
| ElevenLabs URL signing | WORKING | guide/voice/elevenlabs.md |
— |
| FastAPI dashboard | WORKING | reference/cli/dashboard.md |
Default port 8080. |
| Hermes plugin tools | WORKING | reference/plugins/sora-hermes.md |
Requires discord-voice for live audio. |
| Discord voice bridges | PARTIAL | guide/voice/gemini-live.md |
Live runtime in Hermes discord-voice. |
| VOIP Asterisk/Dograh | PARTIAL | voip/setup.md |
Needs PBX runtime. |
| MCP server | PARTIAL | guide/mcp/servers.md |
stdio works; WS/HTTP scaffolding. |
| TUI | PLANNED | reference/cli/tui.md |
Stub only. |
| Cron | PLANNED | reference/cli/cron.md |
Partial. |
| Skills | PLANNED | reference/cli/skills.md |
Partial. |
| Logs | PLANNED | reference/cli/logs.md |
Partial. |
| Doctor auto-fix | PLANNED | reference/cli/doctor.md |
Partial. |
| ACP adapter | RESEARCH | reference/cli/acp.md |
Stub only. |
The three critical pieces of configuration:
# ~/.sora/.env
GEMINI_API_KEY=... # For Gemini Live bridge
DISCORD_BOT_TOKEN=... # For Discord voice bridges (Hermes discord-voice)
ELEVENLABS_API_KEY=... # Optional, for ElevenLabs bridgeSee docs/env-vars.md for the exhaustive grouped reference.
The S0RA dashboard exposes local control endpoints on the configured port (default 8080):
| Method | Path | Description | Status |
|---|---|---|---|
| GET | /health |
API liveness | WORKING |
| GET | /api/status |
Voice/MCP/VOIP/system status | WORKING |
| GET | /api/visualizer/state |
UI-friendly visualizer snapshot | WORKING |
| GET | /api/dashboard/stats |
CPU/memory metrics | WORKING |
| POST | /api/voice/start |
Prepare voice bridge start | PARTIAL |
| POST | /api/mcp/start |
Start MCP server | PARTIAL |
Full route list in docs/bridge-elements.md.
To prevent over-promising:
- A standalone live Discord voice bridge. The audio path lives in the Hermes
discord-voiceplugin. S0RA configures and queries it. - A hosted phone service. VOIP requires your own Asterisk PBX and Dograh gateway.
- A cloud transcription API. S0RA can point at external Whisper endpoints, but does not host one.
- A finished TUI.
sora tuiis a stub. - A finished ACP server.
sora acpis a research stub. - Auto-fix diagnostics.
sora doctor --fixis not implemented.
# 1. CLI sanity
sora --help
sora --version
# 2. Health checks
sora doctor
sora status
sora voice status
sora mcp status
# 3. API health
curl -s http://127.0.0.1:8080/health | python3 -m json.tool
# 4. Test suite
python -m pytest tests/ -q
# 5. Hermes plugin registration (when Hermes is installed)
hermes plugins enable sora-hermes
hermes tools list | grep sora_Expected results: CLI returns 0, doctor reports no hard failures, API returns {"status":"healthy"}, tests pass.
docs/guide/quick-start.md— install, first commands, pitfallsdocs/guide/architecture.md— system map, audio path, integration boundariesdocs/bridge-elements.md— operator tools, sidecar API, wiringdocs/env-vars.md— exhaustive env var referencedocs/release-readiness.md— status legend, truth table, release blockersdocs/troubleshooting.md— common failures and log locationsdocs/.vitepress/config.mts— VitePress docs-site nav
MIT — see LICENSE.