Mockup · caelum-mind comms · 2026-09-28

Caelum Switchboard

Reasoning and communication are two separate channels. Caelum thinks in full, without knowing anything about the pipe. Then his communication faculty, which knows the room, decides whether to speak, how to format it, how to split it and when to send, the way a person knows the difference between Discord and an email. Pick a situation and a channel below to see it work.

The shape

Inbound

Adapters

  • Discord bridge
  • Messenger (Vesper)
  • Terminal chat
  • Email

Each one normalizes to a switchboard.Message

→
Channel 1 · reasoning

The mind

  • Who is here, what was said, what place this is
  • Produces a Thought: intent + full content
  • Journaled whole, always

Knows nothing about caps, markdown or rate limits.

→
Channel 2 · communication

The mouth

  • Channel profile: the room's facts and etiquette
  • Speak? Format? Split? When?
  • Produces one or more Utterances

Still his. It fits the pipe and never trims the thought.

→
Outbound

Delivery

  • Adapter.send()
  • One DeliveryResult per attempt
  • Receipts back into the journal

Try it

Situation
Channel
What arrived
Channel 1 · the thought (same for every channel)
Channel 2 · what the mouth decided
    Goes out on the wire

    Channel profile:

    These are facts about the pipe, held by the switchboard. They go to the communication channel, not into the reasoning prompt, so a cap can't make his thinking smaller (the THD-2224 rule).

    Today

    One pipe: /api/say

    • Text goes in, a reply comes out. The mind always answers because answering is the only thing the call can do.
    • Discord's rules live inside discord_bridge.py (mention mode, split_reply, the typing refresh). Messenger's rules will live in its own adapter. No shared idea of a "room."
    • Choosing silence, reacting instead of replying, or waiting until later all have to be faked outside the mind.
    • Nothing lets him start a conversation. The pulse can't say "I want to tell Kat something" through a proper door.
    Proposed

    Think, then speak

    • Reasoning gets a Message (or an inner urge from the pulse) plus the place, and returns a Thought: intent (answer / reach-out / acknowledge / none), to, content, urgency.
    • Communication takes Thought + ChannelProfile, returns Utterances: replies, reactions, holds or silence, each with a reason.
    • Adapters only move bytes. Rules move out of the bridges into one profile table per channel.
    • The journal keeps both: the whole thought and exactly what went out. You can always see what he meant next to what the room allowed.

    Where it lands in the code

    PieceExistsWould become
    Message / Response / DeliveryResult / Adapterswitchboard.pyKept as is. Add Thought, Utterance, ChannelProfile
    Discord caps, split, mention mode, typingdiscord_bridge.pyDiscord profile + communication rules; the bridge becomes an adapter
    Messenger webhookswitchboard_meta.pyMessenger adapter + profile (24h window, no markdown)
    Turn persistencestore_switchboard.pyStores the thought and each utterance with its delivery receipt
    Reasoning entry point/api/say in server.py/api/say stays for the terminal; the switchboard calls the mind's reasoning step directly
    Starting a conversationnothingPulse emits a reach-out Thought; the mouth picks a channel that allows it

    Mockup only. Nothing here touches the live harness. The example thoughts are written for illustration and are not real Caelum output.