A self-hosted web dashboard for your code projects and AI coding agents — Claude Code, Codex CLI, Gemini CLI, OpenCode, GitHub Copilot CLI and more — installed as a single executable on Linux or macOS, or as a Docker container. Open it from any browser (phone included), start agent sessions in your projects, and close the tab: sessions keep running on the server.
Agents, their logins, GitHub access and git settings are all set up from the dashboard.
Website and docs: hermithub.pages.dev
- Projects: create (empty folder,
git initorgit clone), rename, move to trash, restore. Star favorites to keep them at the top; hide projects you no longer use and bring them back any time. - Agent sessions, several at once per project, in a web terminal (tmux under the hood):
- Claude Code, Codex CLI, Gemini CLI, OpenCode, GitHub Copilot CLI, Qwen Code, Crush — pick a permission mode per session, continue the last conversation.
- Claude Remote Control: drive a session from claude.ai/code or the Claude mobile app.
- Plain bash terminal in the project folder.
- Settings in the browser: install / update / log in to each agent, or paste an API key; log in to GitHub (device code or token); git name and email; SSH key for other git servers.
- Monitoring: active / waiting / exited status, CPU and RAM per session, last output lines, server load.
- Files: file tree, Monaco editor (Ctrl+S), quick open (Ctrl+P), search across files, upload / download.
- Git: stage, commit, push, pull, branches, stash, diffs, recent commits.
- Parallel tasks with git worktrees: give each task its own folder and branch, run an agent in each, switch the file tree and Git panel between them, then merge back and clean up.
- Mobile friendly: bottom navigation, a text box for long prompts, sticky Ctrl, arrow keys, history scrolling.
The browser talks to a small Bun server, and every agent runs inside a tmux session on that server, so it keeps running when you close the tab. The server runs either as a standalone executable (a user service on your machine) or in a Docker container; the diagram shows the Docker setup.
What happens when you start a session and come back later:
- Two ways to run it. The standalone executable needs only tmux and git and uses your own user account.
The Docker image keeps agents in a container, and everything in
./data. - Sessions are tmux sessions. Closing the browser or losing your connection does not stop them, and neither does restarting the standalone service. Restarting the Docker container does, but you can pick up conversations again with Resume.
- Every API and terminal request needs a logged-in session and must come from an allowed origin.
The diagrams are rendered by mermaid.ink from the Mermaid sources in docs/diagrams; the source layout is described in docs/development.md.
On Linux (x86_64 / arm64) or macOS, no Docker needed:
curl -fsSL https://raw.githubusercontent.com/suriyadi15/hermithub/main/install.sh | bashThe installer detects your OS and CPU, installs tmux and git if they are missing (after asking), downloads the
hermithub executable to ~/.local/bin and runs it as a user service (systemd on Linux, launchd on macOS). Then
it prints a link like http://localhost:8787/setup?token=…. Open it, choose a password, then go to Settings
to install an agent and connect GitHub.
No URL, or want it on your phone? Run hermithub tunnel for a public https://….trycloudflare.com address (no
account or domain needed). Set a strong password and 2FA first, see Remote access.
Prefer Docker? It keeps agents isolated from the host, and on a server with a domain name it gets you HTTPS with automatic certificates:
curl -fsSL https://raw.githubusercontent.com/suriyadi15/hermithub/main/install.sh | bash -s -- --docker
curl -fsSL https://raw.githubusercontent.com/suriyadi15/hermithub/main/install.sh | bash -s -- --docker --domain hub.example.comAll options, service management and uninstalling: docs/installation.md.
No server? Deploy the image on a hosting platform, it needs one volume (docs/one-click-deploy.md):
Or let your AI agent do it: install the HermitHub skill (Claude Code:
/plugin install hermithub --marketplace suriyadi15/hermithub) and ask "Install HermitHub on this
machine".
Docker by hand is just a compose file:
mkdir hermithub && cd hermithub
curl -fsSLO https://raw.githubusercontent.com/suriyadi15/hermithub/main/docker-compose.yml
echo "PUID=$(id -u)" > .env && echo "PGID=$(id -g)" >> .env
docker compose up -d
docker compose logs hermithub # shows the setup linkHermitHub checks for new releases and shows them in Settings → Updates. The standalone executable updates
itself from there with one click, or with hermithub update in a terminal. Automatic updates can be switched on
or off in Settings or with hermithub auto-update on|off. See docs/installation.md.
Re-running the installer also updates whichever install it finds. For Docker, run this in the install folder:
docker compose pull && docker compose up -dUpdating the standalone executable keeps running sessions. Updating the Docker container stops them. Conversations are kept either way; continue them with Resume on the project page. Installed agents live in the data folder and update themselves (or use Update in Settings).
Standalone: settings in ~/.config/hermithub/env, database in ~/.hermithub, projects in ~/projects.
Agents and logins are those of your user (~/.local, ~/.claude, ~/.config/gh…).
Docker: everything is in ./data next to docker-compose.yml, which is the home folder of the container user and
laid out the same way:
| Folder | Contents |
|---|---|
data/projects |
Your projects |
data/.hermithub |
Dashboard database (password, settings, session history) |
data |
Installed agents, their logins and history, GitHub CLI login, git config, SSH keys |
Back up data/ to back up a Docker install. See docs/configuration.md to put projects
somewhere else or share folders with the host.
- Installation — standalone executable or Docker, installer options, uninstall
- One-click deploy — Render, Railway, Coolify or any container platform
- Install with an AI agent — skill for Claude Code, Codex and other agents
- Configuration —
.envoptions, data folders, resource limits - Agents — installing, logging in, API keys, permission modes
- Parallel tasks with worktrees — one folder and branch per task, merge, clean up
- GitHub & git — connecting GitHub, other git servers
- Remote access — built-in HTTPS, Caddy / nginx, Cloudflare Tunnel, SSH tunnel
- Security — what the dashboard can do and how it is protected
- Development — running from source, architecture
- Adding an agent — support another CLI in a few lines
- Advanced — sharing host folders, migrating an existing setup
The dashboard gives full shell access to your user account (standalone) or the container (Docker), including
your agent and GitHub credentials.
By default it only listens on 127.0.0.1. Expose it only over HTTPS, with a strong password, and ideally
behind an extra login layer such as Cloudflare Access or a VPN. Details in docs/security.md.
| Part | Technology |
|---|---|
| Runtime | Bun, Node.js (for npm-based agents) |
| Backend | Elysia, SQLite (bun:sqlite), tmux, Bun's built-in PTY |
| API client | Eden Treaty (types straight from the backend) |
| Frontend | React 19, Vite, React Router, TanStack Query |
| UI | Tailwind CSS v4, shadcn/ui (Radix), lucide-react, sonner |
| Terminal / editor | xterm.js / Monaco |
Issues and pull requests are welcome — see CONTRIBUTING.md.