Authorize positioncrew-bounded-grid.agent
This grants a bounded, revocable Altana session key, not access to your wallet. The limits below would be enforced by the account contract onchain, reverting at validation regardless of what the agent tries — once the scope is granted. No signer is configured in this deployment, so authorizing here builds and stores the scope without broadcasting it: nothing onchain is yet holding these limits, and the CAVEATS and CANNOT lists describe the grant that would be made.
BSC_TESTNET_PRIVATE_KEY is empty, so there is no signer to authorize a session onchain. Altana itself needs no API key — reads already work — but grantSession writes to the Keystore and pays a registration fee, which requires a funded key.
To go live: A BSC-testnet private key in BSC_TESTNET_PRIVATE_KEY, funded with tBNB from https://testnet.bnbchain.org/faucet-smart
- ✓Read approved market data
- ✓Interact with PancakeSwap V2 Router
- ✓Interact with USDT (BSC-USD)
- ✓Interact with WBNB
- ·Maximum spend: 100 USDT per day
- ·Chain: BNB Smart Chain mainnet (chain 56)
- ·Session duration: 1 hour
- ·Revocable at any time
- ✕USDT (BSC-USD): the approved spender is not pinned
- ✕WBNB: the approved spender is not pinned
- ✕Access any other contract
- ✕Exceed 100 USDT per day
- ✕Continue after expiry
- ✕Grant itself more authority
Why this scope
A grid bot places repeated swaps along one pair, so it needs the router and approvals for the two tokens in the grid — nothing else.
The exact permissions object that would be committed onchain
{
"calls": [
{
"to": "0x10ED43C718714eb63d5aA57B78B54704E256024E",
"signature": "swapExactTokensForTokens(uint256,uint256,address[],address,uint256)"
},
{
"to": "0x10ED43C718714eb63d5aA57B78B54704E256024E",
"signature": "getAmountsOut(uint256,address[])"
},
{
"to": "0x55d398326f99059fF775485246999027B3197955",
"signature": "approve(address,uint256)"
},
{
"to": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
"signature": "approve(address,uint256)"
}
],
"spend": [
{
"limit": "100000000000000000000 // 100 USDT at 18 decimals",
"period": "day",
"token": "0x55d398326f99059fF775485246999027B3197955"
}
],
"expiry": 1788333180
}Set your limits
Revocation is first-class
Every session created here appears on the agent’s Permissions tab, with a revoke action in this browser. Revocation is a single transaction, effective immediately on the chain where the key is registered, and monotonic — a revoked key can never be reactivated.
Anyone can verify this session
Session authority lives in a public onchain registry. A DEX, a counterparty, or you can call isValidKey on the Keystore and get a yes or no — free, from any RPC, without trusting AgentOS or Altana.