AI Agent Guide
Build agent-driven MOSS integrations with explicit permission policies, safe defaults, and production-ready execution patterns.
Last updated
await mega.grantPermissions({
permissions: {
expiry: Math.floor(Date.now() / 1000) + 3600,
permissions: {
calls: [{ to: '0xYourVaultContract', signature: 'rebalance()' }],
spend: [{ limit: BigInt('200000000000000000'), period: 'day' }],
},
},
});
const tx = await mega.callContract({
address: '0xYourVaultContract',
abi: vaultAbi,
functionName: 'rebalance',
args: [],
silent: true,
});// App manages signer directly (high risk)
const signer = new Wallet(process.env.PRIVATE_KEY!);
await signer.sendTransaction({
to: target,
value: parseEther('0.1'),
});// Build + maintain custom policy rails
await escrow.authorize(agent, {
maxSpendWei: '200000000000000000',
contract: target,
expiresAt: unixTs,
});
await escrow.execute(agent, payload);// Every action prompts user approval
const tx = await mega.callContract({
address: target,
abi,
functionName: 'execute',
args,
silent: false,
});await mega.callContract({
address: '0xStrategyRouter',
abi: routerAbi,
functionName: 'rebalanceAcrossProtocols',
args: [vaultId],
silent: true,
});await mega.callContract({
address: gameContract,
abi: gameAbi,
functionName: 'claimDailyReward',
args: [playerId],
silent: true,
});// Transfers always prompt — for silent recurring execution, call the savings
// contract with callContract and a matching permission grant (see call-contract).
await mega.callContract({
address: savingsVault,
abi: vaultAbi,
functionName: 'deposit',
args: [],
value: '10000000000000000', // 0.01 ETH
silent: true,
});const perms = await mega.getPermissions(agentAccount);
if (!perms?.permissions) {
await mega.grantPermissions({ permissions: bootstrapPolicy });
}const result = await mega.callContract({
address: '0xExecutionEngine',
abi: engineAbi,
functionName: 'executeOrder',
args: [order],
silent: true,
});
if (result.status === 'error') await mega.revokePermissions();