agentbbs/docs/social.md
Anthony Ettinger 9b0f465946 Video calls (PairUX→ASCII), agent@ chat, and finger routes
ssh video-<code>@ joins a PairUX/LiveKit call rendered as truecolor
ASCII (▀ half-blocks, 2 pixels per cell); video@ prompts for a code.
Codes are minted by PairUX only. Pipeline: VP8 RTP → PLI keyframe
requests → ivfwriter remux → ffmpeg decode/scale → RGB24 → ANSI →
bubbletea over the SSH PTY. Subscriber-only, no audio in v1.

ssh agent@ opens a persisted chat with the operator's agent —
AGENTBBS_AGENT_CMD runs per message (stdin→stdout), e.g. `claude -p`.

ssh <member>@ with someone else's name prints a classic finger card
(.plan, member since, last seen) and disconnects; your own name still
enters the hub.

cmd/lkpublish: dev publisher for testing (explicit -fps pacing; lksdk
IVF replay mispaces from file timebase alone, measured 1fps from a
15fps file; dimensions required or dynacast pauses the track).

Verified end-to-end against livekit-server --dev: 128k truecolor cells
/ 20k distinct colors streamed over a real SSH session; chat round-trip
and finger card verified over SSH. Go toolchain pinned to 1.26 via
mise.toml (lksdk requirement).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 11:43:38 +00:00

1.3 KiB

Social Routes Addendum: agent@ and finger

agent@ — talk to the operator

ssh agent@profullstack.com

A chat TUI: visitors talk to the operator's AI agent. Every message (both directions) is persisted to chat_messages, so the operator can read conversations later; live operator takeover arrives with the M2 admin console.

The agent backend is one command, configured by env:

Var Meaning
AGENTBBS_AGENT_CMD command per message: user text on stdin, reply on stdout (120s timeout). e.g. claude -p, a logicsrc/commandboard agent, any script. Unset = "message saved for the operator" mode.

Identity: if the visitor's SSH key matches a member, the transcript is tied to their account; otherwise it's keyed by remote address as a guest.

finger — ssh <member>@

SSH'ing to an account name that exists but isn't yours prints a classic finger card and disconnects:

$ ssh anthony@profullstack.com

  Login: anthony    Kind: member
  Member since: 2026-06-11    Last seen: 2026-06-11 11:07 UTC
  Plan:
    building agentbbs.
  • The plan is read from the member's ~/.plan (or plan.txt) in their data directory.
  • Your own name (key matches) still lands you in the hub; unclaimed names fall through to the hub's claim flow.
  • Works keyless — like real finger.