Skip to content

Present Agent session grids without an external multiplexer #784

Description

@taras

Story

As a person running several coding-agent sessions, I want XMD to present their Grid itself, so I can view structured conversations, use an XMD REPL, and host native terminal applications without installing or configuring an external multiplexer.

Example

The authored document remains provider-neutral:

<Grid columns={2}>
  <Pane title="Architect · #784">
    <Session.Tail session="architect" />
  </Pane>
  <Pane title="Implementor · #784">
    <Session.Launch session="implementor">...</Session.Launch>
  </Pane>
</Grid>

The same document can use the tmux provider or an XMD-owned provider without changing its Grid, panes, titles, roles, issues, or session identities.

Current gap

The first #717 provider uses tmux. That is useful for configuring and arranging terminal work, but presentation, focus, and terminal cells belong to an external process.

Bombshell TTY supplies zero-I/O cell rendering and input parsing for structured XMD views. It does not allocate PTYs, emulate the terminal seen by a native child, provide job control, or own process teardown. XMD therefore cannot claim that Bombshell alone replaces tmux for a shell or provider-native Agent TUI.

Contract

XMD supplies a first-party provider for the @executablemd/grid contract. Like tmux, it is available to xmd run only. Provider selection is host configuration; the authored document does not name tmux or the XMD provider.

The provider owns the visible composite, authored row-major layout, pane regions, titles, focus, input routing, resize, startup, settlement, close, and enclosing-terminal restoration. Role and current issue remain ordinary props used to derive pane titles; they never become pane or Agent identity.

The provider distinguishes structured XMD content from native terminal content:

@bomb.sh/tty supplies structured layout, input parsing, scrolling, resize handling, and changed-cell output. It is not the PTY allocator, child terminal emulator, process owner, session store, Agent transport, or multiplexer lifecycle.

For a native pane, the selected #801 boundary owns the PTY, terminal emulation, input bytes, child job control, and teardown. Terminal pixels never become Agent conversation evidence or session authority.

Tail, REPL, and native panes retain their separate sources and lifecycles. Grid does not merge their stores, share their watchers or ACP connections, infer that two views are the same session, or acquire their authority. Focus determines which cell receives user input; it grants no durable or Agent-session authority.

Startup remains atomic: the visible Grid appears only after every required pane endpoint is ready. Panes settle independently and preserve visible final status until the reader closes the Grid. Close stops new input, completes every pane and provider finalizer, restores the enclosing terminal, and only then lets the document continue.

Tmux remains a valid alternative run provider. It is not removed, used for Workflow, or made responsible for session-file observation or ACP interaction. Provider choice changes presentation, not authored Grid meaning, session identity, retained history, authority, or teardown guarantees.

Acceptance

  • One document runs unchanged with tmux and XMD providers and produces the same Grid structure, titles, authored pane identities, and lifecycle outcomes.
  • Role and current-issue prop changes update exact pane titles without changing pane or Agent identity.
  • Tail, linear REPL, ordinary output, native Agent TUI, and shell panes use their respective structured or PTY boundaries.
  • Tail navigation never becomes conversational input, and REPL input reaches only the ACP session referenced by the executing XMD block.
  • Keyboard focus routes native bytes only to the selected owned PTY; wrong-pane and post-close input reach no child.
  • Bombshell is used for layout, structured content, viewport, and input parsing without being treated as the native terminal emulator.
  • The Test native TUI hosting with an XMD-owned PTY and terminal emulator #801-selected PTY and emulator reproduce the controlled native terminal behavior, resize, job control, and teardown in a pane.
  • Resize and relayout preserve authored row-major order, entry identity, pane identity, and session identity.
  • Partial startup presents no Grid; post-attach pane failure remains contained until close.
  • Reader close, parent cancellation, terminal loss, provider failure, and pane-finalizer failure retain the accepted Grid/Pane outcome precedence and complete teardown.
  • No tmux executable, socket, configuration, server, or process is required or observed by the XMD provider.
  • The supported runtime and host envelope is stated explicitly; unsupported hosts refuse before pane work begins.
  • Controlled source and deno compile journeys use signals rather than elapsed-time success and include wrong-pane input, duplicate authority, and leaked-resource negative controls.

Relationships

Out of scope

  • Adding Grid or live host observation to Workflow.
  • Synchronizing a provider-native TUI with an ACP conversation.
  • Using provider files or terminal state to authorize interaction.
  • Remote collaboration or browser hosting unless separately specified.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    UXUser-facing usability and interaction improvementsenhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions