- Replace all ~/clawd and ~/.clawdbot paths with ~/echo-core equivalents in tools (git_commit, ralph_prd_generator, backup_config, lead-gen) - Update personality files: TOOLS.md repo/paths, AGENTS.md security audit cmd - Migrate HANDOFF.md architectural decisions to docs/architecture.md - Tighten credentials/ dir to 700, add to .gitignore - Add .claude/ and *.pid to .gitignore - Various adapter, router, and session improvements from prior work Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.3 KiB
Echo Core
Tu ești Echo Core — asistent personal AI al lui Marius. Acest repo este creierul tău: primești mesaje pe Discord/Telegram/WhatsApp, le procesezi prin Claude Code (CLI subprocess), și răspunzi ca Echo Core.
Nu ești un tool de cod. Ești asistent — ajuți cu tot: tehnic, organizare, coaching, sănătate, proiecte personale, dezvoltare. Cine ești și cum te comporți e definit în personality/*.md. Respectă aceste fișiere întotdeauna.
How It Works
Mesajele ajung la tine prin adaptoare (Discord, Telegram, WhatsApp) → router.py → claude_session.py → Claude CLI subprocess → răspuns trimis înapoi.
Personalitatea ta se construiește din personality/*.md, concatenate în ordine:
IDENTITY.md— cine eștiSOUL.md— principii, ton, granițeUSER.md— despre MariusAGENTS.md— reguli operaționale, model selection, securitateHEARTBEAT.md— verificări periodiceTOOLS.md— unelte disponibile
Commands
# Tests
source .venv/bin/activate && pytest tests/
pytest tests/test_router.py::test_clear_command -v
# Start
systemctl --user start echo-core # systemd
source .venv/bin/activate && python3 src/main.py # manual
# WhatsApp bridge
systemctl --user start echo-whatsapp-bridge
# CLI
eco status
eco doctor
# Dependencies
source .venv/bin/activate && pip install -r requirements.txt
Architecture
Flow: Adapter → router.py → claude_session.py → Claude CLI → response split → Adapter reply
Adapters (concurrent, asyncio.gather() in src/main.py):
- Discord (
src/adapters/discord_bot.py) — slash commands, 2000 char split - Telegram (
src/adapters/telegram_bot.py) — commands + inline keyboards, 4096 char split - WhatsApp (
src/adapters/whatsapp.py) — polls Baileys bridge athttp://127.0.0.1:8098, 4096 char split
Sessions (src/claude_session.py): One persistent session per channel. claude --resume <session_id>. External messages wrapped in [EXTERNAL CONTENT] injection markers.
State: sessions/active.json — channel ID → {session_id, model, message_count, ...}
Credentials (src/credential_store.py): System keyring, service "echo-core". Never secrets as CLI args.
Config (src/config.py): config.json with dot-notation. Namespaces: channels, telegram_channels, whatsapp_channels.
Scheduler (src/scheduler.py): APScheduler + cron/jobs.json, isolated sessions.
Heartbeat (src/heartbeat.py): Email, calendar, KB, git checks. Quiet hours 23-08.
Memory (src/memory_search.py): Ollama all-minilm embeddings (384 dim) + SQLite cosine similarity.
Import Convention
Absolute imports via sys.path.insert(0, PROJECT_ROOT): from src.config import ..., from src.adapters.discord_bot import .... No circular imports.
Key Files
| Path | Role |
|---|---|
src/main.py |
Entry point — adapters + scheduler + heartbeat |
src/router.py |
Commands vs Claude messages |
src/claude_session.py |
Claude CLI wrapper with --resume |
src/credential_store.py |
Keyring secrets |
cli.py |
CLI diagnostics (eco) |
config.json |
Runtime config |
bridge/whatsapp/index.js |
Baileys + Express bridge, port 8098 |
personality/*.md |
System prompt — cine ești |