The Problem
Managing a machine through menus and file trees can be slow and error‑prone. Users who rely on an AI assistant need a unified interface that can open apps, search files, and perform system‑level tasks without leaving the chat window.
What This Does
Herald OS is a lightweight operating‑system shell that runs on top of Hermes Agent. It exposes a set of Electron‑based desktop commands and a set of backend services that translate agent intents into OS actions.
apps/desktop/electron/main.tsboots the Electron process.apps/desktop/electron/platform/index.tswires platform‑specific helpers (e.g., macOS accessibility, Linux shell).- IPC modules such as
apps/desktop/electron/ipc/apps.tsand.../ipc/system.tsreceive commands from the Hermes bridge and dispatch them to backend services (apps/desktop/electron/backend/*). - Backend modules (
catalog.ts,probe.ts,shell-env.ts,context.ts) perform the actual file‑system, process, and environment queries. - The
hermes-clientpackage inpackages/hermes‑clientprovides the bridge that registers Herald OS as a plugin for Hermes.
How It Is Wired
Entry Point – apps/desktop/electron/main.ts
import { app } from "electron";
import { startPlatform } from "./platform";
app.whenReady().then(() => startPlatform());
Platform Wiring – platform/index.ts loads the bridge plugin, creates the preload script, and exposes the IPC handlers.
import { registerBridge } from "./bridge-plugin";
registerBridge();
IPC Flow – e.g., a user asks Hermes to list files.
- Hermes sends a message to
ipc/catalog.ts. ipc/catalog.tscallsbackend/catalog.ts::listFiles.backend/catalog.tsuses Node’sfsAPI to read the directory and returns the list.- The result is sent back to Hermes via the bridge.
External Touchpoints –
- Filesystem (
fsmodule) for catalog and context snapshots. - Process list (
processmodule) viaprobe.ts. - Shell commands (
child_process) inshell-env.ts. - Screen recording/access APIs on macOS when the user interacts with the screen.
Responsibility Blocks
main.ts– Electron bootstrap.platform/index.ts– OS‑specific feature registration.ipc/*– Command dispatch.backend/*– System‑level operations.bridge-plugin.ts– Hermes plugin registration.
The module graph shows a single cycle between bridge-plugin.ts and ipc/*, a common pattern in Electron apps. Changing the bridge logic requires touching only these files.
How To Use It
Setup
git clone https://github.com/moses-y/Herald-OS
cd Herald-OS/apps/desktop
npm install
Configuration
- Copy
.env.exampleto.envand set any required environment variables (e.g.,HERMES_API_KEY). - Ensure Hermes Agent is installed (
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash).
Running
npm run dev
or, on macOS, open the bundled .app from the releases page.
The app will register itself as a Hermes plugin under ~/.hermes/plugins/herald-os-bridge.
Real‑World Use
A user types “Find all my PDFs in Documents.” The following chain occurs:
- Hermes forwards the intent to Herald OS.
ipc/catalog.ts::searchFilesis invoked.backend/catalog.ts::searchFileswalks theDocumentsdirectory, filtering for.pdf.- The list is returned to Hermes, which displays it inline.
Code Health & Issues
The repository contains a secret‑scanning script (scripts/check-secrets.sh). Running it against the code base reports 0 secrets.
- Severity (Low) – No hard‑coded secrets.
- Severity (Low) – 74 Jest test files covering backend logic.
No other automated analysis blocks are present. The CI workflow (.github/workflows/ci.yml) runs tests and linting, indicating a basic quality gate.
The Bottom Line
Herald OS offers a straightforward, Electron‑based agent shell that plugs into Hermes. It is well‑structured, with clear separation between IPC, platform, and backend layers. The current alpha state means some edge cases may still fail, and installers are limited to macOS and a custom Linux build. For teams that already run Hermes Agent and need a quick desktop extension, Herald OS is a solid starting point.