{
  "schema_version": 1,
  "name": "haven",
  "summary": "Give an agent a budget, not your wallet. Agents pay x402 merchants within owner-set, on-chain-enforced limits; Haven never holds funds and the agent never holds a key.",
  "human_only_steps": [
    "signup_and_passkey",
    "fund",
    "approve_budget"
  ],
  "dashboard": {
    "signup": "/signup",
    "login": "/login",
    "device_approval": "/device",
    "funding": "/dashboard"
  },
  "api": {
    "base": "https://havenbackend-production-8a00.up.railway.app",
    "openapi": "https://havenbackend-production-8a00.up.railway.app/openapi.json",
    "openapi_mirror": "The dashboard-relative /api/openapi.json is the same document, proxied from this backend URL.",
    "root": "https://havenbackend-production-8a00.up.railway.app"
  },
  "hosted_mcp": {
    "url": "https://haven-ai-production-5953.up.railway.app/v1",
    "auth": "bearer agent credential",
    "signer": "local @haven_ai/signer"
  },
  "packages": {
    "connect": {
      "name": "@haven_ai/connect",
      "channel": "@haven_ai/connect@alpha",
      "one_liner": "npx @haven_ai/connect@alpha",
      "released_version": "0.10.0-alpha.0",
      "recommended_version": null,
      "min_version": null,
      "upgrade_command": "npx -y @haven_ai/connect@alpha --doctor",
      "notes": [
        {
          "version": "0.10.0-alpha.0",
          "date": "2026-10-14",
          "summary": "After a --replace whose install completed, the connector tells Haven which agents the run retired on this machine, using the NEW agent's key. Only the retired directories are reported — never the coexisting agents superseded_agent_ids lists. (+5 more in the changelog)",
          "summary_segments": [
            {
              "text": "After a ",
              "code": false
            },
            {
              "text": "--replace",
              "code": true
            },
            {
              "text": " whose install completed, the connector tells Haven which agents the run retired on this machine, using the NEW agent's key. Only the retired directories are reported — never the coexisting agents ",
              "code": false
            },
            {
              "text": "superseded_agent_ids",
              "code": true
            },
            {
              "text": " lists. (+5 more in the changelog)",
              "code": false
            }
          ],
          "action_required": false
        },
        {
          "version": "0.9.0-alpha.0",
          "date": "2026-10-09",
          "summary": "A rebind or --replace now warns that an open session keeps acting as the previous agent. The connector re-points the MCP server name on disk, but a client that is already running keeps the entries it loaded at start-up, and Connect revokes nothing in Haven. (+7 more in the changelog)",
          "summary_segments": [
            {
              "text": "A rebind or ",
              "code": false
            },
            {
              "text": "--replace",
              "code": true
            },
            {
              "text": " now warns that an open session keeps acting as the previous agent. The connector re-points the MCP server name on disk, but a client that is already running keeps the entries it loaded at start-up, and Connect revokes nothing in Haven. (+7 more in the changelog)",
              "code": false
            }
          ],
          "action_required": false
        }
      ]
    },
    "cli": {
      "name": "@haven_ai/cli",
      "channel": "@haven_ai/cli@alpha",
      "one_liner": "npx @haven_ai/cli@alpha",
      "released_version": "0.10.0-alpha.0",
      "recommended_version": null,
      "min_version": null,
      "upgrade_command": "npx -y @haven_ai/cli@alpha",
      "notes": [
        {
          "version": "0.10.0-alpha.0",
          "date": "2026-10-14",
          "summary": "Agent runbook text: the revoke hash is read from haven budget show <agentId> --hashes, and a connector upgrade_command may name the pair with --name <slug>. Text only; no update needed.",
          "summary_segments": [
            {
              "text": "Agent runbook text: the revoke hash is read from ",
              "code": false
            },
            {
              "text": "haven budget show <agentId> --hashes",
              "code": true
            },
            {
              "text": ", and a connector ",
              "code": false
            },
            {
              "text": "upgrade_command",
              "code": true
            },
            {
              "text": " may name the pair with ",
              "code": false
            },
            {
              "text": "--name <slug>",
              "code": true
            },
            {
              "text": ". Text only; no update needed.",
              "code": false
            }
          ],
          "action_required": false
        },
        {
          "version": "0.9.0-alpha.0",
          "date": "2026-10-09",
          "summary": "agents pause, resume and revoke say what they do not do. The help said pause would \"Stop the agent spending\" and revoke would \"Permanently revoke an agent\"; all three are backend-only status changes, and the budget stays live on-chain. (+2 more in the changelog)",
          "summary_segments": [
            {
              "text": "agents pause",
              "code": true
            },
            {
              "text": ", ",
              "code": false
            },
            {
              "text": "resume",
              "code": true
            },
            {
              "text": " and ",
              "code": false
            },
            {
              "text": "revoke",
              "code": true
            },
            {
              "text": " say what they do not do. The help said pause would \"Stop the agent spending\" and revoke would \"Permanently revoke an agent\"; all three are backend-only status changes, and the budget stays live on-chain. (+2 more in the changelog)",
              "code": false
            }
          ],
          "action_required": false
        }
      ]
    },
    "sdk": {
      "name": "@haven_ai/sdk",
      "released_version": "0.10.0-alpha.0",
      "recommended_version": null,
      "min_version": null,
      "upgrade_command": "npm install @haven_ai/sdk@alpha",
      "notes": [
        {
          "version": "0.10.0-alpha.0",
          "date": "2026-10-14",
          "summary": "EIP-3009 merchant headers minted by the SDK now carry an EIP-3009 nonce derived from the Haven payment id — keccak256(utf8(\"haven-x402-payment-nonce:\") || utf8(payment_id)), the shared deriveX402PaymentNonce on the edge surface — instead of the x402 library's random draw. (+6 more in the changelog)",
          "summary_segments": [
            {
              "text": "EIP-3009 merchant headers minted by the SDK now carry an EIP-3009 nonce derived from the Haven payment id — ",
              "code": false
            },
            {
              "text": "keccak256(utf8(\"haven-x402-payment-nonce:\") || utf8(payment_id))",
              "code": true
            },
            {
              "text": ", the shared ",
              "code": false
            },
            {
              "text": "deriveX402PaymentNonce",
              "code": true
            },
            {
              "text": " on the edge surface — instead of the x402 library's random draw. (+6 more in the changelog)",
              "code": false
            }
          ],
          "action_required": false
        },
        {
          "version": "0.9.0-alpha.0",
          "date": "2026-10-09",
          "summary": "The SDK reports the merchant's EIP-3009 settlement hash it already holds. (+11 more in the changelog)",
          "summary_segments": [
            {
              "text": "The SDK reports the merchant's EIP-3009 settlement hash it already holds. (+11 more in the changelog)",
              "code": false
            }
          ],
          "action_required": false
        }
      ]
    },
    "mcp": {
      "name": "@haven_ai/mcp",
      "released_version": "0.10.0-alpha.0",
      "recommended_version": null,
      "min_version": null,
      "upgrade_command": "npx -y @haven_ai/connect@alpha --doctor",
      "notes": [
        {
          "version": "0.10.0-alpha.0",
          "date": "2026-10-14",
          "summary": "haven_get_agent and haven_get_allowances warn a replaced agent. When a Connect --replace retired this agent on its machine, both outputs carry supersededBy with a warning to restart the session and have the user remove the old agent; otherwise supersededBy is null. (+2 more in the changelog)",
          "summary_segments": [
            {
              "text": "haven_get_agent",
              "code": true
            },
            {
              "text": " and ",
              "code": false
            },
            {
              "text": "haven_get_allowances",
              "code": true
            },
            {
              "text": " warn a replaced agent. When a Connect ",
              "code": false
            },
            {
              "text": "--replace",
              "code": true
            },
            {
              "text": " retired this agent on its machine, both outputs carry ",
              "code": false
            },
            {
              "text": "supersededBy",
              "code": true
            },
            {
              "text": " with a warning to restart the session and have the user remove the old agent; otherwise ",
              "code": false
            },
            {
              "text": "supersededBy",
              "code": true
            },
            {
              "text": " is ",
              "code": false
            },
            {
              "text": "null",
              "code": true
            },
            {
              "text": ". (+2 more in the changelog)",
              "code": false
            }
          ],
          "action_required": false
        },
        {
          "version": "0.9.0-alpha.0",
          "date": "2026-10-09",
          "summary": "The local x402 tools report the merchant's EIP-3009 settlement hash. (+3 more in the changelog)",
          "summary_segments": [
            {
              "text": "The local x402 tools report the merchant's EIP-3009 settlement hash. (+3 more in the changelog)",
              "code": false
            }
          ],
          "action_required": false
        }
      ]
    },
    "signer": {
      "name": "@haven_ai/signer",
      "released_version": "0.10.0-alpha.0",
      "recommended_version": null,
      "min_version": "0.6.0-alpha.0",
      "upgrade_command": "npx -y @haven_ai/connect@alpha --doctor",
      "notes": [
        {
          "version": "0.10.0-alpha.0",
          "date": "2026-10-14",
          "summary": "The EIP-3009 merchant header the signer builds now carries an EIP-3009 nonce derived from the Haven payment id inside the verified binding — keccak256(utf8(\"haven-x402-payment-nonce:\") || utf8(payment_id)), the shared deriveX402PaymentNonce from @haven_ai/sdk/edge — instead of the x402 library's random draw.",
          "summary_segments": [
            {
              "text": "The EIP-3009 merchant header the signer builds now carries an EIP-3009 nonce derived from the Haven payment id inside the verified binding — ",
              "code": false
            },
            {
              "text": "keccak256(utf8(\"haven-x402-payment-nonce:\") || utf8(payment_id))",
              "code": true
            },
            {
              "text": ", the shared ",
              "code": false
            },
            {
              "text": "deriveX402PaymentNonce",
              "code": true
            },
            {
              "text": " from ",
              "code": false
            },
            {
              "text": "@haven_ai/sdk/edge",
              "code": true
            },
            {
              "text": " — instead of the x402 library's random draw.",
              "code": false
            }
          ],
          "action_required": false
        },
        {
          "version": "0.9.0-alpha.0",
          "date": "2026-10-09",
          "summary": "The initialize instructions state the signer's identity and the several-pairs rule. (+5 more in the changelog)",
          "summary_segments": [
            {
              "text": "The ",
              "code": false
            },
            {
              "text": "initialize",
              "code": true
            },
            {
              "text": " instructions state the signer's identity and the several-pairs rule. (+5 more in the changelog)",
              "code": false
            }
          ],
          "action_required": false
        }
      ]
    }
  },
  "release_notes_url": "/releases",
  "chains": {
    "default": 8453,
    "deployable": [
      8453,
      84532
    ],
    "supported": [
      {
        "id": 8453,
        "name": "Base",
        "explorer_url": "https://basescan.org",
        "usdc_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "testnet": false
      },
      {
        "id": 84532,
        "name": "Base Sepolia",
        "explorer_url": "https://sepolia.basescan.org",
        "usdc_address": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
        "testnet": true
      }
    ]
  },
  "attribution": {
    "query": "via=agent",
    "purpose": "tells Haven an agent drove this step"
  },
  "docs": {
    "for_agents": "/for-agents.md",
    "llms": "/llms.txt",
    "llms_full": "/llms-full.txt",
    "pay_402": "/402.md",
    "exit": "/exit"
  },
  "environment": "production"
}