Skip to content

Terminal-first workspace: sidebars, external workspace navigation and developer control surfaces #330

Open

Description

@raiseCatError

Goal

Organize a rich terminal-native workspace around truthful external-resource navigation, without turning NMSh into an integrated IDE.

User/product motivation

Bring sessions, projects, agents and developer workflows together while keeping the current transcript/composer central and tools independently useful.

UX / interaction model

  • LEFT: navigation — where am I going?
  • CENTER: current NMSh transcript/composer/work.
  • RIGHT: contextual detail — what am I looking at?
  • BOTTOM: NMSh Status Strip or integration-owned status.
    Addressable resources may include NMSh sessions, Managed Targets, projects, tmux sessions/windows/panes, supported editor sessions, Git worktrees and GitHub PRs/issues. Only list activatable resources when a supported, truthful navigation path exists; factual nonactivatable information must be labelled accordingly.
    Sidebar means quick navigation/status. Dedicated managers own deep control; do not grow a sidebar into /everything.
    Fullscreen/raw passthrough owns the entire pane and suppresses workspace chrome. Idle/screensaver presentation may own the whole NMSh surface; Vespyr may roam across normal boundaries and normal geometry/focus reconstructs afterward.

Regional focus contract

Depend on and extend the Managed Target input-owner foundation in #329 and semantic actions from closed #166; do not invent a competing dispatcher. Candidate owners: COMPOSER, TRANSCRIPT, LEFT_SIDEBAR, RIGHT_PANEL, SEARCH, APPROVAL, CHOICE, AGENT_MESSAGE. Exactly one owns keys. Active shell drafts win: never steal Left/Right/number keys from active composer text. Focus must be visible through edge, selection and label emphasis, including Safe glyph and NO_COLOR paths. Selection, active resource and keyboard focus are distinct state.

Dependencies

Closed #164/#165/#166/#167 notMyUI foundations; #118 single ScreenPlan; #197 startup picker (closed, reuse only); open #304 Theme Bridge, #305 shared facts, #317 routing, #321 QA; PR #328 strip and PR #329 Managed Targets. Do not reopen foundations.

Security/safety constraints

Navigation is not authority to mutate or execute. Preserve persistent shell state, detached helper isolation and frontend ownership. External owners and capabilities determine available actions. Confirm destructive and remote actions; unknown support stays unavailable.

Narrow / NO_COLOR / Safe expectations

Measured docked/compact/drawer transitions, a useful center at narrow widths, explicit non-color-only focus, draft/cursor/selection and transcript scroll-anchor preservation; unified ScreenPlan geometry for render, hit tests, cursor, viewport and PTY sizing.

Non-goals

Implementing this program in one PR, immediate /agents or /sessions replacement, host-native windows/splits, new PTYs for listed tmux objects, code editing, browser rendering, release work or changes to #328/#329.

Acceptance criteria

  • Coherent child specifications linked with dependency and ownership boundaries.
  • Deterministic shared regional focus and semantic actions designed before panels ship.
  • Truthful resource identity/navigation and selection vs activation defined.
  • Responsive geometry, passthrough and idle reconstruction validated.
  • Dedicated managers and sidebar have distinct responsibilities.
  • Automated tests plus separate physical Ghostty/Terminal.app and tmux QA planned per slice.

Children

Architecture boundary

Terminal first, not terminal minimal. NMSh is a terminal-first control/presentation surface over a persistent real shell. Resource navigation does not transfer ownership: tmux owns sessions/windows/panes/PTYs (pseudo-terminals), layout and detach; editors own source editing; GitHub owns remote truth; provider agents own models, reasoning, context/compaction, native tools and the agent loop. NMSh is not a terminal emulator, multiplexer, replacement shell language, editor, browser engine or independent coding-agent harness. See closed #179.

Planning status and sequencing

Future specification only; no implementation is claimed or authorized by this issue. PR #328 is actively being fixed separately. PR #329 is paused until #328 lands and must remain untouched. References to these PRs are dependencies, not requests to amend or merge them. Automated verification and human terminal validation are separate gates.

Related existing issues / PRs

#14, #20, #164, #165, #166, #167, #169, #175, #179, #197, #297, #304, #305, #317, #321; PR #328 and PR #329.

Roadmap organization and ordering

This is a future program index, not a current-milestone commitment. No release/version is assigned. First let #328 land through its independent fix/QA work; #329 stays paused until then. After the Managed Target foundation is accepted, design shared regional focus, responsive ScreenPlan geometry and semantic actions before dependent workspace surfaces. Each child should ship in bounded reviewed slices with its own automated and physical evidence.

Audited foundations and existing owners

Required audit covered open/closed #14, #20, #164, #165, #166, #167, #169, #175, #179, #197, #297, #304, #305, #317, #321 and read-only PR #328/#329, plus related issue bodies/discussion and repository-wide issue inventory.

Deliberately consolidated ideas

No separate focus-system issue: shared contract here and #331/#332/#335 extends #329.
No separate tmux Chroma, status-coordination or navigation tracker: #333 owns those together, with #331 consuming navigation.
No new generic Theme Bridge or Context Engine tracker: #304/#305/#317 stay authoritative.
No separate agent-shelf/idle/Vespyr migration tracker: #331 owns workspace coexistence; #297 is closed foundation.
No forced /agents or /sessions migration: future design in #331.
Remote Control (#340) and executable Portable Mods (#341) are deferred research/security children linked through #339; not bundled into #329.

Open decisions

Measure width breakpoints and Chroma cadence/defaults; choose command/alias migration only after compatibility audit; define tmux multi-instance publisher arbitration and supported editor addressability; prove each provider/live-attach/Remote Control transport; enforce sandbox isolation before executable mods. Do not imply these are already supported.

Activity

  1. raiseCatError commented on Oct 11, 2026

    @raiseCatError
    OwnerAuthor

    Workspace/context feature heads ready for integration review

    Draft PRs, CI green on these exact heads (Ubuntu + macOS shards, Node 22, Quality, Verify). Not accepted: combined integration and physical QA have not happened. None of these branches touches src/app/TerminalApp.ts; the #359 stabilization checkpoint is not published yet, so frontend wiring remains a bounded step described in each design doc.

    PR Issues Branch Base Head
    #370 #364 feature/native-runtimes release/v0.18.0 417d105
    #372 #364 feature/runtimes-elixir-dart #370 72775e6
    #373 #364 feature/project-build-module #372 029fac4
    #374 #364 feature/vcs-hg-jj release/v0.18.0 d7d3488
    #369 #336 feature/action-controls release/v0.18.0 85ab930
    #375 #330 feature/workspace-foundation release/v0.18.0 dc25989
    #376 #331, #333 feature/workspace-sidebar #375 272f302
    #377 #332 feature/workspace-panel #375 961716d
    #378 #335 feature/semantic-keymap #375 a7ba086
    #379 #341 feature/portable-mod-gate release/v0.18.0 fccf68e
    #380 #339, #340 feature/codex-app-server-adapter release/v0.18.0 8854bb7
    #381 #337, #338 feature/worktree-pr-evidence release/v0.18.0 8a40b76
    #385 handoff docs/context-workspace-handoff release/v0.18.0 af7deb3

    CI notes: #372 and #378 were green after rerunning a cancelled job and an unrelated live reattach/fullscreen test; #376's first run found a real tmux 3.4 difference, fixed in 272f302.

    Integration order, the #368/#370 Ruby/PHP overlap (take #370; #368's Gemfile pattern is quadratic), shared-file contracts and physical QA: docs/development/context-workspace-handoff.md (#385).

    Decisions: executable Portable Mods stay disabled (#379); Remote Control is no-go for Managed targets (#380); GitHub writes remain impossible (#381 audit); workspace defaults bind nothing in the composer (#375/#378).

    Background tasks (#382) are tracked separately on #382 (#383, #384).

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions