Hermes Agent v0.5.0 — The Hardening Release
Overview
v0.5.0 — The Hardening Release. Released March 28, 2026. This release is all about making Hermes Agent production-ready: 50+ security and reliability fixes, a comprehensive supply chain audit, and major platform expansions that position Hermes as a serious contender in the autonomous agent space.
By this point, the project had surpassed 15,700 GitHub stars since its initial public launch in February 2026, with over 242 contributors. Nous Research described this as the release that “hardens” every layer of the stack — from dependency pinning and CVE patching, to SSRF protections and shell injection prevention.
Major Features
1. Hugging Face as a First-Class Inference Provider
Hermes Agent now natively integrates with the Hugging Face Inference API, complete with authentication, setup wizard, and an intelligent model picker that maps OpenRouter’s agentic defaults to their HF equivalents.
# During setup, Hugging Face appears as a provider option
hermes setup
# Select "Hugging Face" → enter your HF API token → choose from curated agentic models
# Switch to a Hugging Face model at runtime
hermes model --provider huggingface
How it works under the hood:
- Curated model list mapping OpenRouter defaults to HF equivalents, so you get the right model without guesswork
- Providers with 8+ curated models skip the live
/modelsendpoint probe for instant startup - Full auth flow with your HF API token, stored securely in the Hermes credential store
2. Telegram Private Chat Topics
Project-based conversations with functional skill binding per topic — you can now run isolated workflows within a single Telegram chat. Each topic gets its own skill set, its own context, and its own agent personality.
# hermes.config.yaml
telegram:
private_chat_topics: true
topic_skills:
- topic: "ml-experiments"
skills: [python-ml, data-analysis, notebook]
- topic: "devops"
skills: [docker, terraform, kubernetes]
This means one Telegram chat can host your ML workflow, your infrastructure management, and your code review — all isolated, all persistent, all in one place.
3. Native Modal SDK Backend
Replaced the swe-rex dependency with native Modal SDK (Sandbox.create.aio + exec.aio), eliminating SSH tunnels and dramatically simplifying the Modal terminal backend.
# Before: swe-rex created SSH tunnels for every sandbox operation
# After: direct SDK calls — faster, simpler, no tunnel management
# The agent now uses Modal's native async primitives:
# Sandbox.create.aio() — create sandboxes without tunnel overhead
# exec.aio() — execute commands directly via the SDK
This change removes a significant architectural dependency and makes sandboxed execution more reliable and easier to debug.
4. Plugin Lifecycle Hooks Activated
The plugin hook system is now fully live. Four lifecycle hooks fire at key points in the agent loop:
| Hook | Trigger Point | Use Case |
|---|---|---|
pre_llm_call |
Before each LLM API call | Modify prompts, inject context, log requests |
post_llm_call |
After each LLM API call | Post-process responses, extract structured data |
on_session_start |
When a session begins | Initialize resources, set up workspace |
on_session_end |
When a session ends | Clean up, persist state, send notifications |
# Example plugin using lifecycle hooks
# my_plugin.py
def pre_llm_call(context, messages):
# Add custom system context before the LLM sees the prompt
messages.insert(0, {"role": "system", "content": "Today's date: 2026-03-28"})
return messages
def post_llm_call(context, response):
# Log token usage to your analytics platform
log_usage(response.usage)
return response
These hooks fire in CLI, gateway, and all messaging platforms — completing a long-requested extensibility feature.
5. GPT Tool-Use Enforcement
GPT models had a persistent quirk: they’d describe what they intended to do instead of actually making tool calls. v0.5.0 adds GPT_TOOL_USE_GUIDANCE — a specialized system prompt injection that forces GPT models to use tools rather than narrate actions.
# Internal: before each GPT API call, the agent injects guidance:
GPT_TOOL_USE_GUIDANCE = """
When you need to perform an action, you MUST use the appropriate tool.
Do NOT describe what you would do — actually call the tool.
"""
Additionally, stale budget warnings that accumulated in conversation history (and caused models to avoid tools across turns) are now automatically stripped from the transcript.
6. Anthropic Output Limits Fix
Replaced the hardcoded 16K max_tokens limit with per-model native output limits:
| Model | Old Limit | New Limit |
|---|---|---|
| Claude Opus 4.6 | 16K | 128K |
| Claude Sonnet 4.6 | 16K | 64K |
| Other Claude models | 16K | Model-specific |
This fixes two long-standing issues:
- “Response truncated” errors when the agent needed more than 16K output tokens
- Thinking-budget exhaustion — the agent now detects when a model uses all output tokens on reasoning and intelligently skips useless continuation retries
7. Nix Flake Support
By @alt-glitch — full uv2nix build, NixOS module with persistent container mode, auto-generated config keys from Python source, and suffix PATHs for agent-friendliness.
# flake.nix
{
inputs.hermes-agent.url = "github:NousResearch/hermes-agent";
# ...
hermes-agent.nixosModules.default
# Provides: hermes-agent service with persistent container mode
}
8. Supply Chain Hardening
This release mounted a comprehensive supply chain defense:
- Removed compromised
litellmdependency — a widely-publicized supply chain incident - Pinned all dependency version ranges — no more floating version drift
- Regenerated
uv.lockwith cryptographic hashes — every dependency is verified at install time - Added CI workflow that scans every PR for supply chain attack patterns
- Bumped dependencies to fix known CVEs across the dependency tree
New Skills
| Skill | Description |
|---|---|
| G0DM0D3 | Godmode jailbreaking skill for advanced prompt engineering and capability exploration |
| Docker Management | Container lifecycle management, image building, and compose orchestration |
| OpenClaw Migration v2 | 17 new modules for migrating from OpenClaw to Hermes Agent, including terminal recap |
Skills System Improvements
- Environment variable passthrough — skills can declare which env vars they need, and Hermes passes them through securely
- Cached skills prompt with shared
skill_utilsmodule for significantly faster time-to-first-token (TTFT) - Git Trees API used for skill installation to prevent silent subdirectory loss
- Agent-created skills are now properly treated as trusted (not untrusted community content)
Messaging Platforms
Telegram
- Private Chat Topics with per-topic skill binding (see Major Features above)
- Auto-discover fallback IPs via DNS-over-HTTPS when
api.telegram.orgis unreachable — the agent finds alternative routes - Configurable reply threading mode — control how the agent threads its responses
- Self-rescheduling reconnect when polling fails after 502 errors
Discord
- Fixed phantom typing indicator that persisted after the agent’s turn completed
Slack
- Tool call progress messages now correctly routed to the right Slack thread
- Media download support — documents, audio, and video messages are now downloadable by the agent
Gateway Core
/verbosecommand for messaging platforms — toggle tool output verbosity from any chat- Background review notifications delivered directly to user chat
- Retry transient send failures and notify the user when retries are exhausted
/stophard-kills session lock — recover from hung agents without restarting the gateway- Thread-safe
SessionStorewiththreading.Lock - Gateway no longer wastes ~10K tokens loading the Hermes repo’s AGENTS.md into every session
- Request timeouts added to HA, Email, Mattermost, and SMS adapters
CLI & User Experience
Interactive CLI Improvements
- Configurable busy input mode — control what happens when you type during agent processing
- Multiline paste preserved — no more garbled input when pasting multi-line commands
- Tool generation callback — streaming “preparing terminal…” updates while the agent generates tool arguments
- Status bar fixes: tokens with trailing zeros now display correctly (260K instead of 26K), duplicates and degradation fixed during long sessions
- Reasoning box no longer renders 3x during tool-calling loops
- “Event loop is closed” / “Press ENTER to continue” during idle sessions — fixed with a three-layer solution
- TUI refreshes before background task output to prevent visual overlap
Setup & Configuration
/modelcommand overhaul — extracted shared pipeline for CLI and gateway, custom endpoint support- Return user setup menu now uses explicit key mapping instead of fragile positional index
hermes updatehardened against diverged history, non-main branches, and gateway edge cases- OpenClaw migration no longer overwrites defaults; setup wizard skips already-imported sections
- AGENTS.md loading now stops at the top-level — no more recursive directory walk
- macOS Homebrew paths added to browser and terminal PATH resolution
- Default SOUL.md reset to baseline identity text
Tool System
API Server
- Idempotency-Key support — safe retry semantics for API calls
- Body size limits and OpenAI-compatible error envelope
- Cancels orphaned agents on SSE disconnect with true interrupt
- Streaming no longer breaks when the agent makes tool calls
Terminal & File Operations
- V4A patch parser now handles addition-only hunks correctly
- Exponential backoff for persistent shell polling — reduced CPU usage
- Timeout added to subprocess calls in
context_references
Browser & Vision
- SSRF protection added to
browser_navigate,vision_tools, andweb_tools - 402 insufficient credits error handled gracefully in vision tool
- Browser command timeout now configurable via
config.yaml
MCP
- Runtime and config-based MCP toolset resolution unified
- MCP tool name collision protection — prevents silently overwriting tools
Security & Reliability
Security Hardening (50+ fixes)
| Category | Fix |
|---|---|
| SSRF Protection | browser_navigate, vision_tools, and web_tools now block server-side request forgery |
| Subagent Restriction | Subagent toolsets restricted to parent’s enabled set — no privilege escalation |
| Zip-Slip Prevention | Self-update hardened against path traversal attacks |
| Shell Injection | ~user path expansion no longer allows command injection |
| Command Detection | Input normalized before dangerous-command detection |
| Tirith | Block verdicts now approvable instead of hard-blocking (human-in-the-loop) |
| Dependencies | Compromised litellm/typer/platformdirs removed, all ranges pinned, lockfile with hashes |
Reliability
- SQLite WAL write-lock contention causing 15-20s TUI freezes — fixed
- SQLite concurrency hardened with session transcript integrity guarantees
- Cron job re-fire prevention on gateway crash/restart loops
- Cron sessions properly marked as ended after job completion
Performance
- TTFT startup optimizations — easy-win improvements for faster cold starts
- Skills prompt caching with shared
skill_utilsmodule reduces repeated computation - Redundant file re-reads eliminated for skill conditions in the prompt builder
- API timeout default increased from 900s to 1800s for slow-thinking models
Upgrade
hermes update
For new installations, visit the install guide.
← Hermes Agent Changelog