Prerequisites
- Node.js 22+
- Solana wallet with SOL for transaction fees
- RPC endpoint
Skill Folder Structure
Create Skill Directory
Create a new directory for the Kamino skill in your OpenClaw workspace:
mkdir -p ~/.openclaw/workspace/skills/kamino
cd ~/.openclaw/workspace/skills/kamino
Create File Structure
Create the following files in the directory:
kamino/
├── SKILL.md # Main skill instructions for the agent
└── references/
├── setup.md # Environment and SDK setup
├── earn.md # Kamino Earn operations (vaults)
├── borrow.md # Kamino Borrow operations (lending)
└── api.md # Kamino API reference
mkdir -p references
touch SKILL.md references/setup.md references/earn.md references/borrow.md references/api.md
Get a Solana RPC Endpoint
Choose an RPC provider:
- Free:
https://api.mainnet-beta.solana.com(rate limited) - Recommended: Helius, QuickNode, or Triton (paid, production-ready)
Create or Use Existing Wallet Keypair
Create a new keypair if needed:Or use an existing keypair file.
solana-keygen new --outfile ~/solana-wallet.json
Configure OpenClaw
Add your Solana credentials to Replace
~/.openclaw/openclaw.json:{
"gateway": {
"env": {
"SOLANA_RPC_URL": "https://api.mainnet-beta.solana.com",
"SOLANA_WS_URL": "wss://api.mainnet-beta.solana.com",
"WALLET_KEYPAIR_PATH": "/path/to/your/solana-wallet.json"
}
}
}
/path/to/your/solana-wallet.json with the actual path to your keypair file.For Other AI Agents
- Claude: Copy the SKILL.md content into your conversation or attach as a file
- Cursor: Clone into
.cursor/skills/kaminodirectory - Custom Agents: Reference the markdown files directly
File Templates
Copy the following templates into your skill files.SKILL.md
The main skill file that teaches agents how to interact with Kamino:# Kamino Skill
Interact with Kamino Finance on Solana: Earn vaults and Borrow markets.
## Prerequisites
See [setup.md](references/setup.md) for installation and configuration.
Required:
- Solana RPC endpoint
- Wallet keypair for signing transactions
- `@solana/kit` and `@kamino-finance/klend-sdk` installed
## What You Can Do
**Kamino Earn** - Deposit into yield-generating vaults
**Kamino Borrow** - Supply collateral, borrow assets, repay loans
## Quick Reference
| Operation | Method | Reference |
|-----------|--------|-----------|
| Earn: Deposit | SDK or API | [earn.md](references/earn.md) |
| Earn: Withdraw | SDK or API | [earn.md](references/earn.md) |
| Borrow: Deposit Collateral | API | [borrow.md](references/borrow.md) |
| Borrow: Borrow Assets | API | [borrow.md](references/borrow.md) |
| Borrow: Repay Loan | API | [borrow.md](references/borrow.md) |
| Borrow: Withdraw Collateral | API | [borrow.md](references/borrow.md) |
| Query Market Data | SDK | [borrow.md](references/borrow.md) |
| Get Vault/Market Lists | API | [api.md](references/api.md) |
## Core Workflow
### For Kamino Earn:
1. Choose a vault (get list via API or use known address)
2. Deposit tokens to earn yield
3. Withdraw vault shares when needed
### For Kamino Borrow:
1. Supply collateral to a market
2. Borrow assets against your collateral
3. Monitor health factor (keep LTV below 75%)
4. Repay loans and withdraw collateral
**Main Market**: `7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF`
## Reference Files
- **[setup.md](references/setup.md)** — Installation and OpenClaw configuration
- **[earn.md](references/earn.md)** — Vault deposit/withdraw code examples
- **[borrow.md](references/borrow.md)** — Lending market operations
- **[api.md](references/api.md)** — Complete API endpoint reference
references/setup.md
Setup guide for using Kamino with OpenClaw:# Kamino Setup
Configure OpenClaw to interact with Kamino Finance protocols on Solana.
## Prerequisites
Before using this skill, you need:
- OpenClaw installed (Node.js 22+)
- Solana RPC endpoint (get from Helius, QuickNode, or use public endpoint)
- Solana wallet keypair file for signing transactions
For complete developer documentation: https://kamino.com/docs/build
**Main Market**: `7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF`
references/earn.md
Kamino Earn vault operations:# Kamino Earn Operations
Deposit into yield-generating vaults, withdraw shares, and query vault/user data.
## Dependencies
```bash
npm install @solana/kit @kamino-finance/klend-sdk decimal.js
```
## SDK Instantiation
```typescript
import { createSolanaRpc, address } from '@solana/kit';
import { KaminoVault, KaminoManager } from '@kamino-finance/klend-sdk';
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
// Initialize a specific vault
const vault = new KaminoVault(
rpc,
address('VAULT_PUBKEY_HERE')
);
// Or use manager for multi-vault operations
const manager = new KaminoManager(rpc);
```
## SDK Operations
| What to Do | SDK Method | Documentation |
|------------|------------|---------------|
| **Transactions** |
| Deposit to vault | `vault.depositIxs(signer, amount)` | [Recipe](https://docs.kamino.finance/build/recipes/earn/earn-via-sdk) |
| Withdraw from vault | `vault.withdrawIxs(signer, shareAmount)` | [Recipe](https://docs.kamino.finance/build/recipes/earn/earn-withdraw-via-sdk) |
| **Read Vault Data** |
| Get vault holdings | `vault.getVaultHoldings()` | [Data Docs](https://docs.kamino.finance/build/earn/data/vault-data) |
| Get vault APY | `vault.getAPYs()` | [Data Docs](https://docs.kamino.finance/build/earn/data/vault-data) |
| Get exchange rate | `vault.getExchangeRate()` | [Data Docs](https://docs.kamino.finance/build/earn/data/vault-data) |
| Get allocations | `vault.getVaultAllocations()` | [Data Docs](https://docs.kamino.finance/build/earn/data/vault-data) |
| Get vault overview | `manager.getVaultOverview(vault, tokenPrice)` | [Data Docs](https://docs.kamino.finance/build/earn/data/vault-data) |
| **Read User Data** |
| Get user shares | `vault.getUserShares(userAddress)` | [Data Docs](https://docs.kamino.finance/build/earn/data/user-position-data) |
| Get all positions | `manager.getUserSharesBalanceAllVaults(userAddress)` | [Data Docs](https://docs.kamino.finance/build/earn/data/user-position-data) |
## API Operations
| What to Do | API Endpoint | Documentation |
|------------|--------------|---------------|
| **Transactions** |
| Deposit to vault | `POST /ktx/kvault/deposit` | [Recipe](https://docs.kamino.finance/build/recipes/earn/earn-via-api) |
| Withdraw from vault | `POST /ktx/kvault/withdraw` | [Recipe](https://docs.kamino.finance/build/recipes/earn/earn-withdraw-via-api) |
| **Read Vault Data** |
| List all vaults | `GET /kvaults/vaults` | [API Docs](https://api-docs.kamino.finance) |
| Get vault details | `GET /vault/{vaultPubkey}` | [API Docs](https://api-docs.kamino.finance) |
| Get vault metrics | `GET /vault/{vaultPubkey}/metrics` | [API Docs](https://api-docs.kamino.finance) |
| Historical metrics | `GET /vault/{vaultPubkey}/metrics/history` | [API Docs](https://api-docs.kamino.finance) |
| **Read User Data** |
| Get user positions | `GET /kvaults/users/{wallet}/positions` | [API Docs](https://api-docs.kamino.finance) |
| Get vault position | `GET /kvaults/users/{wallet}/vaults/{vaultPubkey}/position` | [API Docs](https://api-docs.kamino.finance) |
| Get position PnL | `GET /kvaults/users/{wallet}/vaults/{vaultPubkey}/pnl` | [API Docs](https://api-docs.kamino.finance) |
| Get transactions | `GET /kvaults/users/{wallet}/transactions` | [API Docs](https://api-docs.kamino.finance) |
## Important Notes
- Withdrawals use **vault share amounts**, not underlying token amounts
- SDK automatically handles farm unstaking if needed
- API transactions use Address Lookup Tables - must use `decompileTransactionMessageFetchingLookupTables`
- Historical data only available via API
## Complete Tutorial
[Earn and Withdraw Tutorial](https://docs.kamino.finance/build/tutorials/earn/earn-and-withdraw)
references/borrow.md
Kamino Borrow operations (deposit collateral, borrow, repay, withdraw):# Kamino Borrow Operations
Supply collateral, borrow assets, repay loans, withdraw collateral, and query market/user data.
**Main Market**: `7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF`
## Dependencies
```bash
npm install @solana/kit @kamino-finance/klend-sdk decimal.js
```
## SDK Instantiation
```typescript
import { createSolanaRpc, address } from '@solana/kit';
import { KaminoMarket, VanillaObligation, PROGRAM_ID } from '@kamino-finance/klend-sdk';
const rpc = createSolanaRpc('https://api.mainnet-beta.solana.com');
const marketPubkey = address('7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF');
// Load market with 400ms slot duration
const market = await KaminoMarket.load(rpc, marketPubkey, 400, PROGRAM_ID);
// Get user's obligation
const userAddress = address('USER_WALLET_ADDRESS');
const obligation = await market.getObligationByWallet(
userAddress,
new VanillaObligation(PROGRAM_ID)
);
```
## SDK Operations
| What to Do | SDK Method | Documentation |
|------------|------------|---------------|
| **Read Market Data** |
| Get total deposit TVL | `market.getTotalDepositTVL()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get total borrow TVL | `market.getTotalBorrowTVL()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get all reserves | `market.getReserves()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get reserve deposit TVL | `reserve.getDepositTvl()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get reserve borrow TVL | `reserve.getBorrowTvl()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get reserve borrow APY | `reserve.totalBorrowAPY(slot)` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get reserve supply APY | `reserve.totalSupplyAPY(slot)` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| Get reserve utilization | `reserve.calculateUtilizationRatio()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/market-data) |
| **Read User Data** |
| Get user's obligation | `market.getObligationByWallet(user, obligationType)` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
| Get all user obligations | `market.getAllUserObligations(user)` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
| Get LTV ratio | `obligation.loanToValue()` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
| Get borrow utilization | `obligation.refreshedStats.borrowUtilization` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
| Get user deposits | `obligation.deposits` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
| Get user borrows | `obligation.borrows` | [Data Docs](https://docs.kamino.finance/build/borrow/data/user-position-data) |
## API Operations
| What to Do | API Endpoint | Documentation |
|------------|--------------|---------------|
| **Transactions** |
| Deposit collateral | `POST /ktx/klend/deposit` | [Recipe](https://docs.kamino.finance/build/recipes/borrow/deposit-via-api) |
| Borrow assets | `POST /ktx/klend/borrow` | [Recipe](https://docs.kamino.finance/build/recipes/borrow/borrow-via-api) |
| Repay loan | `POST /ktx/klend/repay` | [Recipe](https://docs.kamino.finance/build/recipes/borrow/repay-via-api) |
| Withdraw collateral | `POST /ktx/klend/withdraw` | [Recipe](https://docs.kamino.finance/build/recipes/borrow/withdraw-via-api) |
| **Read Market Data** |
| List all markets | `GET /v2/kamino-market` | [API Docs](https://api-docs.kamino.finance) |
| Get market details | `GET /kamino-market/{marketPubkey}` | [API Docs](https://api-docs.kamino.finance) |
| Historical reserve APY | `GET /kamino-market/{marketPubkey}/reserves/{reservePubkey}/metrics/history` | [API Docs](https://api-docs.kamino.finance) |
| **Read User Data** |
| Get user obligations | `GET /kamino-market/{marketPubkey}/users/{userPubkey}/obligations` | [API Docs](https://api-docs.kamino.finance) |
| Get obligation details | `GET /kamino-market/{marketPubkey}/obligations/{obligationPubkey}` | [API Docs](https://api-docs.kamino.finance) |
| Get obligation PnL | `GET /kamino-market/{marketPubkey}/users/{userPubkey}/obligations/{obligationPubkey}/pnl` | [API Docs](https://api-docs.kamino.finance) |
| Get user rewards | `GET /kamino-market/{marketPubkey}/users/{userPubkey}/rewards` | [API Docs](https://api-docs.kamino.finance) |
## Important Notes
- **Address Lookup Tables**: All API transactions use ALTs, must use `decompileTransactionMessageFetchingLookupTables`
- **Health checks**: Always verify obligation LTV before borrowing or withdrawing collateral
- **Commitment levels**: Use `finalized` for blockhash, `confirmed` for transaction sends
- **Error handling**: Wrap all operations in try-catch blocks
- **Historical data**: Only available via API
## Complete Tutorials
- [Deposit and Borrow Tutorial](https://docs.kamino.finance/build/tutorials/borrow/deposit-and-borrow)
- [Repay and Withdraw Tutorial](https://docs.kamino.finance/build/tutorials/borrow/repay-and-withdraw)
references/api.md
Verified Kamino REST API endpoints:# Kamino API Reference
Quick reference for Kamino Finance REST API.
## Base URL
`https://api.kamino.finance`
No API key required for public endpoints.
## Complete Documentation
- Full API Reference: https://kamino.com/docs/build/api-reference
- OpenAPI Specification: https://api-docs.kamino.finance
## Key Endpoints
**Kamino Earn:**
- `POST /ktx/kvault/deposit` - Deposit to vault
- `POST /ktx/kvault/withdraw` - Withdraw from vault
- `GET /kvaults/vaults` - List all vaults
- `GET /kvaults/users/{walletAddress}/positions` - User positions
**Kamino Borrow:**
- `POST /ktx/klend/deposit` - Deposit collateral
- `POST /ktx/klend/borrow` - Borrow assets
- `POST /ktx/klend/repay` - Repay loan
- `POST /ktx/klend/withdraw` - Withdraw collateral
- `GET /v2/kamino-market` - List all markets
- `GET /kamino-market/{marketPubkey}/users/{userPubkey}/obligations` - User obligations
**Utilities:**
- `GET /oracles/prices` - Oracle pricing data
- `POST /luts/find-minimal` - Find minimal Address Lookup Tables
## Important Notes
- All transaction endpoints return base64-encoded transactions
- Transactions use Address Lookup Tables and require `decompileTransactionMessageFetchingLookupTables`
- Client must decode, sign with fresh blockhash, and submit transactions
Usage Examples
Once installed, your agent can execute commands like:- “Deposit 100 USDC into the SOL-USDC vault”
- “Check my current lending positions on Kamino”
- “Withdraw 50% of my vault shares”
- “Supply 1000 USDC to the lending market”
- “What’s the APY on the SOL-USDC vault?”