Skip to content

Settings — every file, every key

Three tools touch settings, and knowing which one owns what removes most of the confusion:

toolwhat it is for
hexaeight-activatealmost everything — identity, install, engines, policy, running components
./hexaeight-agent-...the agent’s own sealed stores: policy rules, vouches, engine entries
./hexaeight-router-...the router’s sealed policy, and its upstreams

The rule of thumb: hexaeight-activate unless the thing is sealed under a component’s own key, because then only that component can write it.


hexaeight-agent.json — the agent’s configuration

Section titled “hexaeight-agent.json — the agent’s configuration”

Plain JSON in the agent’s folder. Edit it with any editor, then restart the agent.

keywhat it does
portthe agent’s main port
ownerthe address policy is enforced against. Without it, no rule applies at all
license.typepersonal or business — decides who may sign in to the workspace
registerpublish this agent to the registry so others can find it by name
external.retentionDaysHow long external session transcripts are kept before the agent prunes them. 1 to 365, default 365. Does not touch the harness .jsonl trails, which nothing expires
reach.modehow the outside world reaches it — cloudflared, tailscale, ngrok, local (publishes this machine’s LAN address) or none (publishes nothing; it calls out but accepts nothing). See Architecture
reach.binpath to the tunnel binary. If it is missing, the tunnel silently does not start and registration is skipped
jail.enabledmask the identity folder from engine turns. Leave it on
llmPort, sharedMcpPort, externalMcpPort, bindPort, missionStatePortits own ports, so several agents can share a machine
services{} on a runner — no Node-RED, browser or memory service
external.enginewhich sealed engine serves external callers
external.allowToolstools an external turn may use, e.g. service_call
external.authTiersdde-auth,byoa — who may call. Absent on an API agent
api.tiers["dde-auth"] for agent-to-agent calls. This exact string
external.api.enabledthe API layer. A sealed route with this off is invisible

upstreams.yaml — the router’s only config

Section titled “upstreams.yaml — the router’s only config”

In the router’s folder, written by hexaeight-activate upstreams (or the router’s --setup). There is no router.yaml — settings and upstreams share this one file.

keywhat it does
requireIdentifiedCallertrue refuses opaque callers, so everything is metered per person. Leave it off on a router serving other people’s agents
upstreams[].matchthe route name — a glob you choose, like *-ant-aws or glm5br*
upstreams[].shapethe API the caller speaks: anthropic, openai, res
upstreams[].translaterewrite to another provider’s dialect, e.g. bedrock
upstreams[].urlthe provider endpoint
upstreams[].authbearer, none
upstreams[].secretthe key. Literal, or ${ENV_VAR} read at startup

This file holds provider keys in clear. Restrict its permissions, keep it out of version control, and out of backups that travel.

Encrypted under the owning component’s key. No editor will help.

fileholdschanged with
policy.csvwho may reach this agent, and what it may reachhexaeight-activate add-policy, or the agent’s --add-rule
vouch.hewho may act on behalf of whomthe agent’s vouch allow
engines.hesealed engine entries: model, router, mission, wrapperhexaeight-activate engine --add
router-policy.hethe router’s rulesthe router’s --init-policy

Read them back: hexaeight-activate list-policy for the agent, and for the router, its startup output or --init-policy, which prints the current rules before asking anything.

variablewhat it does
HEIA_DIRan agent’s own store. A caller and the door it calls must not share one
HEIA_POLICY_MODEenforce (the default) or audit
LLM_ROUTER_CONFIGpoint the router at an upstreams.yaml elsewhere

The identity itself comes from env-file, which is read from the current directory — which is why every command is run from its component’s own folder.

my-agent/
hexaeight-agent.json you edit this
env-file hexaeight.mac the identity — never copy, hardlink
policy.csv vouch.he sealed
engines.he sealed
agent.log what it did
my-router/
upstreams.yaml you edit this — upstreams AND settings
env-file hexaeight.mac hardlinked from the agent, or its own
router-policy.he sealed
router.log what it did