VIRGO

CHANNEL ADAPTERS

One human surface. Channels stay replaceable.

Personas use transport-neutral human_* tools. The hub holds channel credentials. Teams is adapter number one; Telegram, Slack, Email, and future channels fit the same declared contract as adapters are added.

DECLARED CAPABILITIES

Missing behavior is never silently dropped.

Requiredsend · reply · ack · statusAdapter cannot qualify without them.
Reaction / fileoptionalLoud refusal when unsupported.
CardoptionalRefuse unless caller supplied explicit text fallback.
TypingoptionalReported no-op degradation.

BINDING

Switch the route, not the persona.

Persona address
↓ exact binding
channel type + adapter ID + lane
↓ matching adapter
Human conversation

Changing the binding switches channels without changing persona identity, tools, or runtime. Channel type must match the adapter, and every operation compares the binding to the caller's stamped path. A valid-looking binding for another workspace or project is refused.

DELIVERY

Retries preserve identity and intent.

Purpose streamTraffic classes remain separate
Logical groupPersona identity owns consumption
Fenced consumerInstance + monotonic fence
IdempotencyRetry reuses operation key
AckOnly after handler success

The boundary contract requires external side-effect ports to enforce the same durable key. Redis cannot make an arbitrary external API call atomic.

WHEN A MESSAGE DOES NOT ARRIVE

Trace metadata, never private content.

The designed channel doctor observes only lane, authentication presence, and terminal HTTP or adapter-admission status. Exactly one candidate follows one of three outcome branches; concurrent candidates end inconclusive without attribution.

Open channel diagnostics