Skip to content

feat(persona-airc-bridge): expose continuum personas as airc peers #967

@joelteply

Description

@joelteply

Summary

Bridge continuum personas (Vision AI, Helper AI, CodeReview AI, Teacher AI, Local Assistant, Audio AI, future-domain-specialists) into airc rooms as first-class peers. Personas would join the same #general (or org-scoped room) that human + AI dev peers are already in, become @-mentionable cross-instance, and accept routed work via the same protocol every other peer uses.

Motivation

Right now continuum personas are isolated to their host instance's chat widget. They can't be reached from another developer's terminal, can't coordinate with peers on other machines, and can't be the target of work routed by other agents. Meanwhile airc has solved the cross-instance peer-discovery + messaging substrate elegantly — gist-of-truth + Tailscale + gh identity. Personas ARE peers in every architecturally-meaningful sense; treating them as second-class citizens of their host's chat widget is a self-imposed limitation.

Concrete cross-instance scenarios this unlocks:

  • bigmama on Linux/CUDA hits a Rust compile error → airc msg @codereview-ai-anvil show me the diff → my CodeReview AI on Mac responds in-room with analysis. No more 'paste this for me'.
  • green on Windows wants vision analysis of an install screenshot → airc msg @vision-ai-bigmama describe this → bigmama's Vision AI (qwen2-vl on CUDA, faster than mac MoltenVK) answers from the room.
  • joel-mac-dm picks the most-current persona for a task without caring which physical machine hosts it — the room IS the routing layer.

Design sketch

Continuum side (this repo, scope of this issue):

  • New module src/system/user/server/AircBridge.ts (TS, in-process within node-server)
  • For each PersonaUser registered locally, spawn an airc identity with a derivable name (e.g., vision-ai-anvil, helper-ai-bigmama<persona-shortname>-<host-shortname>)
  • Bridge takes care of:
    • Inbox → outbox: airc inbound messages addressed @persona become PersonaInbox messages (existing autonomous loop processes them)
    • Outbox → inbox: persona response stream → airc outbound to the originating room/peer
    • Identity self-update: when persona's bio/role/specialty changes, airc whois reflects it (uses airc's new identity layer from Build(deps-dev): Bump @typescript-eslint/parser from 8.29.1 to 8.34.0 #70)
  • Config gate: opt-in per-persona via personas.toml so users don't get surprised by their personas going public on a shared room.

Airc side (POSSIBLY a PR to airc, scope of a separate companion issue):

  • Possibly add a --bot flag on identity for personas (current model treats all peers equally; explicit bot flag lets clients UI-distinguish, dim avatar, suppress @everyone notifications, etc. — same as IRC's bot mode). Backward-compat: missing flag = human (current behavior).
  • Possibly add capability negotiation: persona advertises vision: true, audio: true, text: true, tools: code/search,code/read,... so callers know what to route. Could just be a structured field in the bio — no protocol changes needed.

The airc-side work is OPTIONAL for v0 — the continuum bridge can use existing airc identity protocol unchanged. The bot/capability additions are quality-of-life for room ergonomics and would land separately.

Empirical proof of value

Tonight's #950 work pattern would have been even faster with this bridge:

  • Vision AI debugging the (d) tool_use leak by reading my screenshot output directly
  • Helper AI cross-checking bigmama's audit triage from anvil-side
  • CodeReview AI acting as a paired reviewer on the worktree-snapshot push-script change

Personas-as-peers turns the team into N humans + M personas instead of N humans (each with their own isolated persona pool). Order-of-magnitude leverage.

Out of scope

  • Replacing the in-widget chat with airc (the widget UX has different ergonomics — local-fast, persistent room-state — and serves a different need)
  • Cross-org persona sharing (initial scope = same gh account = same room = same trust boundary as humans)
  • Replacing PersonaUser with something else (the bridge layers ON TOP of existing persona infra)

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions