nousresearch/hermes-agent
The agent that grows with you
How hermes-agent is put together
Hermes Agent is a self-improving AI coding/personal assistant built primarily in Python, exposing an interactive TUI CLI (`hermes`), a multi-platform messaging gateway (Telegram, Discord, Slack, WhatsApp, Signal, Email), and an Agent Client Protocol (ACP) adapter for editors like Zed. The Python core (`agent/`, `tools/`, `hermes_cli/`) drives an LLM conversation loop with pluggable provider adapters (OpenAI-compatible, Anthropic, Bedrock, Gemini, Codex Responses, Azure), a tool registry with approval guardrails, skill/memory curation, cron scheduling, and subagent delegation. A npm-workspaces monorepo layers desktop clients on top: an Electron app (`apps/desktop`) with React 19/xterm UI, a Tauri-based bootstrap installer, a `ui-tui` package, and a `web` dashboard backed by FastAPI/Uvicorn. Sessions persist to a shared SQLite SessionDB (`~/.hermes/state.db`) with FTS5 search, and execution can be delegated to seven terminal backends (local, Docker, SSH, Singularity, Modal, Daytona, Vercel Sandbox).
Languages
Frameworks
Datastores
Infrastructure
Major components
agent/
Core LLM agent runtime: conversation loop, provider adapters (anthropic, bedrock, gemini_native, codex_responses, azure_identity), context compression, tool dispatch/guardrails, memory curator, skills, credentials, rate limiting, and subagent lifecycle.
acp_adapter/
Agent Client Protocol server exposing Hermes to editors (Zed) over stdio JSON-RPC, including session management, auth-method advertisement, model selection, and pre-execution edit approval.
tools/
Tool implementations invoked by the agent (terminal/shell execution across seven backends, file write/patch with fuzzy matching, messaging, browser CDP supervision) plus lazy dependency installation.
hermes_cli/
CLI command layer: config load/save, model/provider switching, setup wizard, gateway control, MoA picker, and Windows SSH runtime helpers.
gateway platforms
Messaging-gateway integrations (Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Email) delivering agent output and receiving user messages, including HTML-formatted delivery.
apps/desktop
Electron desktop client (React 19, xterm.js PTY terminal, CodeMirror editor, assistant-ui chat) packaged with electron-builder, sharing code via @hermes/shared.
apps/bootstrap-installer
Tauri-based first-run installer UI handling environment bootstrap (uv, Python, Node, ripgrep, ffmpeg, MinGit).
state & scheduling layer
Shared SQLite SessionDB (hermes_state*.py) for sessions/search/activity heartbeats, plus a built-in croniter-based scheduler for scheduled automations.
A high-volume week centered on a new fail-closed checkpoint system that protects memories before they get compacted, alongside Docker sandbox identity fixes and computer-use media routing repairs.
5 weeksWeek of 2026-08-24
Week of 2026-08-24latest
A high-volume week centered on a new fail-closed checkpoint system that protects memories before they get compacted, alongside Docker sandbox identity fixes and computer-use media routing repairs.
Week of 2026-08-17
This week focused on connection resilience — heartbeats and reconnect logic for gateways, desktop apps, and chat clients — plus OpenViking memory URI migration and a security fix stopping code injection through bot relays.
Week of 2026-08-10
A quieter week of targeted fixes: shared Docker container identities were introduced, full-text search indexing was made dramatically faster, and several gateway and update-window edge cases were smoothed out.
Week of 2026-08-03
Nine focused fixes landed this week, mostly around graceful failure handling: language-server clients shut down cleanly, websocket dead peers are detected, and cron script bypasses were closed.
Week of 2026-07-27
A small week with three changes: the background skill reviewer is now required to read files before writing them, and macOS launch-service lifecycle guards were tightened against ordering tricks.
The last five weeks were dominated by reliability and safety hardening across the Hermes agent platform. Early weeks focused on closing security gaps in lifecycle guards and cron job handling, then attention shifted to keeping long-running connections (gateways, desktop apps, Telegram) alive through network drops. The most recent two weeks delivered a large memory-checkpointing system to protect data during compaction, plus a wave of fixes around Docker sandbox identity, computer-use media delivery, and messaging integrations.
Week by week
2026-08-24A high-volume week centered on a new fail-closed checkpoint system that protects memories before they get compacted, alongside Docker sandbox identity fixes and computer-use media routing repairs.latest6 changes
Feature
Fail-closed pre-compress checkpoints for memory
Added an opt-in contract (API v2) that guarantees a safe backup checkpoint exists before any memory compaction runs, so data can't be lost mid-process.
Fix
Docker container identity labels no longer collide
Distinct shared-container keys now get unique digest-suffix labels so different profiles never accidentally share the same container.
Fix
Computer-use media paths recovered
Explicit screen-capture requests are now routed correctly to the desktop-state tool, and media file paths from computer-use sessions are repaired across related surfaces.
Fix
Telegram waits for reconnection before failing sends
After a network blip, message sending now waits for the connection to come back instead of immediately erroring with 'Not connected'.
Fix
Teams integration handles unbound SDK gracefully
The Microsoft Teams connector no longer crashes when its underlying SDK was never initialized.
Chore
Expired FLUX 3 promo tools removed
Retired the promotional BFL FLUX 3 core tools via a database migration; subscribers can still access FLUX 3 through the video generation provider.
2026-08-17This week focused on connection resilience — heartbeats and reconnect logic for gateways, desktop apps, and chat clients — plus OpenViking memory URI migration and a security fix stopping code injection through bot relays.6 changes
Feature
Gateway heartbeat keeps connections alive
Added a ping-based heartbeat between clients and the gateway so silent WebSocket drops are detected and connections reconnect automatically.
Fix
Desktop app survives sleep/wake cycles
The desktop client now probes half-open sockets when the machine wakes up and reconnects rather than hanging on a dead connection.
Fix
CLI input fallback prevents lockout
When the fancy prompt library can't attach to the terminal, the CLI falls back to basic input; also fixed a bug where a security permission change locked users out of their own install directory.
Fix
Cron jobs got safer and more capable
Scheduled jobs can now explicitly re-arm as one-shots, refuse terminal commands, and won't fire past their grace window or overwrite names with blank values.
Fix
Security hole closed in gateway relays
Fixed an allowlist leak in multiplexing and blocked a code-injection vector where bots could run arbitrary Python via relay commands.
Fix
Curator skill pinning reports honestly
Pinning skills now checks results and surfaces failures instead of falsely reporting success, with clearer messages about what pinning does.
2026-08-10A quieter week of targeted fixes: shared Docker container identities were introduced, full-text search indexing was made dramatically faster, and several gateway and update-window edge cases were smoothed out.6 changes
Feature
Shared Docker container identities
Multiple sessions can now share a single Docker container under a declared key, reducing resource overhead.
Refactor
Faster app startup with large search indexes
The app no longer rebuilds the entire full-text search index on every open when the trigram tokenizer is missing, eliminating a major startup slowdown.
Fix
Safer browser snapshot storage
Browser snapshots are now written through a symlink-safe path so malicious symlinks can't redirect writes.
Fix
Update shim window closes itself
The desktop updater's helper window now auto-closes after errors or manual outcomes instead of lingering on screen.
Fix
Lifecycle guards see through wrapper prefixes
Security guards checking gateway lifecycle commands can now detect dangerous operations hidden behind wrapper command prefixes.
Fix
Pop-out windows keep their session transport
Closing a pop-out window re-binds the session's connection to a surviving window instead of dropping it.
2026-08-03Nine focused fixes landed this week, mostly around graceful failure handling: language-server clients shut down cleanly, websocket dead peers are detected, and cron script bypasses were closed.6 changes
Fix
Language server clients retire cleanly
When the protocol reader exits, language-server clients are properly retired and pending diagnostic waits abort instead of hanging forever.
Fix
Dead websocket peers detected via TCP keepalive
Terminal UI gateway websockets now use TCP keepalive so silently disconnected peers are noticed and cleaned up.
Fix
Cron NUL-padding bypass closed
Closed a loophole where attackers could sneak disallowed scripts past the scheduled-job guard by padding filenames with NUL characters.
Fix
Fallback provider transitions made visible
Users now see clear messages when the system switches to a backup AI provider and when the primary one recovers.
Fix
Custom providers respect caching settings
Prompt caching preferences are now honored when using custom (non-default) AI providers.
Fix
Uninstall guard conflict resolved
Fixed a conflict in the gateway's uninstall protection so the lifecycle guard behaves consistently.
2026-07-27A small week with three changes: the background skill reviewer is now required to read files before writing them, and macOS launch-service lifecycle guards were tightened against ordering tricks.3 changes
Fix
Background reviewer must read before writing
The automated skill curator is now instructed (and enforced) to read existing content before making changes, preventing blind overwrites.
Chore
Curator instruction verified end-to-end
Tests now assert the read-before-write rule by inspecting the actual delivered prompt rather than just the source text.
Fix
macOS launchctl guards hardened
Closed gaps in the launch-service security guards where command order or missing verbs could let restricted operations slip through.
Dependencies and code review
Dependency advisories
Security Watch
No known advisories across 1500 scanned dependencies.
No known advisories in the scanned dependencies.
Code review
No concrete code-level issues confirmed.
Get this report every week for your repos.
GitZoid learns each repo, reports what changed, and flags what needs attention. One flat price for the whole team.
$19 a month, flat · First 10 outputs free · No card required