For AI agents: read the documentation index. Documentation pages are available as Markdown by appending .md to their URL, or requesting Accept: text/markdown.

Namera Docs

namera execution simulate

Preview calls and check session-key policies without submitting a transaction.

Preview calls and check session-key policies without submitting a transaction.

Usage

namera execution simulate \
  --namespace evm \
  --wallet 0199dfe1-0000-7000-8000-000000000001 \
  --session-key 0199dfe1-0000-7000-8000-000000000002 \
  --network 'Base Sepolia' \
  --to 0x2222222222222222222222222222222222222222 \
  --value 1000000000000000 \
  --data 0x

Output

Transaction preview
-> Account: 👛 Example account
-> Network: Base Sepolia
-> Session key: Example session
-> Policy decision: Allowed
-> Calls: Succeeded

Simulation only. No transaction was submitted.

Example output uses fixture accounts and hashes, captured with the CLI's output formatters. Plain-text output is shown without terminal colors; your values and relative expiry dates will differ.

With --output json:

{
  "namespace": "eip155",
  "walletId": "0199dfe1-0000-7000-8000-000000000001",
  "chainId": "eip155:84532",
  "account": "0x1111111111111111111111111111111111111111",
  "callsSucceeded": true,
  "simulation": {
    "userOperation": {
      "source": "eth_estimateUserOperationGas",
      "callGasLimit": "50000",
      "verificationGasLimit": "100000",
      "preVerificationGas": "50000",
      "maxFeePerGas": "1000000000",
      "maxPriorityFeePerGas": "1000000"
    },
    "calls": {
      "source": "viem.simulateCalls",
      "results": [{ "status": "success", "returnData": "0x", "gasUsed": "21000" }],
      "assetChanges": [],
      "transfers": [
        {
          "callIndex": 0,
          "from": "0x1111111111111111111111111111111111111111",
          "to": "0x2222222222222222222222222222222222222222",
          "value": "1000000000000000"
        }
      ]
    }
  },
  "allowed": true,
  "sessionKeyId": "0199dfe1-0000-7000-8000-000000000002"
}

Options

--namespace

  • Type: evm | eip155
  • Required: for non-interactive input flags

Select the EVM network family. Both values resolve to the same namespace. This is not the chain ID; choose the network separately.

--wallet

  • Type: string (account ID)
  • Required: for non-interactive input flags

Use an ID from namera --output json wallet list, not an Ethereum address. With input flags, the CLI reads the account to validate your selection.

--network

  • Type: network name, numeric chain ID, or CAIP-2 ID
  • Required: for non-interactive input flags

For Base Sepolia, use --network 'Base Sepolia', --network 84532, or --network eip155:84532. Names are case-insensitive. The supported networks are Ethereum, Sepolia, Base, Base Sepolia, Arbitrum One, Arbitrum Sepolia, OP Mainnet, and OP Sepolia. Supported Networks lists their identifiers.

--session-key

  • Type: string (session-key ID)
  • Required: for non-interactive input flags

Choose a key belonging to the selected account. Find IDs with namera --output json session-key list --wallet <wallet-id>. Input flags require session-key read access to validate the key. Execution and signing also require a grant, an active installation on the chosen network, and matching permissions.

--to

  • Type: 0x-prefixed Ethereum address
  • Required: for non-interactive input flags

The recipient for a native-token transfer, or the contract receiving calldata. Use a full 20-byte address. The session key must permit this target.

--value

  • Type: non-negative integer string, in wei
  • Required: for non-interactive input flags

The native-token amount attached to the call. 1000000000000000 means 0.001 ETH. Use 0 for a contract call that transfers no ETH. Decimal ETH amounts such as 0.001 are not accepted.

--data

  • Type: even-length 0x-prefixed hex
  • Required: for non-interactive input flags

ABI-encoded calldata for the target contract. Use 0x for a plain ETH transfer. For token transfers, the token amount belongs in calldata, not --value.

--params

  • Type: JSON string
  • Required: only when replacing individual input flags

Pass the complete request as one JSON object. Use this for batch calls or scripts that already construct requests. JSON uses eip155 for the namespace, CAIP-2 chain IDs, and decimal strings for bigint quantities.

Do not combine it with individual transaction or signature input flags. It can be used with --profile and global output options. Supplying JSON skips the interactive selection and its extra account/session-key reads; authorization and request validation still apply.

--profile

  • Type: string
  • Default: personal

Choose the saved CLI connection for this command. Pass the same name used at login. If NAMERA_API_KEY is set, ordinary API commands use that key instead of the profile's OAuth credentials.

namera wallet list --profile work

The command also accepts global options: --output pretty|json, --quiet, and --help.

Interpreting the Preview

Check both allowed and callsSucceeded. A returned denial is a successful simulation response, not necessarily a nonzero process exit. Denied responses include policy denials; inspect JSON for details. Simulation does not reserve permission, guarantee later execution, or submit calls.

This command has no --sponsor or --max-gas-cost-wei flag.

Errors

Failures exit nonzero and are written to stderr. With --output json, inspect error.code and error.nextStep. See Output and Errors.