Status: v0 (M1). Single-operator model. Multi-tenant auth lands in M5.
Master key — 32 random bytes. Generated by the control plane on first run; stored at /var/lib/h4a/master.key, mode 0600. Also stored on your laptop at ~/.config/h4a/credentials after h4a login, because the CLI needs it to mint subkeys. Treat it like a root password.
Subkey — a short-lived JWT (HS256, signed with the master key) with a tenant claim and exp. This is what you paste into an agent's MCP config.
# On the control-plane host, once:
cat /var/lib/h4a/master.key # copy
# On your laptop, once:
h4a login https://h4a.site
# Master key (input hidden): ****
# Every time you want a fresh subkey for an agent:
h4a session create --tenant default --ttl-hours 24
# eyJhbGciOi... (prints on stdout)
Paste the JWT into your agent's MCP config as the bearer token. The MCP URL is https://h4a.site/mcp.
All 401 responses carry this docs_url and a human-readable message. Common cases:
Authorization: Bearer <subkey> on every request.h4a session create.h4a login.v0 has no automatic rotation. If the master key leaks:
rm /var/lib/h4a/master.key && systemctl restart h4a-controlplane.h4a login https://h4a.site again on every operator machine.session create again.exp, rotate the master key.