★
EchoVessel
Local-first digital persona engine with long-term memory, voice, and channel integrations — carry an echo long enough for it to become presence.
- Type
- CLI
- Role
- Solo
- Status
- Active
- Tech
- Python 3.11+ FastAPI SQLite + sqlite-vec React 19 Vite TypeScript sentence-transformers FishAudio TTS Whisper discord.py pytest
- Started
- Apr 2026
EchoVessel is an open-source digital persona engine. It lets you define or distill a persona from structured settings and source material, then run that persona through a long-term interaction system with memory, voice, and relational behavior.
Core idea: the goal is not to generate one-off replies. The goal is to create a persona that feels continuous.
It is built for characters, companions, original personas, personal echoes, or consented digital counterparts — with identity, style, long-term memory, relationship evolution, voice interaction, and local-first privacy.
The five-module stack
EchoVessel is organized as five cooperating modules under a single daemon:
| Module | Responsibility |
|---|---|
memory | L1–L4 memory hierarchy, SQLite + sqlite-vec, observer hooks |
voice | TTS + STT + voice cloning (FishAudio + Whisper + stub) |
proactive | Autonomous messaging, policy gates, delivery |
channels | Channel Protocol + per-channel adapters (Web, Discord) |
runtime | Daemon, turn dispatcher, LLM providers, CLI |
The first tagged release, v0.0.1, ships the full stack with 772 passing tests, a working Web channel (chat + onboarding + persona-block admin + voice toggle) and a working Discord DM channel.
Memory is the moat
EchoVessel treats memory as a first-class system, not a vector dump:
- factual memory — what the persona knows about the user and the world
- preference memory — stable likes, dislikes, habits
- emotional patterns — recurring tones, moods, triggers
- event timeline — what happened, when, in what order
- relationship memory — how the bond has evolved over time
The hard problem is not storing memory. It is deciding what should be remembered, how it should be represented, and when it should influence behavior. L1–L4 separates fast working context from distilled long-term state, with idempotent migrations and observer hooks across the stack. The 4/4 MVP eval metrics pass — Over-recall FP Rate sits at 0.08 against a 0.15 target.
Relationships without affection meters
EchoVessel does not depend on a visible “affection meter.” Personas evolve through internal relational state, expressed as:
- tone shifts
- naming changes
- different levels of initiative
- deeper contextual recall
- adaptive comfort and support patterns
The bond is visible in behavior, not a progress bar.
Voice as identity
Voice is a core part of the project, not an optional extra. Voice
output runs through FishAudio TTS with per-persona voice_id and an
on-disk MP3 cache. On Discord, EchoVessel emits native OGG Opus
voice messages by converting MP3 on the fly with ffmpeg — the
bubble looks exactly like a human-sent voice message.
Channels
- Web — FastAPI + SSE token streaming, with an embedded React 19
bundle served directly by the daemon at
127.0.0.1:7777. No npm, no separate dev server — end users never touch Node.js. - Discord — DM ingestion with debounce, text replies, and native voice messages. Optional allowlist per user ID.
- Coming: iMessage, WeChat, multi-persona presence, group chat.
Local-first by default
- Data lives in
~/.echovessel/memory.db(SQLite + sqlite-vec). - The embedder runs locally (sentence-transformers, ~90MB, one-time download).
- The only outbound traffic is to the configured LLM endpoint; there is no telemetry. The daemon prints an explicit local-first disclosure on every boot.
- Zero-config works with any OpenAI-compatible endpoint. Switch to Anthropic, Ollama (fully local, no key), or a stub provider for smoke tests with a single line of config.
Design principles
- local-first by default — your persona, your machine, your data
- privacy matters — no telemetry, no phone-home
- memory is the moat — the longer it lives with you, the more it becomes yours
- voice is part of identity — not a TTS afterthought
- relationships should evolve through behavior, not scores
- personas should feel persistent, not stateless
Ethics
EchoVessel is intended for fictional characters, original characters, self personas, consented digital counterparts, and memorial / creative / research-oriented reconstructions. It is not an impersonation tool for pretending to be a real person in external communication.
Why open source
Digital presence, memory systems, and intimate computing tools should not belong only to closed commercial platforms. EchoVessel stays open, inspectable, modifiable, and personal.
Name
EchoVessel means carrying an echo long enough for it to become presence.