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.

Concrete document shape

{
  "presetId": "spot-swapper",
  "sanctionsList": [],
  "perTxCapUsd": 1000,
  "max24hOutflowUsd": 10000,
  "venues": {
    "uniswap": {
      "chainAllowlist": [11155111],
      "assetUniverse": [
        {
          "chainId": 11155111,
          "address": "0x1111111111111111111111111111111111111111"
        }
      ],
      "recipientAllowlist": [
        "0x2222222222222222222222222222222222222222"
      ],
      "contractAllowlist": [
        {
          "address": "0x3333333333333333333333333333333333333333",
          "selectors": ["0x12345678"],
          "label": "Placeholder router"
        }
      ],
      "allowedSides": {
        "placeholder-asset": ["BUY", "SELL"]
      }
    }
  }
}

All values above are placeholders, not a recommended policy.

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. Present in the concrete document schema for preset completeness; not enforced by a published preview check in this catalogue.
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[]YesAllowed effective recipients.
contractAllowlist{address, selectors, label?}[]NoEach entry has an address, selector array, and optional label.
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.
maxPortfolioLeveragenumberYesRequired and non-negative. Used by the published leverage check when evaluating a Hyperliquid updateLeverage action.
maxExposurePerProtocolrecord of numbersNoOptional venue exposure caps accepted in the document schema; not enforced by a published preview check in this catalogue.

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 management is a dashboard and UI-session operation in this preview: writes require a Privy bearer session, and agent API keys cannot read or write their policy. 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.