Download
Hydra Desktopships with every release

Your agents are already running.
Now you can watch them.

The CLI routes the work. The desktop app shows you what it did, which head answered, how long it took, what it cost, how confident it was, and which files changed. It reads the same local logs hyctl writes, so there is nothing to connect and nothing to sign in to.

Hydra, localhost · no account, no telemetry
Views
Chat
ask for work, the reply says who answered, and what it cost
add pagination to /users
Read internal/api/users.go, added page/size parsing and an X-Total-Count header.
T6 gemini-flash · 2.9s · $0.004 · session →
Ask anything about this repo… Auto-route
ACTIVE
gemini-flash T6
flash pool · 37 calls
MEASURED AT THIS
gemini-flash1.18
go · 41 obs
qwen2.50.31
yaml · 5 obs · thin
Models
what this machine can route to, and whether anything can drive it now
ModelTierReachable nowMeasured
claude-opus1yes1.42 · 62 outcomes
claude-sonnet3yes0.91 · 38 outcomes
gemini-flash6no API key for googlenot measured
qwen2.5-coder:7b10start ollama serve0.34 · 77 outcomes
The dot means reachable, not enabled in a config file. A score never appears without the number of outcomes behind it.
Activity
grouped by who has to act, not by time alone
WAITING ON YOU · 1
rotate the signing key answertier 1
RUNNING NOW · 1
add pagination to /users livetier 6
SOMETHING FAILED · 1
refactor the ledger globs failedtier 3
DONE · 2
write DTO tests donelocal
add a User DTO donetier 8
Usage
spend, grouped by model · tier · day
Calls today
128
Spend today
$0.42
vs all-frontier
−83%
ModelTierCallsCost
claude-sonnet214$0.31
gemini-flash637$0.11
qwen2.5-coder:7b1077free
Audit
what agents touched, and whether policy allowed it
Allowed
1,204
Denied
7
Flagged
2
Ledger chain intactverified
OWASP LLM Top-10 coverage8 / 10 rules
Prompt-injection markers seen2 blocked
EVERY DECISION IS APPEND-ONLY AND HASH-CHAINED · NOTHING LEAVES THE MACHINE

A live rendering of the app's views, built from its own design tokens. Not a screenshot, the numbers are sample data.

What's in itfive views, one question each

Each screen answers something you'd otherwise grep the logs for.

The app is a reader, not a second brain. Everything it shows comes from the JSONL files hyctl already writes to ~/.hydra, so the numbers on screen are the same ones hyctl cost and hyctl stats print, by construction.

Chat

Ask, and see what answered

The window opens here. Ask for work and the reply names the model, the tier and the cost, with the run narrating itself as it goes rather than after. The model picker groups by shared quota, so it shows when choosing one model spends the budget another will need.

Models

What you can actually route to

Every head this machine found, grouped by the token pool it spends, each marked with whether anything can drive it right now and, when it cannot, why, no API key, or a local server that is not running. Beside it, the accuracy each model has actually earned, never shown without the number of outcomes behind it.

Usage

Where the money went

Spend grouped by model, by tier and by day, with call counts beside each, alongside the governor's context pressure and your trust record, so cost and confidence sit on one screen.

Activity

What needs you

Every request, grouped by who has to act rather than by time alone: waiting on you, running now, something failed, done. A flat newest-first list gave a parked request, a live one and a month-old success the same weight, so nothing read as needing attention.

Session

Why it did that

Opened from a request in Activity, not from the rail.

One run's timeline in order: which head was selected, which candidates failed and why it fell through, how long each step took, where it handed off, and a layered graph when the run fanned out, so a swarm reads as a shape rather than a list. Its Code tab carries the diffs for the same run, marking what changed within a modified line, not just which lines moved, and lets you accept or undo the change on disk. Clicking a file in the graph opens it there.

Audit

What it was allowed to touch

Every tool call an agent made, whether the guardrails allowed it, and what got blocked or flagged, over an append-only, hash-chained audit log, mapped against the OWASP LLM Top 10. Its MCP servers tab carries a trust verdict for each server installed on this machine, and says plainly when nothing has been compared against the official registry yet.

Beside the chat, a pane you glance at. The model working now and the quota it draws from, this run's confidence, the files it changed, and how accurate each model has actually measured at this kind of work, with the sample size beside every score, because a number from five observations is not a measurement.
The shape of itlocal by construction

No account. No server. Nothing leaves the machine.

There is no Hydra backend to sign in to, because there is no Hydra backend. The app opens the same files on your disk that the CLI writes, and that is the whole data path. Close it and the CLI keeps working exactly as before, it is a window onto the control plane, not a dependency of it.

Same numbers

Agrees with the CLI

Both read cost.jsonl. A figure that differed between them would be a bug, and there is a test that says so.

Provider-neutral

Whatever you have installed

Claude, Gemini, Codex, an API key, a local Ollama model, the app shows whichever heads your machine actually has, and marks the ones it cannot drive.

Estimated vs measured

Labelled, never conflated

Where a provider reports real token usage it says so; where Hydra estimated it, it says that instead. A guess is never shown as a measurement.

MIT

Read the whole thing

Frontend and backend are in the same repo as the CLI. If you want to know what it does with your data, the answer is in desktop/.

Downloadfree · MIT · no sign-up

One command on macOS and Linux.

It resolves the newest release, checks the download against the SHA-256 published beside it, and refuses to install on a mismatch. Nothing runs as root and nothing is written outside your applications directory.

$ curl -fsSL https://raw.githubusercontent.com/ankit373/hydra/main/install-app.sh | shcopy
  Release : v1.4.1
  Target  : darwin_universal
  Checksum: verified
  Installed: /Applications/Hydra.app

Pin a version with HYDRA_VERSION=v1.4.1, or change where it lands with HYDRA_APP_DIR=~/Applications. Read the script before you pipe it to a shell, it is under 200 lines and you should.

Or take the binary directly

macOS
universal · Apple Silicon + Intel
8.8 MB
.zip sha256
Linux x86-64
x86-64
4.4 MB
.tar.gz sha256
Linux ARM64
aarch64
4.0 MB
.tar.gz sha256
Windows x86-64
x86-64 · unzip and run Hydra.exe
4.9 MB
.zip sha256
Windows ARM64
aarch64 · unzip and run Hydra.exe
4.4 MB
.zip sha256

links pinned to v1.4.1 · all releases · the command above always takes the newest

Not code-signed yet. The build carries no Apple Developer signature, so macOS quarantines it and the first launch fails with "damaged". The install script clears that flag for you; if you unzipped it by hand, run xattr -dr com.apple.quarantine /Applications/Hydra.app or right-click → Open. Gatekeeper is telling you the truth: nobody has paid Apple to vouch for this. The checksum is what you can verify instead.
Install the CLI too. The app reads the logs hyctl writes, without it there is nothing to show and the app will look empty rather than unconfigured. brew install ankit373/hydra/hyctl, or the other install paths.