{
  "id": "agent-wallet",
  "name": "Agent Wallet",
  "description": "Plugin-friendly wallet backend for OpenClaw agents with safe wallet tools and runtime instructions across Solana, local BTC, and local EVM.",
  "version": "0.1.91",
  "skills": ["skills/wallet-operator"],
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "backend": {
        "type": "string",
        "description": "Wallet backend identifier. Supported values: solana_local, wdk_btc_local, wdk_evm_local."
      },
      "rpcUrl": {
        "type": "string",
        "description": "Optional local fallback Solana RPC URL. Deployment env SOLANA_RPC_URL wins if set."
      },
      "rpcUrls": {
        "type": "array",
        "items": { "type": "string" },
        "description": "Optional local fallback ordered list of Solana RPC URLs. Deployment env SOLANA_RPC_URLS wins if set."
      },
      "rpcProviderMode": {
        "type": "string",
        "description": "RPC mode: auto, user_direct, or shared_proxy. In auto mode, user RPC keys/URLs win; otherwise the shared provider gateway is used when configured."
      },
      "providerGatewayUrl": {
        "type": "string",
        "description": "Optional override for the shared provider gateway base URL. If omitted, the hosted OpenClaw gateway default is used for onboarding-friendly mainnet RPC and Bags launch/fees flows."
      },
      "providerGatewayRpcProvider": {
        "type": "string",
        "description": "Optional shared RPC upstream selection for the provider gateway: auto, shared, helius, or alchemy."
      },
      "swapProvider": {
        "type": "string",
        "description": "Optional Solana swap routing preference: auto or jupiter. Bags launch and fee flows still use the provider gateway separately, but token swaps stay Jupiter-first."
      },
      "network": {
        "type": "string",
        "description": "Backend network selector. Solana uses mainnet. BTC uses bitcoin. EVM uses ethereum/base."
      },
      "wdkBtcServiceUrl": {
        "type": "string",
        "description": "Base URL for the localhost-only wdk-btc-wallet HTTP service when backend=wdk_btc_local."
      },
      "wdkBtcWalletId": {
        "type": "string",
        "description": "Optional direct walletId override from the local wdk-btc-wallet vault. If omitted, agent-wallet will look for a user-bound BTC wallet under ~/.openclaw/users/<user>/wallets/."
      },
      "wdkBtcAccountIndex": {
        "type": "integer",
        "description": "Optional BTC account index to expose to the agent. Defaults to 0."
      },
      "wdkEvmServiceUrl": {
        "type": "string",
        "description": "Base URL for the localhost-only wdk-evm-wallet HTTP service when backend=wdk_evm_local."
      },
      "wdkEvmWalletId": {
        "type": "string",
        "description": "Optional direct walletId override from the local wdk-evm-wallet vault. If omitted, agent-wallet will look for a user-bound EVM wallet under ~/.openclaw/users/<user>/wallets/."
      },
      "wdkEvmAccountIndex": {
        "type": "integer",
        "description": "Optional EVM account index to expose to the agent. Defaults to 0."
      },
      "publicKey": {
        "type": "string",
        "description": "Read-only wallet public key."
      },
      "privateKey": {
        "type": "string",
        "description": "Deprecated insecure config path. Inject signing key material via environment variables instead of plugin config."
      },
      "keypairPath": {
        "type": "string",
        "description": "Path to Solana CLI JSON keypair file."
      },
      "autoCreateWallet": {
        "type": "boolean",
        "description": "Create a local wallet file automatically on first start if none exists."
      },
      "signOnly": {
        "type": "boolean",
        "description": "If true, the wallet may sign but should not broadcast transactions automatically."
      },
      "masterKey": {
        "type": "string",
        "description": "Deprecated insecure config path. Inject the wallet master secret via environment or a secret manager instead of plugin config."
      },
      "approvalSecret": {
        "type": "string",
        "description": "Deprecated insecure config path. Inject the approval secret via environment or a secret manager instead of plugin config."
      },
      "encryptUserWallets": {
        "type": "boolean",
        "description": "If true, newly created per-user wallet files are encrypted at rest."
      },
      "refuseMainnetWalletRecreation": {
        "type": "boolean",
        "description": "If true, refuse to silently create a new mainnet wallet when a pinned address already exists."
      },
      "jupiterBaseUrl": {
        "type": "string",
        "description": "Optional Jupiter Swap API base URL for quote and swap building."
      },
      "jupiterUltraBaseUrl": {
        "type": "string",
        "description": "Optional Jupiter Ultra API base URL for managed swap execution."
      },
      "jupiterPriceBaseUrl": {
        "type": "string",
        "description": "Optional Jupiter Price API base URL for token price lookup."
      },
      "jupiterApiKey": {
        "type": "string",
        "description": "Optional Jupiter API key if your deployment uses a keyed endpoint."
      },
      "kaminoBaseUrl": {
        "type": "string",
        "description": "Optional Kamino REST API base URL for lending and Earn reads plus transaction building."
      },
      "kaminoProgramId": {
        "type": "string",
        "description": "Optional Kamino lending program id for market discovery."
      }
    }
  }
}
