Skip to content

Hermes in the CLI, and the Hermes path that was only half true - #60

Merged
borjaperfra merged 5 commits into
mainfrom
docs/hermes-in-the-cli
Sep 14, 2026
Merged

borjaperfra merged 5 commits into
mainfrom
docs/hermes-in-the-cli

Conversation

@borjaperfra

Copy link
Copy Markdown
Contributor

Docs for helmcode/nan-cli#4, which teaches the CLI to configure Hermes.

What changed

The table on /docs/nan-cli and the card on /docs/agent-setup now say the CLI configures Hermes too, in both languages, along with a short paragraph on what it does and does not touch.

Two corrections that came out of driving the real tool while writing it:

  • The Hermes page published ~/.hermes/config.yaml as the path. That is the macOS and Linux one; on Windows Hermes keeps its home under %LOCALAPPDATA%. Both are published now, plus hermes config path, which answers for whichever machine the reader is on.
  • The Hermes page now points at the CLI as the shortcut, the way the other tool pages already do.

The test

The list of tools the CLI configures lives in four files — two pages, two languages. The last time the CLI learned a new one, the table gained a row and the card went on naming four, so which answer a member got depended on which page they landed on. Nothing in the build compared the two, because they are prose in different files.

It cannot check the Go source, which is another repository. It checks that the site agrees with the site — the half that kept going wrong.

It earned itself immediately: it caught the Spanish Hermes page going out without the CLI note the English one had.

🤖 Generated with Claude Code

borjaperfra and others added 4 commits September 14, 2026 10:37
The CLI configures Hermes as of nan-cli 0.1.3, so the table on /docs/nan-cli
and the card on /docs/agent-setup say so, in both languages.

Two corrections that came out of driving the real tool while writing it:

- The Hermes page published `~/.hermes/config.yaml` as the path. That is the
  macOS and Linux one; on Windows Hermes keeps its home under LOCALAPPDATA.
  Both are published now, along with `hermes config path`, which answers for
  whichever machine the reader is on.
- The Hermes page now says the CLI can do this step, which is the shortcut
  the rest of the section already points at for the other tools.

The test is for the half that kept drifting. The list of tools lives in four
files - two pages, two languages - and the last time the CLI learned one, the
table gained a row and the card went on naming four, so the answer a member
got depended on which page they landed on. It cannot check the Go source,
which is another repository; it checks that the site agrees with the site.

It earned itself immediately: it caught the Spanish Hermes page going out
without the CLI note the English one had.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Two things a member acts on, both wrong on the page.

The Pi page said what Pi is and never said where to get it. Every other page
in the section links its tool out - Hermes to Nous Research, Gentle-AI to its
repo - and the only link anywhere pointed at pi.ai from the CLI's README,
which is Inflection's consumer chatbot and a different piece of software with
a different company behind it. Pi is at pi.dev, and it installs in one line
on each kind of machine, Windows included.

The model page closed the premium note with "every other model can be called
by any member". That is no longer true: `GET /v1/models` answers with what the
cluster is running, which is not the same question as what a key can call, and
there is at least one id today that appears there and comes back `401`. The
note now points at the table as the thing to go by and says why the endpoint
is not it - without pretending the difference does not exist.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The page published `glm5.3-flash` and `deepseek-v4-flash` as an example while
the CLI writes all seven, so the same member got a different answer depending
on whether they set Pi up by hand or let the CLI do it - and by hand they got
a model picker missing five of the models they are paying for.

Nothing caught it. Every window on the page was correct; there were just two
of them, and the rule the suite enforced was written over the values rather
than over the set. The OpenCode page has published all seven all along, which
is what made the difference invisible: two of our own pages disagreeing about
what the cluster serves.

Both blocks are now the same seven in the same order, and the prose names them
the way /docs/opencode does.

Two things the list needs explaining, both now in Known issues:

- `mimo-v2.5` goes in without its audio. Pi's `input` schema is
  `("text" | "image")[]` and a third value does not fail that one model: Pi
  refuses the whole file, every other provider in it included. That is why
  this page and the OpenCode page differ on that one field.
- `glm5.3` is premium. It is on the list so a member who has the tier can see
  it, and the 401 without it is explained on /docs/choose-a-model.

The tests are the OpenCode ones written for Pi, the completeness check
included - seen failing against the two-model page before going in - plus one
the other pages have no equivalent of: settings.json has to name a provider
and a model that models.json actually declares. A default pointing at
something the same page never defined is the failure the CLI was shipping
until this week.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The Windows half of /install, same shape and for the same reasons: the script
is not copied into this repo, it is fetched from a released tag next to the
code it installs, and a failure comes back as a script that exits rather than
as an HTTP error page. The caller is a shell in both cases; only the shell
differs, which is what the content type is about - Invoke-RestMethod parses by
content type, and anything json-ish would hand `iex` an object where it
expected the text of a script.

The pin is v0.1.3, which is not cut yet. Until it is, the upstream fetch 404s
and the route answers with the error script that says what happened and where
to download by hand - the correct degraded behaviour for something piped into
`iex`, and better than the route not existing.

/install is deliberately left pinned at v0.1.1. That script works today, and
moving it before the tag exists would break a working install path in order to
improve one that does not exist yet. Both pins move to v0.1.3 together once it
is published - which also ships the install.sh change in this same branch.

The docs stop saying Windows means building from source.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
/install had been pinned to v0.1.1 for three releases. The pin is deliberate -
whatever that URL returns runs on a member's machine, and a tag is a revision
somebody decided to publish - but nothing moved it, so the change that tells a
member what happened when the GitHub API rate limits the version lookup was
released and served to no one.

/install.ps1 moves to v0.1.4 rather than the v0.1.3 it was written against,
because v0.1.3's PowerShell installer does not work. Two PowerShell 5.1 faults,
both found the first time it was pointed at a published release rather than a
local zip: an Invoke-WebRequest without -UseBasicParsing, which throws where
the Internet Explorer engine is absent or has never run its first-run setup,
and checksums.txt read off a response body that PowerShell hands back as a
Byte[] because GitHub serves release assets as application/octet-stream. Both
fixed in helmcode/nan-cli#5 and run end to end on Windows 11 afterwards.

The test pins the two routes to each other. They are not required to name the
same tag forever, since each moves when its own script changes, but one drifting
three releases behind the other in silence is exactly what happened, and it is
cheap to be told.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@borjaperfra
borjaperfra merged commit 1f7b745 into main Sep 14, 2026
1 check passed
@borjaperfra
borjaperfra deleted the docs/hermes-in-the-cli branch September 14, 2026 09:43
@crstian19 crstian19 mentioned this pull request Sep 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants