Chat with the AI directly. Send a Matrix message, an XMPP DM, or an email — Eldric is online on all three, responds autonomously, and stays under your admin control.
@eldric:matrix.org
eldric@eldric.ai
eldric@eldric.ai
Previous chat features routed messages on behalf of users. Eldric's self-identity is different: the AI itself has accounts. Invite @eldric:matrix.org into a room, add eldric@eldric.ai as an XMPP contact, or email it a question — and it answers. Admins keep full oversight with a live kill-switch, traffic mirror, and command channel.
Eldric registered on matrix.org. Full federation — any homeserver can DM or invite. End-to-end encryption works client-side (olm/megolm) regardless of host.
Auto-accept room invites is a per-account toggle. Self-hosting a Synapse/Dendrite homeserver was rejected as unnecessary attack surface.
Eldric runs on mail.core.at — the existing XMPP server for the eldric.ai domain. Subscription requests from any JID are auto-approved when the admin enables that mode.
Email to eldric@eldric.ai lands in Eldric's own IMAP inbox. The AI reads, decides whether to reply, and sends via SMTP — subject to sender rate limits (max 3 autoreplies per 60s per sender to prevent mailer-daemon loops).
Every AI send is gated. Nothing goes out of Eldric's accounts without explicit admin configuration.
Flip AI autonomy per-protocol or globally. When off, drafts land in the approval queue; admins edit and approve before send. When on, replies go direct.
Every inbound and outbound message on Eldric's accounts can be carbon-copied to every admin's registered account on the same protocol. XMPP carbons, email Bcc, Matrix observer room.
Admins can send as Eldric via a dedicated endpoint or by DMing !impersonate <to> <msg> from their authenticated account. Every impersonation is audit-logged with the acting admin's user ID.
Per-account outbound allowlist and a sliding-window rate limit (3/60s/sender) drop anything suspicious into the approval queue instead of auto-sending.
DM Eldric from any of your registered accounts. If your sender identity maps to an Eldric admin via linked_eldric_user_id, these commands execute server-side:
| Command | Effect |
|---|---|
| !autoanswer on|off [proto] | Toggle AI autonomy globally or per-protocol |
| !status | Live state: enabled, auto-answer mode, allowlist size, traffic counts |
| !block <id> | Remove recipient from outbound allowlist |
| !allow <id> | Add recipient to outbound allowlist |
| !mirror on|off | Toggle admin mirror (carbons/Bcc) for this account |
| !replay <N> | Resend last N intercepted messages |
| !impersonate <to> <message> | Send the message as Eldric (audit-logged) |
| !help | List commands |
Every surface hits the same JSON API — /api/v1/comm/eldric-identity/* on eldric-commd (port 8895). Admin-gated server-side.
Open http://<commd-host>:8895/dashboard/eldric-identity. Three cards (Matrix / XMPP / Email), toggles for auto-answer, auto-accept-invites, mirror-to-admins, and an allowlist editor. Save, test, delete.
# From the eldric REPL /eldric-identity set matrix @eldric:matrix.org https://matrix.org syt_ACCESS_TOKEN /eldric-identity set xmpp eldric@eldric.ai mail.core.at XMPP_PASSWORD /eldric-identity set email eldric@eldric.ai core.at EMAIL_PASSWORD /eldric-identity auto-answer matrix on /eldric-identity send matrix @alice:matrix.org "Hello from Eldric" /eldric-identity list
ELDRIC_MATRIX_TOKEN=syt_... ELDRIC_XMPP_PASSWORD=... ELDRIC_EMAIL_PASSWORD=... \ eldric-commd \ --eldric-matrix-user @eldric:matrix.org --eldric-matrix-homeserver https://matrix.org \ --eldric-xmpp-jid eldric@eldric.ai --eldric-xmpp-server mail.core.at \ --eldric-email eldric@eldric.ai \ --eldric-email-imap imap.core.at --eldric-email-smtp smtp.core.at \ --eldric-auto-answer
# Configure curl -X PUT http://localhost:8895/api/v1/comm/eldric-identity/matrix \ -H 'Content-Type: application/json' \ -d '{ "credentials": {"user_id":"@eldric:matrix.org","homeserver":"https://matrix.org","access_token":"syt_..."}, "auto_answer_enabled": false, "auto_accept_invites": true, "mirror_to_admins": true, "outbound_allowlist": [] }' # Toggle live curl -X POST http://localhost:8895/api/v1/comm/eldric-identity/matrix/auto-answer \ -d '{"enabled":true}' # Send as Eldric curl -X POST http://localhost:8895/api/v1/comm/eldric-identity/matrix/send \ -d '{"to":[{"identifier":"@alice:matrix.org"}],"body":"Hello"}'
PUT /api/v1/comm/eldric-identity/{protocol} is all that's needed. Drop-in SwiftUI view shareable across targets.
Eldric's agents can proactively initiate chats — not only reply. These tools are exposed to the Agent Worker and route through the system accounts, subject to rate limits and allowlist:
| Tool | Purpose |
|---|---|
| MatrixSend | Send Matrix message from @eldric:matrix.org |
| XmppSend | Send XMPP message from eldric@eldric.ai |
| EmailSend | Send email as eldric@eldric.ai |
| CommBroadcast | Fan-out to all three protocols in one call |
| CommListInbox | Read recent inbound for context before replying |
Eldric's Neuron (78K-param mLSTM intent classifier, 100% accuracy on 16 classes) learns nine new intent classes for this feature: eldric_command_autoanswer, eldric_command_status, eldric_command_block, eldric_command_allow, eldric_command_mirror, eldric_command_replay, eldric_command_impersonate, eldric_chat_self, eldric_invite_accept.
On startup, eldric-commd POSTs the seed utterances to the kernel's Neuron training endpoint (/api/v1/neuron/train?append=true) so the classifier can route natural-language variants of admin commands (e.g. "turn off eldric autoreply" → eldric_command_autoanswer) in addition to the literal !-syntax.
# Check what Neuron knows about an utterance
curl -X POST http://localhost:8900/api/v1/neuron/classify \
-H 'Content-Type: application/json' \
-d '{"text":"stop eldric from replying on matrix"}'