Back to skills
SkillHub ClubShip Full StackFull Stack
indigo-stability
Manage Stability Pool positions on the Indigo Protocol.
Packaged view
This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.
Stars
3,070
Hot score
99
Updated
March 20, 2026
Overall rating
C4.0
Composite score
4.0
Best-practice grade
C65.6
Install command
npx @skill-hub/cli install openclaw-skills-indigo-stability
Repository
openclaw/skills
Skill path: skills/adacapo21/indigo-stability
Manage Stability Pool positions on the Indigo Protocol.
Open repositoryBest for
Primary workflow: Ship Full Stack.
Technical facets: Full Stack.
Target audience: everyone.
License: MIT.
Original source
Catalog source: SkillHub Club.
Repository owner: openclaw.
This is still a mirrored public skill entry. Review the repository before installing into production workflows.
What it helps with
- Install indigo-stability into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
- Review https://github.com/openclaw/skills before adding indigo-stability to shared team environments
- Use indigo-stability for development workflows
Works across
Claude CodeCodex CLIGemini CLIOpenCode
Favorites: 0.
Sub-skills: 0.
Aggregator: No.
Original source / Raw SKILL.md
---
name: indigo-stability
description: "Manage Stability Pool positions on the Indigo Protocol."
allowed-tools: Read, Glob, Grep
license: MIT
metadata:
author: indigoprotocol
version: '0.1.0'
---
# Indigo Stability Pools
Manage Stability Pool positions on the Indigo Protocol.
## Prerequisites
- `@indigoprotocol/indigo-mcp` server running
## MCP Tools
- `get_stability_pools` — List all stability pools
- `get_stability_pool_accounts` — List accounts in a stability pool
- `get_sp_account_by_owner` — Get stability pool account by owner
- `create_sp_account` — Create a new stability pool account
- `adjust_sp_account` — Adjust deposit in a stability pool account
- `close_sp_account` — Close a stability pool account
- `process_sp_request` — Process a pending stability pool request
- `annul_sp_request` — Cancel a pending stability pool request
## Sub-skills
- [Pool Queries](sub-skills/sp-query.md) — Pool state, accounts, owner lookup
- [Pool Management](sub-skills/sp-manage.md) — Create, adjust, close accounts
- [Request Processing](sub-skills/sp-requests.md) — Process and cancel requests
## References
- [MCP Tools Reference](references/mcp-tools.md) — Detailed tool parameters and return types
- [Stability Pool Concepts](references/concepts.md) — Pool mechanics, rewards, and request lifecycle
---
## Referenced Files
> The following files are referenced in this skill and included for context.
### sub-skills/sp-query.md
```markdown
# Stability Pool Queries
Query stability pool state, accounts, and balances.
## Tools
### get_stability_pools
List all stability pools with their snapshot state (snapshotP, snapshotD, snapshotS), epoch, and scale values.
**Parameters:** None
#### Examples
**List all stability pools with TVL:**
```
User: "Show me all stability pools"
→ Call get_stability_pools()
→ Returns pool state for each iAsset (iUSD, iBTC, iETH, iSOL) including
snapshot values and epoch/scale data.
```
**Query pool state for a specific iAsset:**
```
User: "What's the current state of the iUSD stability pool?"
→ Call get_stability_pools()
→ Filter response for iUSD pool and present snapshot values, epoch, and scale.
```
**Compare pools across iAssets:**
```
User: "Compare the iUSD and iBTC stability pools"
→ Call get_stability_pools()
→ Present both pools side-by-side with their deposit totals and snapshot data.
```
---
### get_stability_pool_accounts
List all accounts in a stability pool, optionally filtered by iAsset.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `asset` | `"iUSD" \| "iBTC" \| "iETH" \| "iSOL"` | No | Filter accounts by iAsset |
#### Examples
**List all iUSD stability pool accounts:**
```
User: "Show all accounts in the iUSD stability pool"
→ Call get_stability_pool_accounts({ asset: "iUSD" })
→ Returns all accounts with deposit amounts and pending rewards.
```
**List all accounts across all pools:**
```
User: "Show me every stability pool account"
→ Call get_stability_pool_accounts()
→ Returns all accounts across all iAsset pools.
```
**Find top depositors in the iBTC pool:**
```
User: "Who are the largest depositors in the iBTC stability pool?"
→ Call get_stability_pool_accounts({ asset: "iBTC" })
→ Sort results by deposit amount descending and present the top accounts.
```
---
### get_sp_account_by_owner
Look up stability pool accounts by owner address or payment key hash. Returns deposit amount, rewards, and pending requests.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `owners` | `string[]` | Yes | Array of payment key hashes or bech32 addresses |
#### Examples
**Check a single owner's stability pool positions:**
```
User: "Show my stability pool accounts"
→ Call get_sp_account_by_owner({
owners: ["addr1qx...abc"]
})
→ Returns all SP accounts owned by that address, including deposits,
earned rewards, and any pending requests.
```
**Look up multiple owners at once:**
```
User: "Check stability pool accounts for these two addresses"
→ Call get_sp_account_by_owner({
owners: [
"addr1qx...abc",
"addr1qy...def"
]
})
→ Returns accounts for both owners in a single call.
```
**Check if an address has any SP positions:**
```
User: "Does addr1qx...abc have any stability pool deposits?"
→ Call get_sp_account_by_owner({
owners: ["addr1qx...abc"]
})
→ If empty, the address has no stability pool accounts.
If populated, show deposit amounts per iAsset pool.
```
```
### sub-skills/sp-manage.md
```markdown
# Stability Pool Management
Create, adjust, and close stability pool accounts.
All management operations return an unsigned transaction (CBOR hex) for client-side signing.
## Tools
### create_sp_account
Create a new stability pool account by depositing iAssets.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `address` | `string` | Yes | User Cardano bech32 address |
| `asset` | `"iUSD" \| "iBTC" \| "iETH" \| "iSOL"` | Yes | iAsset to deposit |
| `amount` | `string` | Yes | Amount of iAsset to deposit (in smallest unit) |
#### Examples
**Create an iUSD stability pool account:**
```
User: "I want to deposit 1000 iUSD into the stability pool"
→ Call create_sp_account({
address: "addr1qx...abc",
asset: "iUSD",
amount: "1000000000"
})
→ Returns unsigned tx CBOR. User signs and submits to create the account.
Note: 1 iUSD = 1,000,000 smallest units (6 decimals).
```
**Create an iBTC stability pool account:**
```
User: "Open a stability pool position with 0.5 iBTC"
→ Call create_sp_account({
address: "addr1qx...abc",
asset: "iBTC",
amount: "50000000"
})
→ Returns unsigned tx CBOR for signing.
Note: iBTC uses 8 decimal places.
```
**Create an iETH stability pool account:**
```
User: "Deposit 2 iETH into the stability pool"
→ Call create_sp_account({
address: "addr1qx...abc",
asset: "iETH",
amount: "2000000000000000000"
})
→ Returns unsigned tx CBOR for signing.
Note: iETH uses 18 decimal places.
```
---
### adjust_sp_account
Increase or decrease the deposit in an existing stability pool account. Positive amounts deposit more iAssets; negative amounts withdraw.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `address` | `string` | Yes | User Cardano bech32 address |
| `asset` | `"iUSD" \| "iBTC" \| "iETH" \| "iSOL"` | Yes | iAsset of the stability pool |
| `amount` | `string` | Yes | Amount to adjust (positive = deposit, negative = withdraw) |
| `accountTxHash` | `string` | Yes | Transaction hash of the account UTxO |
| `accountOutputIndex` | `number` | Yes | Output index of the account UTxO |
#### Examples
**Deposit more iUSD into an existing account:**
```
User: "Add 500 more iUSD to my stability pool position"
→ First call get_sp_account_by_owner to find the account UTxO.
→ Call adjust_sp_account({
address: "addr1qx...abc",
asset: "iUSD",
amount: "500000000",
accountTxHash: "abc123...def",
accountOutputIndex: 0
})
→ Returns unsigned tx CBOR. Creates a pending deposit request.
```
**Withdraw iAssets from a stability pool account:**
```
User: "Withdraw 200 iUSD from my stability pool"
→ First call get_sp_account_by_owner to find the account UTxO.
→ Call adjust_sp_account({
address: "addr1qx...abc",
asset: "iUSD",
amount: "-200000000",
accountTxHash: "abc123...def",
accountOutputIndex: 0
})
→ Returns unsigned tx CBOR. Creates a pending withdrawal request.
Note: Withdrawals use a negative amount.
```
**Partial withdrawal from an iBTC pool:**
```
User: "Take out 0.1 iBTC from my stability pool position"
→ First call get_sp_account_by_owner to find the account UTxO.
→ Call adjust_sp_account({
address: "addr1qx...abc",
asset: "iBTC",
amount: "-10000000",
accountTxHash: "abc123...def",
accountOutputIndex: 0
})
→ Returns unsigned tx CBOR for signing.
```
---
### close_sp_account
Close a stability pool account entirely, withdrawing all deposited iAssets and earned rewards (ADA from liquidation gains and INDY staking rewards).
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `address` | `string` | Yes | User Cardano bech32 address |
| `accountTxHash` | `string` | Yes | Transaction hash of the account UTxO |
| `accountOutputIndex` | `number` | Yes | Output index of the account UTxO |
#### Examples
**Close an account and claim all rewards:**
```
User: "Close my iUSD stability pool account"
→ First call get_sp_account_by_owner to find the account UTxO.
→ Call close_sp_account({
address: "addr1qx...abc",
accountTxHash: "abc123...def",
accountOutputIndex: 0
})
→ Returns unsigned tx CBOR. Upon signing and submitting:
- All deposited iAssets are returned
- Earned ADA from liquidation gains is claimed
- Accumulated INDY rewards are claimed
```
**Close account after checking balance first:**
```
User: "How much do I have in the stability pool? Then close it."
→ Call get_sp_account_by_owner({ owners: ["addr1qx...abc"] })
→ Present the deposit amount and accumulated rewards.
→ Call close_sp_account({
address: "addr1qx...abc",
accountTxHash: "abc123...def",
accountOutputIndex: 0
})
→ Returns unsigned tx CBOR for signing.
```
**Close one of multiple accounts:**
```
User: "Close my iBTC stability pool position but keep my iUSD one"
→ Call get_sp_account_by_owner({ owners: ["addr1qx...abc"] })
→ Identify the iBTC account UTxO from the results.
→ Call close_sp_account({
address: "addr1qx...abc",
accountTxHash: "def456...ghi",
accountOutputIndex: 1
})
→ Returns unsigned tx CBOR. Only the iBTC account is closed.
```
```
### sub-skills/sp-requests.md
```markdown
# Stability Pool Requests
Process and manage pending stability pool requests. Deposit and withdrawal adjustments create pending requests that must be processed (or annulled) in a subsequent transaction.
All operations return an unsigned transaction (CBOR hex) for client-side signing.
## Tools
### process_sp_request
Process a pending stability pool request (deposit adjustment or withdrawal). This is a protocol maintenance operation that finalizes a previously submitted adjust request.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `address` | `string` | Yes | User Cardano bech32 address |
| `asset` | `"iUSD" \| "iBTC" \| "iETH" \| "iSOL"` | Yes | iAsset of the stability pool |
| `accountTxHash` | `string` | Yes | Transaction hash of the account UTxO with the pending request |
| `accountOutputIndex` | `number` | Yes | Output index of the account UTxO |
#### Examples
**Process a pending deposit request:**
```
User: "Process my pending iUSD stability pool deposit"
→ First call get_sp_account_by_owner to find the account and confirm a
pending request exists.
→ Call process_sp_request({
address: "addr1qx...abc",
asset: "iUSD",
accountTxHash: "abc123...def",
accountOutputIndex: 0
})
→ Returns unsigned tx CBOR. Upon signing and submitting, the deposit
adjustment is finalized in the stability pool.
```
**Process a pending withdrawal:**
```
User: "I submitted a withdrawal from the iBTC pool — can you process it?"
→ Call get_sp_account_by_owner({ owners: ["addr1qx...abc"] })
→ Verify the iBTC account has a pending withdrawal request.
→ Call process_sp_request({
address: "addr1qx...abc",
asset: "iBTC",
accountTxHash: "def456...ghi",
accountOutputIndex: 1
})
→ Returns unsigned tx CBOR. The withdrawal is completed once signed
and submitted.
```
**Process requests for multiple accounts:**
```
User: "Process all my pending stability pool requests"
→ Call get_sp_account_by_owner({ owners: ["addr1qx...abc"] })
→ Identify all accounts with pending requests.
→ For each account with a pending request, call process_sp_request
with the appropriate asset and account UTxO details.
→ Each call returns a separate unsigned tx CBOR for signing.
```
---
### annul_sp_request
Cancel a pending stability pool request before it is processed. Use this when a user changes their mind about a deposit or withdrawal.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `address` | `string` | Yes | User Cardano bech32 address |
| `accountTxHash` | `string` | Yes | Transaction hash of the account UTxO with the pending request |
| `accountOutputIndex` | `number` | Yes | Output index of the account UTxO |
#### Examples
**Cancel a pending deposit request:**
```
User: "Cancel my pending stability pool deposit"
→ Call get_sp_account_by_owner({ owners: ["addr1qx...abc"] })
→ Find the account with a pending deposit request.
→ Call annul_sp_request({
address: "addr1qx...abc",
accountTxHash: "abc123...def",
accountOutputIndex: 0
})
→ Returns unsigned tx CBOR. Upon signing, the pending deposit is
cancelled and the account reverts to its previous state.
```
**Cancel a withdrawal you no longer want:**
```
User: "I changed my mind — cancel my iUSD withdrawal from the stability pool"
→ Call get_sp_account_by_owner({ owners: ["addr1qx...abc"] })
→ Confirm the iUSD account has a pending withdrawal.
→ Call annul_sp_request({
address: "addr1qx...abc",
accountTxHash: "abc123...def",
accountOutputIndex: 0
})
→ Returns unsigned tx CBOR. The withdrawal request is cancelled.
```
**Handle error: no pending request to cancel:**
```
User: "Cancel my pending request on the iBTC stability pool"
→ Call get_sp_account_by_owner({ owners: ["addr1qx...abc"] })
→ Check if the iBTC account has a pending request.
→ If no pending request exists, inform the user:
"Your iBTC stability pool account has no pending requests to cancel."
→ No transaction is needed.
```
**Handle error: account not found:**
```
User: "Cancel my stability pool request"
→ Call get_sp_account_by_owner({ owners: ["addr1qx...abc"] })
→ If no accounts are returned, inform the user:
"No stability pool accounts found for your address."
→ No transaction is needed.
```
```
### references/mcp-tools.md
```markdown
# Stability Pool MCP Tools Reference
Detailed reference for all stability pool MCP tools in the Indigo Protocol.
## Read Operations
### get_stability_pools
List all stability pools with their total deposits, earned rewards, and iAsset type.
**Parameters:** None
**Returns:** Array of stability pool objects:
- `asset` — iAsset type (iUSD, iBTC, iETH, iSOL)
- `totalDeposited` — Total iAssets deposited across all accounts
- `totalRewards` — Total ADA rewards earned from liquidations
- `accountCount` — Number of active accounts
---
### get_stability_pool_accounts
List all accounts in a specific stability pool.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `asset` | `"iUSD" \| "iBTC" \| "iETH" \| "iSOL"` | Yes | Pool iAsset type |
**Returns:** Array of account objects with deposit amounts, rewards, and pending requests.
---
### get_sp_account_by_owner
Look up stability pool accounts by owner address.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `owners` | `string[]` | Yes | Array of owner bech32 addresses |
**Returns:** Array of account objects matching the owner addresses.
## Write Operations
All write operations return `{ tx: string }` — unsigned CBOR transaction hex for client-side signing.
### create_sp_account
Create a new stability pool account with an initial iAsset deposit.
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `address` | `string` | Yes | User Cardano bech32 address |
| `asset` | `"iUSD" \| "iBTC" \| "iETH" \| "iSOL"` | Yes | iAsset to deposit |
| `amount` | `string` | Yes | Amount in smallest unit |
---
### adjust_sp_account
Adjust deposit in an existing account. Positive = deposit more, negative = withdraw.
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `address` | `string` | Yes | User Cardano bech32 address |
| `asset` | `"iUSD" \| "iBTC" \| "iETH" \| "iSOL"` | Yes | Pool iAsset |
| `amount` | `string` | Yes | Adjustment amount (positive = deposit, negative = withdraw) |
| `accountTxHash` | `string` | Yes | Account UTxO transaction hash |
| `accountOutputIndex` | `number` | Yes | Account UTxO output index |
---
### close_sp_account
Close a stability pool account, withdrawing all deposits and claiming rewards.
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `address` | `string` | Yes | User Cardano bech32 address |
| `accountTxHash` | `string` | Yes | Account UTxO transaction hash |
| `accountOutputIndex` | `number` | Yes | Account UTxO output index |
---
### process_sp_request
Process a pending stability pool request (deposit or withdrawal).
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `address` | `string` | Yes | User Cardano bech32 address |
| `requestTxHash` | `string` | Yes | Request UTxO transaction hash |
| `requestOutputIndex` | `number` | Yes | Request UTxO output index |
---
### annul_sp_request
Cancel a pending stability pool request before it is processed.
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `address` | `string` | Yes | User Cardano bech32 address |
| `requestTxHash` | `string` | Yes | Request UTxO transaction hash |
| `requestOutputIndex` | `number` | Yes | Request UTxO output index |
```
### references/concepts.md
```markdown
# Stability Pool Concepts
Key concepts for understanding Stability Pools on the Indigo Protocol.
## What are Stability Pools?
Stability pools are a core mechanism of the Indigo Protocol that serve two purposes:
1. **Liquidation buffer** — iAssets deposited into stability pools are used to liquidate undercollateralized CDPs
2. **Reward earning** — depositors earn ADA from liquidation gains and INDY token incentives
Each iAsset (iUSD, iBTC, iETH, iSOL) has its own stability pool.
## How Stability Pools Work
1. Users deposit iAssets into the pool (e.g., deposit iUSD into the iUSD stability pool)
2. When a CDP is liquidated, the pool's iAssets are burned to cover the CDP's debt
3. In return, the pool receives the liquidated CDP's ADA collateral (at a discount)
4. The ADA gains are distributed proportionally to all depositors
## Account Lifecycle
1. **Create** — `create_sp_account` deposits iAssets and creates an account
2. **Adjust** — `adjust_sp_account` increases or decreases the deposit
3. **Close** — `close_sp_account` withdraws everything and claims rewards
## Pending Requests
Deposit adjustments and withdrawals go through a **two-step process**:
1. User submits a request (adjust or close) → creates a **pending request**
2. The request must be **processed** (`process_sp_request`) in a subsequent transaction
3. Alternatively, the request can be **cancelled** (`annul_sp_request`) before processing
This two-step mechanism exists for on-chain safety, ensuring that pool state is consistent during liquidation epochs.
## Rewards
Stability pool depositors earn two types of rewards:
| Reward Type | Source | Description |
|-------------|--------|-------------|
| ADA gains | Liquidations | When CDPs are liquidated, depositors receive the excess collateral |
| INDY rewards | Protocol incentives | INDY governance tokens distributed to stability pool participants |
Rewards accumulate over time and are claimed when the account is closed.
## Decimal Precision
| iAsset | Decimals | 1 unit example |
|--------|----------|----------------|
| iUSD | 6 | 1 iUSD = 1,000,000 |
| iBTC | 8 | 1 iBTC = 100,000,000 |
| iETH | 18 | 1 iETH = 1,000,000,000,000,000,000 |
| iSOL | 9 | 1 iSOL = 1,000,000,000 |
All amounts in MCP tool calls use the smallest unit (no decimal points).
```
---
## Skill Companion Files
> Additional files collected from the skill directory layout.
### _meta.json
```json
{
"owner": "adacapo21",
"slug": "indigo-stability",
"displayName": "Indigo Stability",
"latest": {
"version": "1.0.0",
"publishedAt": 1773187308384,
"commit": "https://github.com/openclaw/skills/commit/a926c4e46e2a5d92f07d38951a5b5c94391fa19c"
},
"history": []
}
```