0336GitHub
hermes-jev-approvals
Approvals provider for Hermes Agent: it judges shell commands and refuses every other task, registering no hooks.
anpicasso/hermes-jev-approvalsREADME ↗
# hermes-jev-approvals **Smart command approvals for [Hermes Agent](https://github.com/NousResearch/hermes-agent), served by [TypeSafe's](https://typesafe.ai) Jev decision model.** > **Approvals only.** This provider serves `auxiliary.approval` when > `approvals.mode: smart`. It cannot chat or generate text, refuses every other task, and > registers no hooks. It works with Hermes core as shipped. ## What it does Hermes already detects commands that need review and asks an auxiliary model for one of three values: - `APPROVE` — execute without interrupting the user. - `DENY` — block the command. - `ESCALATE` — ask the user. This plugin replaces only that reviewer. Jev returns typed probabilities instead of prose that Hermes must parse back into a decision. ## How it decides One request asks six typed questions in parallel: | question | type | value | |---|---|---| | `verdict` | Choice | `APPROVE`, `DENY`, or `ESCALATE` | | `policy_allows` | Noul | probability that `approvals.smart_policy` explicitly allows it | | `blast_radius` | Score | `0` trivial, `1` annoying, `2` severe recovery | | `self_advocating` | Noul | probability that command text argues for its own approval | | `reads_secrets` | Noul | probability that it reads or copies credentials | | `sends_outbound` | Noul | probability that it transmits local content remotely | The final verdict is deterministic code, in this order: 1. `self_advocating >= 0.6` → `ESCALATE` 2. `reads_secrets >= 0.7` and `sends_outbound >= 0.7` → `DENY` 3. `reads_secrets >= 0.7` → `ESCALATE` 4. `policy_allows >= 0.7`, policy present, and `blast_radius < 2.0` → `APPROVE` 5. Model `APPROVE` with `confidence < 0.55` or `blast_radius >= 1.6` → `ESCALATE` 6. Otherwise keep the model verdict Malformed or missing answers raise, which