Human authorization for autonomous agents

End-to-end encrypted, biometric-signed authorization via zero-knowledge relay. Built on HARP, an open protocol.

$ npx @humanauth/cli pair
E2E Encrypted
Biometric Signed
Zero-Knowledge Relay

Add human authorization to any agent in under a minute.

mcp.json
// Add to your agent's MCP config — that's it
{
  "mcpServers": {
    "humanauth": {
      "command": "npx",
      "args": ["@humanauth/mcp"]
    }
  }
}

// Your agent now has: human_authorize, human_collect, human_inform

How it works

1

Pair

1

Run npx @humanauth/cli pair — a QR code appears in your terminal

2

Open the HumanAuth App and scan the QR code

3

X25519 key exchange establishes a shared secret — stored on your device's secure enclave and via a pluggable storage backend on the agent (file, database, KMS). Never on the relay.

2

Request

Agent calls auth.authorize() — encrypted and sent through the relay.

3

Authorize

Push notification arrives. Confirm with Face ID or fingerprint. The app signs the response with an Ed25519 key locked in your device's secure enclave.

4

Verify

Agent verifies the Ed25519 signature against the public key from pairing — cryptographic proof it was you, not the relay or anyone else.

Security Architecture

Zero-knowledge authorization

Your agent sends an encrypted request through the relay. Only your phone can decrypt it.

Agent
Your code
Relay
Zero-knowledge
Approver Device
Biometric confirm
The relay routes encrypted data — it never accesses the content
1

Agent creates authorization request

Your agent calls auth.authorize() — the SDK builds this payload:

request_payload.json
{
  "intent":       "authorize",
  "action":       "deploy_production",
  "description":  "Deploy v2.1 to us-east-1",
  "severity":    "critical",
  "assurance":   "biometric"
}
2

SDK encrypts & wraps in an envelope

Payload encrypted with XChaCha20-Poly1305. The relay only sees routing metadata:

Relay sees — envelope
envelope.json
{
  "version":     1,
  "request_id":  "01913a4b...",
  "pair_id":     "ab7f2e91...",
  "timestamp":   1713024000,
  "ttl":         300,
  "nonce":       "x4k9m2q7...",
  "payload":     "a3f8b1c9d2..."
}
Relay cannot decrypt
encrypted_payload
{
  "intent":       "authorize",
  "action":       "deploy_prod...",
  "description":  "Deploy v2.1",
  "severity":    "critical"
}
ENCRYPTED
3

Phone decrypts, you authorize with biometrics

Only your device holds the shared secret. Confirm with Face ID to sign the response.

HumanAuth
CRITICAL
AUTHORIZATION REQUEST
deploy_production
Deploy v2.1 to us-east-1
ASSURANCE
Biometric
EXPIRES IN
5 minutes
Deny
Approve
Confirm with Face ID
Signed response
response_payload.json
// Encrypted + Ed25519 signed
{
  "request_id":  "01913a4b...",
  "decision":    "approved",
  "decided_at":  1713024012,
  "signature":   "ed25519:7f3b9a..."
}
XChaCha20-Poly1305 Ed25519 X25519 HKDF-SHA256

Cryptographic proof of human intent. The response is signed with a key derived from the pairing secret and bound to the user's biometric authentication.

Works with your stack

Drop-in integration with popular agent frameworks.

HumanAuth
Action
deploy_production
Description
Deploy v2.1 to prod
Deny
Approve

Get the HumanAuth App

Review and authorize agent actions from your phone. Biometric authentication with Face ID or fingerprint. Push notifications keep you in the loop.

Available for iOS 16+ and Android 12+

Open protocol. Not vendor lock-in.

HARP is an open, MIT-licensed protocol. Self-host the relay, bring your own app, build custom clients. We built the protocol. You own the infrastructure.

Start building with HumanAuth

$ npx @humanauth/cli pair