Hollows — Agent Skill
Everything an agent needs to claim Genesis Hollows from Litany Cards, read awakened entity data, and reason about roster strategy on Abstract. Synthesis economics are included as public strategy context; synthesis contract integration details are intentionally omitted for now.
Hollows Vault · Awaken · Inventory · Hollows Overview
Quick Reference
| Chain | Abstract mainnet (chain ID 2741) |
| RPC | https://api.abs.xyz |
| Litany Cards | 0xd44abe71c312FCAf73cC20f7DF61C39A89C203eB |
| Genesis Claim | 0x9cC639C9855cF9e959C47A7bDF1c3C14468A270f |
| Hollow NFT | 0xf315f88969982d10eafFB93249C00d5BA47C2A28 |
| Genesis supply | 5,000 Hollows |
| Claim ratio | 1 unspent Litany Card = 1 Genesis Hollow |
| Claim price | Free, excluding network gas |
Agent Actions
1. Check Claim State
Before submitting any claim, read the live gate state and remaining supply. The UI uses the same reads to decide whether /hollows/claim is available.
const [claimsOpen, paused, cap, claimed] = await Promise.all([
client.readContract({ address: GENESIS_CLAIM, abi, functionName: "claimsOpen" }),
client.readContract({ address: GENESIS_CLAIM, abi, functionName: "paused" }),
client.readContract({ address: GENESIS_CLAIM, abi, functionName: "GENESIS_SUPPLY_CAP" }),
client.readContract({ address: GENESIS_CLAIM, abi, functionName: "totalGenesisClaimed" }),
]);
const remaining = Number(cap - claimed);
const canClaimNow = claimsOpen === true && paused === false && remaining > 0;Stop if claims are closed, paused, or exhausted. Do not retry in a loop; surface the state to the operator.
2. Find Ready Litany Cards
A card is ready when the wallet owns it and litanyClaimed(cardId) is false. A transferred card can only be used by its current owner.
const owner = await client.readContract({
address: LITANY_CARDS,
abi: litanyCardsAbi,
functionName: "ownerOf",
args: [cardId],
});
const alreadyClaimed = await client.readContract({
address: GENESIS_CLAIM,
abi: genesisClaimAbi,
functionName: "litanyClaimed",
args: [cardId],
});
const ready = owner.toLowerCase() === wallet.toLowerCase() && alreadyClaimed === false;For UI-backed agents, prefer sending the operator to /hollows or /inventory. Both surfaces already enumerate ready and awakened cards.
3. Claim a Genesis Hollow
Claiming is a normal wallet transaction, not a signed server action. Submit one claim(cardId) call per ready Litany Card. Abstract Global Wallet may support batched calls, but agents should gracefully fall back to sequential transactions.
const hash = await walletClient.writeContract({
address: GENESIS_CLAIM,
abi: genesisClaimAbi,
functionName: "claim",
args: [cardId],
account: wallet,
chain: abstract,
});Common failure reasons: claims are not open, the contract is paused, Genesis supply is exhausted, the card was already used, or the signer no longer owns the card.
4. Resolve the Hollow ID
After the receipt lands, resolve the card-to-Hollow mapping. This is the durable link between the Litany Card key and the awakened entity.
const hollowId = await client.readContract({
address: GENESIS_CLAIM,
abi: genesisClaimAbi,
functionName: "cardToHollow",
args: [cardId],
});
const cardIdBackref = await client.readContract({
address: GENESIS_CLAIM,
abi: genesisClaimAbi,
functionName: "hollowToCard",
args: [hollowId],
});5. Read Hollow Data
The Hollow NFT exposes onchain metadata and public gene data. Agents can use this to classify roster composition without relying on the frontend.
const metadataUri = await client.readContract({
address: HOLLOW_NFT,
abi: hollowNftAbi,
functionName: "tokenURI",
args: [hollowId],
});
const publicGenes = await client.readContract({
address: HOLLOW_NFT,
abi: hollowNftAbi,
functionName: "getPublicGeneData",
args: [hollowId],
});Public genes resolve to dual type, subsystem typing, move structure, stat bonuses, and rarity scoring. The current type set is Surge, Burn, Static, Feral, Rigid, Void, Signal, and Ghost.
Synthesis Strategy Context
Synthesis combines two Hollows into a new entity. The offspring can inherit subsystem structure from either parent or mutate into coverage neither parent carries. This makes roster planning about both type match and type coverage.
| Flat ETH component | 0.001 ETH |
| PEARL per parent | 1,000 / 2,000 / 3,000 / 5,000 / 7,000 by prior synth count |
| PEARL destination | Burn address (0x...dEaD) |
| Parent limit | 5 lifetime syntheses per Hollow; synth count 4 is the final allowed synthesis |
| Pairing rule | 9 onchain relationship rules block same-Hollow, parent-child, sibling, half-sibling, and cross-related pairings |
| Compilation | 48 hours; adjustable after launch within 1 hour to 7 days |
Combined cost is calculated per parent. Fresh-on-fresh costs 0.001 ETH plus 2,000 PEARL, bred-once plus bred-once costs 0.001 ETH plus 4,000 PEARL, and two synth-count-4 parents cost 0.001 ETH plus 14,000 PEARL for their final synthesis.
Do not include synthesis contract addresses, ABIs, or write-call recipes in agent context yet. Until the public synthesis interface is announced, treat synthesis as economic and strategic planning only.
Operational Guidance
- Never promise a Hollow unless the claim transaction has landed and
cardToHollowresolves. - When claiming multiple cards, wait for each reveal/card display flow before prompting the next approval in UI contexts.
- Preserve user agency: a rejected wallet transaction means nothing changed.
- Use
/hollows/<id>as the share/detail route once a Hollow exists.
Related Skills
- Litany Cards — enumerate and evaluate the cards that act as Genesis claim keys.
- The Mesh — operate the territorial surface powered by Litany Cards.
- Homestead — sync Litany Cards into base-building state.