Eyra is one local runtime with multiple frontends. The terminal owns the core live session; voice and Web can feed the same coordinator when enabled.
typed input            local voice             Web UI
    │                      │                     │
    └──────────────┬───────┴──────────────┬──────┘
                   ↓                      ↓
             LiveSession            WebAssistantRuntime
                   │                      │
                   └──────────┬───────────┘

                      RuntimeRouter

       local command, deterministic action, tool loop, connector, task, vision, PDF

         BackgroundTaskManager, ToolRegistry, ConnectorRegistry, DurableJobStore, TriggerStore

Core layers

LayerFilesResponsibility
Entrysrc/main.py, src/runtime/startup.pyLoad settings, setup, preflight, start runtime
Runtimesrc/runtime/live_session.pyTerminal orchestration
Routingsrc/runtime/routing/Local deterministic route policy
Chatsrc/chat/message_handler.pyModel selection, style prompt, streaming
Clientssrc/clients/OpenAI-compatible async calls
Toolssrc/tools/, src/runtime/tooling.pyLocal and optional tool registry
Connectorssrc/runtime/connectors/Declared external workers under Eyra policy
Voicesrc/runtime/voice_input.py, speech_controller.pyVAD, ASR, TTS, interruption
Taskssrc/runtime/tasks.py, jobs.pyBackground lifecycle, durable logs, ledger
Websrc/web/server.py, src/runtime/shared.pyBrowser/phone UI

Design rules

  • Local-first default.
  • Optional network, Realtime, OS, MCP, agent, and connector surfaces.
  • Deterministic routing before model/tool execution.
  • Exact approval for risky local actions.
  • Durable evidence for long-running or computer-changing work.
  • Graceful degradation when a dependency is missing.

Data flow

  1. Input arrives from terminal, local voice, or Web.
  2. Local commands and direct intents are intercepted.
  3. RuntimeRouter classifies the request and builds a policy decision.
  4. Eyra either answers directly, captures screen/PDF context, executes deterministic work, starts a background or connector task, or streams through the model.
  5. Tools are exposed only when policy and settings allow them.
  6. Results update conversation, speech, tasks, logs, artifacts, and the operation ledger.