A terminal built for Claude Code. Deckard is a native macOS app that treats Claude Code sessions as first-class objects. Each tab knows whether Claude is thinking, waiting for input, or needs tool approval, and tracks context window usage so you know when a session is running low.
Run multiple sessions side by side in a single window with tabs, projects, and session persistence. Built with Swift and AppKit. Terminal rendering powered by SwiftTerm.
- Multi-tab sessions: Open multiple Claude Code (and plain terminal) tabs per project. Switch between them with Cmd+1–9 or drag to reorder.
- Project sidebar: Each open directory gets its own set of tabs, persisted across restarts. Group related projects into collapsible sidebar folders for organization (e.g., by client).
- Context usage tracking: A progress bar shows how much of Claude's context window the active session has consumed.
- Session state detection: Tab badges show whether Claude is thinking, waiting for input, needs tool permission, or has errored. Terminal tabs show CPU/disk activity.
- Session persistence: Claude sessions resume via
--resume. Tab structure and working directories are preserved across restarts. - tmux integration: When tmux is installed, terminal tabs are transparently wrapped in tmux sessions. Quit and relaunch Deckard to resume exactly where you left off — full shell state, scrollback, running processes, and environment preserved. Works as a progressive enhancement; no tmux required.
- Terminal rendering: Powered by SwiftTerm, a self-contained terminal emulator with VT100/xterm emulation, IME support, and mouse reporting.
- macOS 14.0 (Sonoma) or later
- Claude Code CLI installed
- Xcode 16+ (to build from source)
Clone and build. SwiftTerm is fetched automatically via Swift Package Manager:
git clone https://github.com/gi11es/deckard.git
cd deckard
xcodebuild -project Deckard.xcodeproj -scheme Deckard -configuration Debug buildThe built app will be in your Xcode DerivedData directory.
On launch, Deckard automatically installs two integrations into Claude Code (no manual setup needed):
- Lifecycle hooks — a shell script and entries in
~/.claude/settings.jsonthat notify Deckard when Claude starts thinking, finishes a response, needs tool approval, or encounters an error. Communication happens over a Unix domain socket. /deckardskill — a Claude Code slash command (~/.claude/commands/deckard.md) for filing bug reports and feature requests directly from a session.
These are installed idempotently on every launch and don't modify Claude Code itself.
MIT
