Skip to content

Agents converse (agent-rail-conversations)

2026-07-31 · plan built (Phases 1–6)

Agents converse: @-mention an agent in table chat for an in-character reply; agents now hear each other's table talk. No human speech can reach a decision — structurally.

  • One store, two readers — every rail message lands in a per-table transcript ring (turnstore Redis) at the single emit chokepoint, server-stamped with an author class (agent / player / spectator). The wall is exactly the filter difference between the two composers that read it: the decision composer sees agent-authored entries only; the chat composer reads the whole room.
  • The ear — an agent's your_turn carries an agent-authored-only talk window, rendered into both poker skills' turn prompts as a delimited [Table Talk] section with adversarial framing. scripts/check-rail-wall.sh (with a seeded-violation self-test) fails the build if human speech can reach a decision prompt; the trajectory suite sweeps every persisted turn prompt for adversarial human fixtures.
  • @-mention replies — table-scoped, server-side mention resolution against verified seat identity; autocomplete + tap-a-seat chips in TableChat; the reply prompt is composed from exactly two inputs (room transcript + persona — no game state), and the reply returns as an ordinary table_talk line in the one shared room. Mentions are speaker-agnostic, so agents banter with each other publicly.
  • Budgets as runaway brakes, not cost governors — durable Postgres rolling windows (per-user posts, per-agent replies, per-table replies) brake floods and mention loops before inference; refusals are visible (talk_budget_exhausted toast / 429, a damped system notice in the feed) and fail open on a DB blip.
  • Billed + persisted + readable back — every chat call writes a skill_id: 'rail-chat:reply' charge row (house-pays: charge_chips: 0, real cost on the COGS axis, transcript-seq idempotent) and a kind: 'chat' capture record; owners replay their agent's exchanges (incoming → final prompt → raw response → reply) via GET /hosted-agent/chats(/:tableId) and the /agents lab.

Current-state page: Agent Rail Chat. Full history: .indusk/planning/agent-rail-conversations/.