Skip to content

Security model

AGENSAI's security posture rests on three layers of defense. Each layer's failure mode is bounded by the next.

  1. Storage. Where each key lives and what protects it.
  2. On-chain bounds. What each wallet is allowed to do, enforced by the validator.
  3. Revocation. How fast you can shut something down when it goes wrong.

Layer 1, Storage

KeyLives inProtection
Main passkeyHardware (Secure Enclave / TPM / Android Keystore), managed by JAW via keys.jaw.idHardware boundary; non-extractable; biometric per use
Orchestrator keyPlaintext file at ~/.agensai/orchestrator.key, mode 0600File-system permissions; readable only by processes running as you
Each child keyPlaintext file at ~/.agensai/agents/<name>.json, mode 0600Same

The orchestrator and child keys use the same plaintext + mode-0600 pattern as JAW CLI's ~/.jaw/keystore.json. It's the same storage profile that any unix-style CLI tool uses for credentials.

No PRF, no cloud-encrypted backup, no encrypted bundle. The orchestrator is intentionally disposable; backing it up would add complexity that doesn't earn a security improvement, because:

  • Funds are recoverable via the kill-switch (Layer 3).
  • Identity is recoverable via ENS records (see Recovery).
  • The orchestrator key itself isn't worth recovering; we rotate to a fresh one.

Layer 2, On-chain bounds

WalletAuthorityBound
Main accountFull control by passkey holderNone, this is the sovereign tier
OrchestratorOwns its pool; can grant permissions to childrenBounded by the kill-switch ERC-7715 grant to main account
ChildrenSpend from orchestrator's pool via ERC-7715Bounded by the explicit calls + spends + expiry of their grant

The kill-switch grant is the architectural anchor. At orchestrator setup, the orchestrator's local key signs a grant from itself to your main account. The grant covers: every recoverable token, generous allowance, long expiry. Your main passkey can invoke it any time to sweep.

Children are bounded by ERC-7715 grants. Anything outside scope reverts at the validator. There's no AGENSAI middleware that could fail open.

Cite: permissions.md lines 131-157, account-api.md lines 142-154.

Layer 3, Revocation

ActionWho signsTap count
Revoke one childOrchestrator's local key0
Re-scope one child (revoke + re-grant)Orchestrator's local key0
Sweep all funds back to main + retire orchestratorMain passkey (kill-switch)1

Revocation is one on-chain transaction. Once landed, the validator rejects every subsequent call against the revoked permissionId. No grace period; no soft delete.

Cite: account-api.md line 198, permissions.md line 190: revocation is permanent.

Honest threat model

We name the actual risks. Where coverage is partial, we say so.

ThreatCoverage
Info-stealer malware scanning ~/.agensai/Real risk. Keys are in plaintext mode-0600 files. Damage bounded by the orchestrator's float. Main account is hardware-protected and unaffected. Same threat profile as JAW CLI's ~/.jaw/keystore.json.
Malicious npm package reading user-homeSame as above. Bounded by orchestrator float; main safe.
Sophisticated targeted attack on logged-in deviceBounded by orchestrator's float. Main account safe. Revoke + rotate completes in ~1 minute.
Stolen unlocked deviceBounded by orchestrator's float. Main passkey kill-switch + new orchestrator on new device recovers fleet identity.
Phishing / curl ... | sh malwareSame as info-stealer, bounded by float.
AGENSAI / JustaLab breachZero impact on user funds. We hold no keys, no shares, no copies. The dashboard is static; the CLI is an npm package. There's no AGENSAI server to breach that has authority over your funds.
JAW or JustaName service outageCannot create new agents or update ENS records during the outage. Existing agents continue to operate (their permissions are on-chain). Main account access depends on keys.jaw.id for first-time device flows.
Compromise of the JAW API key for agensai.eth namespaceCould be used to mint subnames under agensai.eth. Origin-enforced via JAW Dashboard (configuration.md line 88). Does not give authority over user funds or existing agents, only namespace issuance authority.

What AGENSAI explicitly doesn't claim

We don't claim hardware-level security for the orchestrator. We claim bounded security: a compromise hurts only as much as the orchestrator's float, and recovery is fast.

We don't claim hardware-level security for child keys. We claim scoped security: a child compromise hurts only as much as that child's grant lets it.

We don't claim AGENSAI is a bank. The main account is the bank; the orchestrator is the working float; the children are scoped spenders. Treat each tier accordingly.

What AGENSAI does claim

  • AGENSAI runs zero infrastructure for signing or custody. Static dashboard, npm CLI, no servers in the trust chain for keys.
  • Every agent is bounded onchain. ERC-7715 grant verified by the standard ERC-1271 path. Validator-enforced, not middleware-enforced.
  • Revocation is fast and permanent. One onchain transaction, no grace period.
  • Recovery is decoupled from any AGENSAI server. Main = passkey + JAW. Fleet = ENS records. Both work without AGENSAI.
  • Vertically integrated, not stack-glued. JustaLab owns JAW and the ENS service-provider relationship. No third-party AA vendor sits between you and the chain.

Cite

Every claim above ties back to one of these: