neuron-explorer
Qwen3.5‑4B 전용 조향형 뉴런 탐색기, 모든 MLP 뉴런을 밀어 결과를 보관·탐색
Native macOS terminal with GPU rendering, durable sessions, coding-agent workflows, and SSH connectivity. Session host, daemon, and CLI support Linux; optional MCP and AI summaries.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
The native macOS terminal that keeps your sessions running and tells you the moment a coding agent needs you.README 전문 보기 ↗The native macOS terminal that keeps your sessions running and tells you the moment a coding agent needs you.
Terminal panes render on Harness's own GPU engine. A stable session host owns shells and PTYs, while a replaceable daemon manages workspaces and application services. Sessions survive quitting the app when persistence is enabled, and compatible daemon replacement keeps their programs and terminal streams running. 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), with optional hooks and program reports to surface requests for attention behind other tabs.
One self-contained app. The terminal engine, daemon, and CLI are first-party Swift. Sparkle is linked only by the GUI. The official Swift MCP SDK and its pinned support libraries are isolated to the CLI’s MCP integration; Swift TOML supports format-aware configuration edits. Lua 5.1 is vendored and linked by the CLI alone. The daemon does not link Lua or MCP. See architecture and provenance for dependency boundaries.
This README describes the current main source. Versioned changes and downloads
are listed in the changelog and GitHub Releases.
Harness 2.4.1 fixes stalls when moving and rapidly resizing terminal windows, and keeps the host icon, name and arrow together in a native macOS control. It includes 2.4's live Appearance preview, interface text size, terminal spacing controls, ⌘-click file references, and key binding editor. See release validation, terminal quality, the changelog, and performance results for behavior, measured results, and verification limits.
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.These are presets: the Keep sessions running setting and per-session pins determine actual quit behavior. See Experience modes.
New installs start in Persistent with Harness Graphite, 85% opacity, 60 pt blur, 25% window border opacity, and the bottom status strip off. Tab gaps and pane borders use 8 pt spacing. Sessions survive quitting. An existing settings file that never stored a mode stays Full, so an upgrade does not hide the prefix or the status line. Moving over from another setup? See docs/MIGRATION.md — Harness offers a reviewed import of an existing terminal config (colors, font, padding); it preserves the new-install defaults until you apply an import.
Session → Activity, Saved Setups, Recently Closed, and Search All Sessions bring ongoing work together across attached hosts. The command palette and Settings → Tools also expose these actions. See Workspace workflows for behavior, limits, and CLI examples.
The Overview Board combines agent attention, usage freshness and process resources across attached hosts. Durable run history, tool anchors and deterministic digests share the same activity ledger. See activity and search. Optional AI summaries use explicitly configured providers and content consent; basic digests remain available without AI.
Managed worktrees, fan-out, schedules and hook policies have local configuration and recovery flows. Preview panes and remote connectivity, recording review, importers, notifications and power, MCP, and trusted local plugins document their opt-ins and limits.
History is encrypted on macOS when signed components can access their Keychain key. If access is unavailable, capture stays in bounded memory and the app reports unavailable history. Linux uses explicitly documented owner-only plaintext storage. Linux packaging and installation lifecycle describe verified archives, atomic installation and guarded service changes. The implementation checklist records remaining acceptance work; a source build alone does not establish completed native verification.
\a): audible and/or visual feedback on the focused surface, a bell badge on background tabs, and tmux visual-bell/bell-action bridging>_ for a shell, the brand tile for an agent) and a live status mark (working, needs you, done, error). ⌘\ switches to sidebar mode, which lists every session by name with its tabs beneath⌃⌘S, or the stacked-squares button): filter or create a session by typing, ✓ on the current one, New Session, Add Remote Host⌘⇧O): every tab as a live tile, the ones waiting on you first; type to filter, arrows and ↩ to jumpHarnessDaemon on a headless or remote box (Linux included) and drive it with over your own SSH. Add Remote Host… needs only the SSH destination: it detects the daemon socket and tests the connection, and a dropped tunnel reconnects itselfHarness starts or adopts the session host and compatible daemon automatically; the CLI uses their public control socket.
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 Graphite"
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"
On a fresh install, Harness.app opens a one-shot first-run tour (Welcome → Overview →
Notifications → Command line → Ready; reopen it from Help ▸ Welcome to Harness). Its
Notifications step offers permission and agent-hook installation as separate optional
actions. Skipping setup never prompts later just because an agent event arrives. Its optional Command line step performs the same local installation:
it atomically installs the CLI, daemon, and session-host helper bundles, stages service
updates while sessions are live, adds a PATH block with a backup
to the shells you use (your login shell plus any shell that already has a profile), and
writes fish completions when fish is one of them. It respects ZDOTDIR and
XDG_CONFIG_HOME, preserves existing bash login profiles and dotfile symlinks, and reports
unreadable profiles without replacing them. Isolated preview builds leave system
permissions, shell profiles, agent settings, and the regular installation unchanged.
After an update, Harness 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. `harness-cli socket-path` there prints its socket.
# On your machine: register the remote, then target it with --host on any command.
harness-cli remote add --name devbox --ssh me@devbox --socket "$(ssh me@devbox harness-cli socket-path)"
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.
With SSH enabled and Harness 2.1 or later installed, enter /remote in Harness’s command prompt or choose Connect Phone or iPad in the command palette. In a shell, run harness-cli pair. A compatible private native iOS companion scans the compact QR code, verifies the computer and uses SSH authentication. Device keys require approval locally on the host with harness-cli mobile-key install --stdin; remote key installation is unsupported. The code contains public metadata only.
The Mac pairing window offers discovered LAN addresses, connected Tailscale addresses, Set Up Tailscale, and Refresh. Use the same tailnet on both devices for access away from home; ordinary SSH/Remote Login permissions still apply. Custom addresses and ports use harness-cli pair --host reachable-hostname --port 22. See mobile connection and troubleshooting details.
The companion groups work by host, workspace and session, uses the shared terminal engine and Metal renderer, includes touch scrolling and terminal shortcuts, and supports up to four visible panes on iPad. Its current distribution is source/development builds; an App Store release is not included in this terminal release.
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 window | Cmd+N |
| New tab | Cmd+T |
| New session | Cmd+Shift+N |
| Close pane (the tab when it's the only pane) / close tab | Cmd+W / Option+Cmd+W |
| Split horizontal / vertical | Cmd+D / Cmd+Shift+D |
| Select pane by direction | Option+Cmd+Arrow |
| Previous / next pane | Cmd+[ / Cmd+] |
| Zoom pane / equalize splits | Shift+Cmd+Return / Ctrl+Cmd+= |
| Switch to tab 1–9 | Cmd+1 … Cmd+9 |
| Previous / next tab | Cmd+Shift+[ / Cmd+Shift+] |
| Jump to waiting agent | Cmd+Shift+U |
| Tab peek / Workspace Overview | Ctrl+Cmd+P / Cmd+Shift+O |
| Switch session | Ctrl+Cmd+S |
| Find / next / previous | Cmd+F / Cmd+G / Cmd+Shift+G |
| Reopen closed tab | Cmd+Shift+T |
| Go to directory | Option+Cmd+G |
| Every shortcut, searchable | Cmd+/ |
| Command palette | Cmd+K |
| Settings | Cmd+, |
| Toggle sidebar | Cmd+\ |
The command prefix (default Ctrl-A, on in the Full preset) adds the full tmux-style pane / session keymap on top — press prefix then ? for its cheatsheet.
For local macOS CI and isolated GitHub Actions runners on your own Mac, see the Tartelet setup.
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
make test # fast, deterministic suite, ending with executed / failed / skipped totals
make test-live # adds the real socket / PTY / security tests (HARNESS_LIVE_DAEMON_TESTS=1)
make lint # swift-format findings on the lines you changed (the CI gate)
make bench
CI (on pushes to main and on pull requests) builds debug and release and runs the whole suite with the live daemon tests switched on, on macos-26 with Xcode 26.6, the same toolchain releases are built with. It also builds Harness.xcodeproj, and builds and tests the headless daemon and CLI on Linux (Swift 6.0; advisory for now). 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
harness-cli --host <name>harness-cli for automation and agent hooks: run --wait -- make test exits with the command's status, targets take names, positions, or ID fragments (--surface 2, --tab logs), and exit statuses are documented (3 = no such target, 4 = daemon unreachable)harness-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 immediately. Settings ▸ Colors ▸ Theme saves the colors on screen as a named theme or exports them; saved and imported themes list in the theme menuset-option shell-integration off; manual snippets remain in docs/shell-integration/)⌥⌘I) with Folder/Project fuzzy search, keyboard navigation, and shell-quoted insertion; drag file-backed folders or images into a pane to insert paths.command / .tool files from Settings > Terminalharness-cli api for a JSON method list, schemas, and calls, plus events --follow for a live event stream~/.config/harness/init.lua (HARNESS_CONFIG overrides the path). It runs in the CLI. The daemon does not run it