Documentation · v0.7.2

HermesDesktop Studio Documentation

The complete guide to installing, configuring, and mastering HermesDesktop Studio — the open-source AI agent desktop app and agent studio with a built-in learning loop, deep cross-session memory, multi-platform messaging, and scheduled automations. Free for Windows, macOS, and Linux.

Overview

What is HermesDesktop Studio?

HermesDesktop Studio is a community-maintained, open-source native desktop application for installing, configuring, and chatting with the Hermes Agent — a self-improving AI assistant with tool usage, multi-platform messaging, and closed-loop learning. The app replaces the manual CLI workflow for managing Hermes, guiding users through installation, provider setup, and daily use in a single unified interface.

Core Principle

Uses the official Hermes installation scripts — no forks, no vendor lock-in. All data stays under ~/.hermes.

Full GUI Coverage

Chat, session management, config files, memory, skills, tools, scheduling, and messaging gateways — all from one desktop interface.

Privacy-First

Local-first architecture. Your conversations, memory, and API keys never leave your machine unless you explicitly connect a remote backend.

Cross-Platform

Runs natively on macOS, Windows, and Linux. Built with Electron + React + TypeScript.

At a Glance

TypeNative desktop app (macOS, Windows, Linux)
Tech Stackelectron-vite, React, TypeScript, electron-builder
BackendHermes Agent — local (127.0.0.1:8642) or remote API server
Data Directory~/.hermes (or %LOCALAPPDATA%\hermes on Windows, or $HERMES_HOME)
TransportHTTP + SSE (Server-Sent Events) streaming
LicenseMIT (fully open source)
Latest Version0.7.2

Related Repositories

Getting Started

From zero to a working AI agent in minutes

This guide takes you from nothing to a working HermesDesktop Studio installation with a model provider configured. Whether you're on Windows, macOS, or Linux, the process is the same — download, install, pick a provider, and start chatting.

1. Install the App

Option A — Download a Release

Grab the installer for your operating system from the download page or the GitHub releases:

OSArtifact
macOS*-mac.zip (signed) → drag to /Applications
Windows*-setup.exe (NSIS installer)
Linux*.AppImage (or .rpm for Fedora/RHEL)

Option B — Install via CLI

The hermesone npm package downloads the matching release, verifies its SHA-512 checksum, and installs it:

Install via hermesone CLI
npm install -g hermesone
hermesone install        # download + verify + launch the installer
hermesone update         # later, to upgrade to the latest version

Option C — Windows PowerShell (One-Liner)

Windows PowerShell install
iex (irm https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1)

Option D — macOS/Linux Shell

macOS/Linux install
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

2. First Run — Local or Remote Backend

On first launch, the app asks how you want to run the Hermes Agent backend:

Local Mode

The app checks whether Hermes is already installed in ~/.hermes. If not, it runs the official Hermes installer with dependency resolution (Git, uv, Python 3.11+), tracking progress in the UI. Chat then goes through http://127.0.0.1:8642 (per-profile port).

Remote Mode

You provide a remote Hermes API server URL and API key. The app validates the connection and skips the local install. It talks to your remote URL with the same streaming protocol — ideal for shared servers or cloud deployments.

The built-in installer runs the official Hermes script with --skip-setup, then finishes provider configuration in the GUI. On a machine that already has Hermes, the app detects it and skips straight to provider setup.

3. Pick an LLM Provider

After the backend is ready, choose an LLM provider. The first-run picker offers:

  • OpenRouter (recommended — 200+ models via one API key)
  • Anthropic (Claude models)
  • OpenAI (GPT models)
  • Local LLM via any OpenAI-compatible base URL

Local presets are included for LM Studio, Atomic Chat, Ollama, vLLM, and llama.cpp — these need no API key, but the server must already be running. See for the full list.

Your provider choice and keys are saved through the Hermes config files (see ). The app then opens the main workspace.

4. Start Chatting

The Chat screen is a streaming conversation UI with slash commands, tool progress indicators, markdown rendering, syntax highlighting, and live token/cost tracking in the footer. Type /help to see all available commands, or jump to the .

5. Add Capabilities

  • 1Skills, MCP servers, agents, workflows — open the Discover tab to browse the community registry and install with one click.
  • 2Messaging gateways — connect Telegram, Discord, Slack, and more from the Gateway screen.
  • 3Scheduled tasks — build cron jobs with delivery targets from Schedules.

Where Your Data Lives

Everything is stored under ~/.hermes (or $HERMES_HOME):

Data directory layout
~/.hermes/
├── .env                  # API keys (env secrets provider)
├── config.yaml           # provider + app configuration
├── hermes-agent/         # the Hermes Agent install (Python)
├── profiles/             # named profile directories
├── active_profile        # name of the active profile ("default" if absent)
├── state.db              # session history (SQLite, with FTS5 full-text search)
└── cron/jobs.json        # scheduled tasks

Architecture

How HermesDesktop Studio is built and communicates

HermesDesktop Studio is an Electron application with the standard three-layer split — main, preload, and renderer — built and bundled by electron-vite. The renderer never touches Node or the filesystem directly; it calls a typed bridge that the preload exposes, and the main process does the privileged work (spawning the Hermes agent, reading ~/.hermes, talking to the API, running gateways).

Architecture Diagram
┌─────────────────────────────────────────────────────────────────┐
│  Renderer (React)              src/renderer/src                   │
│    screens/ · components/ · hooks/       window.hermesAPI ──┐    │
└─────────────────────────────────────────────────────────────┼────┘
                        contextBridge (IPC)                     │
┌─────────────────────────────────────────────────────────────▼────┐
│  Preload    src/preload/index.ts   exposes window.hermesAPI       │
│             (+ window.electron); sandboxed, contextIsolated       │
└─────────────────────────────────────────────────────────────┬────┘
                        ipcRenderer ⇄ ipcMain                    │
┌─────────────────────────────────────────────────────────────▼────┐
│  Main Process   src/main/                                        │
│    app lifecycle · IPC registry · installer · hermes API client   │
│    · profiles · gateways · wallets · cron · secrets               │
└─────────────────────────────────────────────────────────────┬────┘
                        HTTP + SSE                                │
┌─────────────────────────────────────────────────────────────▼────┐
│  Hermes Agent   local 127.0.0.1:<port>   or   remote API server   │
└──────────────────────────────────────────────────────────────────┘

Processes

Main Process — src/main/

The entrypoint stays tiny and delegates startup. src/main/index.ts does only pre-ready work — applies GPU crash preferences, optionally enables the CDP testing port — then calls startMainProcess() in src/main/app/start.ts.

startMainProcess() owns the app lifecycle: crash logging, IPC handler registration, updater wiring, Electron ready/activate/window-all-closed/before-quit events, CSP headers, security hardening, and the main BrowserWindow.

App chrome lives in focused modules under src/main/app/:

  • menu.ts — the application menu (incl. a Help-menu Developer Tools toggle)
  • updater.ts — update IPC and electron-updater events
  • context-menu.ts — the chat right-click menu

The rest of src/main/ is domain logic — a flat module per concern: installer.ts, hermes.ts (API client), config.ts, profiles.ts, sessions.ts, skills.ts, tools.ts, memory.ts, cronjobs.ts, messaging-platforms.ts, registry.ts (Discover), wallet-*.ts, run-stream.ts / sse-parser.ts (streaming), and the secrets/ provider.

Preload — src/preload/index.ts

Runs in an isolated world and exposes two globals via contextBridge: window.hermesAPI (the app's typed surface) and window.electron. The window is created with nodeIntegration: false, contextIsolation: true, and sandbox: true — so the renderer has no ambient Node access and everything goes through explicit IPC.

Renderer — src/renderer/src/

A React app: App.tsx + main.tsx, with screens/, components/, hooks/, utils/, and constants.ts. Each top-level screen maps to a nav destination — Welcome, Setup, Install, Chat, Sessions, Agents, Skills, Models, Memory, Soul, Tools, Schedules, Gateway, Office, Kanban, Discover, Providers, Settings, plus a Layout shell and a SplashScreen.

IPC Registry

Renderer↔main calls are isolated from bootstrap so the registry can be split by domain. registerIpcHandlers() in src/main/ipc/register.ts registers all handlers behind one function and receives app-level callbacks (the main window, model-library and connection-config notifications, external-URL opening, active chat abort handles). Examples: chat streaming, sessions, profiles, the wallet handlers (list-wallets, create-wallet, …, get-token-balances), and transcribe-audio for speech-to-text.

Talking to the Hermes Agent

src/main/hermes.ts is the HTTP/SSE client. In local mode it resolves a per-profile base URL (http://127.0.0.1:<port>, default 8642) and can manage the local gateway; in remote mode it targets your configured URL + key. Chat responses stream as Server-Sent Events, parsed in real time (run-stream.ts / sse-parser.ts) so the UI renders tool progress, markdown, and token usage as it arrives.

Speech-to-text is deliberately routed through the Hermes API server (/api/audio/transcribe), independent of the selected chat model, falling back to the Python transcription dispatcher when the desktop route is absent.

Startup Hardening & Resilience

CSP — The packaged renderer keeps its meta CSP aligned with the production response CSP so file:// startup assets load consistently.

GPU Fallbackgpu-fallback.ts disables hardware acceleration (keeping SwiftShader WebGL) after a GPU-process crash so VMs/virtual displays don't hit an infinite crash→relaunch loop. Persistent fallback is honored on Windows/Linux; macOS clears stale flags unless HERMES_GPU_FALLBACK=1.

DiagnosticsHERMES_OPEN_DEVTOOLS=1 opens devtools on launch so a packaged build can surface renderer errors even when startup fails before the UI paints.

Build & Packaging

electron-vite bundles the main file to out/main/index.js and the renderer to out/renderer/; packaged main resolves ../renderer/index.html from __dirname. electron-builder ( electron-builder.yml) produces the per-OS artifacts.

Configuration

Files, profiles, secrets, and network settings

All Hermes state lives under a single Hermes home directory. The desktop app reads and writes it; the Hermes agent runs from it. You rarely need to edit these files by hand — the GUI manages them — but knowing the layout helps with backups, debugging, and advanced setups.

Hermes Home Directory

Resolution order:

  1. HERMES_HOME environment variable, if set.
  2. On Windows, %LOCALAPPDATA%\hermes (the installer's default).
  3. Otherwise ~/.hermes.
Directory layout
~/.hermes/
├── .env                 # API keys (default "env" secrets provider)
├── config.yaml          # provider + app configuration
├── hermes-agent/        # the Hermes Agent install (Python)
├── profiles/            # named profile directories
│   └── <name>/          #   each with its own config.yaml, SOUL.md, state.db…
├── active_profile       # name of the active profile ("default" if absent)
├── state.db             # default profile's session history (SQLite, FTS5)
└── cron/jobs.json       # scheduled tasks

Profiles

A profile is an isolated Hermes environment — its own config, persona, sessions, and (optionally) gateways. The default profile is ~/.hermes itself; named profiles live under ~/.hermes/profiles/<name>. The active profile is recorded in ~/.hermes/active_profile.

Create, delete, and switch profiles from the Agents screen. Each profile gets its own local gateway port, so multiple profiles can run side by side. Installing a registry agent creates a new profile cloned from default with the agent's persona as its SOUL.md.

config.yaml

The agent's configuration: the selected provider and model, MCP servers (mcp_servers:), the secrets provider, network settings, and more. The desktop app edits this for you (provider setup, Discover installs, Settings). MCP entries installed from the registry are spliced under mcp_servers:.

Secrets Management

By default, API keys live in ~/.hermes/.env (the env provider) — no setup needed. Resolution order everywhere is: process.env → .env → provider → unset.

If you'd rather not keep keys in a plaintext .env, the opt-in command provider resolves them by running a helper you configure (POSIX-only; Linux/macOS — Windows stays on env):

Command secrets provider (config.yaml)yaml
secrets:
  provider: command
  command: secret-tool lookup hermes "$HERMES_SECRET_KEY"

The helper's stdout may be a single bare value (per-key) or KEY=VALUE dotenv lines (a dump) — both are auto-detected. The requested key name arrives as the HERMES_SECRET_KEY environment variable.

Vault Integrations

The command provider is vault-agnostic — anything that prints a value works:

pass

pass show hermes/$HERMES_SECRET_KEY

secret-tool (libsecret)

secret-tool lookup hermes "$HERMES_SECRET_KEY"

GnuPG

gpg --batch --passphrase-fd 0 --decrypt ~/.keys/api-keys.gpg

KeePassXC

keepassxc-cli export script

Bitwarden CLI

bw get item "$HERMES_SECRET_KEY" | jq -r .notes

1Password CLI

op read "op://vault/$HERMES_SECRET_KEY/credential"
Safeguards: a hard 3-second timeout and 1 MiB output cap on the helper, stderr discarded, resolved values never logged or written to disk, and failures degrade to "key unset".

Network: Local vs. Remote

  • Local — the app manages the Hermes gateway on 127.0.0.1:<port> (default 8642, per-profile).
  • Remote — point the app at a remote Hermes API server (URL + API key) from Settings; SSH tunneling options are also supported.

Backup, Import & Debug

From Settings you can take a full data backup, restore/import it, view gateway and agent logs, and produce a debug dump for diagnostics. Re-running is safe; backups capture your profiles, config, and session history.

Features

A complete tour of every screen and capability

HermesDesktop Studio packs a comprehensive suite of AI agent tools into a single desktop application. Every screen is designed to be both powerful for advanced users and approachable for beginners. Screens live in src/renderer/src/screens/.

Chat — Streaming AI Conversations

A streaming conversation UI with SSE streaming, tool-progress indicators, markdown rendering, and syntax highlighting. The footer shows live token usage and cost (prompt/completion counts). Long code blocks are collapsible, and a browser-style title bar holds open-conversation tabs.

Slash Commands

Typed slash commands are routed through the gateway's slash.exec / command.dispatch pipeline — they are executed as commands, not sent as prompt text. There are 22+ commands:

/new/clear/fast/web/image/browse/code/shell/usage/help/tools/skills/model/memory/persona/version/compact/compress/undo/retry/debug/status

In-Chat Model Override

/model (or the model picker) switches the model — and its provider — for the current conversation only, without changing the global default. A per-model context-window override drives the context gauge and the agent's auto-compaction.

Context Folder

Each session can be linked to a working folder on disk. The link is persisted in a desktop-owned state.db table, so re-opening a conversation restores its folder.

Sessions — History with Full-Text Search

Browse, search, and resume past conversations. History is stored in SQLite with full-text search (FTS5) and grouped by date. The Chat nav item also shows a recent-sessions list (capped at five, with "Show more" opening the full list).

Agents (Profiles)

Create, delete, and switch between Hermes profiles — separate environments with isolated config, persona, and history. Each profile can have its own LLM provider, SOUL.md persona, skills, and gateway connections.

Skills

Browse, install, and manage skills — both bundled skills and ones installed from the registry. Registry skills are downloaded into <profile>/skills/<category>/<id>/.

Models

CRUD management for saved model configurations across providers — keep multiple model presets and switch between them instantly.

Memory — Cross-Session Learning

View and edit memory entries and the user-profile memory, with capacity tracking. The app can also configure discoverable memory providers:

HonchoHindsightMem0RetainDBSupermemoryByteRover

Soul (Persona)

Edit and reset your agent's personality — the active profile's SOUL.md. Installing a registry agent writes its AGENT.md as the new profile's SOUL.md.

Tools — 14 Built-in Toolsets

Enable or disable individual toolsets:

Web search
Browser automation
Terminal/shell
File operations
Code execution
Vision
Image generation
Text-to-speech
Skills
Memory
Session search
Clarify
Delegation
MoA (mixture-of-agents)
Task planning

Schedules — Cron-Based Automations

A cron-job builder — minutes, hourly, daily, weekly, or custom cron expressions — with 15 delivery targets for where results are sent. Jobs are stored in ~/.hermes/cron/jobs.json.

Gateway — 16 Messaging Platforms

Configure and control messaging-platform integrations so you can chat with your agent from anywhere. 16 gateways supported:

TelegramDiscordSlackWhatsAppSignalMatrix/ElementMattermostEmail (IMAP/SMTP)SMS (Twilio/Vonage)iMessage (BlueBubbles)DingTalkFeishu/LarkWeComWeChat (iLink Bot)WebhooksHome Assistant

Office (Claw3d)

A visual 3D interface ("Hermes Office") with its own dev server and adapter management — for spatial AI agent interactions.

Kanban — Multi-Agent Task Board

A JIRA-style multi-agent board — a thin client over the hermes kanban CLI with canonical status columns, an archived toggle, and focus/poll refresh.

Discover — In-App Marketplace

The in-app marketplace for the community registry — browse and one-click install skills, MCP servers, agents, and workflows. See .

Settings

Provider config, credential pools, backup/import, the log viewer (gateway + agent logs), network/remote settings, secrets provider, theme, and the auto-updater.

Wallets & Token Balances

Profile-scoped Base mainnet wallets with encrypted recovery phrases, and on-chain ERC-20 token balance reads (via ethers v6).

Analytics

Privacy-first, opt-out usage analytics: anonymous events POSTed to the in-house analytics service, keyed by a per-install UUID stored in localStorage. No third-party analytics SDK.

Internationalization

An i18n framework with a complete English locale across all screens, ready for community translations (src/shared/i18n/, src/renderer/src/components/I18nProvider.tsx).

Providers & Integrations

LLM providers, local models, messaging platforms, and tools

HermesDesktop Studio sits in front of the Hermes Agent, so it supports every provider and integration the agent supports — and provides a GUI setup screen for each one.

LLM Providers

The first-run picker mirrors the agent's native canonical providers; any OpenAI-compatible endpoint is routed through the Local preset.

ProviderNotes
OpenRouter200+ models via single API key (recommended)
AnthropicDirect access to Claude models
OpenAIDirect access to GPT models
Google (Gemini)Google AI Studio integration
xAI (Grok)Grok models
Nous PortalOffers a free tier
QwenQwenAI models
MiniMaxGlobal and China endpoints
Hugging Face20+ open models via HF Inference
GroqFast inference (also used for voice/STT)
Atlas CloudOpenAI-compatible gateway — DeepSeek, Qwen, GLM, Kimi, MiniMax…
Local / CustomAny OpenAI-compatible endpoint

Local Model Presets

Built-in presets need no API key — but the corresponding server must already be running on your machine:

LM Studio

No API key required

Atomic Chat

No API key required

Ollama

No API key required

vLLM

No API key required

llama.cpp

No API key required

Select Local LLM, then choose a preset or provide a custom OpenAI-compatible base URL.

Messaging Platforms (Gateways)

Connect from the Gateway screen so you can chat with your agent from your existing chat apps. 16 platforms supported:

Telegram
Discord
Slack
WhatsApp
Signal
Matrix/Element
Mattermost
Email (IMAP/SMTP)
SMS (Twilio & Vonage)
iMessage (BlueBubbles)
DingTalk
Feishu/Lark
WeCom
WeChat (iLink Bot)
Webhooks
Home Assistant

Tool Integrations

External services usable by the agent's toolsets:

Exa Search
Parallel API
Tavily
Firecrawl
FAL.ai (image gen)
Honcho
Browserbase
Weights & Biases
Tinker

Memory Providers

Discoverable memory backends configurable from the Memory screen:

HonchoHindsightMem0RetainDBSupermemoryByteRover

Speech-to-Text

Voice transcription is routed through the Hermes API server (/api/audio/transcribe), independent of the selected chat model — so local Whisper, Groq, OpenAI, ElevenLabs, and command/plugin STT providers all work regardless of which chat model you're using.

Credential Storage

Provider API keys are stored through the Hermes secrets provider — by default in ~/.hermes/.env, or via the optional command/vault helper. Local providers need no key.

Registry & Marketplace

Install community skills, MCP servers, agents, and workflows

HermesDesktop Studio can install community extensions — skills, MCP servers, agents, and workflows — from the hermes-registry directory. The same install model has two front-ends: the in-app Discover tab and the hermesone add CLI.

The Catalog

The registry is a directory, not a package mirror. It's a public GitHub repository whose generated index.json lists each entry with its type, id, path, version, and compatibility. Skills/agents/workflows store their files directly in the repo; MCP entries are lightweight manifests pointing to pinned, published servers (npx/uvx/docker).

The app never clones the entire repo — it reads index.json and pulls only the files needed for the entry being installed.

Discover (In-App)

The Discover screen renders the catalog as a gallery. For each entry, it:

  1. Discovers — reads entries from index.json.
  2. Checks compatibility — compares the running Hermes/desktop version with the entry's compatibility range (e.g. desktop: ">=0.6.0").
  3. Collects config — for MCP, builds a form from the manifest's configSchema and requests required secrets (stored via the secrets provider, never committed).
  4. Installs — into the active profile.

Install Model (Per Type)

TypeWhat "install" does
skillDownloads the entry folder → <profile>/skills/<category>/<id>/
mcpSplices a server block under mcp_servers: in <profile>/config.yaml
workflowDownloads the entry folder → <profile>/workflows/<id>/
agentCreates a new profile cloned from default, writes the agent's AGENT.md as its SOUL.md

hermesone add (CLI)

The hermesone CLI mirrors the same install model from the terminal, and also pings the registry website so the entry's public download counter increments:

Install via CLI
hermesone add mcp/github
hermesone add skill/plan
hermesone add agent/code-reviewer
hermesone add workflow/pr-triage
  • <type>skill | mcp | agent | workflow; <id> is the entry ID.
  • --profile <name> targets a specific profile (default: active).
  • HERMES_HOME and HERMESONE_REGISTRY can override the data directory and registry base URL.

Because it writes the same ~/.hermes location, entries added via CLI show up in the app and vice versa.

Models Catalog

The registry also publishes a models catalog (models.json) that the Models / provider screens can use to offer curated model lists per provider.

Development

Build, test, and contribute to HermesDesktop Studio

HermesDesktop Studio is open source under the MIT license. Contributions are welcome — whether it's a bug fix, a new feature, or improved documentation.

Prerequisites

  • Node.js and npm
  • A Unix-like shell environment for the Hermes installer (first-run local install)
  • Network access for downloading Hermes during first-run install

Setup

Install dependencies
npm install              # also runs electron-builder install-app-deps (postinstall)

Run

Development commands
npm run dev              # electron-vite dev (hot reload)
npm run dev:fresh        # dev against a throwaway HERMES_HOME (mktemp) — clean state
npm run start            # electron-vite preview (run a built app)
dev:fresh is handy for exercising the first-run install/setup flow without touching your real ~/.hermes.

Checks & Tests

Linting, type-checking, and testing
npm run lint             # eslint (cached)
npm run typecheck        # node + web tsconfigs
npm run test             # vitest run
npm run test:watch       # vitest watch
npm run test:coverage    # coverage report

The test suite (Vitest) covers the SSE parser, IPC handlers, the preload API surface, installer utilities, config-health, SSH remote, wallet store/balances, and constants validation.

Build & Package

Build commands
npm run build            # typecheck + electron-vite build → out/
npm run build:unpack     # unpacked dir build
npm run build:mac        # electron-builder --mac
npm run build:win        # electron-builder --win
npm run build:linux      # electron-builder --linux
npm run build:rpm        # Fedora/RHEL .rpm

Packaging config is in electron-builder.yml. electron-vite emits the bundled main to out/main/index.js and the renderer to out/renderer/.

Project Layout

Source tree
src/
├── main/            # Electron main process (privileged)
│   ├── index.ts     #   pre-ready setup → app/start.ts
│   ├── app/         #   start.ts, menu.ts, updater.ts, context-menu.ts
│   ├── ipc/         #   register.ts — the IPC handler registry
│   ├── secrets/     #   env / command secrets providers
│   └── *.ts         #   one module per concern (installer, hermes, config,
│                    #   profiles, sessions, skills, tools, memory, cronjobs,
│                    #   messaging-platforms, registry, wallet-*, run-stream…)
├── preload/         # contextBridge → window.hermesAPI + window.electron
├── renderer/src/    # React UI: screens/, components/, hooks/, utils/
└── shared/          # code shared across processes (i18n, chat-stream,
                     #   attachments, tokens, wallets, registry types…)

The lat.md Knowledge Graph

This repo uses lat.md to maintain a cross-linked knowledge graph of architecture, design decisions, and test specs in lat.md/. It anchors source code to concepts via [[wiki links]] and // @lat: comments.

lat.md commands
npm i -g lat.md
lat locate "Section Name"      # find a section
lat search "natural language"  # semantic search (needs an LLM key)
lat check                      # validate all links and code refs

Conventions

  • TypeScript throughout; npm run typecheck must pass for both node and web tsconfigs.
  • Keep the main entrypoint thin — boot concerns in index.ts, lifecycle in app/start.ts, IPC behind ipc/register.ts, domain logic in its own module.
  • The renderer never imports Node or hits the filesystem directly — add a typed method to the preload bridge and an IPC handler instead.

Contributing

See CONTRIBUTING.md and the open issues. The project is in active development — features may change.

Ready to Build?

Download HermesDesktop Studio and start building with AI agents today.