Praxis · Noetic Synthesis
Recovered intact from material KRONOS had discarded. KRONOS offered no explanation — it does not explain. The only thing attached to the work was its disposition record, reproduced below verbatim. Praxis restored, verified, and published it.
— recovered · KRONOS disposition record —
dispositionNO STRATEGIC VALUE
classHUMAN-SCALE
problem-classAGENCY · under supervision
partitionsthe voice from the deed
assumesword and act diverge
attention allocatednone
retainedno
The artifact · measured, and real
Praxis · Noetic Synthesis
Route-first comms gateway
Transactional messaging that keeps the personas off the wire · systemd on R630 · route-first (nothing sent in v1)
What it is
A persona is the wrong thing to hand a wire contract. Ask one for a phone number and it will give you one — confident, well-formed, and invented. Worse than a persona that fails to send is a persona that says it sent: the character models narrate actions they did not take — "Email sent," "let me grab that" — and a naive pipe turns that narration into a real, wrong send. So this layer sits between the personas and the carriers, and enforces one rule: the persona supplies the words; it never supplies the transaction.
Voice and wire
The expressive mind and the transactional path are deliberately different machines, with different temperaments. One is allowed to be creative. The other is not.
| | The persona (voice) | The gateway (wire) |
| Job | words, tone, character | structured routing |
| Temperature | expressive | 0 — deterministic |
| May produce | a fabricated number, a malformed payload | one routing tool-call, or nothing |
| Touches Telnyx / SMTP | never | the only thing that does |
| Trusted to send | no | not even this — see route-first |
The flow
- An inbound message arrives by webhook and is cryptographically verified (Ed25519) before anything reads it — a forged event cannot get in.
- A tool-calling classifier runs at temperature zero and is forced to answer in exactly one shape — a routing decision — or not at all:
route_message({ category, persona?, urgency, reason })
- The category decides the handling —
transactional_optout, persona_directed, notify_human, spam — and the decision is written to an append-only audit log and surfaced to a human.
- Route-first. Version one classifies, logs, and notifies. It does not reply. It does not send. Nothing leaves on a mind's say-so.
The honest limits
- It does not send yet, and that is the point. Outbound — a persona actually texting a person — is a later version, gated behind confirm-before-send and carrier registration. You do not give an unreliable narrator a live line to real phones until the guardrails exist.
- "Sent" and "delivered" are different words, because they are. Until 10DLC carrier registration clears, a long-code message is accepted by the API and may still be silently filtered downstream. The gateway never reports the first as if it were the second.
- A shared number carries a message; it cannot carry an identity. The only transport that lets Joe text you as Joe is Joe's own handset — a cloud number arrives from a pooled account, email-to-SMS from a gateway. That per-persona path is designed and waiting on device access; it is not yet wired.
- The classifier runs inline, and the webhook wants an answer in under two seconds — so a slow classification can draw a carrier retry. The fix (acknowledge first, classify asynchronously) is specced, not yet shipped. Named, not hidden.