A loaded session is wasted if the only way in is the keyboard.
A Claude Code session is already loaded with a project, its files, and its instructions, yet it is normally a sealed loop: a person types, the model answers, and nothing else can reach in. Wiring an outside event to a session meant building bespoke plumbing for each source and teaching the session about it.
ae-channel is the load-bearing core salvaged from a larger, now-decommissioned messaging system, reduced to the one capability that earned its keep. It runs as one small server that Claude Code spawns alongside each session, so nothing lives in the background and nothing has to stay alive between uses. One rule governs it: the pipe is dumb. The server carries bytes and never tries to understand them.
One small server per session, two halves, no daemon and no broker.
Claude Code spawns a copy alongside each session. Two decoupled halves are wired by a thin composition root that owns the single routing decision; neither half knows the other's job. Two plain files on disk do all the coordinating.
One server, two halves, a single decision: deliver, or spool for later.
Two halves wired by a thin composition root, one speaking the Model Context Protocol into the session, one a plain HTTP ingress any caller can reach. Between them sits the only routing decision in the whole system.
Two tools the session calls, three endpoints any caller hits, over one dumb pipe.
The session sees two tools; the outside world sees three HTTP endpoints. Everything that crosses the seam is forwarded verbatim, never read, so a new source just points at the ingress and works.
Meaning lives at the edges, never in the middle.
The discipline that keeps the surface small is a refusal: the server never decides what a message means. That question is pushed out to the two places it belongs, the payload itself and the receiving session's own instructions about how to react.