{
  "schema_version": "1.1.0",
  "version": "1.2.0",
  "current_sdk_version": "5.1.12",
  "generated": "2026-04-20T00:00:00.000Z",
  "description": "Intent-level agent capabilities — what an agent can do with Push Chain. For the complete SDK method surface with signatures see sdk-capabilities.json. Utilities (parseUnits, formatUnits, encodeTxData, chain/token discovery, constants) and raw ethers.js operations are API primitives consumed inside these capabilities rather than standalone agent intents.",
  "prerequisite_glossary": {
    "sdk_imported": "@pushchain/core is imported — check with `typeof PushChain !== 'undefined'`",
    "universal_signer_created": "A UniversalSigner was created via PushChain.utils.signer.toUniversal() or toUniversalFromKeypair()",
    "network_selected": "A valid PUSH_NETWORK constant has been chosen (e.g. PushChain.CONSTANTS.PUSH_NETWORK.TESTNET_DONUT)",
    "push_chain_client_initialized": "PushChainClient instance is non-null — created via PushChain.initialize() (backend) or available from usePushChainClient() (React)",
    "signer_library_available": "An EVM signer library (ethers.js or viem) or Solana web3.js is installed and a wallet/keypair is available",
    "keypair_available": "A Solana Keypair (or equivalent non-EVM keypair) is in scope",
    "chain_and_library_specified": "Both CHAIN and LIBRARY constants are known — see agents/constants.json or PushChain.CONSTANTS",
    "rpc_url_available": "The Push Chain EVM RPC endpoint is known: https://evm.donut.rpc.push.org/",
    "evm_client_initialized": "An ethers.JsonRpcProvider or viem PublicClient connected to Push Chain is available",
    "react_app": "The runtime is a React application (ReactDOM >= 18)",
    "ui_kit_installed": "@pushchain/ui-kit is installed — check package.json",
    "wallet_connected": "PushUniversalWalletProvider has an active session — connectionStatus === CONNECTION.STATUS.CONNECTED",
    "inside_push_wallet_provider": "The component is rendered inside a PushUniversalWalletProvider tree",
    "smart_contract_deployed": "A Solidity contract is deployed to Push Chain Donut Testnet (chainId 42101)",
    "cea_system_configured": "The contract declares UGPC (0x...C1) and UNIVERSAL_EXECUTOR_MODULE (0x14191Ea...) and implements IUniversalGatewayPC",
    "custom_signing_logic": "signAndSendTransaction, signMessage, and signTypedData functions have been implemented",
    "uea_requires_upgrade": "pushChainClient.getAccountStatus() returned status.uea.requiresUpgrade === true"
  },
  "capabilities": [
    {
      "id": "initialize_client",
      "name": "Initialize Push Chain Client",
      "description": "Creates a PushChainClient instance with universal signer for cross-chain transaction execution.",
      "actor": ["developer", "backend", "browser_agent"],
      "operation": "write",
      "prerequisites": ["universal_signer_created", "network_selected"],
      "inputs": [
        {
          "name": "signer",
          "type": "UniversalSigner | UniversalAccount",
          "required": true,
          "description": "Universal signer for full capabilities or account for read-only mode"
        },
        {
          "name": "options.network",
          "type": "PushChain.CONSTANTS.PUSH_NETWORK",
          "required": true,
          "description": "Push Chain network to connect to"
        },
        {
          "name": "options.rpcUrls",
          "type": "Partial<Record<CHAIN, string[]>>",
          "required": false,
          "description": "Custom RPC URLs by chain ID"
        },
        {
          "name": "options.blockExplorers",
          "type": "Partial<Record<CHAIN, string[]>>",
          "required": false,
          "description": "Custom block explorer URLs by chain ID"
        },
        {
          "name": "options.printTraces",
          "type": "boolean",
          "required": false,
          "description": "Enable debug trace logging"
        },
        {
          "name": "options.progressHook",
          "type": "(progress: ProgressEvent) => void",
          "required": false,
          "description": "Callback for progress events"
        }
      ],
      "outputs": [
        {
          "name": "pushChainClient",
          "type": "PushChainClient",
          "description": "Initialized client with universal, orchestrator, and explorer namespaces"
        }
      ],
      "sdk_method": "PushChain.initialize(signer, {options})",
      "invocation_type": "sdk",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/initialize-push-chain-client/",
      "stability": "stable"
    },
    {
      "id": "create_universal_signer",
      "name": "Create Universal Signer",
      "description": "Wraps any EVM or non-EVM signer into a UniversalSigner for cross-chain transaction signing.",
      "actor": ["developer", "backend", "browser_agent"],
      "operation": "write",
      "prerequisites": ["signer_library_available"],
      "inputs": [
        {
          "name": "signer",
          "type": "viem.WalletClient | ethers.Wallet | UniversalSignerSkeleton",
          "required": true,
          "description": "Source signer to convert"
        }
      ],
      "outputs": [
        {
          "name": "universalSigner",
          "type": "UniversalSigner",
          "description": "Chain-agnostic signer with signMessage, signAndSendTransaction, signTypedData"
        }
      ],
      "sdk_method": "PushChain.utils.signer.toUniversal(signer)",
      "invocation_type": "sdk",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/create-universal-signer/",
      "stability": "stable"
    },
    {
      "id": "create_universal_signer_from_keypair",
      "name": "Create Universal Signer from Keypair",
      "description": "Converts a Solana keypair or similar non-EVM keypair to a UniversalSigner.",
      "actor": ["developer", "backend"],
      "operation": "write",
      "prerequisites": ["keypair_available", "chain_and_library_specified"],
      "inputs": [
        {
          "name": "keypair",
          "type": "Keypair",
          "required": true,
          "description": "Solana keypair or similar"
        },
        {
          "name": "options.chain",
          "type": "PushChain.CONSTANTS.CHAIN",
          "required": true,
          "description": "Target chain constant"
        },
        {
          "name": "options.library",
          "type": "PushChain.CONSTANTS.LIBRARY",
          "required": true,
          "description": "Library constant (e.g., SOLANA_WEB3JS)"
        }
      ],
      "outputs": [
        {
          "name": "universalSigner",
          "type": "UniversalSigner",
          "description": "Chain-agnostic signer from keypair"
        }
      ],
      "sdk_method": "PushChain.utils.signer.toUniversalFromKeypair(keypair, {chain, library})",
      "invocation_type": "sdk",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/create-universal-signer/",
      "stability": "stable"
    },
    {
      "id": "send_universal_transaction",
      "name": "Send Universal Transaction",
      "description": "Executes transfers, contract calls, or batched transactions on Push Chain or external chains via a unified interface.",
      "actor": ["developer", "end_user", "agent", "backend", "browser_agent"],
      "operation": "write",
      "prerequisites": ["push_chain_client_initialized"],
      "inputs": [
        {
          "name": "tx.to",
          "type": "string | { address: string; chain: CHAIN }",
          "required": true,
          "description": "Target address or external chain target"
        },
        {
          "name": "tx.from",
          "type": "{ chain: CHAIN }",
          "required": false,
          "description": "Use CEA as origin from specified chain"
        },
        {
          "name": "tx.value",
          "type": "BigInt",
          "required": false,
          "description": "Native value in smallest unit (uPC for Push Chain)"
        },
        {
          "name": "tx.data",
          "type": "string | Array<{to, data, value}>",
          "required": false,
          "description": "ABI-encoded calldata or multicall array"
        },
        {
          "name": "tx.funds",
          "type": "{ amount: BigInt; token?: MOVEABLE.TOKEN }",
          "required": false,
          "description": "Assets to move atomically with execution"
        },
        {
          "name": "tx.progressHook",
          "type": "(progress: ProgressHookType) => void",
          "required": false,
          "description": "Callback for transaction lifecycle events"
        },
        {
          "name": "tx.gasLimit",
          "type": "BigInt",
          "required": false,
          "description": "Override estimated gas limit on the target chain"
        },
        {
          "name": "tx.maxFeePerGas",
          "type": "BigInt",
          "required": false,
          "description": "EIP-1559 max fee per gas override (EVM target chains only)"
        },
        {
          "name": "tx.maxPriorityFeePerGas",
          "type": "BigInt",
          "required": false,
          "description": "EIP-1559 max priority fee per gas override (EVM target chains only)"
        },
        {
          "name": "tx.payGasWith",
          "type": "{ token?: PAYABLE.TOKEN; slippageBps?: number; minAmountOut?: BigInt | string }",
          "required": false,
          "description": "Pay universal gas fees with a supported ERC-20 token instead of native currency"
        },
        {
          "name": "tx.deadline",
          "type": "BigInt",
          "required": false,
          "description": "Unix timestamp (seconds) after which the transaction expires — use for MEV protection and retry logic"
        }
      ],
      "outputs": [
        {
          "name": "txResponse",
          "type": "TransactionResponse",
          "description": "Transaction hash and execution receipt"
        }
      ],
      "sdk_method": "pushChainClient.universal.sendTransaction({tx})",
      "invocation_type": "sdk",
      "auth_required": true,
      "safe_for_autonomous_execution": false,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/send-universal-transaction/",
      "stability": "stable"
    },
    {
      "id": "send_multichain_transaction",
      "name": "Send Multichain Transaction",
      "description": "Executes transactions targeting external chains via Chain Executor Accounts (CEAs).",
      "actor": ["developer", "end_user", "agent", "backend"],
      "operation": "write",
      "prerequisites": ["push_chain_client_initialized"],
      "inputs": [
        {
          "name": "tx.to",
          "type": "{ address: string; chain: CHAIN }",
          "required": true,
          "description": "External chain target with address and chain constant"
        },
        {
          "name": "tx.data",
          "type": "string",
          "required": false,
          "description": "ABI-encoded calldata"
        },
        {
          "name": "tx.value",
          "type": "BigInt",
          "required": false,
          "description": "Native value for external chain"
        },
        {
          "name": "tx.progressHook",
          "type": "(progress: ProgressHookType) => void",
          "required": false,
          "description": "Progress callback"
        },
        {
          "name": "tx.from",
          "type": "{ chain: CHAIN }",
          "required": false,
          "description": "Use CEA as origin from specified external chain"
        },
        {
          "name": "tx.funds",
          "type": "{ amount: BigInt; token?: MOVEABLE.TOKEN }",
          "required": false,
          "description": "Assets to bridge atomically with the external chain execution"
        },
        {
          "name": "tx.gasLimit",
          "type": "BigInt",
          "required": false,
          "description": "Override estimated gas limit on the external target chain"
        },
        {
          "name": "tx.maxFeePerGas",
          "type": "BigInt",
          "required": false,
          "description": "EIP-1559 max fee per gas override"
        },
        {
          "name": "tx.maxPriorityFeePerGas",
          "type": "BigInt",
          "required": false,
          "description": "EIP-1559 max priority fee per gas override"
        },
        {
          "name": "tx.payGasWith",
          "type": "{ token?: PAYABLE.TOKEN; slippageBps?: number; minAmountOut?: BigInt | string }",
          "required": false,
          "description": "Pay universal gas fees with a supported ERC-20 instead of native currency"
        },
        {
          "name": "tx.deadline",
          "type": "BigInt",
          "required": false,
          "description": "Unix timestamp (seconds) after which the transaction expires"
        }
      ],
      "outputs": [
        {
          "name": "txResponse",
          "type": "TransactionResponse",
          "description": "Transaction response with external chain execution details"
        }
      ],
      "sdk_method": "pushChainClient.universal.sendTransaction({tx})",
      "invocation_type": "sdk",
      "auth_required": true,
      "safe_for_autonomous_execution": false,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/send-multichain-transactions/",
      "stability": "stable"
    },
    {
      "id": "contract_initiated_multichain",
      "name": "Contract-Initiated Multichain Execution",
      "description": "Smart contracts on Push Chain initiate execution on external chains via CEA system using IUniversalGatewayPC.",
      "actor": ["developer"],
      "operation": "write",
      "prerequisites": ["smart_contract_deployed", "cea_system_configured"],
      "inputs": [
        {
          "name": "req.recipient",
          "type": "bytes",
          "required": true,
          "description": "CEA or target address on the external chain (bytes-encoded)"
        },
        {
          "name": "req.payload",
          "type": "bytes",
          "required": true,
          "description": "ABI-encoded calldata to execute on the external chain"
        },
        {
          "name": "req.token",
          "type": "address",
          "required": false,
          "description": "PRC20 token to bridge (address(0) for none)"
        },
        {
          "name": "req.amount",
          "type": "uint256",
          "required": false,
          "description": "Amount of PRC20 to bridge"
        }
      ],
      "outputs": [
        {
          "name": "execution",
          "type": "void",
          "description": "Emits cross-chain event; response arrives via executeUniversalTx() inbound callback"
        }
      ],
      "sdk_method": "Solidity: IUniversalGatewayPC(0x00000000000000000000000000000000000000C1).sendUniversalTxOutbound(req) / executeUniversalTx(sourceChain, cea, payload, amount, prc20, txId)",
      "invocation_type": "solidity",
      "auth_required": true,
      "safe_for_autonomous_execution": false,
      "mcp_candidate": false,
      "docs_url": "https://push.org/docs/chain/build/contract-initiated-multichain-execution/",
      "stability": "stable"
    },
    {
      "id": "track_transaction",
      "name": "Track Universal Transaction",
      "description": "Resumes tracking any universal transaction by hash and origin chain. Works independently of sendTransaction — use for session restore, backend polling, or monitoring any stored tx hash.",
      "actor": ["developer", "end_user", "agent", "backend", "browser_agent"],
      "operation": "tracking",
      "prerequisites": ["push_chain_client_initialized"],
      "inputs": [
        {
          "name": "txHash",
          "type": "string",
          "required": true,
          "description": "Transaction hash or signature on the origin chain"
        },
        {
          "name": "options.chain",
          "type": "CHAIN",
          "required": false,
          "description": "Chain where tx was originally submitted. Defaults to CHAIN.PUSH_TESTNET_DONUT"
        },
        {
          "name": "options.progressHook",
          "type": "(event: ProgressEvent) => void",
          "required": false,
          "description": "Callback invoked at each tracking step"
        },
        {
          "name": "options.waitForCompletion",
          "type": "boolean",
          "required": false,
          "description": "true = wait for confirmation (default); false = return after first status check"
        },
        {
          "name": "options.advanced.pollingIntervalMs",
          "type": "number",
          "required": false,
          "description": "Poll interval in ms (default 2000, min 500)"
        },
        {
          "name": "options.advanced.timeout",
          "type": "number",
          "required": false,
          "description": "Max wait ms before timeout error (default 60000)"
        },
        {
          "name": "options.advanced.rpcUrls",
          "type": "Partial<Record<CHAIN, string[]>>",
          "required": false,
          "description": "Custom RPC URLs for status queries"
        }
      ],
      "outputs": [
        {
          "name": "response",
          "type": "UniversalTxResponse",
          "description": "Same shape as sendTransaction response — latest resolved state including Push Chain and external-chain details"
        }
      ],
      "sdk_method": "pushChainClient.universal.trackTransaction(txHash, options)",
      "invocation_type": "sdk",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/track-universal-transaction/",
      "stability": "stable"
    },
    {
      "id": "sign_universal_message",
      "name": "Sign Universal Message",
      "description": "Signs arbitrary messages using the universal signer for verification purposes.",
      "actor": ["developer", "end_user", "agent", "browser_agent"],
      "operation": "write",
      "prerequisites": ["push_chain_client_initialized"],
      "inputs": [
        {
          "name": "message",
          "type": "Uint8Array",
          "required": true,
          "description": "Message bytes to sign"
        }
      ],
      "outputs": [
        {
          "name": "signature",
          "type": "Uint8Array",
          "description": "Cryptographic signature"
        }
      ],
      "sdk_method": "pushChainClient.universal.signMessage(message)",
      "invocation_type": "sdk",
      "auth_required": true,
      "safe_for_autonomous_execution": false,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/sign-universal-message/",
      "stability": "stable"
    },
    {
      "id": "read_blockchain_state",
      "name": "Read Blockchain State",
      "description": "Reads on-chain state from Push Chain using Ethers.js JsonRpcProvider or Viem PublicClient connected to the Push Chain EVM RPC endpoint.",
      "actor": ["developer", "agent", "backend", "browser_agent"],
      "operation": "read",
      "prerequisites": ["rpc_url_available"],
      "inputs": [
        {
          "name": "rpcUrl",
          "type": "string",
          "required": true,
          "description": "Push Chain RPC URL (e.g., https://evm.donut.rpc.push.org/)"
        },
        {
          "name": "query",
          "type": "string | { hash: string } | { address: string }",
          "required": true,
          "description": "Transaction hash, address, or block tag to query"
        },
        {
          "name": "clientLibrary",
          "type": "'ethers' | 'viem'",
          "required": false,
          "description": "EVM client library to use (default: ethers)"
        }
      ],
      "outputs": [
        {
          "name": "result",
          "type": "TransactionResponse | Block | bigint | any",
          "description": "On-chain data: transaction, block, balance, or contract call result"
        }
      ],
      "sdk_method": "new ethers.JsonRpcProvider(rpcUrl) | createPublicClient({ transport: http(rpcUrl) })",
      "invocation_type": "raw_ethers",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/reading-blockchain-state/",
      "stability": "stable"
    },
    {
      "id": "connect_wallet_ui",
      "name": "Connect Wallet via UI Kit",
      "description": "Renders wallet connection modal supporting EVM and non-EVM wallets with email fallback.",
      "actor": ["developer", "end_user", "browser_agent"],
      "operation": "write",
      "prerequisites": ["react_app", "ui_kit_installed"],
      "inputs": [
        {
          "name": "walletConfig.network",
          "type": "PushUI.CONSTANTS.PUSH_NETWORK",
          "required": true,
          "description": "Target network"
        }
      ],
      "outputs": [
        {
          "name": "connectionStatus",
          "type": "CONNECTION.STATUS",
          "description": "Current connection state"
        },
        {
          "name": "pushChainClient",
          "type": "PushChainClient",
          "description": "Initialized client after connection"
        }
      ],
      "sdk_method": "PushUniversalWalletProvider + PushUniversalAccountButton",
      "invocation_type": "react_component",
      "auth_required": false,
      "safe_for_autonomous_execution": false,
      "mcp_candidate": false,
      "docs_url": "https://push.org/docs/chain/ui-kit/integrate-push-universal-wallet/",
      "stability": "stable"
    },
    {
      "id": "use_wallet_provider",
      "name": "Use Push Universal Wallet Provider",
      "description": "React context provider that abstracts wallet connections and provides pushChainClient.",
      "actor": ["developer", "browser_agent"],
      "operation": "read",
      "prerequisites": ["react_app", "ui_kit_installed"],
      "inputs": [
        {
          "name": "walletConfig",
          "type": "WalletConfig",
          "required": true,
          "description": "Network and optional config"
        }
      ],
      "outputs": [
        {
          "name": "context",
          "type": "PushWalletContext",
          "description": "Wallet state and client access"
        }
      ],
      "sdk_method": "PushUniversalWalletProvider",
      "invocation_type": "react_component",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": false,
      "docs_url": "https://push.org/docs/chain/ui-kit/customizations/push-universal-wallet-provider/",
      "stability": "stable"
    },
    {
      "id": "initialize_evm_client",
      "name": "Initialize EVM Client",
      "description": "Creates ethers.js or viem client connected to Push Chain RPC for direct EVM operations.",
      "actor": ["developer", "backend", "browser_agent"],
      "operation": "read",
      "prerequisites": ["rpc_url_available"],
      "inputs": [
        {
          "name": "rpcUrl",
          "type": "string",
          "required": true,
          "description": "Push Chain RPC URL (e.g., https://evm.donut.rpc.push.org/)"
        }
      ],
      "outputs": [
        {
          "name": "provider",
          "type": "ethers.JsonRpcProvider | viem.PublicClient",
          "description": "EVM-compatible provider for read-only on-chain queries"
        }
      ],
      "sdk_method": "new ethers.JsonRpcProvider(rpcUrl) | createPublicClient({ chain: pushTestnetDonut, transport: http(rpcUrl) })",
      "invocation_type": "raw_ethers",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/initialize-evm-client/",
      "stability": "stable"
    },
    {
      "id": "get_constants",
      "name": "Get Constants Reference",
      "description": "Access all PushChain.CONSTANTS values for networks, chains, libraries, and tokens.",
      "actor": ["developer", "agent", "backend", "browser_agent"],
      "operation": "read",
      "prerequisites": ["sdk_imported"],
      "inputs": [],
      "outputs": [
        {
          "name": "constants",
          "type": "PushChainConstants",
          "description": "All constant values"
        }
      ],
      "sdk_method": "PushChain.CONSTANTS",
      "invocation_type": "sdk",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/constants/",
      "stability": "stable"
    },
    {
      "id": "use_utility_functions",
      "name": "Use Utility Functions",
      "description": "Access helper utilities for parsing units, encoding data, and account operations.",
      "actor": ["developer", "backend", "browser_agent"],
      "operation": "read",
      "prerequisites": ["sdk_imported"],
      "inputs": [],
      "outputs": [
        {
          "name": "utils",
          "type": "PushChainUtils",
          "description": "Utility namespace with signer, account, helpers"
        }
      ],
      "sdk_method": "PushChain.utils",
      "invocation_type": "sdk",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/utility-functions/",
      "stability": "stable"
    },
    {
      "id": "use_contract_helpers",
      "name": "Use Contract Helpers",
      "description": "Access deployed helper contracts for origin chain detection and user categorization.",
      "actor": ["developer"],
      "operation": "read",
      "prerequisites": ["evm_client_initialized"],
      "inputs": [
        {
          "name": "address",
          "type": "address",
          "required": true,
          "description": "Push Chain address to query (UEA or native EOA)"
        }
      ],
      "outputs": [
        {
          "name": "account",
          "type": "UniversalAccountId",
          "description": "{ chainNamespace, chainId, owner } of the origin wallet"
        },
        {
          "name": "isUEA",
          "type": "boolean",
          "description": "True if address is a cross-chain Universal Executor Account"
        }
      ],
      "sdk_method": "Solidity: IUEAFactory(0x...eA).getOriginForUEA(addr) | getUEAForOrigin(UniversalAccountId) / Off-chain: ethers.Contract(FACTORY, ABI, provider).getOriginForUEA(address)",
      "invocation_type": "raw_ethers",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": false,
      "docs_url": "https://push.org/docs/chain/build/contract-helpers/",
      "stability": "stable"
    },
    {
      "id": "get_account_status",
      "name": "Get Account Status",
      "description": "Returns UEA deployment status, version info, and upgrade requirements for an account.",
      "actor": ["developer", "agent", "backend", "browser_agent"],
      "operation": "read",
      "prerequisites": ["push_chain_client_initialized"],
      "inputs": [
        {
          "name": "options.forceRefresh",
          "type": "boolean",
          "required": false,
          "description": "Re-fetch status from chain"
        }
      ],
      "outputs": [
        {
          "name": "status.mode",
          "type": "string",
          "description": "read-only or signer mode"
        },
        {
          "name": "status.uea.loaded",
          "type": "boolean",
          "description": "Whether status has been fetched"
        },
        {
          "name": "status.uea.deployed",
          "type": "boolean",
          "description": "Whether UEA is deployed"
        },
        {
          "name": "status.uea.version",
          "type": "string",
          "description": "Current UEA version"
        },
        {
          "name": "status.uea.requiresUpgrade",
          "type": "boolean",
          "description": "Whether upgrade is needed"
        }
      ],
      "sdk_method": "pushChainClient.getAccountStatus({options})",
      "invocation_type": "sdk",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/initialize-push-chain-client/#get-account-status",
      "stability": "stable"
    },
    {
      "id": "upgrade_account",
      "name": "Upgrade Universal Account",
      "description": "Upgrades UEA to latest required implementation version via gasless signature operation.",
      "actor": ["developer", "end_user", "agent"],
      "operation": "write",
      "prerequisites": [
        "push_chain_client_initialized",
        "uea_requires_upgrade"
      ],
      "inputs": [
        {
          "name": "options.progressHook",
          "type": "(event: ProgressEvent) => void",
          "required": false,
          "description": "Callback for upgrade progress"
        }
      ],
      "outputs": [
        {
          "name": "result",
          "type": "void",
          "description": "Upgrade completes or throws on failure"
        }
      ],
      "sdk_method": "pushChainClient.upgradeAccount({options})",
      "invocation_type": "sdk",
      "auth_required": true,
      "safe_for_autonomous_execution": false,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/advanced/upgrade-universal-account/",
      "stability": "stable"
    },
    {
      "id": "reinitialize_client",
      "name": "Reinitialize Client",
      "description": "Reinitializes PushChainClient with different signer/account or updated configuration.",
      "actor": ["developer", "backend", "browser_agent"],
      "operation": "write",
      "prerequisites": ["push_chain_client_initialized"],
      "inputs": [
        {
          "name": "signerOrAccount",
          "type": "UniversalSigner | UniversalAccount",
          "required": true,
          "description": "New signer or account"
        },
        {
          "name": "options",
          "type": "InitializeOptions",
          "required": false,
          "description": "Updated configuration options"
        }
      ],
      "outputs": [
        {
          "name": "pushChainClient",
          "type": "PushChainClient",
          "description": "New client instance"
        }
      ],
      "sdk_method": "pushChainClient.reinitialize(signerOrAccount, {options})",
      "invocation_type": "sdk",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/initialize-push-chain-client/#reinitialize-client",
      "stability": "stable"
    },
    {
      "id": "construct_custom_signer",
      "name": "Construct Custom Universal Signer",
      "description": "Manually constructs a UniversalSigner with custom signing function implementations.",
      "actor": ["developer"],
      "operation": "write",
      "prerequisites": ["custom_signing_logic"],
      "inputs": [
        {
          "name": "account",
          "type": "UniversalAccount",
          "required": true,
          "description": "Account with address and chain"
        },
        {
          "name": "options.signAndSendTransaction",
          "type": "(unsignedTx: Uint8Array) => Promise<Uint8Array>",
          "required": true,
          "description": "Custom tx signing"
        },
        {
          "name": "options.signMessage",
          "type": "(data: Uint8Array) => Promise<Uint8Array>",
          "required": true,
          "description": "Custom message signing"
        },
        {
          "name": "options.signTypedData",
          "type": "(params) => Promise<Uint8Array>",
          "required": true,
          "description": "Custom typed data signing"
        }
      ],
      "outputs": [
        {
          "name": "skeleton",
          "type": "UniversalSignerSkeleton",
          "description": "Skeleton to pass to toUniversal()"
        }
      ],
      "sdk_method": "PushChain.utils.signer.construct(account, {options})",
      "invocation_type": "sdk",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": false,
      "docs_url": "https://push.org/docs/chain/build/advanced/custom-universal-signer/",
      "stability": "stable"
    },
    {
      "id": "use_push_wallet_context",
      "name": "Use Push Wallet Context Hook",
      "description": "React hook to access wallet connection status and actions from PushUniversalWalletProvider.",
      "actor": ["developer", "browser_agent"],
      "operation": "read",
      "prerequisites": ["inside_push_wallet_provider"],
      "inputs": [],
      "outputs": [
        {
          "name": "connectionStatus",
          "type": "CONNECTION.STATUS",
          "description": "Current connection state"
        }
      ],
      "sdk_method": "usePushWalletContext()",
      "invocation_type": "react_hook",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": false,
      "docs_url": "https://push.org/docs/chain/ui-kit/customizations/use-push-wallet-context/",
      "stability": "stable"
    },
    {
      "id": "use_push_chain_client_hook",
      "name": "Use Push Chain Client Hook",
      "description": "React hook to access the initialized pushChainClient from wallet provider context.",
      "actor": ["developer", "browser_agent"],
      "operation": "read",
      "prerequisites": ["inside_push_wallet_provider", "wallet_connected"],
      "inputs": [],
      "outputs": [
        {
          "name": "pushChainClient",
          "type": "PushChainClient",
          "description": "Initialized client instance"
        }
      ],
      "sdk_method": "usePushChainClient()",
      "invocation_type": "react_hook",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": false,
      "docs_url": "https://push.org/docs/chain/ui-kit/customizations/use-push-chain-client/",
      "stability": "stable"
    },
    {
      "id": "execute_transaction_cascade",
      "name": "Execute Transaction Cascade (Multi-Hop)",
      "description": "Prepares multiple universal transactions then executes them atomically as a single-signature multi-hop cascade. Use prepareTransaction() for each hop, then executeTransactions([...]) for submission. Required for any multi-chain sequence that must be signed once — this is the canonical cascade pattern in both backend and frontend skill files.",
      "actor": ["developer", "agent", "backend", "browser_agent"],
      "operation": "write",
      "prerequisites": ["push_chain_client_initialized"],
      "inputs": [
        {
          "name": "txs[].to",
          "type": "string | { address: string; chain: CHAIN }",
          "required": true,
          "description": "Target address or external chain target for each hop"
        },
        {
          "name": "txs[].data",
          "type": "string | Array<{to, data, value}>",
          "required": false,
          "description": "ABI-encoded calldata or multicall array for each hop"
        },
        {
          "name": "txs[].funds",
          "type": "{ amount: BigInt; token?: MOVEABLE.TOKEN }",
          "required": false,
          "description": "Assets to move atomically with each hop"
        },
        {
          "name": "txs[].progressHook",
          "type": "(progress: ProgressHookType) => void",
          "required": false,
          "description": "Per-hop progress callback"
        },
        {
          "name": "txs[].from",
          "type": "{ chain: CHAIN }",
          "required": false,
          "description": "Use CEA as origin from specified external chain for this hop"
        },
        {
          "name": "txs[].value",
          "type": "BigInt",
          "required": false,
          "description": "Native value in smallest unit for this hop"
        },
        {
          "name": "txs[].gasLimit",
          "type": "BigInt",
          "required": false,
          "description": "Override estimated gas limit for this hop"
        },
        {
          "name": "txs[].maxFeePerGas",
          "type": "BigInt",
          "required": false,
          "description": "EIP-1559 max fee per gas override for this hop"
        },
        {
          "name": "txs[].maxPriorityFeePerGas",
          "type": "BigInt",
          "required": false,
          "description": "EIP-1559 max priority fee per gas override for this hop"
        },
        {
          "name": "txs[].payGasWith",
          "type": "{ token?: PAYABLE.TOKEN; slippageBps?: number; minAmountOut?: BigInt | string }",
          "required": false,
          "description": "Pay gas fees with ERC-20 instead of native currency for this hop"
        },
        {
          "name": "txs[].deadline",
          "type": "BigInt",
          "required": false,
          "description": "Unix timestamp (seconds) after which this hop expires"
        }
      ],
      "outputs": [
        {
          "name": "response",
          "type": "CascadedTxResponse",
          "description": "{ initialTxHash, hops[], hopCount, wait(opts?), waitForAll(opts?) }"
        }
      ],
      "sdk_method": "pushChainClient.universal.prepareTransaction(tx) → PreparedUniversalTx; pushChainClient.universal.executeTransactions([...txs]) → CascadedTxResponse",
      "invocation_type": "sdk",
      "auth_required": true,
      "safe_for_autonomous_execution": false,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/send-universal-transaction/",
      "stability": "stable"
    },
    {
      "id": "sign_universal_typed_data",
      "name": "Sign Universal Typed Data (EIP-712)",
      "description": "Signs EIP-712 typed structured data using the universal signer. Required for Permit2, Uniswap v3/v4, OpenSea Seaport, and any protocol using off-chain typed-data authorizations (gasless approvals, order matching, etc.).",
      "actor": ["developer", "end_user", "agent", "browser_agent"],
      "operation": "write",
      "prerequisites": ["push_chain_client_initialized"],
      "inputs": [
        {
          "name": "typedDataArgs",
          "type": "TypedDataArgs",
          "required": true,
          "description": "EIP-712 typed data: domain, types (Record<string, TypedDataField[]>), and value (Record<string, unknown>)"
        }
      ],
      "outputs": [
        {
          "name": "signature",
          "type": "Uint8Array",
          "description": "EIP-712 signature bytes"
        }
      ],
      "sdk_method": "pushChainClient.universal.signTypedData(typedDataArgs)",
      "invocation_type": "sdk",
      "auth_required": true,
      "safe_for_autonomous_execution": false,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/sign-universal-message/",
      "stability": "stable"
    },
    {
      "id": "derive_executor_account",
      "name": "Derive Executor Account (Off-Chain)",
      "description": "Computes the deterministic UEA (Universal Executor Account on Push Chain) or CEA (Chain Executor Account on an external chain) address for any origin account without an on-chain call. Use for gas-estimation pre-flight, balance checks before transacting, whitelisting the CEA on target contracts, and any identity-resolution flow that needs the address before submitting a tx.",
      "actor": ["developer", "agent", "backend", "browser_agent"],
      "operation": "read",
      "prerequisites": ["sdk_imported"],
      "inputs": [
        {
          "name": "uoa",
          "type": "UniversalAccount",
          "required": true,
          "description": "Origin account — create with PushChain.utils.account.toUniversal(address, { chain })"
        },
        {
          "name": "options.chain",
          "type": "CHAIN",
          "required": true,
          "description": "Target chain to derive executor on (CHAIN.PUSH_TESTNET_DONUT for UEA; any external chain for CEA)"
        },
        {
          "name": "options.skipNetworkCheck",
          "type": "boolean",
          "required": false,
          "description": "Set true for chains not yet live — skips network validation, returns deterministic address regardless"
        }
      ],
      "outputs": [
        {
          "name": "result.address",
          "type": "string",
          "description": "Deterministic executor account address on the target chain"
        }
      ],
      "sdk_method": "PushChain.utils.account.deriveExecutorAccount(uoa, { chain, skipNetworkCheck? })",
      "invocation_type": "sdk",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/utility-functions/",
      "stability": "stable"
    },
    {
      "id": "resolve_controller_account",
      "name": "Resolve Controller Account (Off-Chain)",
      "description": "Recursively resolves the controlling origin wallet (UOA) behind any executor address — UEA → UOA, or CEA → Push account → UOA. Complement of derive_executor_account: where derive goes forward (UOA→executor), resolve goes backward (executor→UOA). Use for identity verification, attribution, and building origin-aware UIs that show which chain/wallet is ultimately in control.",
      "actor": ["developer", "agent", "backend", "browser_agent"],
      "operation": "read",
      "prerequisites": ["sdk_imported"],
      "inputs": [
        {
          "name": "account",
          "type": "string",
          "required": true,
          "description": "UEA, CEA, or Push Chain address to resolve backwards to its controller"
        },
        {
          "name": "options.chain",
          "type": "CHAIN",
          "required": false,
          "description": "Required when account is a CEA — specifies which external chain the CEA is deployed on"
        },
        {
          "name": "options.skipNetworkCheck",
          "type": "boolean",
          "required": false,
          "description": "Deterministic resolution only — skips live network check, faster but no deployment status"
        }
      ],
      "outputs": [
        {
          "name": "result.accounts",
          "type": "Array<{ chain, chainName, address, type, exists, role? }>",
          "description": "Resolution chain from executor to root controller. type: 'uea' | 'uoa' | 'cea'. role: 'controller' marks the root UOA."
        }
      ],
      "sdk_method": "PushChain.utils.account.resolveControllerAccount(account, { chain?, skipNetworkCheck? })",
      "invocation_type": "sdk",
      "auth_required": false,
      "safe_for_autonomous_execution": true,
      "mcp_candidate": true,
      "docs_url": "https://push.org/docs/chain/build/utility-functions/",
      "stability": "stable"
    }
  ]
}
