Borrow from Aave via credit delegation. Agent self-funds by borrowing against delegator collateral. Supports borrow, repay, health checks. Works on Aave V2/V3.
npx skills add https://github.com/majiayu000/claude-skill-registry --skill agent-credit
Borrow funds from Aave using delegated credit. Your main wallet supplies collateral and delegates borrowing power to the agent's wallet. The agent can then autonomously borrow tokens when needed — the debt accrues against the delegator's position.
> Protocol: Works on Aave V3 and Aave V2 — the function signatures for credit delegation (borrow, repay, approveDelegation, borrowAllowance) are identical across both versions. Just swap in the V2 LendingPool and ProtocolDataProvider addresses. The only cosmetic difference: V3 returns collateral/debt in USD (8 decimals), V2 in ETH (18 decimals). The health factor safety check works correctly on both.
cast, works anywhere with a shellCombines with Bankr skills for borrow-then-swap flows: borrow USDC via delegation, then use Bankr to swap, bridge, or deploy it.
Credit delegation in Aave V3 separates two things: borrowing power and delegation approval.
Borrowing power is holistic. It comes from your entire collateral position across all assets. If you deposit $10k worth of ETH at 80% LTV, you have $8k of borrowing power — period. That borrowing power isn't locked to any specific asset.
Delegation approval is isolated per debt token. You control *which* assets the agent can borrow and *how much* of each by calling approveDelegation() on individual VariableDebtTokens. Each asset has its own debt token contract, and each approval is independent.
This means you can, for example:
The agent can only borrow assets you've explicitly approved, up to the amounts you've set — but the *capacity* to borrow comes from your total collateral, not from any single deposit.
Your Collateral (holistic) Delegation Approvals (isolated)
┌─────────────────────────┐ ┌──────────────────────────────┐
│ $5k ETH │ │ USDC DebtToken → agent: 500 │
│ $3k USDC │ ───LTV───▶ │ WETH DebtToken → agent: 0.1 │
│ $2k cbETH │ = $8k │ cbETH DebtToken → agent: 0 │
│ Total: $10k @ 80% LTV │ capacity └──────────────────────────────┘
└─────────────────────────┘
Delegator (your wallet) Agent Wallet (delegatee)
│ │
│ 1. supply collateral to Aave │
│ 2. approveDelegation(agent, amount) │
│ on the VariableDebtToken │
│ │
│ ┌─── 3. borrow(asset, │
│ │ amount, onBehalfOf │
│ │ = delegator) │
│ │ │
│ [debt on YOUR position] [tokens in agent wallet]
│ │ │
│ └─── 4. repay(asset, │
│ amount, onBehalfOf │
│ = delegator) │
cast CLI): curl -L https://foundry.paradigm.xyz | bash && foundryup
approveDelegation(agentAddress, maxAmount) on the VariableDebtToken of the asset you want the agent to borrowcast call $DATA_PROVIDER "getReserveTokensAddresses(address)(address,address,address)" $ASSET --rpc-url $RPC mkdir -p ~/.openclaw/skills/aave-delegation
cat > ~/.openclaw/skills/aave-delegation/config.json << 'EOF'
{
"chain": "base",
"rpcUrl": "https://mainnet.base.org",
"agentPrivateKey": "0xYOUR_AGENT_PRIVATE_KEY",
"delegatorAddress": "0xYOUR_MAIN_WALLET",
"poolAddress": "0xA238Dd80C259a72e81d7e4664a9801593F98d1c5",
"dataProviderAddress": "0x2d8A3C5677189723C4cB8873CfC9C8976FDF38Ac",
"assets": {
"USDC": {
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"decimals": 6
},
"WETH": {
"address": "0x4200000000000000000000000000000000000006",
"decimals": 18
}
},
"safety": {
"minHealthFactor": "1.5",
"maxBorrowPerTx": "1000",
"maxBorrowPerTxUnit": "USDC"
}
}
EOF
scripts/aave-setup.sh
# Full status report
scripts/aave-status.sh
# Check specific asset delegation
scripts/aave-status.sh USDC
# Just health factor
scripts/aave-status.sh --health-only
# Borrow 100 USDC
scripts/aave-borrow.sh USDC 100
# Borrow 0.5 WETH
scripts/aave-borrow.sh WETH 0.5
The borrow script automatically:
# Repay 100 USDC
scripts/aave-repay.sh USDC 100
# Repay all USDC debt
scripts/aave-repay.sh USDC max
The repay script automatically:
Every borrow operation runs these checks BEFORE executing:
minHealthFactor (default 1.5) AFTER this borrow?maxBorrowPerTx?If ANY check fails, the borrow is aborted with a clear error message.
⚠️ The agent must NEVER bypass safety checks. If the user asks the agent to borrow and the health factor is too low, the agent should refuse and explain why.
| Chain | Pool Address | Gas Cost |
|-----------|----------------------------------------------|-----------|
| Base | 0xA238Dd80C259a72e81d7e4664a9801593F98d1c5 | Very Low |
| Ethereum | 0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2 | High |
| Polygon | 0x794a61358D6845594F94dc1DB02A252b5b4814aD | Very Low |
| Arbitrum | 0x794a61358D6845594F94dc1DB02A252b5b4814aD | Low |
See deployments.md for full address list including debt tokens.
# Check if we have enough gas
BALANCE=$(cast balance $AGENT_ADDRESS --rpc-url $RPC)
if [ "$BALANCE" -lt "1000000000000000" ]; then # < 0.001 ETH
# Borrow a small amount of WETH for gas
aave-borrow.sh WETH 0.005
fi
# Borrow USDC from delegated credit
aave-borrow.sh USDC 100
# Swap to ETH using Bankr
bankr.sh "Swap 100 USDC for ETH on Base"
# Agent borrows USDC weekly and swaps to ETH
aave-borrow.sh USDC 100
bankr.sh "Swap 100 USDC for ETH on Base"
# Always check health first
aave-status.sh
# Only borrow if healthy
aave-borrow.sh USDC 500
| Field | Required | Description |
|--------------------------|----------|-----------------------------------------------|
| chain | Yes | Chain name (base, ethereum, polygon, arbitrum) |
| rpcUrl | Yes | JSON-RPC endpoint URL |
| agentPrivateKey | Yes | Agent wallet private key (0x-prefixed) |
| delegatorAddress | Yes | User's main wallet that delegated credit |
| poolAddress | Yes | Aave V3 Pool contract address |
| dataProviderAddress | Yes | Aave V3 PoolDataProvider address |
| assets | Yes | Map of symbol → {address, decimals} |
| safety.minHealthFactor | No | Min HF after borrow (default: 1.5) |
| safety.maxBorrowPerTx | No | Max borrow per transaction (default: 1000) |
| safety.maxBorrowPerTxUnit | No | Unit for maxBorrowPerTx (default: USDC) |
| Variable | Overrides |
|-----------------------------|------------------------|
| AAVE_RPC_URL | rpcUrl |
| AAVE_AGENT_PRIVATE_KEY | agentPrivateKey |
| AAVE_DELEGATOR_ADDRESS | delegatorAddress |
| AAVE_POOL_ADDRESS | poolAddress |
| AAVE_MIN_HEALTH_FACTOR | safety.minHealthFactor |
| AAVE_BASE_CURRENCY_DECIMALS | Decimals of the oracle's base currency unit. Default 8 (USD/1e8) covers Ethereum, Polygon, Arbitrum, Optimism, and Base. Set to 18 for ETH-denominated markets (some V2/L2 variants). |
| Error | Cause | Fix |
|------------------------------|-------------------------------------------|--------------------------------------------------|
| INSUFFICIENT_ALLOWANCE | Delegation amount exceeded | Delegator must call approveDelegation() again |
| HEALTH_FACTOR_TOO_LOW | Borrow would risk liquidation | Reduce amount or add collateral |
| AMOUNT_EXCEEDS_CAP | Per-tx safety cap hit | Reduce amount or update config |
| INSUFFICIENT_LIQUIDITY | Not enough in Aave pool | Try smaller amount or different asset |
| INSUFFICIENT_GAS | Agent wallet has no native token | Send gas to agent wallet |
| EMODE_MISMATCH | Asset incompatible with delegator's eMode | Borrow an asset in the same eMode category |
See safety.md for the full threat model and emergency procedures.
Critical rules:
minHealthFactor below 1.2 — liquidation happens at 1.0type(uint256).maxCreate new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
Replace with description of the skill and when Claude should use it.
Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies
This skill should be used when the user wants to "create a skill", "add a skill to plugin", "write a new skill", "improve skill description", "organize skill content", or needs guidance on skill structure, progressive disclosure, or skill development best practices for Claude Code plugins.
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
Use when creating new skills, editing existing skills, or verifying skills work before deployment
Take majiayu000/agent-credit from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.