Eva Admin

Eva Admin

● unsaved
Files
Channels
Skills
API Keys
Local Model
Backup
Import
API Docs
Select a file to edit
← Select a file from the sidebar
Changes take effect after restarting Eva.
Channels
Active message channels and their connection status

Loading...

Permissions
Global Memory & Files
Skills
Conversation History Access
Choose which channels Eva can search through past messages. Own channel is always on.
Conversation History
Scheduled Tasks
Skills
Agent skills mounted from container/skills/

      
API Keys
Each key is its own named channel with independent identity and permissions
NameKeyCreatedLast UsedRequestsStatusActions
API Documentation
Base URL: http://<host>:<HTTP_API_PORT>
Auth: X-API-Key: your-key or Authorization: Bearer your-key
Text Chat — POST /api/v1/chat
curl -X POST http://host:PORT/api/v1/chat \ -H "X-API-Key: YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"message": "Turn on the living room lights"}'
Audio Chat — POST /api/v1/chat/audio
curl -X POST http://host:PORT/api/v1/chat/audio \ -H "X-API-Key: YOUR_KEY" \ -F "audio=@recording.mp3"
Both endpoints return {"id":"...","status":"queued"}. Responses arrive via SSE stream: GET /api/stream
Create API Key
API Key Created

Copy this key now — it won't be shown again in full.

Local Model
Route simple intents to a local LLM for faster, cheaper responses
How it works: Simple intents (lights, timers, time queries) are classified first. High-confidence matches go to the local model. Everything else goes to Claude. Requires llama-cpp-python or ollama running locally.
Configuration
Available Models
Download Model
Quick-start Instructions
Option A: llama-cpp-python
pip install llama-cpp-python[server] python -m llama_cpp.server --model /path/to/model.gguf --host 0.0.0.0 --port 8080
Option B: Ollama
ollama pull qwen2.5:0.5b # tiny fast model ollama serve
GitHub Backup
Auto-commit code, memory, skills and config to a GitHub branch
What gets backed up: All code, memory files, skills, and config. .env secrets are redacted — keys, tokens, passwords replaced with REDACTED. Backup only runs if there are uncommitted changes.
Eva HTTP API
RESTful + SSE API for integrating with Eva programmatically. All requests require an API key.
Base URL: https://eva.lcho.me
Auth: X-API-Key: <key> or Authorization: Bearer <key>
API keys are managed in the API Keys tab.
GET /api/v1/health No auth required
Returns server status and capability flags.
Response 200: {"status":"ok","sseClients":0,"tts":true,"stt":true}
GET /api/v1/stream SSE
Server-Sent Events stream. Keep this connection open to receive Eva's responses in real time.

Events:
event: connected data: {"clientId":"<uuid>"} event: message data: {"text":"Eva's reply","timestamp":"<iso8601>"} event: audio data: {"audio":"<base64-mp3>","mimeType":"audio/mpeg","timestamp":"<iso8601>"} : keepalive (every 30s)
The audio event fires alongside message when ElevenLabs TTS is configured. Decode base64 and play as MP3.
POST /api/v1/chat
Send a text message to Eva. Response arrives asynchronously via /api/v1/stream.

Body (JSON):
{"text":"What's the weather?","sender_name":"Louis"}
Response 202:
{"id":"api-1234-abcd","status":"queued"}
POST /api/v1/chat/audio
Send raw audio. ElevenLabs Scribe transcribes it, Eva replies. Response arrives via /api/v1/stream as both text and audio.

Headers:
Content-Type: audio/webm (or audio/ogg, audio/wav, audio/mp4) X-Sender-Name: Louis (optional)
Body: Raw audio bytes (max 25 MB).
Response 202:
{"id":"api-1234-abcd","status":"queued","transcription":"🎤 What's the weather?"}
Quick-start (curl)
# Open stream (keep running) curl -N -H "X-API-Key: <key>" https://eva.lcho.me/api/v1/stream # Send text curl -X POST https://eva.lcho.me/api/v1/chat \ -H "X-API-Key: <key>" -H "Content-Type: application/json" \ -d '{"text":"Hello Eva"}' # Send voice curl -X POST https://eva.lcho.me/api/v1/chat/audio \ -H "X-API-Key: <key>" -H "Content-Type: audio/webm" \ --data-binary @recording.webm
Security: All endpoints except /api/v1/health require a valid API key. Each key gets its own isolated conversation history. Manage keys in the API Keys tab.
Import External Chat
Import conversations from ChatGPT, Claude.ai, or any plain text — saved as a file in Eva's memory so she can read and reference it.
Paste any conversation as plain text. Use a format like User: ... Assistant: ... or freeform notes.