Hermes-Agent-Windows-Rust π¨π³ δΈζ
A high-performance AI agent desktop application for Windows, built with Rust + React. Streaming tool calls, multi-provider LLM support, 19 built-in tools, and a 9-page Web UI.
Based on NousResearch/hermes-agent (MIT License). This is a ground-up Rust rewrite targeting Windows desktop with native WebView2 GUI.
UI & feature design inspired by hermes-hud and hermes-workspace.
- Streaming Tool Calls β Real-time streaming responses with live tool execution. Resolved a critical parsing bug in the streaming tool_call accumulator (commit
d92ca75). - Interruptible β Stop any in-progress streaming request instantly.
- Multi-turn Sessions β Persistent conversation history with SQLite + FTS5 full-text search.
- Tool Auto-Skill Generation β After complex tasks, the agent autonomously creates reusable skills.
- MiniMax (default)
- OpenAI (GPT-4 series)
- Anthropic (Claude series)
- models.dev registry with context-length awareness
- Per-conversation model override (
/modelcommand)
| Tool | Description |
|---|---|
terminal |
Execute PowerShell/cmd commands |
file_read / file_write / file_edit |
Full file operations |
list_dir |
Directory listing with tree view |
skill_create / skill_list / skill_view / skill_delete |
Skill lifecycle management |
memory_save / memory_search |
Persistent memory store |
browser_navigate / web_search |
Web automation |
execute_code |
Sandboxed code execution |
interrupt |
Streaming interrupt |
delegate |
Subagent delegation |
- Chat β Main conversation interface with tool call cards, streaming markdown, session switcher
- Files β Monaco editor with file tree, save/load workflow
- Terminal β xterm.js terminal emulator embedded in browser
- Memory β Persistent memory editor with section-based storage
- Skills β Browse, create, and manage auto-generated skills
- Dashboard β Real-time HUD with stats (sessions, skills, messages)
- Inspector β Per-session message history and token usage
- Settings β Theme switcher (default/ares/slate/mono), provider API keys
- HUD β Agent telemetry overlay (total sessions, skills, messages)
- Tauri 2.x β Native Windows WebView2 packaging
- React + Vite β Fast HMR development, TypeScript throughout
- Playwright β E2E test suite included in devDependencies
- Download the latest release: v0.1.0 β
release-package.zip - Extract to any folder
- Double-click
start.bat - Open http://localhost:1420 β Settings β enter your API key β Save
- Start chatting!
Prerequisites:
- Rust 1.93+
- Node.js 18+
- Windows 10/11
Build:
# Clone the repo
git clone https://github.com/tcflying/hermes-agent-windows-rust.git
cd hermes-agent-windows-rust
# Build Rust backend
cargo build --release
# Install frontend dependencies
cd crates/ui && npm install && cd ../..Run:
start.bat # Starts backend (port 3848) + frontend (port 1420)
stop.bat # Stops all services- Frontend: http://localhost:1420
- Backend API: http://localhost:3848
hermes-rs/
βββ crates/
β βββ agent/ # Core agent loop, tool execution, memory, prompt building
β β βββ src/
β β βββ chat.rs # Main streaming chat handler (FIXED: tool_call parser)
β β βββ tools.json # 19 tool definitions
β β βββ memory.rs # MemoryStore, MemoryManager, MemorySnapshot
β β βββ memory_nudge.rs # Periodic nudge injector
β β βββ skill_commands.rs # /skill slash command handler
β β βββ iteration.rs # IterationBudget (max 30 tool calls/turn)
β β βββ interrupt.rs # InterruptFlag for streaming stop
β β βββ auxiliary_client.rs # Vision + summarization clients
β βββ cli/ # HermesCLI β slash commands, skin engine, setup wizard
β βββ config/ # YAML config loader, multi-provider schema
β βββ gateway/ # Axum HTTP server, SSE streaming, session routing
β β βββ platforms/ # Telegram, Discord, Slack, WhatsApp, Signal adapters
β βββ session/ # SQLite + FTS5 session DB, trajectory saving
β βββ tool-registry/ # Central tool registry (stub, pending integration)
β βββ ui/ # React + TypeScript frontend
β β βββ src/
β β βββ pages/ # 9 page components (Chat, Files, Terminal, Memory...)
β β βββ components/ # WorkspaceLayout, FileTree, ToolCallCard...
β β βββ App.tsx # React Router v7 routing
β βββ utils/ # Shared utilities
βββ start.bat # One-click dev startup
βββ stop.bat # Stop all services
βββ Cargo.toml # Workspace root
| Layer | Technology |
|---|---|
| GUI Shell | Tauri 2.x (WebView2) |
| Frontend | React 18, TypeScript, Vite 6 |
| Backend | Rust, Tokio, Axum 0.8 |
| Database | SQLite + FTS5 (rusqlite, bundled) |
| Terminal | xterm.js |
| Code Editor | Monaco Editor |
| Markdown | react-markdown + shiki |
| HTTP | reqwest (streaming), tower-http |
| CLI | clap (derive) |
| Logging | tracing + tracing-subscriber |
A critical bug in the streaming tool_call accumulation logic caused {"error":"invalid function arguments json string"} on every tool call during streaming responses.
Root Cause: The original state machine used index field to detect tool call boundaries β but the index was unreliable across providers and multiple concurrent tool calls caused id flush timing errors.
Fix (commit d92ca75): Replaced index-based detection with id-change detection:
- Each incoming tool_call chunk is checked for a new
id - When
idchanges, the previous tool call is flushed to the accumulated list - No mutexes needed for accumulation state β simple owned variables
File: crates/agent/src/chat.rs lines 183β283
Config file: ~/.hermes/config.yaml
llm:
provider: minimax
model: MiniMax-M2.7-highspeed
api_key: your-api-key
display:
skin: default # default / ares / slate / mono
tool_progress: true
streaming_thinking: true
gateway:
host: 0.0.0.0
port: 3848
memory:
max_size: 50000
nudge_interval: 50# Run tests
cargo test
# TypeScript check (frontend)
cd crates/ui && npx tsc --noEmit
# Format
cargo fmt
cargo clippy --fix| Component | Status |
|---|---|
| Core chat + streaming | β Working |
| Tool calling (19 tools) | β Working |
| Skill auto-creation | β Working |
| Memory system | β Basic (MemoryStore, nudge) |
| Session DB + FTS5 | β Working |
| Multi-provider LLM | β Working |
| React UI (9 pages) | β Working |
| HTTP Gateway | β Working |
| CLI + slash commands | β Working |
| Streaming interrupt | β Working |
| Platform adapters | β Telegram, Discord, Slack, WhatsApp, Signal |
| Skill self-evolution | β Auto-create, merge duplicates, prune stale |
| ACP adapter (VS Code) | π Not started |
MIT β Same as NousResearch/hermes-agent.