Install harnsy
One sentence to your agent, or one command. The installer stays in your user account and asks before it changes another tool’s settings.
Let your agent install it.
Paste this into Claude Code, Codex or OpenCode. The agent shows you the plan first, then installs, then asks you to answer the installer’s questions in your own terminal. It doesn’t edit your settings files itself.
Installing takes one sentence to your agent.
Install harnsy following https://harnsy.dev/llms.txt Or run one command.
The same install without an agent. It downloads the demo build from GitHub (harnesy/app).
Linux and macOS
curl -fsSL https://harnsy.dev/install.sh | shWindows (PowerShell)
irm https://harnsy.dev/install.ps1 | iexLinux and macOS: show every step, change nothing
curl -fsSL https://harnsy.dev/install.sh | sh -s -- --dry-runWindows: show every step, change nothing
$env:HARNSY_INSTALL_ARGS = "--dry-run"; irm https://harnsy.dev/install.ps1 | iex
Demo edition: 1 project, up to 10 agents running at once, no nodes or cluster mode.
Linux, Windows and macOS (not yet verified on a real Mac).
What the installer does
Everything it writes, everything it asks, and what it leaves alone. harnsy install --dry-run prints every step, the diff of every file it would change and the path of every file it would create, and changes nothing.
It stays in your user account.
Everything goes into your own user directories. No sudo or admin rights. It doesn’t change PATH or your shell profile; if ~/.local/bin is not on PATH, it tells you.
It checks the download.
The one-line installer downloads the release for your OS and CPU from GitHub over HTTPS and stops if the file is missing from the release’s SHA256SUMS or doesn’t match it. It unpacks into a temp folder, runs harnsy install from there and deletes the folder when it’s done. The check catches a broken or cut-off download; the sums come from the same release.
It sets up three things without asking.
The program, an install record and a background service for your user only. The service starts now and at every login.
| Linux | macOS | Windows | |
|---|---|---|---|
| The program (a copy) | ~/.local/bin/harnsy and the link ~/.local/bin/ccbus | as on Linux | %LOCALAPPDATA%\harnsy\bin\harnsy.exe |
| Install record | ~/.local/share/harnsy/install.json and hooks/harnsy-introduce.py | as on Linux | %LOCALAPPDATA%\harnsy\install.json |
| A service: starts now and at login, restarts after a crash | systemd user unit ~/.config/systemd/user/harnsy.service | LaunchAgent ~/Library/LaunchAgents/com.github.butschster.harnsy.plist, log in ~/Library/Logs/harnsy/ | Task Scheduler task harnsy, least privilege; if Windows refuses it, the value harnsy under HKCU\Software\Microsoft\Windows\CurrentVersion\Run (no restart after a crash) |
If a different service file or task is already there, it shows it and replaces it only after your yes. An existing ~/.local/bin/ccbus file is moved to ccbus.pre-harnsy.
It asks before everything else.
Each of these is a [y/N] question. Only y or yes counts; no answer, no terminal or --dry-run means no.
- Which terminal opens your agents, while none is chosen yet: WezTerm or tmux (tmux not on Windows), saved as
terminal.driverin~/.harnsy/config.yaml. - The tray icon (Linux, macOS):
~/.local/bin/harnsy-tray. Starting it at login is a second question. - A startup hook for new sessions in
~/.claude/settings.jsonand~/.codex/hooks.json, only if~/.claudeor~/.codexexists (not on Windows). - A status line in
~/.claude/settings.json, only if you have none.
For each settings file it first shows you the exact change. A file that already exists is first copied to ~/.local/share/harnsy/backups/ (Windows: %LOCALAPPDATA%\harnsy\backups\). No option answers yes for you; --no-tray, --no-hooks and --no-statusline skip a step.
It stays on your machine.
The dashboard on 127.0.0.1:7788 and the agent port on 127.0.0.1:7790 listen only on this computer. The service is also given 127.0.0.1:7789 for other nodes; that port opens only after you issue a node token, and never in the demo. harnsy sends no telemetry and checks for no updates: it talks to your harnesses on this machine and to nodes you connect.
It doesn’t touch:
- MCP servers: it prints the optional
claude mcp addline for you to run ~/.claude.json- Codex’s
~/.codex/config.toml - OpenCode’s settings
Later, while it runs: only with claude.auto_trust: true in config.yaml (off by default) harnsy marks a project folder trusted in ~/.claude.json before it opens Claude Code there, after copying the file to claude.json.bak in ~/.harnsy. Codex opened by harnsy gets folder trust as command-line flags; no file is written.
Remove it.
harnsy uninstall removes the service, the tray, the program and the settings entries it added, and asks before each settings change. Your data in ~/.harnsy and the backups stay until you delete them. harnsy uninstall --dry-run shows it all first.