Skip to content

Show and attach to every tmux session on an SSH host (opt-in, read-only by default, attached status) #159

Open

Description

@barelyworkingcode

User story

As a user I would like to see and attach to every tmux session on an SSH host from eve, not only the ones relay created, so I can watch and steer long-running work there (for example parallel Claude sessions started by a coordinator) from the browser or my phone, without an ssh terminal.

Background

Today GET /api/projects/{id}/persistent-sessions runs tmux ls on the host, then keeps only names that parse as relay-<project8>-<template>-<n> for that project. Reattach (POST /api/terminals with persist_session) refuses any other name. Other sessions on the host are invisible.

Security: a host project already grants a login shell on that host, from which tmux attach -t <anything> works. This feature adds convenience, not authority.

Acceptance criteria

  • A host setting "Show all tmux sessions" exists, and its default is off.
  • With the setting off, session listing and attach behave as they do today.
  • With the setting on, Remote Sessions shows a second group, "Other sessions on ".
  • The "Other sessions" group lists every session on the host that is not relay-named.
  • Each row shows the session name, its creation time and its attached status.
  • Each session in both groups shows how many clients are attached besides this relay, such as "watched by 1 other".
  • The count is session_attached minus relay's own live terminals on that session.
  • Hovering or expanding a session lists each client's terminal and whether it is read-only (tmux list-clients -F).
  • Opening an "other" session attaches with tmux attach -f read-only,ignore-size -t <name>.
  • A read-only attach accepts no input.
  • Eve's client never resizes the shared window, so a phone-sized client does not reflow the TUI for others.
  • An explicit "take control" action re-attaches without read-only.
  • Take control keeps ignore-size unless the user also chooses to resize.
  • Before attaching, relay confirms the exact session name is present in the host's session list.
  • A name that is only a prefix match, such as relay-15 against relay-156, is never attached.
  • Relay does not offer kill for a session it did not create, in the API or in the UI.
  • Closing the tab, an ssh drop or a relay restart detaches the session and never kills it.
  • On a host with tmux older than 3.2, the "other" group is still listed.
  • On such a host, attach reports that it is unsupported and does not fall back to a full attach.

What I'd notice

Nothing, until I turn on "Show all tmux sessions" for a host. Then I see its other sessions, read-only by default.

Tasks

  • T1 · relay: host setting, and listing of every session with client counts and client details (API and wire shape)
  • T2 · relay: attach to a non-relay session, read-only plus ignore-size by default, take-control variant, exact-name guard, no kill
  • T3 · eve: the "Other sessions" group in Remote Sessions, attached status on both groups, read-only badge and a take-control action
  • T4 · devbox journey: list and read-only attach to a tmux session the journey starts itself, and confirm the window size doesn't change

Activity

  1. barelyworkingcode commented on Oct 15, 2026

    @barelyworkingcode
    OwnerAuthor

    Groomed (coordinator, 2026-10-14): Added a ## User story heading over the existing story paragraph. No change of meaning.

  2. barelyworkingcode commented on Oct 15, 2026

    @barelyworkingcode
    OwnerAuthor

    Groomed on the owner's word (coordinator): the nine criteria were split into single-claim lines of 25 words or fewer, and a What I'd notice line was added. No change of meaning: every original claim maps to one or more new lines (1 to 3, 4 to 5, 6, 7, 8, 9).

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

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions