Guides

Guardrails and config

Per-tier USD limits, the rolling daily budget, transfer policy, denylists, and every config field.

Guardrails are enforced by the server before anything is signed. Defaults apply with no config file at all; to customize, create a config.

Config file location

Search order:

  1. POUCH_CONFIG environment variable (explicit path)
  2. ./pouch.config.json in the server's working directory
  3. ~/.pouch/config.json

Full example

{
  "policy": {
    "dailyBudgetUsd": 1000,
    "tiers": {
      "official": { "enabled": true, "maxPerTradeUsd": 500 },
      "issuer": { "enabled": true, "maxPerTradeUsd": 250 },
      "established": { "enabled": true, "maxPerTradeUsd": 100 },
      "unknown": { "enabled": false, "maxPerTradeUsd": 0 }
    },
    "minHolders": 1000,
    "denylist": [],
    "trustedIssuers": [],
    "stocks": { "blockOffHoursTrades": false },
    "transfers": {
      "enabled": false,
      "maxPerTransferUsd": 100,
      "dailyBudgetUsd": 250,
      "allowlist": []
    }
  }
}

Every field is optional; anything omitted falls back to the defaults shown above.

Fields

FieldMeaning
rpcUrlRobinhood Chain RPC endpoint. Default is the public mainnet RPC.
policy.dailyBudgetUsdTotal USD turnover allowed in any rolling 24h window, across all trades
policy.tiers.<tier>.enabledWhether the agent may trade tokens of this tier at all
policy.tiers.<tier>.maxPerTradeUsdMax USD value of a single trade in this tier
policy.minHoldersHolder threshold for the established tier
policy.denylistToken addresses the agent may never trade, regardless of tier
policy.trustedIssuersDeployer addresses whose tokens classify into the issuer tier
policy.stocks.blockOffHoursTradesBlock (instead of warn on) stock-token trades while the US market is closed
policy.transfers.enabledAllow the send tool at all. Off by default.
policy.transfers.maxPerTransferUsdMax USD value of a single outbound transfer
policy.transfers.dailyBudgetUsdRolling 24h budget for outbound transfers
policy.transfers.allowlistIf non-empty, the only addresses send may pay

How USD values are computed

Trade values are computed at execution time via the Uniswap v4 quoter: USDG counts as dollars, ETH is priced through the native-ETH/USDG pools, and other tokens through their best pool. See Quote currencies.

Market hours

Stock tokens trade on-chain 24/7, but NYSE doesn't. Off-hours trades warn by default, because pool prices can drift from the last close. Set policy.stocks.blockOffHoursTrades to true to block them outright.

Example policies

Conservative (official stock tokens only):

{
  "policy": {
    "dailyBudgetUsd": 200,
    "tiers": {
      "official": { "enabled": true, "maxPerTradeUsd": 50 },
      "issuer": { "enabled": false, "maxPerTradeUsd": 0 },
      "established": { "enabled": false, "maxPerTradeUsd": 0 }
    }
  }
}

Transfers on, tightly scoped (pay one known address, small caps):

{
  "policy": {
    "transfers": {
      "enabled": true,
      "maxPerTransferUsd": 25,
      "dailyBudgetUsd": 50,
      "allowlist": ["0xYourColdWallet..."]
    }
  }
}

The unknown tier can technically be enabled. Do not enable it unless you fully understand that this is where the counterfeit stocks and stablecoins live.

On this page