← Projects
EchoVessel

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 — a digital persona engine

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:

ModuleResponsibility
memoryL1–L4 memory hierarchy, SQLite + sqlite-vec, observer hooks
voiceTTS + STT + voice cloning (FishAudio + Whisper + stub)
proactiveAutonomous messaging, policy gates, delivery
channelsChannel Protocol + per-channel adapters (Web, Discord)
runtimeDaemon, 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.