{
  "schema_version": "1.1.0",
  "version": "1.2.1",
  "current_sdk_version": "6.0.19",
  "generated": "2026-07-03T00: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, and (v6.0.19+) optional signAuthorization — auto-wired for ethers v6 Wallet and viem local accounts to enable atomic EIP-7702 multicall batching; not available for JSON-RPC browser wallets or ethers v5"
        }
      ],
      "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. Multicall from a native Push Chain EOA executes atomically in a single EIP-7702 transaction when the signer supports signAuthorization (v6.0.19+, ethers v6 Wallet or viem local account); otherwise the SDK falls back to non-atomic sequential per-call execution. External-origin batches are always atomic via UEA_MULTICALL. Every inner entry needs a non-zero `to` — only the outer tx.to stays the zero address to signal multicall mode."
        },
        {
          "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"
        },
        {
          "name": "tx.options.enforceGasCheck",
          "type": "boolean",
          "required": false,
          "description": "Defaults to false. When true, the SDK pre-flight check throws InsufficientUEABalanceError on a UEA native PC or burn-token PRC-20 shortfall instead of emitting a WARNING progress event and proceeding. Use true when you want pre-flight guarantees over best-effort retries."
        }
      ],
      "outputs": [
        {
          "name": "txResponse",
          "type": "TransactionResponse",
          "description": "Transaction hash and execution receipt. Includes `atomic: boolean` (v6.0.19+) — false only when a native-EOA multicall fell back to non-atomic sequential execution"
        }
      ],
      "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"
        },
        {
          "name": "tx.options.enforceGasCheck",
          "type": "boolean",
          "required": false,
          "description": "Defaults to false. When true, the SDK pre-flight check throws InsufficientUEABalanceError on a UEA native PC or burn-token PRC-20 shortfall instead of emitting a WARNING progress event and proceeding."
        }
      ],
      "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. On Push Chain Donut, status queries automatically retry the archive RPC endpoints when the default pruned RPC no longer has the transaction (core v6.0.19+), so old hashes still resolve.",
      "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. The default Donut RPC prunes old history — for full-history raw reads (old transactions/receipts) point the provider at the archive endpoint https://archive.evm.donut.rpc.push.org/ (SDK reads fall back to it automatically since core v6.0.19).",
      "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"
        },
        {
          "name": "options.signAuthorization",
          "type": "(params: { contractAddress: `0x${string}`; chainId?: number; nonce?: number; executor?: 'self' }) => Promise<SignedAuthorization>",
          "required": false,
          "description": "Optional EIP-7702 authorization signing (v6.0.19+). Returns a viem-compatible SignedAuthorization ({ address, chainId, nonce, r, s, yParity, v? }). Provide it to enable atomic multicall batching for native Push Chain EOAs; omitted signers fall back to sequential execution."
        }
      ],
      "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"
        },
        {
          "name": "txs[].options.enforceGasCheck",
          "type": "boolean",
          "required": false,
          "description": "Defaults to false. When true on any single hop, the entire cascade runs in strict pre-flight mode: a UEA native PC or burn-token PRC-20 shortfall on any hop throws InsufficientUEABalanceError (with `pathTag: 'CASCADE'` and `segmentIndex`) before broadcast, instead of degrading to a warning and proceeding."
        }
      ],
      "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"
    }
  ]
}
