A native Rust desktop chat client for Hermes Agent, built with iced.
- SSE Streaming — Real-time token-by-token responses with live markdown rendering
- Markdown — Syntax-highlighted code blocks, headings, lists, tables
- Tool Progress — Inline indicators when the agent runs tools (💻 🔍 📁)
- Dual API Mode — Chat Completions (stateless) and Responses API (server-side state)
- Multi-Profile — Switch between Hermes agent profiles on the fly
- Conversations — Persistent chat history with auto-generated titles
- Dark Theme — Terminal-aesthetic dark UI
- Keyboard Shortcuts — Ctrl+N (new chat), Escape (stop streaming), Enter/Shift+Enter
- Lightweight — ~23 MB native binary, no Electron, no web runtime
- Hermes Agent installed and configured
- API server enabled in Hermes
Add to ~/.hermes/.env:
API_SERVER_ENABLED=true
API_SERVER_KEY=your-secret-keyhermes gateway startgit clone https://github.com/tuxclaw/hermes-chat.git
cd hermes-chat
cargo build --release
cp target/release/hermes-chat ~/.local/bin/On first run, Hermes Chat creates ~/.config/hermes-chat/config.toml:
active_profile = "default"
[[profiles]]
name = "default"
host = "127.0.0.1"
port = 8642
api_key = "your-secret-key"Add more profiles to connect to different Hermes agent instances:
[[profiles]]
name = "woody"
host = "127.0.0.1"
port = 8643
api_key = "your-secret-key"hermes-chatTwo-crate Rust workspace:
core/— Data models, API client, SSE parser, persistence (no UI dependency)src/— iced GUI application
Built on the Elm architecture via iced: State → Message → Update → View
| Component | Technology |
|---|---|
| GUI | iced 0.15-dev (wgpu-accelerated) |
| HTTP | reqwest with SSE streaming |
| Streaming | sipper (iced's async stream pattern) |
| Markdown | iced::widget::markdown (built-in) |
| Persistence | JSON (conversations), TOML (config) |
| Async | tokio |
Hermes Chat connects to the Hermes Agent API server which exposes an OpenAI-compatible HTTP API:
POST /v1/chat/completions— Stateless chat with SSE streamingPOST /v1/responses— Stateful chat with server-side conversation trackingGET /health— Connection health check
MIT