* Sidebar status as text + detect git HEAD changes instantly
- Replace sidebar status pills with plain text + show more/less toggle
for a cleaner, more readable sidebar layout
- Watch .git/HEAD mtime in zsh precmd to detect branch changes from
aliases (gco), tools (gh pr checkout), etc. without waiting for the
3s polling interval
- Fix NSImage shared instance mutation in DraggableFolderNSView by
copying before resizing to prevent layout side-effects
- Fix set_status --tab flag being swallowed by -- stop token via
new parseOptionsNoStop parser
- Update sidebar test to cover alias-based branch switching
* Append status text to notification body automatically
When creating notifications, include the tab's current status entries
in the notification body so users see context (e.g. git branch, ports)
alongside the notification message.
* Add screenshot to README
- Restore real ZDOTDIR early in zsh startup so HISTFILE uses user history\n- Preserve user ZDOTDIR without treating Ghostty injected ZDOTDIR as user\n- Add regression tests and terminfo overlay for bright colors
* Fix zsh ZDOTDIR wrapper + log parsing with -- messages
* Fix CI race condition: serialize self-hosted builds with concurrency group
Two workflows racing on the same self-hosted runner caused DerivedData
corruption (release's rm -rf nuked DerivedData while CI was building).
Add shared concurrency group and scope DerivedData cleanup to project.
- Fix auto-updating Text(date, style: .time) causing continuous SwiftUI updates
by using static formatting with .formatted(date:time:)
- Fix notification popover keeping SwiftUI observers active when closed by
clearing contentViewController on popover close and recreating on open
- Fix focus loss when notifications arrive while typing by only setting
focus in NotificationsPage when the page is visible
- Make Update Pill and Update Logs debug-only features
- Add CPU regression tests: test_cpu_usage.py, test_cpu_notifications.py
- Add lint test for auto-updating Text patterns: test_lint_swiftui_patterns.py
Key changes:
- Fix keyboard input handling for control characters in GhosttyTerminalView
- Set consumed_mods correctly (exclude Ctrl/Cmd from consumed mods)
- Send unmodified character text for Ctrl+key combinations
- Add unshifted_codepoint support for proper key encoding
- Add TerminalController with Unix socket API (/tmp/ghosttytabs.sock)
- Commands: send, send_key, list_tabs, new_tab, close_tab, select_tab
- Supports ctrl-c, ctrl-d, ctrl-z, enter, tab, escape, etc.
- Add Python test client and automated test suite
- tests/ghosttytabs.py - Python client library
- tests/test_ctrl_socket.py - Main Ctrl+C/D test suite (4 tests)
- tests/test_signals_auto.py - Standalone PTY signal tests
- Update CLAUDE.md with socket API documentation and testing guide
- Update .gitignore for Python cache files
This fixes Ctrl+C/D not working in apps like claude-code, btop, opencode
while continuing to work in simpler apps like htop.