Skip to content

feat(tui): add Codex-style side conversations #3746

Description

@me2seeks

Problem

Maka Desktop supports temporary Side Conversations, but the CLI/TUI does not expose the equivalent workflow.

The TUI can switch arbitrary Sessions through /session, including detaching from a running Turn, but it has no parent/side pairing, /side entry point, retained toggle, side-specific close behavior, or background parent status.

Users cannot ask a temporary contextual question while the main Turn continues and then switch directly between the two conversations.

Desired behavior

  • /side opens a temporary side conversation from the latest settled Turn.
  • /side <prompt> opens the side conversation and submits the prompt.
  • The side Session inherits the parent model, thinking level, permission mode, collaboration mode, orchestration mode, cwd, and conversation prefix at creation.
  • Parent and side Session configuration remain independent after creation.
  • Parent and side Turns can continue independently.
  • Only one TUI side conversation is retained at a time.
  • Ctrl+/ switches between the side conversation and its parent without closing either.
  • Ctrl+C in an empty side Composer closes the side conversation and returns to the parent. The key must never fall through to the global TUI exit path after a side-close attempt.
  • Leaving the parent/side pair for an unrelated Session closes the temporary side conversation.
  • Side Sessions remain hidden from ordinary Session discovery.
  • Temporary-session cleanup remains recoverable after interruption instead of relying on renderer/TUI best effort.

Status line

Side-conversation status-line copy is always English.

Base state:

Side from main thread · Ctrl+/ to switch · Ctrl+C to close

Parent state variants:

  • Side from main thread · main needs input · Ctrl+/ to switch · Ctrl+C to close
  • Side from main thread · main needs approval · Ctrl+/ to switch · Ctrl+C to close
  • Side from main thread · main failed · Ctrl+/ to switch · Ctrl+C to close
  • Side from main thread · main interrupted · Ctrl+/ to switch · Ctrl+C to close
  • Side from main thread · main closed · Ctrl+/ to switch · Ctrl+C to close
  • Side from main thread · main finished · Ctrl+/ to switch · Ctrl+C to close

When the parent is visible and a retained side exists:

Ctrl+/ for side

A new parent Turn clears the previous terminal/actionable parent status.

Architecture constraints

  • Runtime Host remains the sole authority for Session and Turn identity, conversation copying, execution, permissions, interactions, interruption, and removal.
  • Reuse existing conversationCopy.intent, parentSessionId, branchOfTurnId, and mode:side_conversation; do not introduce another durable SidePair identity.
  • TUI state is only an ephemeral navigation projection.
  • Parent history is reference-only inside the side conversation and remains hidden from the side transcript.
  • The workspace is shared live; the feature does not imply filesystem isolation.
  • Parent model or permission changes do not propagate to an already-created side Session.
  • Runtime Host policy and credential revocation still constrain every Session.
  • Do not duplicate Desktop admission ownership work from fix(desktop): bind Side Conversation events to Host admission #3716.

Delivery slices

PR 1 — Host-backed TUI side lifecycle

Deliver one usable vertical slice:

  • create the side copy from the latest settled parent Turn;
  • expose /side [prompt];
  • attach and render the side Session through the existing TUI Session path;
  • close, interrupt if necessary, remove, and return to the parent;
  • preserve recoverable cleanup semantics;
  • keep side Sessions out of ordinary Session discovery;
  • preserve parent draft and running Turn behavior.

This PR may consolidate the existing temporary-session cleanup seam if required, but must not add a speculative abstraction with only one real consumer.

PR 2 — Retained toggle and parent status

  • retain the side while switching to its parent;
  • add Ctrl+/ toggle, including terminal-compatible key normalization;
  • observe background parent lifecycle and interaction state;
  • add the English status-line contract above;
  • close the side when navigating outside the pair;
  • cover shortcut precedence, cleanup failure, background completion, approval/input priority, and session-switch races.

A third PR is allowed only if the first-principles review proves that cleanup ownership is an independently valuable migration whose separation produces a strict net reduction.

Required review gates before every commit

First-principles review

  • What problem does this PR solve?
  • How does this PR solve it?
  • Is the problem defined correctly?
  • Do the problem definition and solution follow first principles?
  • Do they follow Occam's razor?

Adversarial and simplification review

  • Are all changes in this PR the best solution to the stated problem?
  • Does the result follow first principles and Occam's razor?
  • Can low-quality tests be deleted?
  • Can code or state be deleted?
  • Can the implementation be refactored into a smaller and deeper module?
  • Does simplify-audit identify any duplicate authority, representation, path, contract, or state?
  • Has every retained abstraction passed the deletion test?

The review findings and resulting deletions or retained decisions must be recorded before committing.

Non-goals

  • Multiple simultaneous TUI side conversations.
  • Persisting or reopening a side conversation after a new TUI process starts.
  • Synchronizing model or permission changes between parent and side.
  • Promoting a side conversation to a durable ordinary fork.
  • Adding a second status-line row.
  • Localizing side-conversation status-line copy.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions