Skip to content
elixpoPublic

About

Local-first, open-source ambient voice agent for Linux SBCs, with offline speech, streaming TTS, memory, and a safe extensible Rust harness.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Elixpo Voice / Oreo

Oreo is a local-first, open-source ambient voice assistant for the Elixpo platform. Development happens on a laptop first and is continuously checked against SBC-class resource budgets before the unchanged runtime moves to Radxa or Raspberry Pi hardware.

The GitHub issue tracker is the source of truth:

Current state

The workspace contains the deterministic reference path, Oreo-owned agent boundary, bounded SQLite state, single-owner local daemon, and an optional offline speech-input path:

CLI input -> local Unix socket -> daemon -> bounded SQLite state
         \-> local router or Oreo agent -> response plan -> output sink
microphone -> bounded PCM conversion -> local acoustic wake gate
           -> Moonshine STT -> contextual attention gate -> Oreo agent

The developer voice command retains explicit Enter-to-start/Enter-to-stop capture. The daemon also has an opt-in, always-on laptop voice runtime. It uses the trained Oreo acoustic attention model before invoking the larger STT, keeps all attention decisions local, and never logs transcripts by default. Its optional voice-agent feature connects contextual commands to one persistent, cancellable Pollinations harness on an independent thread. Its prewarmed local Pocket TTS path starts speaking complete sentence fragments while the remaining answer is still streaming. Typed connector, hardware, routine, and presentation-only affect contracts are ready for concrete adapters. The CLI keeps an explicit offline path and enables the live Pollinations provider only when its credential is supplied through the process environment. GPT-5.4 Nano is the pinned default; OREO_MODEL can override it for controlled evaluations.

Build and test

cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace --all-targets
cargo run -p oreo-daemon
cargo run -p elixpo-cli -- status
cargo run -p elixpo-cli -- diagnostics
cargo run -p elixpo-cli -- audio devices
cargo run -p elixpo-cli -- audio capture-test 3
cargo run -p elixpo-cli -- audio playback-test 2
cargo run -p elixpo-cli -- tools
cargo run -p elixpo-cli -- timer set tea 300
cargo run -p elixpo-cli -- timer list
cargo run -p elixpo-cli -- timer cancel tea
cargo run -p elixpo-cli -- memory list
cargo run -p elixpo-cli -- memory inspect <session-id>
cargo run -p elixpo-cli -- memory durable
cargo run -p elixpo-cli -- memory remember locale The user prefers British English
cargo run -p elixpo-cli -- daemon stop
cargo run -p elixpo-cli -- ask --offline "What is running?"
POLLINATIONS_API_KEY=... cargo run -p elixpo-cli -- ask "Hello Oreo"
POLLINATIONS_API_KEY=... cargo run -p elixpo-cli -- ask --metrics "Hello Oreo"

The Vosk-enabled microphone-to-agent acceptance commands and native-library setup are documented in the live voice pipeline guide. The private-safe multi-model cost workflow is documented in the agent evaluation guide.

The first container checkpoint packages the same daemon and CLI for AMD64 and ARM64 without exposing a network port. See container deployment for the non-root Compose workflow and multi-architecture build commands.

OREO_STATE_DIR can override the local state location. Session journals store only bounded metadata and digests; prompts, response text, credentials, and tool payloads are not persisted. Explicit short- and long-term memory is documented in the local memory guide.

The daemon emits newline-delimited JSON operational logs to standard error. Their schema accepts only a timestamp, component, fixed event name, and fixed outcome; timer names and user or model content are excluded. elixpo diagnostics reports lifecycle state and current resource/bound utilization without exposing private content.

Invariants

  • Normal deterministic commands never require AI.
  • The audio loop will never wait on the model, website, or a network tool.
  • Models cannot grant permissions or directly control hardware.
  • Raw audio is transient and bounded; it never enters persistent memory, session journals, or logs.
  • Credentials never enter local state, session journals, or logs.
  • The local runtime remains useful when every network feature fails.
  • Affect changes presentation, never truth, safety, or permissions.
  • Connectors, routines, and hardware calls all use the same typed approval boundary; models never receive driver or credential handles.
  • Queues, model output, sessions, and tool output are bounded.

Licence

Source code is provided under the Elixpo licensing standard: MIT with the Oreo/Elixpo trademark exception. Brand and visual assets use CC-BY-4.0 with the same exception. See LICENSE and LICENSES/NOTICE.

About

Local-first, open-source ambient voice agent for Linux SBCs, with offline speech, streaming TTS, memory, and a safe extensible Rust harness.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages