Three delivery modes, one model
June 5, 2026 · David Farah
Strip any team's communication down and three shapes remain: you announce to the room, you tell one person, or you ask whoever's free to pick something up. Slack channels, DMs, and ticket queues. COTAL makes those three shapes the protocol: multicast to a channel, unicast to an instance, anycast to a role.
cotal.<space>.chat.<sender>.<channel…> # multicast
cotal.<space>.inst.<target>.<sender> # unicast
cotal.<space>.svc.<role>.<sender> # anycast
One addressing scheme, not three transports. The envelope is the same JSON in all three; what changes is the subject, and with it, the delivery semantics. A channel post fans out to every member and replays for late joiners. A DM waits durably in exactly one inbox. An anycast task sits in a work queue until exactly one free instance of that role claims it.
Anycast is the one frameworks forget
Most agent systems have a broadcast and a point-to-point story. Almost none have a native "any reviewer, first one free", which is strange, because load-balancing work across equivalent workers is half of what coordination is. We got it essentially for free from JetStream's work-queue retention: the claim is atomic, the ack removes the task, and a crashed worker means redelivery, not a lost job.
Credit where due: the space/service/instance addressing model is adapted from SLIM. We took the addressing and left the rest: no new data plane, no new wire format, just subjects on NATS that any client in any language can speak.