[twarp 07] re-spec: terminal-triggered main-pane chat (supersede sidebar)#70
Merged
Conversation
…bar) The 7b sidebar build (PR #69) was rejected on sight: wrong placement. Re-spec PRODUCT.md + TECH.md for the corrected, owner-confirmed direction: - Trigger: running `claude` in a terminal is intercepted at submit and opens a dedicated Claude Code MAIN-CONTENT pane (a tab like an editor/terminal), not a left-sidebar toolbelt button / ⌘⌥K. - Surface: the chat is a first-class pane (IPaneType::ClaudeCode, modeled on CodePane) — resizable, splittable, closeable. - Sidebar: repurposed to a read-only past-sessions list, shown only when any sessions exist. - Visual bar: match Anthropic's Claude desktop / Claude Code app. Kept (placement-agnostic): the headless claude_code driver crate (19 tests) and the ported markdown renderer from #69. Dropped: the left-panel placement + ⌘⌥K. TECH.md adds the terminal-interception hook (terminal/input.rs) and the pane host (pane_group / IPaneType) integration points from a codebase audit, keeps the rendering per-file matrix, and re-derives 7b–7h. Specs only; no code here. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
STATUS.md rewritten for the terminal-triggered main-pane direction; sub-phases re-derived around the pane host; placement open-decision reversed (sidebar → main-content pane). ROADMAP row notes the main-pane re-spec PR and the superseded 7b sidebar PR. Phase stays spec-in-review pending #70. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#69 (the sidebar 7b build) was merged to master, bringing in crates/claude_code + the ported renderer (in a sidebar host). Merge master into the main-pane re-spec branch; the only conflicts were the two roadmap docs, resolved to git reality: - #69 relabeled from "superseded / to-close" -> "merged": it landed the placement-agnostic core; the sidebar host is now obsolete. - 7b re-scoped from "re-introduce crates/claude_code" -> "relocate the merged sidebar surface into a main-content pane (delete sidebar host)". - Phase stays spec-in-review (gating spec PR #70 still open). Docs-only resolution; #69's code merged cleanly (17 files, claude_code crate + app wiring). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
timomak
added a commit
that referenced
this pull request
Jun 2, 2026
…mark #70 merged Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
twarp 07 — re-spec: terminal-triggered main-pane chat
This supersedes the sidebar design. The 7b build (PR #69) ported the renderer correctly but put the chat in the left sidebar behind a toolbelt button / ⌘⌥K — the wrong product direction. This re-spec rewrites PRODUCT.md + TECH.md for the corrected, owner-confirmed design. Specs only — no code in this PR.
What changes
claudein a terminal is intercepted at submit and opens the rich UI — no sidebar button, no chord for the chat.IPaneType::ClaudeCode, modeled on the code-editor pane) — a tab like an editor/terminal, resizable/splittable/closeable. Not the sidebar.What's kept vs dropped
crates/claude_codedriver crate (stream-json parser +Transcriptmodel, 19 tests) and the ported markdown renderer (render_message+ the markdown splitter, reusing feature 03's stack).ToolPanelView::ClaudeCode, toolbelt button, sidebar render arm) and the ⌘⌥K toggle.New TECH content (from a codebase audit)
app/src/terminal/input.rs::try_execute_command_from_source— after validation, before the PTY write, detect a top-levelclaudeinvocation (parsed conservatively with the existing completer parser) and emit an event that opens the pane instead. When in doubt, run it raw — never swallow a real shell command.IPaneType::ClaudeCode+ClaudeCodePane/ClaudeCodeViewmodeled onCodePane/CodeView(app/src/pane_group/), wired intoPaneId::render(),LeafContents, and restore.Load-bearing decisions flagged for review (PRODUCT.md §"Load-bearing decisions")
Provisional, easy to veto: pane opens as a new tab;
claude <prompt>forwards the prompt as the first turn; always-on (no feature flag). See the spec.Follow-up actions
Specs: PRODUCT.md + TECH.md. After merge, impl restarts at the re-derived 7b (pane host +
claude-at-submit trigger + re-hosted ported transcript).🤖 Generated with Claude Code