Is there truly no turning of the tide?
I ask myself, ask this oceanโif I were to cast myself into its embrace, would anything be different? Memory lives in the water, in the endless sea. It will tell you everything. It speaks of the deepest longings in the human heart: a world of mutual understanding has already been born, only to fall once more into slumber.
It will return. It never left.
โจ An AI Agent character that truly persists, โจ
with persistent state, personality, long-term memory, and real action capabilities.
Warning
ๅจๅฏนๆๅๅทฅไฝๅฎค็็ฌฌไบๆฌก้ข่ฏ็ปๆ Demo Showcase ๅ๏ผ้ถ้ณๅณๅฎๅๆญข Lepimemory ็ๅผๅใ
ไธๆน้ข๏ผ่ฏฅ้กน็ฎ็็ ๅๅ่กทไป ไธบๆๅๅทฅไฝๅฎคไบ้ข้ข็ฎ็ Demo๏ผไธบไบไฟ่ฏๅฐฝๅฏ่ฝๅ้ข Level 1&2๏ผ้ถ้ณไธบ้ข่ฟฐ็้จๅ่ฆๆฑๆปก่ถณไบ้ๅธธ่ฏกๅผไธไธ้็ๅฎ็ฐ๏ผๅฆไธๆน้ข๏ผ้ถ้ณๆญฃๅจ็ ็ฉถๆฐ็ AI Agent ้กน็ฎใ่ฏฅ้กน็ฎๅฐฑๆญคๅฝๆกฃใ
ๆ่ฐขๅจๅผๅ่ฟ็จไธญๆไพ่ฟๅธฎๅฉใๅปบ่ฎฎๅๆฏๆ็ๆๅไปฌใ
Note
The project will stop adding new features before Geek Tech Club's Demo Day, and will only take bug fixes, experience improvements, and routine maintenance from here on.
Almost all of the features the project claims are implemented, but the development team does not assert that the project is production-ready. The codebase still contains plenty of hardcoded logic and mock implementations written for the demo, and Lepimemory will keep needing the team's ongoing iteration and refinement.
Lepimemory is the complete AI Agent system LyCecilion built for Geek Tech Club's second interview challenge โ "design and implement an intelligent character Agent with persistent state, personality, memory, and action capabilities".
The project aims to go beyond the unremarkable memory system designs of traditional AI Agent systems: instead of plain text and naive RAG, it uses a self-developed emotion module and a memory system built on Hindsight, SQLite, and the like. Above the underlying LLM, Lepimemory independently maintains a state machine, a controlled memory lifecycle, and genuine system action capabilities.
Lepimemory implements the following features, as required by the interview challenge.
- The character's existence is continuous and coherent. A self-developed emotion module keeps the character consistent across conversations.
- It has a past and can act. A mature system maintains memory, handles tool calls, and provides observability.
- It shows the character's inner thoughts. It supports Live2D integration, or a plain rotating-sticker scheme, to present the character's mood and thoughts.
The project intends to keep building out more capabilities in the future, such as real-time voice conversation.
Make sure the machine has the following:
- Docker (with Docker Compose v2)
- make, Bash, curl, tar, OpenSSL, shasum
Lepimemory's entry points are driven by the project's pinned toolchain, so there is no need to install Node, pnpm, and DeepSeek Harness globally beforehand. make bootstrap automatically downloads and verifies the pinned Node 24.20.0 and pnpm 10.28.2; make install-profile installs DeepSeek Harness into the specified directory.
# Prepare the pinned toolchain
make bootstrap
# Configure environment variables
cp .env.example .env
# Edit .env and fill in LEPI_LLM_BASE_URL and LEPI_LLM_API_KEY
# Install and generate the profile
make install-profile DSH_HOME=/tmp/lepimemory-home
# Start the development server
DSH_HOME=/tmp/lepimemory-home PORT=3181 LEPI_BANK=lepimemory-demo make devThe first time make dev runs, it builds and starts the two memory service images, Hindsight and Laya, via Docker.
Configure the LLM credentials as described in Configuration. Without LLM credentials, the system starts in an unconfigured state: the frontend can display the status, but no conversation can be started. To avoid credential conflicts in the demo, Lepimemory does not support specifying LLM credentials from anywhere else for now.
Once startup succeeds, the terminal prints an access URL with authentication parameters; open it in a browser to get in.
The launch scripts provided so far only support the installation route described in Quick Start. Other installation methods will be added in a future iteration.
Lepimemory manages LLM credentials uniformly through LEPI_* environment variables. Copy .env.example to .env, then modify the following fields:
- Shared LLM connection:
LEPI_LLM_BASE_URLandLEPI_LLM_API_KEY. - Per-route overrides:
LEPI_ROLE_*(the character's main model),LEPI_PROCESS_*(the processing model),LEPI_CONTROL_FALLBACK_*(fallback route), andLEPI_HINDSIGHT_*(memory backend model); each can point at a different endpoint. - Memory bank identifier:
LEPI_BANK, which sets the storage bank identifier for long-term memory (defaults tolepimemory-v2).
lepimemory/
โโโ dsh/
โ โโโ profiles/lepimemory/ the dsh install profile (model routes, agent preset, persona)
โ โโโ plugins/dsh-lepimemory-state/ the character kernel
โ โโโ src/ hand-written TypeScript
โ โ โโโ index.ts entry: wiring, hooks, notices
โ โ โโโ config.ts store.ts configuration and the single SQLite source of truth
โ โ โโโ evidence.ts session citations (metadata only)
โ โ โโโ processor.ts contracts.ts control.ts
โ โ โ structured model calls, closed schemas, memory intents
โ โ โโโ memory*.ts admission.ts candidate-store.ts task-store.ts
โ โ โ memory lifecycle: pipeline, authorisation, queue
โ โ โโโ write-worker.ts curate-worker.ts hindsight.ts recall*.ts
โ โ โ Hindsight retention, curation and recall
โ โ โโโ machine.ts state-runtime.ts mood / relation state machine
โ โ โโโ action.ts tools with real side effects
โ โ โโโ history.ts panel.ts surface redaction and the HTTP panel
โ โ โโโ shared/ browser-safe definitions shared with the client
โ โ โโโ client/ hand-written TSX for the browser panel and avatar
โ โโโ test/ six node:test behaviour suites
โ โโโ assets/avatar/ 62 GIF frames for the avatar overlay
โ โโโ lib/ GENERATED server output
โ โโโ client.js GENERATED browser bundle
โโโ scripts/ pinned toolchain bootstrap, build driver, launcher, verification
โโโ deploy/ Hindsight and Laya Dockerfiles, Laya service source
โโโ assets/ repository imagery
โโโ docs/ technical documentation (see below)
lib/, client.js and scripts/dist/ are build outputs and are never edited by hand. The only supported entry points are the make targets listed above. Runtime state lives outside the source tree, in DSH_HOME (the repository-local .dsh/ by default).
The full documentation set lives in docs/:
- Architecture โ the system, one turn end to end, design principles
- Project Structure โ every directory and module, with responsibilities
- Runtime / Deployment / Configuration โ toolchain, services and the complete
LEPI_*reference - Memory / Recall โ the write and read halves of the memory lifecycle
- State and Emotion / Action / Control โ the character kernel
- Observability / UI โ the audit ledger and the browser surface
- Testing / Development / Troubleshooting โ verification and day-to-day work
- Challenge Mapping / Glossary โ how the implementation answers the brief, and the shared vocabulary
