Skip to content
LogoLogo

Nava Guardian policy model

Developer Preview

A Nava Guardian policy is a concrete, versionless document attached to a versioned service record. The active version is resolved for the agent when Nava Guardian evaluates a proposed action.

Venue-specific schema examples

These are abridged schema illustrations, not accepted write bodies or complete stored documents. They intentionally omit preset-owned fixed values; the service fills and retains those values when it applies the sparse authoring model described below.

Spot swapper

{
  "presetId": "spot-swapper",
  "sanctionsList": [],
  "perTxCapUsd": 1000,
  "max24hOutflowUsd": 10000,
  "venues": {
    "uniswap": {
      "chainAllowlist": [11155111],
      "assetUniverse": [
        {
          "chainId": 11155111,
          "address": "0x1111111111111111111111111111111111111111"
        }
      ],
      "recipientAllowlist": [
        "0x2222222222222222222222222222222222222222"
      ]
    }
  }
}

Perp trader

{
  "presetId": "perp-trader",
  "sanctionsList": [],
  "perTxCapUsd": 1000,
  "max24hOutflowUsd": 10000,
  "venues": {
    "hyperliquid": {
      "network": "testnet",
      "assetUniverse": ["ETH"],
      "maxUpdateLeverage": 3,
      "maxPortfolioLeverage": 2,
      "maxExposurePerProtocol": {
        "hyperliquid": 5000
      }
    }
  }
}

All values in both examples are placeholders, not recommended policies.

Root and shared fields

FieldTypeRules
presetIdstringRequired. Identifies the preset used to fill the policy.
sanctionsListaddress[]Required in the concrete document. Addresses pass the policy address validator.
perTxCapUsdnumberRequired and non-negative. Enforced by the published per-transaction USD cap check when price data is available; missing price data fails closed.
max24hOutflowUsdnumberRequired and non-negative; must be greater than or equal to perTxCapUsd. Enforced as a rolling 24-hour cap for supported Uniswap swaps and Hyperliquid orders, using retained spend for the action's venue; missing state or valuation fails closed.
venuesobjectRequired, strict, and must contain at least one supported venue block. A venue is allowed only when its block is present.

The root object, venue map, venue blocks, chain-scoped address objects, and contract-allowlist entries are strict objects: unknown keys are rejected. The allowedSides and maxExposurePerProtocol maps intentionally accept venue-native string keys.

EVM address fields use the service's EIP-55 address validator and are normalized with getAddress; a non-address or wrong-checksum mixed-case value is rejected. Function selectors must match a four-byte 0x-prefixed hexadecimal value.

Uniswap venue block

FieldTypeRequiredRules
chainAllowlistinteger[]YesEVM chain IDs.
assetUniverse{chainId, address}[]YesEach asset is identified by integer chain ID and token contract address, not a symbol.
recipientAllowlistaddress[]NoOmit the field to disable the external-recipient check. An empty array permits only the agent's own registered wallets. A populated array permits those wallets plus the listed addresses.
contractAllowlist{address, selectors, label?}[]NoEach entry has an address, selector array, and optional label. Selector enforcement applies only to target contracts included in this list; an unlisted target is not_checked, not denied by this check.
allowedSidesrecord of side arraysNoValues use BUY, SELL, LONG, or SHORT.

Hyperliquid venue block

FieldTypeRequiredRules
networkmainnet or testnetYesPins the policy to one Hyperliquid environment.
assetUniversestring[]YesVenue-native market symbols, not asset indexes.
allowedSidesrecord of side arraysNoValues use BUY, SELL, LONG, or SHORT.
maxUpdateLeveragenumberYesRequired and non-negative. Caps the leverage requested by a Hyperliquid updateLeverage action.
maxPortfolioLeveragenumberYesRequired and non-negative. Caps projected gross notional divided by account equity for an order; missing or stale account state fails closed.
maxExposurePerProtocolrecord of numbersNoWhen hyperliquid is configured, caps projected gross Hyperliquid exposure for an order; missing or stale state fails closed.

The entire Hyperliquid policy and evaluation path is Developer Preview.

Authoring and versioning

The Developer Preview write model accepts a sparse preset overlay rather than an arbitrary concrete document. It exposes presetId, optional shared cap overrides, and optional Uniswap or Hyperliquid overrides. Omitted values inherit the preset; fixed preset values such as sanctionsList and some contract fields are retained. An override cannot add a venue that is absent from the selected preset.

Policy documents do not contain their own version. A write returns { policyId, version, document }; an active-policy read returns { version, document }; and each version-history entry returns { version, document, createdAt, active }. A write appends a version, activation moves the active pointer to an existing version, and copying creates an independent version for the target agent.

Policy writes remain a dashboard and UI-session operation in this preview and require a Privy bearer session. Agent API keys can read their own active policy and state, but cannot write, activate, copy, or roll back policy versions. Configure and activate the policy before requesting a verdict. Do not pass a policy document through the MCP tool, SDK request, or advanced REST request.