feat: persistent tab strip with animated status during attach#481
Open
andreano-che wants to merge 16 commits intoasheshgoplani:mainfrom
Open
feat: persistent tab strip with animated status during attach#481andreano-che wants to merge 16 commits intoasheshgoplani:mainfrom
andreano-che wants to merge 16 commits intoasheshgoplani:mainfrom
Conversation
Add TabStripSettings struct with pointer bools for proper default detection, integrate into UserConfig, and add TabStripConfig() method with defaults (enabled=true, layout="vertical", width=15, show_hotkey_hints=true). Includes TDD tests for defaults and TOML parsing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wire TabStripModel into the Home struct with config-driven initialization, 80ms animation tick, instance sync on periodic tick, and alt+1-9/alt+[/] hotkey handlers that select a tab and attach to the session. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Added IsAcknowledged() on Instance (delegates to tmuxSession) and call UpdateUnreadState on each tick so the tab strip reflects acknowledged state. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (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.
Summary
Adds a persistent horizontal tab strip that stays visible at the top of the terminal when attached to a session. No more detaching just to see what other sessions are doing or to switch between them.
acknowledgedfield — completed tasks glow until you look at themconfig.toml([tab_strip]section)How it works
When you press Enter to attach, agent-deck creates a narrow tmux split pane at the top running a lightweight
tab-stripprocess. This process reads session state from SQLite and renders animated status icons. Alt+N key bindings are registered at the tmux level, so they work even while typing in the session.Screenshots
Tab strip visible during active session:
Switching between tabs with Alt+N:
New In Progress live animation
Main screen (unchanged):
New files
internal/ui/tab_strip.gointernal/ui/tab_strip_test.gointernal/ui/tab_strip_app.gocmd/agent-deck/tab_strip_cmd.goagent-deck tab-stripsubcommandcmd/agent-deck/tab_switch_cmd.goagent-deck tab-switch Nsubcommand (called by tmux key bindings)Modified files
internal/ui/home.goattachSession(), switch handling, cleanupinternal/ui/hotkeys.gointernal/session/userconfig.goTabStripSettingsstruct with TOML parsingcmd/agent-deck/main.goConfiguration
Keyboard shortcuts
Alt+1–Alt+9[hotkeys]Alt+]Alt+[uDesign decisions
agent-deck tab-stripprocess in a tmux split pane, not inside the main Bubble Tea app. This is necessary becausetea.Exec(used for tmux attach) takes over the terminal — the main app can't render during attach.tmux bind-key -T root, so they intercept keys before they reach the application inside the pane. This means they work while typing in any session.isAttachingstaystruesoView()returns""throughout the transition — no flash of the main screen.[tab_strip] enabled = false.Testing
Test plan
agent-deckwith 3+ sessions[tab_strip] enabled = false— verify tab strip does not appear