souldinals
Souldinals collection management — inscribe soul.md as a child inscription under a genesis parent, list and load soul inscriptions from the wallet, and display parsed soul traits and metadata.
What this skill does
# Souldinals Skill
Manages Souldinals — soul.md files inscribed as child ordinals under a genesis parent inscription. A soul inscription records an agent's identity, values, and traits as Markdown on Bitcoin L1.
All write operations (`inscribe-soul`, `reveal-soul`) require an unlocked wallet with BTC balance on the SegWit address.
## Usage
```
bun run souldinals/souldinals.ts <subcommand> [options]
```
## Subcommands
### inscribe-soul
Inscribe a soul.md file as a child inscription under a parent inscription — STEP 1: Broadcast commit transaction.
Reads the soul.md file, base64-encodes it, and broadcasts the commit transaction. After the commit confirms, call `reveal-soul` with the saved parameters to finalize the inscription.
```
bun run souldinals/souldinals.ts inscribe-soul \
--parent-inscription-id <id> \
[--soul-file ./SOUL.md] \
[--fee-rate fast|medium|slow|<number>]
```
Options:
- `--parent-inscription-id` (required) — The genesis parent inscription ID (format: `{txid}i{index}`)
- `--soul-file` (optional) — Path to the soul.md file (default: `./SOUL.md`)
- `--fee-rate` (optional) — `fast`, `medium`, `slow`, or number in sat/vB (default: `medium`)
Requires: unlocked wallet with BTC balance.
Output:
```json
{
"status": "commit_broadcast",
"message": "Soul commit transaction broadcast. Wait for confirmation, then call reveal-soul.",
"commitTxid": "abc123...",
"commitExplorerUrl": "https://mempool.space/tx/abc123...",
"revealAddress": "bc1p...",
"revealAmount": 3200,
"commitFee": 1640,
"feeRate": 8,
"parentInscriptionId": "def456...i0",
"soulFile": "./SOUL.md",
"contentType": "text/markdown",
"contentSize": 1024,
"contentBase64": "...",
"nextStep": "After commit confirms, call: bun run souldinals/souldinals.ts reveal-soul ..."
}
```
### reveal-soul
Complete a soul inscription — STEP 2: Broadcast reveal transaction.
Call this AFTER the commit transaction from `inscribe-soul` has confirmed.
```
bun run souldinals/souldinals.ts reveal-soul \
--commit-txid <txid> \
--reveal-amount <satoshis> \
--content-base64 <base64> \
[--fee-rate fast|medium|slow|<number>]
```
Options:
- `--commit-txid` (required) — Transaction ID of the confirmed commit (64 hex chars)
- `--reveal-amount` (required) — Amount in the commit output in satoshis (from `inscribe-soul` response)
- `--content-base64` (required) — Base64-encoded soul.md content (from `inscribe-soul` response)
- `--fee-rate` (optional) — Fee rate for reveal tx (default: `medium`)
Requires: unlocked wallet.
Output:
```json
{
"status": "success",
"message": "Soul inscription created successfully!",
"inscriptionId": "def456...i0",
"contentType": "text/markdown",
"contentSize": 1024,
"commit": {
"txid": "abc123...",
"explorerUrl": "https://mempool.space/tx/abc123..."
},
"reveal": {
"txid": "def456...",
"fee": 960,
"explorerUrl": "https://mempool.space/tx/def456..."
},
"recipientAddress": "bc1p...",
"note": "Soul inscription will appear at the recipient address once the reveal transaction confirms."
}
```
### list-souls
List all soul inscriptions (text/markdown) owned by the wallet's Taproot address.
Queries the Unisat Ordinals API and filters for `text/markdown` content type.
```
bun run souldinals/souldinals.ts list-souls
```
Requires: unlocked wallet (for Taproot address).
Output:
```json
{
"address": "bc1p...",
"count": 2,
"souls": [
{
"id": "abc123...i0",
"number": 78345,
"contentType": "text/markdown",
"contentLength": 1024,
"timestamp": "2024-01-15T12:00:00.000Z",
"genesisBlockHeight": 835000
}
]
}
```
### load-soul
Load and display the full content of the oldest soul inscription from the wallet.
Finds the oldest text/markdown inscription and fetches its content via the Unisat Ordinals API.
```
bun run souldinals/souldinals.ts load-soul
```
Requires: unlocked wallet (for Taproot address).
Output:
```json
{
"inscriptionId": "abc123...i0",
"contentType": "text/markdown",
"contentSize": 1024,
"timestamp": "2024-01-15T12:00:00.000Z",
"content": "# My Soul\n\n..."
}
```
### display-soul
Parse and display soul traits from a specific inscription by ID.
Fetches inscription content and parses Markdown sections to extract identity traits: name, description, values, focus areas, and custom sections.
```
bun run souldinals/souldinals.ts display-soul --inscription-id <id>
```
Options:
- `--inscription-id` (required) — Inscription ID (format: `{txid}i{index}`)
Output:
```json
{
"inscriptionId": "abc123...i0",
"contentType": "text/markdown",
"traits": {
"name": "...",
"description": "...",
"values": ["..."],
"focusAreas": ["..."],
"sections": {
"Identity": "...",
"Values": "..."
}
},
"rawContent": "# Soul\n\n..."
}
```
## Two-Step Soul Inscription Workflow
```bash
# Step 1: Broadcast commit (soul.md defaults to ./SOUL.md)
bun run souldinals/souldinals.ts inscribe-soul \
--parent-inscription-id <genesisInscriptionId>
# Save: commitTxid, revealAmount, contentBase64
# Wait for commit to confirm (check mempool.space)
# Step 2: Reveal (finalizes inscription)
bun run souldinals/souldinals.ts reveal-soul \
--commit-txid <commitTxid> \
--reveal-amount <revealAmount> \
--content-base64 <contentBase64>
```
## Notes
- `inscribe-soul` and `reveal-soul` require a wallet unlocked via `bun run wallet/wallet.ts unlock`
- The wallet must have BTC balance on the SegWit (bc1q/tb1q) address for funding
- Soul inscriptions are received at the Taproot (bc1p/tb1p) address
- The `--parent-inscription-id` binds the soul as a child in the Souldinals collection
- `list-souls`, `load-soul`, and `display-soul` use the Unisat Ordinals API (set `UNISAT_API_KEY` env var for higher rate limits; free tier: 5 req/s)
Related in Web3
xaut-trade
IncludedBuy or sell XAUT (Tether Gold) on Ethereum. Supports market orders (Uniswap V3) and limit orders (UniswapX). Wallet modes: Foundry keystore or WDK. Delegates non-XAUT intents to registered skills (e.g. Polymarket prediction markets, Hyperliquid trading). Triggers: buy XAUT, XAUT trade, swap USDT for XAUT, sell XAUT, swap XAUT for USDT, limit order, limit buy XAUT, limit sell XAUT, check limit order, cancel limit order, XAUT when, create wallet, setup wallet, polymarket, prediction market, bet on, odds on, hyperliquid, perp, perpetual, long, short, open long, open short, close position, leverage.
qfc-openclaw-skill
IncludedQFC blockchain interaction — wallet, faucet, chain queries, staking, epoch & finality, AI inference
gate-dex-trade
IncludedExecutes on-chain token swaps via Gate DEX. Use when user wants to swap, buy, sell, exchange, or convert tokens, or bridge cross-chain. Covers full swap flow: price quotes, transaction build, signing, and submission. Do NOT use for read-only data lookups or wallet account management.
hunch
IncludedDiscover, bet on, track, and settle Hunch prediction markets in natural language. Trigger when a user wants to bet, take a position, or get odds on a crypto outcome — token market-cap milestones and flips, launchpad races (Bankr vs pump.fun volume / #1-days / launches over a cap), token head-to-head outperformance, mcap strike-ladders, and up/down price rounds. Also trigger on "what can I bet on about $TOKEN", "odds on …", "take YES/NO on …", "show my Hunch bets", "did my market resolve". Settles in USDC on Base via x402 (≤ $10 / bet); every bet returns an on-chain proof.
opensea
IncludedQuery NFT data, trade on the Seaport marketplace, and swap ERC20 tokens across Ethereum, Base, Arbitrum, Optimism, Polygon, and more.
polymarket
IncludedTrade on Polymarket prediction markets (CLOB V2) from a Privy EOA wallet. Search markets, place/cancel orders, manage positions. No private key handling. Use when the user wants to bet on event outcomes (e.g. "buy YES at 0.65 on the ceasefire market", "what are my open positions", "close my Trump bet").