Run agents
hal0 can run a bundled agent — Hermes — provisioned into a
hal0-managed virtualenv and driven through the hal0 agent CLI. The agent
gets a persona (system prompt + tool gating), an approvals queue for
gated/destructive actions, and an optional per-persona spending budget.
Install Hermes
Section titled “Install Hermes”sudo hal0 agent install hermesInstalling Hermes runs a three-step foreground pipeline:
-
Toolchain — ensures
python3(≥3.11), the venv stdlib,pip, andpipxvia the distro helper. Idempotent. -
Provision — creates the managed venv under
/var/lib/hal0/venvs/hermes, pip-installshermes-agent, installs thehermesshim, and registers the agent. -
Enable —
systemctl enable --now hal0-agent@hermesso the agent runs and survives reboot.
Run it as root: provisioning writes under root-owned /var/lib/hal0 and
then chowns the provisioned trees to the hal0 user (the shared agent runtime
user). If you run it as a normal user it aborts cleanly up front with a sudo
hint rather than crashing mid-build.
Pass --switch to atomically uninstall whatever agent is currently
installed before installing this one.
Manage the lifecycle
Section titled “Manage the lifecycle”hal0 agent list # installed bundled agentshal0 agent list --jsonhal0 agent status hermes # provisioning checkpoint, per phasehal0 agent log hermeshal0 agent log hermes --phase provisionPer-phase provisioning logs from the agent’s state directory.
hal0 agent reprovision hermes # idempotent re-convergehal0 agent reprovision hermes --repair # force every phasehal0 agent upgrade hermes # bump the version pin + repairhal0 agent upgrade hermes --to 0.15.3 # pin a specific versionhal0 agent uninstall hermeshal0 agent uninstall hermes --keep-memoryDefault uninstall tears down the agent’s private memory namespace too;
--keep-memory preserves it so a re-install reuses the identity card.
Personas
Section titled “Personas”A persona is a TOML file pairing a system prompt with tool gating. Manage
them with the personas sub-app:
hal0 agent personas list # list + mark the active onehal0 agent personas show <id> # print a persona's TOML (good template)hal0 agent personas activate <id> # switch active + nudge a hot-reloadActivating writes the active.txt pointer atomically and best-effort
nudges a running Hermes to hot-reload. If Hermes isn’t running, the next
restart picks up the new active persona. To author your own, copy
personas show output, change the persona id, and save it under the
persona store.
The approvals queue
Section titled “The approvals queue”Destructive or gated tool calls don’t execute immediately — they land in an approvals queue you review:
hal0 agent approvals list # pending requestshal0 agent approvals approve <id> # let it runhal0 agent approvals deny <id> # reject itEach pending row shows the request id, the tool, the requesting agent
(client_id), when it was enqueued, and a one-line summary built from the
tool’s primary argument. The dashboard’s Agent → Approvals tab renders the
same queue.
The Operator Board (dashboard ▸ Board) — Hermes agent tasks move across Triage → To-do → Scheduled → Ready lanes.
Spending budget
Section titled “Spending budget”Each persona can carry spending caps so an autonomous loop can’t drain a
paid provider pool. Caps live in the persona’s [persona.budget]
sub-table:
[persona.budget]daily_usd = 5.0monthly_usd = 50.0lifetime_usd = 200.0per_call_max_usd = 0.50hard_cap = trueEvery cap is optional — omit one to leave that window uncapped, or set it
to 0.0 to block every paid request. hard_cap = true (the default)
denies requests that would overshoot; hard_cap = false lets them through
but still reports the breach so the caller can log a warning. Spend is
tracked in an append-only ledger per persona, aggregated over daily,
monthly, and lifetime windows.
Audit trail
Section titled “Audit trail”Every gated tool invocation is journaled. Pull an agent’s recent MCP activity:
curl 'http://localhost:8080/api/agents/hermes/activity?limit=50'Each row carries tool, args, gated, outcome, timestamp, and the
client_id the action was attributed to.
Related
Section titled “Related”- Enable memory — the recall store agents read and write.
- Connect external providers — wire the paid upstream a budget caps spend against.