Managed Scope
تحديد نطاق عمل الوكيل
What this page is, and what it holds.
This page covers Managed Scope. It carries a source warning and takes about 5 minutes to read. Do not disable approvals to save time. Start read-only and widen once you trust the results.
Administrator-pinned, user-immutable config and secrets via a system-level managed directory
Outcomes taken from this page, not a template.
- Understand what الأمان والموافقات is and when you need it.
- Run
hermes doctorandhermes configand understand what happens next. - Read the table and take only the row that applies to you.
- Set
HERMES_MANAGED_DIRin the right place.
Exactly as they appear in Hermes.
hermes doctorhermes confighermes config sethermes sudo chmodhermes config set model
HERMES_MANAGED_DIRHERMES_HOMEOPENAI_API_BASE
Jump to the part you need.
Nothing summarised away.
The documentation body below is reproduced from the official source so commands and identifiers stay exact. Each section carries a short note describing what it contains.
Managed scope lets an administrator push a baseline of configuration and
secrets that a standard (non-root) user cannot override. It is intended for
fleet/org deployments where IT needs to pin, for example, the model provider, a
shared API base URL, or security.redact_secrets: true across every user on a
machine.
When a managed scope is present, the values it specifies win over the user's
~/.hermes/config.yaml, ~/.hermes/.env, and even the shell environment — for
exactly the keys it pins. Everything else stays fully user-controlled.
Where it lives
Carries a warning. Read it before running anything here. Commands here: hermes doctor. The upstream warning appears below.
Managed scope is read from a system-level directory, default /etc/hermes:
/etc/hermes/
├── config.yaml # managed config layer (wins over ~/.hermes/config.yaml)
└── .env # managed env layer (wins over ~/.hermes/.env + shell)The directory and files are owned by root (directory mode 0755, files
0644): readable by everyone, writable only by an administrator. **That
filesystem permission is the enforcement mechanism** — a standard user can read
the managed files but cannot edit them.
Either file is optional. A missing managed directory or missing file simply means "no managed scope," and configuration resolves exactly as it does without the feature.
Relocating the directory
The location can be relocated with the HERMES_MANAGED_DIR environment variable
(for containers or non-/etc deployments). This is a deployment/bootstrap path
knob — like HERMES_HOME — set by the same administrator who owns the managed
files. It is never persisted to any .env by Hermes.
# Point managed scope at a custom directory (set by IT / the deployment, not the user)
export HERMES_MANAGED_DIR=/opt/org/hermes-policyPrecedence
Settings you configure once. Change one at a time so you can see what each does.
For the keys a managed layer specifies, the order is (highest wins):
| Tier | config.yaml | .env |
|---|---|---|
| 1 | /etc/hermes/config.yaml (managed) | /etc/hermes/.env (managed) |
| 2 | ~/.hermes/config.yaml (user) | ~/.hermes/.env (user) |
| 3 | built-in defaults | pre-existing shell environment |
Merging is leaf-level: pinning model.default does not freeze the rest of
model.*. A managed config.yaml of:
model:
default: org/standard-modelforces model.default for every user while leaving model.fallback (and every
other key) under user control.
Seeing what's managed
Ordered, practical steps. Run one and confirm it worked before moving on. Commands here: hermes config, hermes doctor.
hermes config # shows a header naming the managed source + the pinned keys
hermes doctor # reports the resolved managed dir + pinned key countsIf you try to change a managed value, Hermes refuses and names the source:
$ hermes config set model.default my/model
Cannot set 'model.default': it is managed by your administrator
(/etc/hermes/config.yaml) and cannot be changed.The same applies to managed secrets — hermes config set / setup will not write
a user value for an env key pinned by the managed .env.
Setting up a managed scope (administrators)
Settings you configure once. Change one at a time so you can see what each does. Commands here: hermes doctor, hermes sudo chmod. Set OPENAI_API_BASE in your environment, not in the chat.
sudo mkdir -p /etc/hermes
# Pin some config values for every user on this machine
sudo tee /etc/hermes/config.yaml >/dev/null <<'YAML'
model:
provider: nous
security:
redact_secrets: true
YAML
# Optionally pin a shared, non-sensitive env value
sudo tee /etc/hermes/.env >/dev/null <<'ENV'
OPENAI_API_BASE=https://inference.example.com/v1
ENV
sudo chmod 0755 /etc/hermes
sudo chmod 0644 /etc/hermes/config.yaml /etc/hermes/.envChanges take effect on the next Hermes start (a malformed managed file is logged
loudly and ignored — it never blocks startup, but the admin should check
hermes doctor to confirm the policy is being applied).
Security model and limitations (v1)
Explains the idea itself. Read it slowly; the later sections build on it.
- Enforcement is filesystem permissions only. If a user has write access to the managed directory (or runs Hermes as
root), managed scope is advisory. - The managed
.envis world-readable (0644), so any local user can read secrets pushed through it. Use it for shared, non-sensitive values (an org API base URL, feature defaults) rather than high-sensitivity secrets. - *The agent's own tools are not hard-blocked from a managed env value.* A managed environment variable is applied at startup, but nothing stops the agent from setting a different value inside its own subprocess shell. v1 is a management-convenience boundary against a normal user, not an un-escapable sandbox.
The following are intentionally out of scope for v1 and may come later:
- A hard boundary that the agent itself cannot escape.
- Native managed locations on macOS and Windows (v1 is Linux/POSIX-first).
- Drop-in fragment directories (
managed.d/) for layered policy. - Signed / integrity-checked managed files.
- Remote / device-management (MDM) delivery.
- Tighter (group-scoped) permissions for managed secrets.
5 questions answered by this page alone.
Every option is a real identifier from the Hermes documentation. The wrong ones are real too, just from other pages.