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:
POUCH_CONFIGenvironment variable (explicit path)./pouch.config.jsonin the server's working directory~/.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
| Field | Meaning |
|---|---|
rpcUrl | Robinhood Chain RPC endpoint. Default is the public mainnet RPC. |
policy.dailyBudgetUsd | Total USD turnover allowed in any rolling 24h window, across all trades |
policy.tiers.<tier>.enabled | Whether the agent may trade tokens of this tier at all |
policy.tiers.<tier>.maxPerTradeUsd | Max USD value of a single trade in this tier |
policy.minHolders | Holder threshold for the established tier |
policy.denylist | Token addresses the agent may never trade, regardless of tier |
policy.trustedIssuers | Deployer addresses whose tokens classify into the issuer tier |
policy.stocks.blockOffHoursTrades | Block (instead of warn on) stock-token trades while the US market is closed |
policy.transfers.enabled | Allow the send tool at all. Off by default. |
policy.transfers.maxPerTransferUsd | Max USD value of a single outbound transfer |
policy.transfers.dailyBudgetUsd | Rolling 24h budget for outbound transfers |
policy.transfers.allowlist | If 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.