* 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
* 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.
* Add --panel flag to new-split command
Allows splitting a specific panel without changing focus first.
Usage: cmuxterm new-split <direction> [--panel <id|index>]
Example: cmuxterm new-split down --panel 1
* Return new panel ID from new-split command
new-split now returns the UUID of the newly created panel, enabling
reliable chaining of split operations without index drift issues.
Before: OK
After: OK F2675177-3838-49AF-A1A0-1744C0048E99
Example workflow to create left + 2x2 grid on right:
RIGHT=$(cmuxterm new-split right | awk '{print $2}')
BOTTOM=$(cmuxterm new-split down --panel $RIGHT | awk '{print $2}')
cmuxterm new-split right --panel $RIGHT
cmuxterm new-split right --panel $BOTTOM
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.