Cabinet for Hermes
Install
Install in Hermes · Read the manual (on the web)
- Press Install in Hermes on botcabinet.com/hermes/manual, on the
computer where Hermes Desktop is installed. GitHub doesn't open
hermes://links, so the button lives there; you can also pastehermes://plugin/install?repo=Dgardenhire/hermes-cabinet&enable=1into your browser. Hermes Desktop opens Cabinet's install screen. Press Install. Hermes marks Cabinet as Unverified because it comes straight from GitHub; that is expected for now. Once Cabinet is in the Hermes plugin catalog, open Capabilities → Plugins in Hermes Desktop, find Cabinet and press Install. - Open Cabinet in the sidebar. If it isn't there yet, quit Hermes Desktop fully and open it again.
- If it says Cabinet isn't connected, open Capabilities, turn Cabinet on, and open the page again.
Prefer the terminal? On Windows open PowerShell, on a Mac or Linux open Terminal, and run
hermes plugins install Dgardenhire/hermes-cabinet --enable. Then quit Hermes Desktop fully and open it again.
Tell Cabinet the job you need done. It answers with the smallest setup that does it, shows which of your answers led there, and then helps you act on it: add one of botcabinet.com's Bots as a Hermes bot, plan a new one, or set up a crew of Bots that hand work to each other. Anything Cabinet makes can be removed again from My Bots, as long as you haven't changed it.
Cabinet is the Hermes Desktop edition of Bot Cabinet. Version 0.3.10, MIT licensed.


What it does
| Screen | What you do there |
|---|---|
| Start Here | See the 20 Bots, the 11 Crew Kits, how many have recorded test runs, and how Cabinet sits beside the Hermes Bots catalog |
| Fit Test | Describe a job and answer five questions. Cabinet answers Ask Hermes once, Save it as a skill, Run it on a schedule, One Bot or A crew, with every answer that led there |
| The Cabinet | Browse every Bot with its painted portrait and test status. Add opens a review screen with the exact profile Hermes will make |
| Bot Lab | Plan a Bot that isn't published, line by line. Make it as a profile, or save the plan as a kit |
| Crew Kits | Review a crew's bots and handoff order, then set it up. Optional blocked Kanban cards, one per step |
| My Bots | Everything Cabinet made, its live state, a chat link, and Remove for anything you haven't changed |
| Test Records | What each Bot and crew has been tested on, including failures |
![]() |
![]() |
| Add: the exact profile, editable, before anything is made | A crew: every bot, the handoff order, and what Hermes can't do |
![]() |
![]() |
| My Bots: status, chat, Remove only for untouched bots | The Fit Test answer, traced to your answers |
How Cabinet stays out of the Hermes Bots lane
Hermes is getting its own Bots catalog (NousResearch/hermes-agent#119260, not in Hermes main yet). A Bot that catalog carries is added there. Cabinet works the same with or without it, and does these things when it is there:
- It asks Hermes. When the page opens, Cabinet asks this Hermes's gateway for
bots.catalog. An answer means the catalog is there. An error or a timeout means it isn't, and Cabinet adds every Bot itself, as before. A yes is kept for half an hour, a no is asked again after a minute, and Refresh asks straight away. Cabinet's backend also reads the catalog from Hermes itself, so a Bot it carries is handed over even while the gateway is slow to answer. - It hands over. For a Bot the catalog carries (the catalog name equals Cabinet's slug), Add reads "Add in Hermes
Bots" and opens Capabilities, in the Bots tab, naming the Bot to pick there. The plugin SDK has no way to open a
hermes://bot/install?catalog=<name>link, so the catalog's own review screen for that one Bot can't be opened directly. Cabinet makes no copy of its own, and its backend refuses to make one if asked directly. - Crews follow the same rule. Cabinet never makes a crew member the Hermes catalog carries. You add that Bot in Hermes Bots first, and the crew uses it, under whatever profile name Hermes Bots gave it.
- It flags an earlier copy. If Cabinet made a Bot before your Hermes had its own catalog, My Bots says Hermes Bots also has it, so you keep one copy.
- It adds the rest. A Bot the catalog doesn't carry keeps Cabinet's own Add, through
profiles.create. - It never adds a second copy. A profile with a
bot-blueprint.yaml, or whoseprofile.yamlsayskind: bot-catalog, shows "Already added through Hermes Bots" in The Cabinet and in My Bots. - It never takes one over. Cabinet never records, edits or removes a profile Hermes's catalog added, even one with the name Cabinet planned.
What stays Cabinet's: the Fit Test (do you need a Bot at all?), Bot Lab (a Bot nobody published), Crew Kits (several Bots in a set order, with blocked Kanban cards) and Test Records (what has been tested). For talking a job through with several bots at once, Cabinet points to Hermes's own group chats.
Install in Hermes Desktop
Cabinet needs Hermes 0.22.0 or later, and git (Hermes uses it to fetch the plugin).
- Press Install in Hermes on botcabinet.com/hermes/manual. It
opens
hermes://plugin/install?repo=Dgardenhire/hermes-cabinet&enable=1, and Hermes Desktop shows its install screen; press Install. Hermes marks this source Unverified; that is expected until Cabinet is in the Hermes plugin catalog. Once it is, open Capabilities → Plugins, find Cabinet and press Install (or usehermes://plugin/install?catalog=bot-cabinet), which installs the reviewed commit. The plugin installs under its registry name,bot-cabinet-v2. - Open Cabinet in the sidebar. If it isn't there yet, quit Hermes Desktop fully and open it again, or open Capabilities, Plugins and press Rescan. If the page says Cabinet isn't connected, turn the plugin on under Capabilities and reopen the page.
From a terminal instead: hermes plugins install Dgardenhire/hermes-cabinet --enable (PowerShell on Windows,
Terminal on a Mac or Linux), then restart Hermes Desktop. Once Cabinet is in the catalog,
hermes plugins install bot-cabinet --enable does the same at the reviewed commit. If you run Hermes without the
Desktop app, run hermes gateway restart instead of restarting the app.
These steps were run on Oct 15, 2026 against a fresh copy of Hermes 0.22.1: the plugin installed from this repository, switched itself on, loaded cleanly, and its desktop page and dashboard routes answered.
How adding works
- Plan. Cabinet builds the profile from the Bot's catalog entry and your edits (
installer.py) and checks every part (safety.py). Nothing is written. - Create. The page sends that exact request to Hermes's gateway,
profiles.create, the call New Agent uses. Hermes gives the new bot your current model and sign-in. Cabinet passes no model and never handles a credential. The page waits up to two minutes, because Hermes sets up a new profile in a separate process. - Record. Cabinet checks what Hermes made (it exists, is new since the plan, carries the planned instructions, and Hermes's own Bots catalog didn't add it) and records it with a fingerprint. If the reply from Hermes was lost, Cabinet records the profile only when its instructions are exactly the planned ones, and changes nothing in it. If Hermes says the name already exists, Cabinet records nothing.
Remove works only while the profile still matches that fingerprint, and goes through Hermes's own delete. A crew member's instructions name its own step, who it gets work from and who it hands to next, from the crew's handoff order. Hermes does not run a crew by itself, and Cabinet says so on the crew screen. Once a crew is set up, Cabinet suggests a Hermes group chat with its bots for talking the job through; the crew's order stays with the Kanban cards.
Live catalog
On open and on Refresh, Cabinet asks https://botcabinet.com/catalog.json for the current catalog, checks it against a
strict schema (catalog_schema.py), and keeps the last good copy. botcabinet.com publishes it from every site build
(since October 15, 2026), so Cabinet shows "Updated from botcabinet.com"; if the site can't be reached it uses
the last good copy, or the catalog it shipped with, and says which. docs/site-catalog-contract.md
is the file's contract; tools/make_site_catalog.py writes it.
Privacy
- Cabinet makes one network request: the catalog file above, over https, to botcabinet.com only, at most 2 MB. No analytics, no telemetry, no account.
- Cabinet never reads, stores or passes on your sign-in, keys or model settings. Instructions that look like they hold a key or password are refused.
- Cabinet's own record (what it made, saved kits, the cached catalog) is a small SQLite file and a JSON file in
$HERMES_HOME/state/bot-cabinet-v2/(normally~/.hermes/state/bot-cabinet-v2/). Delete that folder to forget everything Cabinet knows; your bots stay. - A Fit Test answer's chat button, and Bot Lab's Ask Hermes to help, open a new chat and send that one message there. If the app has no composer to send through, the message goes to your clipboard instead. Cabinet sends nothing else.
What Cabinet does on your computer (disclosure)
Everything a careful user would want to know before installing, in one place. SECURITY.md has the detail and how to check each line.
- Network. One https request, to
https://botcabinet.com/catalog.json, when the page opens and on Refresh. At most 2 MB, same-host redirects only, checked against a strict schema before use. Nothing is sent but the request itself. No analytics, no telemetry, no account. - Creates and removes Hermes profiles. Add and crew setup create profiles through Hermes's own gateway call
profiles.create(the call New Agent uses). Remove deletes a profile through Hermes's owndelete_profile, and only a profile Cabinet made that still matches the fingerprint Cabinet recorded. A profile you changed, or one Hermes's Bots catalog added, is never edited or removed. - Kanban cards. Setting up a crew can add blocked cards to your Hermes Kanban board (optional, one per step), and removing the crew archives them.
- Reads outside its own folder. It lists
~/.hermes/profiles/to avoid name clashes and to see which profiles it made, reads a profile'sSOUL.md,profile.yamlandbot-blueprint.yamlto check what Hermes made, hashes itsSOUL.md,config.yamland skills folder to fingerprint it (the contents are not stored), and asks the gateway whether Hermes's own Bots catalog (bots.catalog) is present. - Writes. Its own record (a small SQLite file and the cached catalog) in
$HERMES_HOME/state/bot-cabinet-v2/(normally~/.hermes/state/bot-cabinet-v2/). In a profile it has just made: the display name, through Hermes's own profile metadata call, and, only if Hermes didn't save the planned instructions, that new profile'sSOUL.md. Nothing else. - No shell commands, no background processes, no credentials. Cabinet runs no subprocess, starts nothing that outlives the page, and never reads, stores or passes on a key, token or model setting. The new bot uses the model and sign-in you already have, set by Hermes.
- Chat buttons. A Fit Test answer's chat button and Bot Lab's Ask Hermes to help open a new chat and send that one message; if the app has no composer, the message goes to your clipboard instead.
- Private Hermes modules. Cabinet reads Hermes's profile list and Kanban board through
hermes_cli.profiles,hermes_cli.kanban_db,hermes_cli.kanban_db_connectandhermes_cli.bot_catalog, because the plugin API has no public seam for them yet. It never patches or replaces anything in Hermes.hermes plugins validatereports these imports as warnings. - No self-updating. Cabinet never fetches or replaces its own code. The catalog file it downloads is data (Bots and crews), never code.
Verified and not verified
Verified by 449 tests (all pass with Hermes importable; the 3 that compare against a local botcabinet.com checkout skip without one):
- Cabinet's request goes through Hermes's real
profiles.createhandler, and Hermes's own SOUL.md loader loads exactly the planned instructions, with nothing flagged by its injection scanner. Run for every Bot and every crew withCABINET_E2E_ALL=1 /usr/bin/python3 tests/run_with_hermes.py -k e2e. - Crews: right members, handoff-aware instructions, Kanban cards blocked, chained and assigned to the right bot.
- Cabinet never overwrites, edits or deletes a profile it didn't make, or one you changed.
- The test runner fails if the real
~/.hermeschanges.
Verified on Oct 15, 2026: the install steps, run against a fresh copy of Hermes 0.22.1; adding and removing a Bot clicked through in a real Hermes Desktop, with the person's other profiles unchanged; the live catalog from botcabinet.com. Verified on Oct 16, 2026: hand-over against the real Hermes Bots catalog code in NousResearch/hermes-agent#130283 (which includes #119260), in a clean copy of Hermes, for the four Bots both catalogs carry (Daily Newspaper, Receipt, Coach, Professor): single adds, crews, and a Hermes update that brings the catalog in later. Not verified: no model was called.
Develop
cd tests && /usr/bin/python3 -m unittest discover -p "test_*.py"
/usr/bin/python3 tests/run_with_hermes.py # also the tests that call Hermes (separate clone, temporary home)
/usr/bin/python3 harness/serve.py 8893 # then open http://127.0.0.1:8893/harness/
/usr/bin/python3 harness/shoot.py # screenshots of every screen into harness/shots/
tests/run_with_hermes.py uses a separate clone of Hermes, named by CABINET_HERMES_SRC=/path/to/hermes-agent-clone,
and never the installed copy. Without it, the tests that need Hermes are skipped.
| Path | What it is |
|---|---|
fit.py |
The Fit Test: a rules table, every answer traced to its question |
catalog.py, data/catalog.json |
The Bots, Crew Kits and job guides (snapshot from botcabinet.com) |
api.py |
Page view models |
installer.py, store.py, safety.py, hermes_bridge.py |
Plan, record and undo; Cabinet's record; the checks; the one guarded door into Hermes |
sync.py, catalog_schema.py |
Live catalog fetch and its schema |
dashboard/plugin_api.py |
The page's backend routes |
desktop/src/plugin.js, desktop/plugin.js |
The page's source and the file Hermes loads (imports only @hermes/plugin-sdk, react, react/jsx-runtime). desktop/plugin.js is a readable, unminified esbuild bundle of desktop/src/ and a small shared UI kit, with every source file marked by a comment; it is the file to review |
harness/ |
Renders the page without Hermes, against the real backend |
Credits
See CREDITS.md. In short: Bot Cabinet and its Bots come from botcabinet.com; Daily Newspaper was inspired by Karen X. Cheng's The Morning Newspaper; the Hermes Bible guides belong to their authors.




