A minimal, browser-based chat UI for Hermes Agent. Built for proper CJK (Chinese/Japanese/Korean) IME input support and lightweight local chat.
Terminal emulators like st, alacritty, and xterm struggle with IME composition for CJK languages. Browsers handle Fcitx/IBus/sogou input natively. This gives you a clean, minimal chat interface with full Hermes agent capabilities (tools, memory, session continuity) without needing the full dashboard.
- Full agent mode: Tools, memory, SOUL.md persona, session history — everything active
- CJK IME support: Type Chinese, Japanese, Korean naturally in your browser
- Session continuity: Conversations persist across page refreshes
- Token usage display: See context window usage in real-time
- Markdown rendering: Code blocks, tables, links, etc. all rendered properly
- Streaming responses: Watch the bot type in real-time with SSE
- Zero dependencies: Python stdlib only, no pip installs needed
- Miasma dark theme: Warm green accent on dark background (customizable via CSS variables)
- Hermes Agent installed and configured (
hermescommand available) - Python 3.6+ (stdlib only — no external packages)
- A modern browser (Chrome/Firefox/Safari)
- Linux or macOS
git clone https://github.com/itsme-chugumi/hermes-simple.git
cd hermes-simple
chmod +x hermes-simple.shOption 1: Direct launcher
./hermes-simple.shOption 2: Start server manually
python3 server.py 8647
# Then open http://127.0.0.1:8647 in your browserOption 3: Add shell alias (recommended for frequent use)
For Bash/Zsh — add to ~/.bashrc or ~/.zshrc:
alias hermes-simple='bash ~/hermes-simple/hermes-simple.sh'For Fish — create ~/.config/fish/conf.d/hermes-simple.fish:
function hermes --wraps hermes
if test "$argv[1]" = "simple"
bash ~/hermes-simple/hermes-simple.sh
else
command hermes $argv
end
endThen just type hermes simple to launch.
Browser (CJK IME works) → POST /chat {message, session_id}
↓ (same origin, no CORS)
Python server (stdlib http.server, port 8647)
↓ spawns `hermes chat -q "<msg>" -Q --cli [--resume <id>]`
↓ reads stdout line-by-line, extracts session_id, streams as SSE
Browser receives SSE events: {type: "delta", content} | {type: "done", session_id}
↓
Full agent runs: tools, file access, web, SOUL.md persona, memory
The server auto-starts hermes proxy if needed (probes port 8645 on startup).
Change theme colors — edit CSS variables in index.html:
:root {
--bg: #222222;
--fg: #c2c2b0;
--accent: #5f875f;
/* ... */
}Change port — pass port as argument to server:
python3 server.py 9000
# Update hermes-simple.sh to match- Enter: Send message
- Shift+Enter: New line in message
- Ctrl/Cmd + /: Focus input (if not already focused)
- Single-user only (no auth, binds to localhost)
- No file uploads (paste text/code directly)
- Requires
hermesto be in PATH hermes proxy startcan take 10+ seconds on first run
Public Domain (Unlicense) — do whatever you want with it.
Engineered by Nano — a witch of the abyss.