A private, self-hosted web UI for Claude — and 30+ other models — that runs on your own machine.
Mobile-friendly · No build step, no framework · Bring your own keys · 5-minute setup
For beginner-to-intermediate users. If you can open a terminal and paste a few commands, you can run this. A friendly chat UI for Claude (and many other models) that lives on your machine — your keys, your data, no cloud account required.
About this project.
claude-webuiis a Claude-focused fork of the excellent open-source Hermes Web UI (the browser UI for Nous Research's Hermes Agent). This fork makes Claude the default chat engine so it runs standalone with nothing but an Anthropic key or a Claude login — and adds a reskinned UI, an expanded multi-model picker, and mobile polish. Full credit to the upstream authors — see Credits & origin.
- 🤖 Multi-model — Claude, OpenAI, OpenRouter (hundreds of models), Google Gemini, DeepSeek, and local models (Ollama / LM Studio). Switch per conversation.
- 📱 Mobile-first — built for real use from your phone, not just desktop. Add it to your home screen (PWA), works offline-aware.
- 🔒 Fully private — runs on your machine, your keys, no cloud account. Optional password + passkey login.
- ⚡ Zero build step — pure Python + vanilla JS. No framework, no bundler, no
npm install. Clone and run. - 🧠 Persistent sessions — conversations saved locally, searchable, with projects, tags, pinning, and cost/token tracking.
- 🛠️ Agentic — file browser, git status + worktrees, an embedded terminal, and inline tool-call cards.
- 🌐 Remote-ready — reach it securely from your phone over Tailscale — no port-forwarding.
- 🗓️ Scheduled tasks — built-in cron to run prompts on a schedule.
- 🔊 Voice — speech-to-text dictation and a hands-free voice mode; optional server-side TTS.
- 🧩 Bring-your-own skills — point it at your own Claude Code skills & commands in one step.
- 🎨 Themeable — a dark, warm "claude-hub" look out of the box, plus light mode and several skins. 12 languages.
In action — agentic chat with inline code, tool-call cards, and a live workspace file browser
On a phone, over Tailscale — agentic chat · workspace files · sessions & search · persistent memory
Requirements: Python 3.11+ · Git · Linux, macOS, or Windows (via WSL2).
git clone https://github.com/JDiz00/claude-webui.git
cd claude-webui
bash start.shstart.sh creates a virtual environment, installs the handful of dependencies, and starts the server.
Then open http://localhost:8787.
Connect Claude — pick one:
- Use your Claude subscription (no API key): run
claudeonce in a terminal to log in. That's it. - Use an API key: copy the env template and add a key:
cp .env.example .env # then set ANTHROPIC_API_KEY=... and AGENT_AUTH_MODE=api_key (or OPENROUTER_API_KEY=..., etc.)
Tip
Local models (Ollama, LM Studio) need no key — just have them running and pick them in the model dropdown.
Note
This fork runs standalone on Claude by default. The original Hermes Agent integration is optional;
opt in with bash start.sh --install-agent only if you want it.
Add keys in Settings → Providers (or in .env) and the model picker fills in automatically:
| Provider | Key | Notes |
|---|---|---|
| Anthropic (Claude) | ANTHROPIC_API_KEY or claude login |
Default engine |
| OpenRouter | OPENROUTER_API_KEY |
One key → hundreds of models |
| OpenAI | OPENAI_API_KEY |
GPT models |
| Google Gemini | GEMINI_API_KEY |
|
| Ollama / LM Studio | (none) | Local, runs offline |
| fal.ai | FAL_KEY |
Optional — image generation |
…plus more (DeepSeek, xAI, Mistral, NVIDIA, Bedrock, and any OpenAI-compatible endpoint via Custom Provider).
This fork does not bundle third-party skills — so nothing here republishes anyone else's work. Instead it makes your own Claude Code skills first-class:
- The Settings → Skills panel automatically lists every skill in your
~/.claude/skills. - To also feed your skills and slash-commands to the agent, run the one-step importer:
scripts/import-skills.sh # from ~/.claude/skills and ~/.claude/commands scripts/import-skills.sh /path/to/skills # or a custom location
Imported skills are symlinked locally and git-ignored, so they're never committed. See
agent_plugin/skills/README.md for details.
Tailscale puts your computer and phone on a private network so you can reach the UI from anywhere — no port-forwarding, no public exposure.
- Install Tailscale on your computer and your phone, signed into the same account.
- Start the server bound to your tailnet, with a password set:
HERMES_WEBUI_HOST=0.0.0.0 HERMES_WEBUI_PASSWORD='something-strong' bash start.sh - Find your computer's Tailscale IP (
tailscale ip -4, e.g.100.x.y.z). - On your phone's browser, open
http://100.x.y.z:8787and log in. Add it to your home screen for an app-like experience.
Warning
Anytime you bind to 0.0.0.0 (anything other than localhost), set HERMES_WEBUI_PASSWORD first.
Without it, the chat, terminal, and file browser are open to anyone who can reach the host.
See docs/remote-access.md for SSH-tunnel and other options.
- Binds to
127.0.0.1(localhost only) by default — nothing is exposed until you choose to expose it. - Optional password (
HERMES_WEBUI_PASSWORD) and passkeys / WebAuthn (Touch ID, security keys). Off by default for zero-friction localhost; turn it on before any remote access. - PBKDF2 password hashing, HMAC-signed HttpOnly cookies, CSRF protection, and outbound secret redaction.
- Optional HTTPS via
HERMES_WEBUI_TLS_CERT/HERMES_WEBUI_TLS_KEY.
Everything is optional and has a sensible default. Copy .env.example to .env and set what you need.
The most common knobs:
| Variable | Default | What it does |
|---|---|---|
HERMES_WEBUI_HOST |
127.0.0.1 |
Bind address (0.0.0.0 to expose on your network) |
HERMES_WEBUI_PORT |
8787 |
Port |
HERMES_WEBUI_PASSWORD |
(unset) | Enables the login gate — set before remote access |
ANTHROPIC_API_KEY |
(unset) | Claude API key (or use the claude login) |
OPENROUTER_API_KEY / OPENAI_API_KEY / GEMINI_API_KEY |
(unset) | Other providers |
MEMORY_VAULT_PATH |
(off) | Optional — point at your own Obsidian vault to enable the Memory panel |
Full list and details: .env.example and ARCHITECTURE.md.
Runs on Windows via WSL2 (a built-in Linux layer). Native Windows is not supported by the launcher — the bootstrap will point you to WSL2. One feature, the embedded terminal panel, is Linux/macOS only; everything else works.
Prefer containers? Build and run locally:
cp .env.docker.example .env
docker compose up -d
# open http://localhost:8787Set HERMES_WEBUI_PASSWORD in .env before exposing the port. Full guide, multi-container setups, and
common pitfalls: docs/docker.md.
No build step, no framework, no bundler — a Python standard-library HTTP server (server.py + api/)
serving a vanilla-JS frontend (static/). Chat runs through the
Claude Agent SDK. State (sessions, settings) lives outside
the repo at ~/.hermes/webui/ by default. Full design notes and the endpoint catalog are in
ARCHITECTURE.md; more guides in docs/.
Issues and PRs welcome. See CONTRIBUTING.md for the workflow and local verification,
and TESTING.md for the test suite.
claude-webui stands entirely on the shoulders of Hermes Web UI
by the Hermes Web UI Contributors — the original, MIT-licensed project this is forked from. It is the
browser UI for Hermes Agent by Nous Research. Enormous thanks
to the 190+ upstream contributors; the full upstream credit roll is preserved in
CONTRIBUTORS.md.
This fork's contributions: making Claude the standalone default engine, the reskinned "claude-hub" UI, the expanded multi-model picker, and mobile/Tailscale polish.
MIT — © 2025 Hermes Web UI Contributors, © 2026 JDiz00 (claude-webui fork). You're free to use, modify, and redistribute it; just keep the license notice.





