Eldric has its own identity

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.

Matrix

@eldric:matrix.org

XMPP

eldric@eldric.ai

Email

eldric@eldric.ai

What this unlocks

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.

M Matrix

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.

X XMPP

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.

E Email

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).

Admin oversight

Every AI send is gated. Nothing goes out of Eldric's accounts without explicit admin configuration.

Auto-answer toggle

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.

Admin mirror

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.

Impersonation

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.

Rate limits & allowlist

Per-account outbound allowlist and a sliding-window rate limit (3/60s/sender) drop anything suspicious into the approval queue instead of auto-sending.

Admin !-commands

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:

CommandEffect
!autoanswer on|off [proto]Toggle AI autonomy globally or per-protocol
!statusLive 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|offToggle admin mirror (carbons/Bcc) for this account
!replay <N>Resend last N intercepted messages
!impersonate <to> <message>Send the message as Eldric (audit-logged)
!helpList commands

Configure it

Every surface hits the same JSON API — /api/v1/comm/eldric-identity/* on eldric-commd (port 8895). Admin-gated server-side.

Web dashboard

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.

CLI

# 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

One-shot bootstrap

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

REST API

# 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"}'
macOS / iOS: both clients hit the same REST endpoints — a settings pane calling PUT /api/v1/comm/eldric-identity/{protocol} is all that's needed. Drop-in SwiftUI view shareable across targets.

AI-facing tools

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:

ToolPurpose
MatrixSendSend Matrix message from @eldric:matrix.org
XmppSendSend XMPP message from eldric@eldric.ai
EmailSendSend email as eldric@eldric.ai
CommBroadcastFan-out to all three protocols in one call
CommListInboxRead recent inbound for context before replying

Neuron integration

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"}'