cp .env.example .env
# Edit .env with your API keys (at minimum, configure Claude)
docker-compose up -dAfter the container starts, log in to Claude inside it:
docker compose exec -u ala ala claude loginThe login persists in a volume, so it survives container rebuilds.
Then access the UI at http://localhost:80
All configuration is in two places:
.envfile: API keys, memory backend choice, external service tokensconfig/directory: Platform-specific settings (chatbot platforms, email/SMS providers, social media accounts, marketing sequences)
The .env.example file documents all available options. Values from .env are
applied into the persisted settings.txt each time the container starts, so
changing .env and restarting is all you need. The settings.txt itself lives
in the data volume, so passwords and runtime settings survive rebuilds.
Set MEMORY_BACKEND in your .env file:
local(default): Sentence-transformers embeddings with sqlite-vec vector search. Stored in SQLite. No external API needed, works out of the box.adaptive_recall: Premium memory with knowledge graphs, multi-strategy retrieval, automatic consolidation, and ML-powered ranking. RequiresADAPTIVE_RECALL_URLandADAPTIVE_RECALL_TOKEN. Free tier available at https://adaptiverecall.com
The docker-compose.yml mounts these directories as persistent volumes so your data survives container rebuilds:
data/: SQLite database (memories, conversations, topics, knowledge bases) and the persisted settings.txtmemory/: The markdown memory files you edit from the UI (brand voice, policies, agent instructions)threads/: Conversation history and promptswork/: Active work queues, coding tasks, research tasksconfig/: Platform configuration filesautologs/: Node activity logsprojectfiles/: Generated project files and websites
80: Web UI9500: Memory bank TCP socket (internal, used by tools)