All plugins

bot-cabinet-v2

Tell Cabinet the job you need done and it answers with the smallest setup that does it (one chat, a skill, a routine, a Bot or a crew), shows which answers led there, then helps you act: add one of botcabinet.com's 20 Bots (each with its test record shown) as a Hermes profile, plan a new Bot line by line, or set up a crew of Bots in a handoff order with blocked Kanban cards. Everything Cabinet makes can be removed again from My Bots, and a Bot that Hermes's own Bots catalog carries is handed over to it, never duplicated. Disclosure — fetches its Bot catalog from https://botcabinet.com/catalog.json on open and Refresh (data only, 2 MB cap) and, after you confirm, creates Hermes profiles whose instructions (SOUL.md) come from that catalog; can create and archive Kanban cards for a crew; deletes only profiles it created that you have not changed; reads ~/.hermes/profiles and hashes profile files to track what it made; calls private Hermes modules (hermes_cli.profiles, kanban_db), so a Hermes update can break it; no shell, credentials, telemetry or self-updates.

DgardenhireDesktopv0.3.11Updated 24 days ago

About

Tell Cabinet the job you need done and it answers with the smallest setup that does it (one chat, a skill, a routine, a Bot or a crew), shows which answers led there, then helps you act: add one of botcabinet.com's 20 Bots (each with its test record shown) as a Hermes profile, plan a new Bot line by line, or set up a crew of Bots in a handoff order with blocked Kanban cards. Everything Cabinet makes can be removed again from My Bots, and a Bot that Hermes's own Bots catalog carries is handed over to it, never duplicated. Disclosure — fetches its Bot catalog from https://botcabinet.com/catalog.json on open and Refresh (data only, 2 MB cap) and, after you confirm, creates Hermes profiles whose instructions (SOUL.md) come from that catalog; can create and archive Kanban cards for a crew; deletes only profiles it created that you have not changed; reads ~/.hermes/profiles and hashes profile files to track what it made; calls private Hermes modules (hermes_cli.profiles, kanban_db), so a Hermes update can break it; no shell, credentials, telemetry or self-updates.

Cabinet for Hermes

Install

Install in Hermes · Read the manual (on the web)

  1. In Hermes Desktop, open Capabilities → Plugins, find Cabinet in the catalog and press Install. Or press
    Install in Hermes on botcabinet.com/hermes/manual, on the
    computer where Hermes Desktop is installed; it opens the same screen. GitHub doesn't open hermes:// links, so the
    button lives there; you can also paste hermes://plugin/install?catalog=bot-cabinet-v2 into your browser.
  2. Open Cabinet in the sidebar. If it isn't there yet, quit Hermes Desktop fully and open it again.
  3. 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.11, MIT licensed.

Cabinet: find the smallest setup for a job, then add Bots and crews from botcabinet.com, with undo

Start Here

What it does

ScreenWhat you do there
Start HereSee the 20 Bots, the 11 Crew Kits, how many have recorded test runs, and how Cabinet sits beside the Hermes Bots catalog
Fit TestDescribe 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 CabinetBrowse every Bot with its painted portrait and test status. Add opens a review screen with the exact profile Hermes will make
Bot LabPlan a Bot that isn't published, line by line. Make it as a profile, or save the plan as a kit
Crew KitsReview a crew's bots and handoff order, then set it up. Optional blocked Kanban cards, one per step
My BotsEverything Cabinet made, its live state, a chat link, and Remove for anything you haven't changed
Test RecordsWhat each Bot and crew has been tested on, including failures
Add a BotSet up a crew
Add: the exact profile, editable, before anything is madeA crew: every bot, the handoff order, and what Hermes can't do
My BotsFit Test answer
My Bots: status, chat, Remove only for untouched botsThe 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 whose profile.yaml says
    kind: 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).

  1. Open Capabilities → Plugins in Hermes Desktop, find Cabinet and press Install, or press Install in
    Hermes
    on botcabinet.com/hermes/manual, which opens
    hermes://plugin/install?catalog=bot-cabinet-v2. Either way Hermes installs the commit Nous Research reviewed. The
    plugin installs under its registry name, bot-cabinet-v2.
  2. 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. This installs the latest version from GitHub. 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

  1. 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.
  2. 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.
  3. 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 a fingerprint: every file in the profile, by size and
    hash (the keys file by size and time only, never its contents). 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 every file still matches that fingerprint, and goes through Hermes's own delete. A file
added, removed or changed anywhere in the profile keeps it, hidden files included. Only what Hermes writes by itself
as a bot runs doesn't count: caches, locks, logs, snapshots, backups, running state and downloaded tools and models
(the full list is in SECURITY.md). A chat in state.db or a project in projects.db does count. A bot recorded by
Cabinet 0.3.10 or older has no file list, so Cabinet keeps it and says why. 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 own delete_profile, and only
    a profile Cabinet made whose files all still match the list 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's SOUL.md, profile.yaml and bot-blueprint.yaml to check what Hermes made, hashes its
    SOUL.md, config.yaml and 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's SOUL.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_connect and hermes_cli.bot_catalog, because the plugin API has no
    public seam for them yet. It never patches or replaces anything in Hermes. hermes plugins validate reports 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.create handler, 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 with
    CABINET_E2E_ALL=1 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 ~/.hermes changes.

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 && python3 -m unittest discover -p "test_*.py"
python3 tests/run_with_hermes.py        # also the tests that call Hermes (separate clone, temporary home)
python3 harness/serve.py 8893           # then open http://127.0.0.1:8893/harness/
python3 harness/shoot.py                # screenshots of every screen into harness/shots/ (needs Google Chrome)

python3 works on macOS and Linux. On Windows, use py instead (py tests\run_with_hermes.py).

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.

PathWhat it is
fit.pyThe Fit Test: a rules table, every answer traced to its question
catalog.py, data/catalog.jsonThe Bots, Crew Kits and job guides (snapshot from botcabinet.com)
api.pyPage view models
installer.py, store.py, safety.py, hermes_bridge.pyPlan, record and undo; Cabinet's record; the checks; the one guarded door into Hermes
sync.py, catalog_schema.pyLive catalog fetch and its schema
dashboard/plugin_api.pyThe page's backend routes
desktop/src/plugin.js, desktop/plugin.jsThe 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.

README from the reviewed commit d6a816c; it updates when the author re-pins.

More by Dgardenhire

4 plugins by Dgardenhire in the catalog.

DgardenhireclearingThe Clearing is a writing editor inside Hermes with 159 editing methods you can run by name: 11 editor passes, 9 composition checks drawn from Strunk's rules, 33 editorial methods, 56 craft techniques and 44 figures of speech it can find in your draft or suggest where one would help. Press Read my piece and it marks your own words with what to change, most important first. Nothing changes until you press Use this. Three reviewers, a newcomer, a skeptic and a line editor, can each read the piece and then argue it out. When a suggestion adds a fact you never wrote, it says so before you keep it, and the page shows how much of the piece is still your own words. A built-in quick check and dictionary work without a model. An independent community plugin, not made or endorsed by Nous Research. Disclosure: no network calls of its own. Editor passes go to the model you set in Hermes, only when you start one, with secrets removed by Hermes first; Bring in a link hands a public address to Hermes's web_extract after refusing non-public hosts; dictation goes to Hermes speech-to-text and, for a cloud service, waits until you press Send. Reads only files you pick, plus Hermes's speech-to-text setting and the Hugging Face model cache, both read-only. No shell commands, background processes, stored credentials or telemetry; one observe-only post_auxiliary_call hook reads the finish reason, model name and token counts of its own calls. When it falls back to a local faster-whisper model it sets KMP_DUPLICATE_LIB_OK=TRUE in the Hermes process. Your writing, its versions and a quote-stripped debug.log stay in <HERMES_HOME>/plugin-data/clearing/; Delete forever in the Trash erases a piece.CommunityDesktop appDgardenhirefield-academyThe School of Hermes. Hermes will sometimes tell you it saved something when it didn't, and Field Academy teaches you to catch that. In Foundations you work through 11 missions in a throwaway copy of Hermes with one thing quietly broken: you do a real job, say how you think it went, then look at what Hermes actually wrote to its files. After that come 34 missions on five trails in your own Hermes, each trail ending with a Field Record of your work. New in 0.9: Foundations and the trail map. Independent community plugin, not made or endorsed by Nous Research. Disclosure — no network calls of its own and no telemetry; registers six tools, two hooks, the /academy command and one skill. It creates and deletes practice profiles (named academy-practice) through Hermes, which copies your provider sign-in into each; Field Academy never reads .env, auth.json or other sign-in files. Before a practice profile's first chat it writes allowlisted settings, memory, a sample skill and sample files into that profile only, and may turn on its memory or skill write-approval setting; it never changes approvals.* or the command allowlist, and never writes your own profiles. Some missions add a filesystem connector (@modelcontextprotocol/server-filesystem, pinned) that Hermes downloads with npx, and scheduled practice jobs that, once repaired, run hourly on your model provider until you pause them. AI help (on by default) sends mission text, your answers and key-scrubbed practice excerpts to your own model; the in-chat practice offer (pre_llm_call, interactive sessions only) is off until you turn it on. It reads a file you name (UTF-8, max 5 MiB); on the Guide path it reads Hermes's run-history database read-only, jobs.json and up to 25 log files; progress, practice labs and Field Records stay in $HERMES_HOME/plugin-data/field-academy/.CommunityDesktop appDgardenhireld-workbenchPractice Lincoln-Douglas debate. A case workbench helps a student build their own case section by section (resolution analysis, value and criterion, contentions, evidence, blocks) with a coach that gives real help and asks hard questions but never writes the case. A topic briefing maps a new resolution for both sides. A full NSDA practice round (AC, cross-examination, NC, 1AR, NR, 2AR, with prep time) runs against an AI opponent at three levels, followed by a ballot from a lay, traditional or flow judge. A fallacies guide, drill and spotter work on the student's own case and on other people's arguments. Cases are kept in a library with Word, text and backup-file export. Every model call goes to the user's own Hermes model through the plugin LLM helper. Debate Workbench is an independent community plugin. It is not made or endorsed by Nous Research or the National Speech & Debate Association. Disclosure — one network call of its own: when the user adds a topic source link, it fetches that one public web page (http or https, public addresses only, checked on every redirect, 20-second timeout, first 30,000 characters of text kept); no credentials, telemetry, shell commands, background processes or self-updates; registers no tools, hooks or middleware, only a Desktop page and a dashboard API; stores cases, rounds, ballots and briefings in $HERMES_HOME/plugin-data/ld-workbench/; reads a .docx or .txt case file or a backup file only when the user picks one; writes an export only to a path the user picks in the save dialog, inside their home folder; the optional dictation button uses the speech recognition built into the desktop app's browser engine when that engine provides it, which may send the audio to that engine's speech service; no private Hermes imports.CommunityDesktop app

Developer Mode

Explore built-in Hermes toolsets and actions.

HermesAgent

Developer?

Create a Hermes extension for Desktop or agent workflows.

Developer Section