Best for: User-delegated agent actions with scoped revocable permissions; agents acting on behalf of users
Not ideal for: Purely autonomous agents with no human principal; non-EVM chains
Key Signals
Key Management
ERC-4337 + ERC-7710 delegation
Chain Support
EVM chains
Integration
SDK / API
Pricing
Freemium
Features
📜
ERC-4337 Account Abstraction
Full account abstraction support via ERC-4337, enabling batched transactions, gas sponsorship via paymasters, and social recovery — all without requiring the user to hold ETH for gas.
🔑
ERC-7710 Delegation (Scoped Permissions)
The delegation toolkit lets users grant agents narrowly scoped, time-bound permissions — e.g., "spend up to 10 USDC on contract X". Delegations are onchain, auditable, and instantly revocable by the user.
⛽
Gas Sponsorship via Paymasters
Integrate paymaster contracts to sponsor transaction fees on behalf of users or agents, enabling gasless UX flows. Works with ERC-4337 UserOperations submitted via any bundler.
🔒
Revocable Agent Access
Users retain full control — delegated permissions can be revoked onchain at any time, providing a safety net when agent behavior needs to be constrained or stopped mid-task.
Ratings
Permission Granularity
4.7/5
EVM Compatibility
4.8/5
Developer Docs
3.9/5
Ease of Setup
3.5/5
Ratings based on documentation review and delegation toolkit README. ERC-7710 is relatively new; expect the ecosystem to mature. Setup complexity reflects account abstraction's inherent learning curve.
Integration
# Install the delegation toolkitnpm install @metamask/delegation-toolkit// Create a delegation granting an agent scoped access
import { createDelegation, DelegationFramework } from "@metamask/delegation-toolkit";
const delegation = createDelegation({
delegate: agentAddress, // the AI agent's address
delegator: userAddress, // the human user's smart account
caveats: [
{
enforcer: spendingLimitEnforcer,
terms: encodeSpendingLimit({ token: USDC, amount: parseUnits("10", 6) }),
},
],
});
// User signs the delegation onchain
const signedDelegation = await walletClient.signTypedData(delegation);
// Agent redeems the delegation to act on user's behalf
await DelegationFramework.redeemDelegation(signedDelegation, calldata);