agentlytics
Comprehensive analytics dashboard for AI coding agents — Cursor, Windsurf, Claude Code, VS Code Copilot, Zed, Antigravi…
The native macOS terminal that keeps your sessions running and tells you when a coding agent needs you. GPU-rendered, s…
git clone https://github.com/robzilla1738/harness-terminal.gitrobzilla1738/harness-terminalThe native macOS terminal that keeps your sessions running and tells you the moment a coding agent needs you.
Every pane renders on Harness's own GPU engine. Your splits and sessions live in a background daemon, so they survive quitting the app — and their scrollback survives a daemon restart. You can drive or attach to them from the command line, including a headless or remote daemon over SSH. And Harness watches the agents you run inside it (Claude Code, Codex, Cursor, and more), so an approval prompt never sits unseen behind another tab.
One self-contained app. The terminal engine, daemon, and CLI are all first-party Swift; the only external dependency is Sparkle (the macOS auto-update framework, GUI-only).
Open the DMG, drag Harness.app to Applications, and launch it normally. The release is signed, notarized, and built for Apple silicon Macs running macOS 15 or later.
Verify the SHA-256 checksum against the value published on the GitHub release page.
Prefer to build it yourself? Jump to Build from source.
harness-cli drives the whole thing — open tabs, send keys, capture a pane, resize, swap, zoom — so your tooling can build the layout it needs. Point any command at a headless or remote daemon with --host <name>; the daemon and CLI run on Linux too, so a remote box can host your sessions.Cmd+Shift+U jumps you to the one that's waiting and skips the ones still thinking.Harness ranges from a plain, get-out-of-your-way terminal to a full session manager. Pick the level in Settings → Terminal → Experience:
harness-cli command set.New installs start in Plain. Moving over from another setup? See docs/MIGRATION.md — Harness can import an existing terminal config (colors, font, padding) on first run.
\a): audible and/or visual feedback on the focused surface, a bell badge on background tabs, and tmux visual-bell/bell-action bridgingHarnessDaemon on a headless or remote box (Linux included) and drive it with harness-cli --host <name> over an SSH tunnel — register hosts with harness-cli remote addharness-cli for automation and agent hooksharness-cli color-check and harness-cli theme-preview --theme <name> print deterministic SGR pages for eyeballing fidelity in Harness itselfsend-keys, capture-pane, kill-pane, resize-pane, zoom-pane, swap-pane, rename-tab, attach, find-window, kill-server, start-server, respawn-window, refresh-client, and moreCtrl-A) with a live cheatsheet (prefix ?)Cmd+Shift+U jumps to whoever is waitingharness-cli install-hooks <agent>Cmd+K) and a native macOS Settings window (Cmd+,).harnesstheme export / import for sharing — double-click (or Open With) a theme file to install it, optionally applying its colors immediatelyset-option shell-integration off; manual snippets remain in docs/shell-integration/).command / .tool files from Settings > TerminalHarness launches its daemon automatically; the CLI talks to it.
harness-cli list-surfaces harness-cli new-session --workspace Default --cwd ~/Code/myproject harness-cli new-tab --workspace Default --cwd ~/Code/myproject harness-cli send-keys --surface "$HARNESS_SURFACE" --keys "ls -la Enter" harness-cli notify --surface "$HARNESS_SURFACE" --title Agent --body "Needs approval" harness-cli color-check harness-cli theme-preview --theme "Harness Default"
Install it onto your PATH:
# From the app bundle: /Applications/Harness.app/Contents/MacOS/harness-cli install # Or from a source build: .build/release/harness-cli install # Then add the printed path to your shell profile: export PATH="$HOME/Library/Application Support/Harness/bin:$PATH"
The first-run setup in Harness.app performs the same local installation for new
users: it copies harness-cli and HarnessDaemon, registers the LaunchAgent,
adds PATH blocks for zsh/bash/fish with backups, installs fish completions, asks
for notification permission, and offers detected agent hooks. On a fresh install, Harness displays
a one-shot welcome tour; after an update, it shows release highlights (suppressible via the update-banner option).
HarnessDaemon can run on a headless box (no GUI) or a remote machine — including
Linux — and you can drive it from any harness-cli command with a global
--host <name> flag. The transport is an SSH tunnel that forwards the remote
daemon's control socket, so it reuses your existing SSH trust with no new
credentials.
# On the remote box: run the daemon and note its socket path (harness-cli doctor prints it). # On your machine: register the remote, then target it with --host on any command. harness-cli remote add --name devbox --ssh me@devbox --socket "/home/me/.config/harness/harness.sock" harness-cli remote list harness-cli ping --host devbox harness-cli new-session --host devbox --cwd ~/Code harness-cli send-keys --host devbox --surface <id> --keys "ls -la Enter" harness-cli capture-pane --host devbox --surface <id> harness-cli remote remove --name devbox
Pass extra SSH options (port, identity file, jump host) with --ssh-arg, e.g.
--ssh-arg -p --ssh-arg 2222 --ssh-arg -i --ssh-arg ~/.ssh/devbox.
HARNESS_SURFACE is set in every Harness pane, so an agent can ping the exact tab it's running in:
harness-cli install-hooks claude-code harness-cli notify --surface "$HARNESS_SURFACE" --body "Approval required"
Per-agent setup lives in docs/agent-hooks/README.md. Agents without a hook mechanism still notify you through Harness's built-in activity detection once they're running.
| Action | Shortcut |
|---|---|
| New tab | Cmd+T |
| New session | Cmd+Shift+N |
| Close tab | Cmd+W |
| Split horizontal / vertical | Cmd+D / Cmd+Shift+D |
| Switch to tab 1–9 | Cmd+1 … Cmd+9 |
| Previous / next tab | Cmd+Shift+[ / Cmd+Shift+] |
| Jump to waiting agent | Cmd+Shift+U |
| Command palette | Cmd+K |
| Settings | Cmd+, |
| Toggle sidebar | Cmd+\ |
The command prefix (default Ctrl-A) adds the full pane / session keymap on top — press prefix then ? for the cheatsheet.
git clone https://github.com/robzilla1738/harness-terminal.git harness cd harness make release open Harness.app
Validate a source checkout before shipping changes:
swift build swift test # fast, deterministic suite HARNESS_LIVE_DAEMON_TESTS=1 swift test # adds the real socket / PTY / security tests make bench
CI runs all three on every push: the deterministic suite, the live daemon tests, and a release build. The live tests spin up a real daemon over a Unix socket and a real PTY, so run them locally before changing the daemon, IPC, or PTY code.
make bench runs opt-in release benchmarks and prints machine-readable JSON timing lines. Treat those as a structural baseline, not a pass/fail gate — GPU and timing numbers vary by machine.
Renderer tests use structural offscreen readbacks by default. Set HARNESS_WRITE_RENDER_SNAPSHOTS=1 when running swift test --filter MetalRendererTests to write PNGs under /tmp/HarnessRenderSnapshots for human debugging only.
Harness.xcodeproj is generated from project.yml with XcodeGen. The app target builds and bundles HarnessDaemon and harness-cli into Harness.app/Contents/MacOS/, so an Xcode run uses the same helper layout as the release app.
xcodegen generate open Harness.xcodeproj xcodebuild -project Harness.xcodeproj -scheme Harness -configuration Debug \ -destination 'platform=macOS,arch=arm64' build test
swift build -c release (the GUI app, renderer, and Sparkle are macOS-only and are dropped from the Linux build)MIT
more like this
Comprehensive analytics dashboard for AI coding agents — Cursor, Windsurf, Claude Code, VS Code Copilot, Zed, Antigravi…
Free open-source Cloudflare R2 desktop client and S3 GUI for macOS, Windows, and Linux. Manage Cloudflare R2, AWS S3, M…
A to-do list that runs your Claude Code agents — capture anywhere, dispatch in parallel, review from your phone.
search projects, people, and tags