Skip to content

Repository files navigation

AgentHydra. Every local AI coding session, in one tab: many heads, one dashboard

Every local AI session, plus your isolated Claude and Codex instances

Website  ·  Download  ·  Reference  ·  Changelog

Website CI Release License: MIT Discord


CC Manager UI is now AgentHydra

The name stopped being true. It manages Claude, Codex and OpenCode now, not just Claude Code, so it is named for the many-headed thing it actually is. Nothing about your install changes:

  • Update normally. GitHub redirects the old repo URL, so existing clones, remotes and the built-in updater keep working without you touching anything.
  • Your data comes with you. ~/.ccmanagerui is moved to ~/.agenthydra on first run, with the queue, settings, instance names and accounts cache intact. If the move cannot happen, the app keeps reading the old folder rather than starting empty.
  • Old env vars still work. Every CCMANAGERUI_* variable is still read as a fallback for its AGENTHYDRA_* replacement.
  • What you should update at your leisure: desktop shortcuts pointing at CCManagerUI.exe, and any MCP config naming the old binary. Both are one-line changes.

If you run AI tools in more than one place (a couple of isolated Claude Desktop instances on different accounts, Claude Code and Codex terminals across repos, or OpenCode CLI/Desktop), nothing shows all of that local history at once. You alt-tab to remember which account is which, whether a session is still going, and what you asked it to do.

AgentHydra is a local dashboard for AI coding agents that brings your Claude Code, Codex, and OpenCode session history into one browser tab, lets you reply into a running chat or move one between accounts, tracks cost and usage across models and projects, and manages isolated Claude Desktop and Codex Desktop accounts, all without a cloud service or account signup. It does not run a chat you cannot see: the run queue and scheduler are still in the code and still readable as a record, but every attempt to start a new headless run is refused, on purpose (see Reply, fan out, or move a session, never headless below). It is not a Claude client and does not replace one: it is the dashboard the CLI and the desktop app do not come with.

Every session, in one list

The sessions view: a searchable list on the left holding Claude, Codex and OpenCode transcripts together, each badged with the tool that wrote it, one open on the right with a message box at the bottom

Screenshots use demo data.

Claude Code, Codex, and OpenCode conversations on your machine appear together, newest first. Filter by provider or recency; Claude sessions can also be filtered by project or Desktop instance. Click one to read the conversation and live-tail it while it runs. Codex is read from its rollout JSONL files, while OpenCode CLI and Desktop share the same local SQLite session store.

For Claude sessions, the box at the bottom lets you type straight back into a session without finding its terminal. Pick several Claude sessions and you can send the same message to all of them. Codex and OpenCode support is read-only.

An optional ChatGPT handoff in that composer turns the task and repository into a bounded Markdown context file, copies a ready-to-paste prompt, and opens ChatGPT. AgentHydra omits common secret files and likely credentials; you still review the attachment and submit it yourself.

When you want a raw Claude or Codex file, there is a button for opening the .jsonl in your editor, downloading it under its real title, or copying it out. OpenCode conversations are rendered from its database rather than exposed as a raw file.

Reply, fan out, or move a session, never headless

AgentHydra does not run a claude chat you cannot see. There is no headless queue or scheduler: every run happens in a real desktop app window, on purpose, so nothing is ever working away in a process with no chat for you to open. Four things actually work today:

  • Reply straight into a session's own desktop chat. The composer at the bottom of a session types your message into that chat's own app window (the same delivery fan_out_send uses over MCP) and confirms it landed by watching the transcript grow. A busy chat refuses honestly instead of pretending to queue behind it.
  • Fan a task list out across your other signed-in accounts with the MCP fan_out tool, one visible chat per account, then steer the whole group with fan_out_send.
  • Import a session into a desktop app so it becomes a real chat you can continue by hand.
  • Move a chat onto another signed-in account in one call with the MCP move_chat tool, or move_chats for several at once, which is the one to reach for whenever more than a single chat is moving. The chat keeps its history and lands ready to continue. See Moving chats between accounts.

The run queue view still exists as a record of past runs: every historical item, its prompt, model, exit code and live output, stays inspectable and editable, but creating or dispatching a new one is refused by policy. There is nothing here you can turn back on. If you're looking for the "queue a run for 3am" feature an earlier version of this README described, it has been removed, not hidden; the screenshot below is historical.

The run queue drawer, from before headless dispatch was removed: five runs, one running, three queued and one finished, each showing its project, model, effort and scheduled time

See where the time and the money went

The analytics view: headline cost, session and agent-hour tiles above a cost-by-day bar chart, cost broken down by model, project and account, and an hour-of-week grid showing when the work happens

Cost by day, by model, by project, and by the account that ran it. When in the week you actually work. How many sessions were going at once. Which tools get used, which files changed recently, and which sessions are worth a second look because a tool kept failing or the context was compacted.

All of it comes from totals worked out while the session list is being built, so it costs about half a megabyte for a store of 1,400 sessions and no message text is kept. Costs are published list prices: a subscription plan is not billed per token, so read them as what the same work would cost on the API. AgentHydra.exe --spend --json prints the same numbers for a script.

Manage isolated instances

The instances view: four isolated Claude Desktop instances, each with its account, plan, remaining weekly quota, live memory and uptime

If you keep separate Claude Desktop instances for separate accounts, this is where they live. Each row shows which account it is signed into, its plan, and, while it is running, its process, memory and uptime.

You can open, focus, quit, create and delete them from here, give each one a name, an icon and a colour so they stop looking identical, and see your isolated CLI logins alongside the desktop instance that shares their account.

Claude native control: open Settings → General → Claude native control and enable Start debugger automatically for a desktop account. Its next Open through AgentHydra starts the local connection automatically; saving does not open or restart an app. Configured accounts use the native session manager for archive and migration-source cleanup, without sidebar menus or Lua/UI automation for those steps. Other migration steps still use the existing guarded pipeline. New profiles need their own setting. See the native-control operating guide for the programmatic configuration API, supported build, exact-profile routing and failure rules.

The same view manages Codex Desktop and CLI together. Each Codex instance gets its own CODEX_HOME and desktop profile, so work and personal OpenAI logins can run in separate Codex windows. Open, focus and quit the desktop from its row; CLI Launch and Log in actions use that same isolated login.

Quick instance mode

When you only need to pick an instance and start it, instance mode skips the session scanner, database, queue recovery, scheduler, monitor, usage refresh, settings sync and updater. It opens a compact portable window with Claude Desktop, Claude CLI and Codex start/focus/stop controls.

  • Packaged build: run AgentHydra.exe --instances.
  • Source checkout: run bun run instances (after the normal one-time bun run build).
  • Windows shortcut: run misc\Create-Shortcut.ps1 once, then open AgentHydra Instances from the repository root.
  • Or add the same one-click launcher from Settings → Appearance → Quick Instances shortcut.

The quick daemon uses its own port and runtime pointer, so the full manager can open later without conflict. If the full manager is already running, the launcher reuses it. Closing the quick window retires its lightweight daemon automatically after a short reconnect grace period.

How it compares

Most tools in this space either read what your AI CLIs have already done, or spin up new isolated sessions for you to run. AgentHydra is the first kind.

Claude Squad and Conductor both launch new Claude Code (and Codex) sessions for you, each in its own git worktree so tasks do not collide: Claude Squad in a terminal TUI, Conductor in a macOS-only app. AgentHydra does not create worktrees, and by default it starts nothing on its own; it reads the Claude Code, Codex, and OpenCode session history, queue, and account state your existing setup already writes, then adds a run queue with a scheduler, cost and usage analytics, and multi-account instance management on top, from a browser tab on Windows, macOS, or Linux.

Claude Code's own worktree support covers running several sessions from one repo without any extra tool. AgentHydra sits a layer above that: it shows every session across every project and provider at once, however you started it.

If what you want is an editor with AI built in, AgentHydra is not that either. Cursor and Windsurf are IDEs; AgentHydra is a dashboard over the CLIs and desktop apps you already have.

Install

On Windows, one line. It installs under %LOCALAPPDATA% (no Administrator), and it verifies the download against the release's published SHA-256 before unpacking anything, with no way to skip that step, because a checksum you can opt out of is decoration:

irm https://raw.githubusercontent.com/LunarWerxs/AgentHydra/main/install.ps1 | iex

It takes the ZIP, so you get the tray icon, and it makes a Start Menu shortcut. Read the script first if you like; that is a reasonable thing to do with any irm … | iex.

Or download your OS build from Releases. On Windows, run the versioned AgentHydra-…-windows-x64.exe directly; it is an icon-bearing GUI executable with the web app embedded and no console window. Linux and macOS builds remain one-executable archives. No Bun is needed.

The system-tray icon comes with both downloads. The icon is drawn by a small separate launcher (misc\lunarwerx-tray.exe), and the daemon starts it for you when nothing else has. The ZIP ships that launcher in its misc\ folder; the single-file .exe carries it INSIDE the binary and writes it out beside its own state on first run, so double-clicking either one gets you the icon, Quit, and the auto-restart supervisor. (Before 0.41.0 the single file had no tray at all and said so with a notification - a limitation, written down as though it were a decision.) misc\Create-Shortcut.ps1 still makes a proper shortcut that launches through the tray host directly, and the installer above creates that same shortcut in the Start Menu. The ZIP doubles as the automatic-update transport.

Or from source, with Bun:

git clone https://github.com/LunarWerxs/AgentHydra.git
cd AgentHydra && bun install
bun run build && bun run start

Either way the UI is at http://localhost:7787.

Just trying it? Headless dispatch (queueing a run for claude to execute unattended) is disabled outright, so nothing ever spends your quota without you watching it happen in an app. The scheduler is off by default. Note that instance actions (open / quit / create / delete) act on real Claude Desktop instances; delete asks you to type the name.

There is no cloud service behind this and no account to sign up for. It reads the local stores your tools already write and talks to localhost; optional external handoffs open the provider and leave the final upload to you.

Update check. The one thing that does leave your machine on its own is the periodic check for a new release, against studio.connections.icu (a LunarWerx relay that mirrors GitHub's release feed). It sends the app version, a coarse OS tag (e.g. win11-26100), and a random per-install id, enough to count installs and see version/OS adoption. From that request, the server also derives and stores a coarse location (country, region, city, timezone), your network's ASN, locale, and a truncated user agent, but never an IP address. It never sends a hostname, username, file path, account, or email. Set AGENTHYDRA_NO_PING=1 to opt out; the update check then goes straight to GitHub's API instead, carrying no install id or telemetry.

Requirements

  • Bun if running from source.
  • The claude CLI for dispatch, and/or Claude Desktop for Claude instance management.
  • Optional: Codex Desktop/CLI for isolated Codex windows, CLI launch/login, and local rollout history; OpenCode for local OpenCode history; Hermes Agent and the DeepSeek Harness (@deepseek-ai/dsh) for theirs. Their sessions appear automatically when their standard local stores exist: ~/.dsh for the harness, or wherever DSH_HOME points. The harness can also be launched, opened and stopped from the Instances tab, one row per home.
  • Windows for the tray launcher. macOS and Linux builds exist and the instance-account code is written for them, but they are not verified there yet.
  • Windows instance management needs the classic Claude Desktop build (the ~217 MB Squirrel .exe installer). The newer MSIX package cannot be launched with an isolated profile. The Instances tab detects this and links the right installer.

For agents

The whole API is exposed over MCP, so any MCP-speaking client can inspect sessions and drive the Claude queue, scheduler, and instance managers directly. Setup and the full tool list are in docs/REFERENCE.md.

Agents can also work out which of your accounts they are running as (whoami) and read that account's remaining quota before fanning out work, which is the difference between pacing a big job and hitting a wall halfway through it: docs/AI_USAGE_SELFCHECK.md.

The orchestrator - the part that decides what should happen to a chat (the dry loop, the sweep, moving chats between accounts, archiving, naming, the tray-icon switch) - lives in this repo under orchestrator/ and is driven through the same MCP server (orchestrator_menu, orchestrator_run, orchestrator_loop, orchestrator_switch), so an agent never has to be told there is a second program. Nothing there acts unless the tray icon is up.

How it behaves is yours to set: orch.py policy is one file of 86 switches - the gate's timings and its four archive signals, what each sweep lane does, the caps, the wake prompt, every scheduled lane

  • and every default is exactly what was hardcoded before it existed, so installing it changes nothing. orch.py policy --wizard walks through them; orch.py dryrun runs the read-only loop N times and proves the switches actually steer it.

More

Reference covers configuration, the MCP tools, auto-update, the stack, the repo layout and how to run the checks.

FAQ

Is AgentHydra free? Yes. It is open source under the MIT license, free to download and run, with no account or subscription for AgentHydra itself. You still need your own Claude Code, Codex, or OpenCode setup, since AgentHydra manages sessions for those tools rather than providing the underlying AI.

Does it work offline? Mostly. AgentHydra runs as a local daemon reading session data already on your machine, with no cloud service and nothing to sign up for. The one thing that reaches out on its own is a periodic update check; set AGENTHYDRA_NO_PING=1 and that check goes straight to GitHub's API instead.

Is my data sent anywhere? No session content leaves your machine. The periodic update check sends the app version, a coarse OS tag, and a random per-install id, never a hostname, username, file path, account, or email. The server derives an approximate location and network ASN from that request. AGENTHYDRA_NO_PING=1 turns it off.

What are the system requirements? Bun is only needed if you run from source; packaged builds need nothing extra. You need the claude CLI and/or Claude Desktop for Claude features, with Codex Desktop/CLI and OpenCode optional. The tray launcher and full Windows instance management need the classic Squirrel-installer build of Claude Desktop, not the newer MSIX package.

How is it different from Claude Squad or Conductor? Claude Squad and Conductor both start new, isolated Claude Code (and Codex) sessions in fresh git worktrees. AgentHydra creates no worktrees, and out of the box it starts nothing by itself: it reads the history, queue, and account state your existing Claude Code, Codex, and OpenCode setup already writes, and adds a scheduler, cost analytics, and instance management on top. See How it compares.

Which AI tools does it support? Claude Code, Codex, and OpenCode sessions are read directly and shown together in the session list. Queueing runs, composing replies, the scheduler, and rate-limit auto-resume are Claude-only; Codex and OpenCode are read-only. Claude Desktop and Codex Desktop instances are managed separately from the Instances view.

Can I try it without risking my Claude quota? Yes. Headless dispatch is disabled outright - AgentHydra never spawns claude against your quota without you watching it happen in an app. The scheduler stays off by default either way. Note that instance actions (open, quit, create, delete) still act on real Claude Desktop instances.

Made by LunarWerx Studios. Also see RepoYeti, DevWebUI, and SageThumbs.

License

MIT.

About

Every local AI coding session in one tab: Claude Code, Codex and OpenCode in a single list, with a queue you can schedule and isolated Claude Desktop instances kept apart. Local, private, MCP-native.

Topics

Resources

Stars

47 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages