Innovate, disrupt, code the future. 💻🔐🚀

A Hermes hooks doctor says the hook will not fire when auto-accept wires it

hermes hooks doctor printed hook will NOT fire at runtime. In that same process HERMES_ACCEPT_HOOKS was 1. The registration call then wired the hook and wrote the allowlist pair the doctor line had just called missing.

That sentence is the allowlist file. It is not the runtime decision. On Hermes 0.22.5 the runtime also accepts hooks_auto_accept: true and --accept-hooks. Doctor does not read any of the three. A second doctor run, after the write, said the same hook was healthy.

2026-11-04

A plugin skill count includes the link that does not load

The plugin object said provides.skills was 2. The loaded skill list had one name, inside-skill. The missing directory was a symlink. Its target was an ordinary skill directory, the SKILL.md there was readable, and Grok 1.0.67 did not print a skip.

That pair of numbers is not the install result. grok plugin install --trust on a plugin whose only skill was the same kind of outside link exited 0 and said it installed the plugin. The installed copy had an empty skills directory. A later grok inspect --json of that home reported provides.skills as 0 and an empty skill list. grok plugin details on the same installed copy still said 1 skill dir(s).

2026-11-04

A catalog file validates, then install looks in the parent directory

The install error named <parent>/plugins/probe-plugin. The file just added was <market>/catalog.json. The plugin directory was <market>/plugins/probe-plugin, beside the catalog, not beside the parent. claude plugin validate on that file had exited 0. Its warning had already named plugins[0] plugin.json under <market>.

Those two directories are not two prints of one root. Validate read the plugin from the directory that holds the catalog. claude plugin marketplace add exited 0 and stored the parent as installLocation. Install then looked there. The plugin was never in that parent.

2026-11-03

A docker approvals test allows the reboot the local floor blocks

hermes approvals test --env-type docker --json -- reboot exited 0. The verdict was allow. The rule field was empty. The detail said an isolated container backend skips all command guards except approvals.deny.

The same words with the env type left at local exited 3. The verdict was hardline-deny. The rule was system shutdown/reboot. The detail said the hardline blocklist is never bypassable, including under --yolo and approvals.mode: off.

Those two details are both printed by the same handler. They are not two views of one floor. The local line is the floor. The docker line is a backend shortcut that the dry-run always takes for docker and modal. The shortcut does not ask whether that backend has a host path mounted. The runtime does.

2026-11-03

Grok inspect loads main-checkout deny rules from a linked worktree

grok inspect --json in the main checkout left the permission source list empty. The same command in a linked worktree named that checkout’s .claude/settings.local.json and reported loaded as 2. The worktree did not contain the file. The main checkout was projectTrusted: false. The worktree was projectTrusted: true.

Those two lines are not a view of one trust bit. The file the main inspect skipped is the file the worktree inspect counted. If you set GROK_WORKTREE_INHERITS_MAIN_APPROVALS=false and then read only the flag, you will miss the source that stayed.

2026-11-02

A Codex doctor websocket warning can be a missing bearer

The remediation says to check the proxy, the VPN, the firewall, DNS, a custom CA, and WebSocket policy. On Codex CLI 0.163.0 the handshake under that sentence is a 401, and the message in the 401 is Missing bearer or basic authentication in header. DNS had already returned addresses. The HTTP reachability row was ok. Proxy environment variables were none. Auth mode was none.

Those two lines are not the same failure. The summary points at the path. The detail points at the header. Codex CLI 0.166.0, installed beside the older binary and not put on PATH, prints the same remediation and still records auth mode none. It redacts the 401 body. The flag added in that release, codex doctor --network-only, then drops the auth row and exits 0.

2026-11-02

grok memory clear reports an empty store while the notes remain

grok memory clear --yes printed one sentence and exited 0. The sentence was Nothing to clear: no memory files found. Standard error was empty. The global topic file was still under memory-v2/global/topics/. A note under memory-v2/workspaces/ was still there. The older memory/MEMORY.md was still there.

The exit code is not an inventory. On this binary the default clear can report an empty store while the files a later session is told to read are still on disk. --all can then print Memory cleared. after deleting only the global directory.

2026-11-01

A Hermes skills trust counts a folder the session never opens

The trust entry was <subdir>. The session opened <repo>. <repo> was not on the list, so delta never loaded. hermes skills trust <subdir> had already exited 0 and printed that one project skill would load in sessions started inside this repo.

That sentence is the wrong object. On this binary the path you pass is the path that is stored. The path a later session opens is the nearest ancestor that contains .git, and only when that ancestor is an exact entry in skills.trusted_project_dirs. A folder inside a checkout can be trusted, counted, and still be invisible to every session that starts in it.

2026-11-01

Read claude auto-mode config before an allow list omits $defaults

The allow array went from 17 rules to 1. claude auto-mode config exited 0. Standard error was empty. The only remaining allow rule was the one-line probe. Scheduled-Task Fires was gone. Git Push Destination was gone. Nothing in the command output said that 16 built-in exceptions had been discarded.

That is the check. An autoMode.allow list that forgets the literal "$defaults" does not add a sentence to the classifier’s exceptions. On the two binaries measured here, it replaces the printed allow list. The configure-auto-mode page, read on 31 October 2026, says the same thing. The October 31 changelog sentence about scheduled-task prompts does not show up as a kept label in the print.

2026-10-31

A Hermes cron write waits on a memory lock the operator note says is unused

The operator note and the constructor do not describe the same cron session. In this install, cron/AGENTS.md says cron sessions pass skip_memory=True, and that memory providers intentionally do not run during cron. The function that builds the agent, _construct_cron_agent in cron/scheduler.py, passes skip_memory=False. A comment in agent/agent_init.py agrees with the constructor, not with the note: cron agents now take the normal memory path.

That disagreement decides whether a scheduled agent job can sit forever inside a file lock. The note is what a reader of the install tree is likely to trust. The call is what the process runs. On this binary they are not the same sentence.

2026-10-31