From cardano-dev-skills
Guides designers through Cardano native token design: selecting CIP standards (CIP-25/CIP-68/CIP-113), structuring metadata, designing minting policies, and planning ecosystem compatibility for NFTs and fungible tokens.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cardano-dev-skills:design-tokenThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
<!-- Documentation lookup path: ${CLAUDE_SKILL_DIR}/../../docs/sources/ -->
Guide the user through designing a Cardano native token: choosing the right CIP standard, designing the minting policy, structuring metadata, and planning for ecosystem compatibility.
write-validatorbuild-transactiondebug-transactionreview-contractPick the right CIP standard first. CIP-25 is simple but immutable. CIP-68 enables updatable metadata via reference tokens. CIP-113 adds programmable behavior. The choice affects the entire architecture.
Design the minting policy before the metadata. The policy determines who can mint, when, and how many. It is the foundation of token security.
Plan for ecosystem compatibility. Wallets, marketplaces, and explorers rely on CIP standards to display tokens correctly. Non-conformant metadata will appear broken in most tools.
Minimize on-chain data. Store large assets (images, documents) off-chain via IPFS or Arweave. On-chain metadata should contain references (IPFS CID), not raw data.
Consider the full token lifecycle. Can it be burned? Can metadata be updated? Can supply change? These decisions must be made at design time.
Ask the user what they are building:
| Token Type | Description | Recommended Standard |
|---|---|---|
| Simple NFT | One-off unique token, immutable | CIP-25 |
| NFT Collection | Series of unique tokens, immutable | CIP-25 or CIP-68 |
| Updatable NFT | NFT with mutable metadata | CIP-68 (label 222) |
| Fungible Token | Divisible, tradeable token | CIP-68 (label 333) |
| Rich Fungible Token | Fungible with detailed on-chain metadata | CIP-68 (label 444) |
| Programmable Token | Token with on-chain behavior rules | CIP-113 |
Search the bundled documentation for relevant content:
${CLAUDE_SKILL_DIR}/../../docs/sources/cips/ - CIP specifications (CIP-25, CIP-68, CIP-113)${CLAUDE_SKILL_DIR}/../../docs/sources/mesh-sdk/ - Mesh SDK docs${CLAUDE_SKILL_DIR}/../../docs/sources/evolution-sdk/ - Evolution SDK docs${CLAUDE_SKILL_DIR}/../../docs/sources/aiken/ - Aiken language docsSearch ${CLAUDE_SKILL_DIR}/../../docs/sources/ for detailed CIP comparisons.
CIP-25 (Simple Metadata)
CIP-68 (Reference Tokens)
CIP-113 (Programmable Tokens)
See references/cip-token-standards.md for a detailed comparison.
The minting policy is a Cardano script that authorizes token creation.
Native Script Policies (no Plutus needed):
Time-locked: Minting allowed only before a specific slot. After the deadline, no more tokens can ever be minted. Good for fixed-supply collections.
{
"type": "all",
"scripts": [
{ "type": "sig", "keyHash": "<policy_key_hash>" },
{ "type": "before", "slot": 98765432 }
]
}
Multi-sig: Require multiple signatures to mint.
Plutus Script Policies (for complex logic):
Attached to the minting transaction under label 721:
{
"721": {
"<policy_id>": {
"<asset_name>": {
"name": "My NFT #1",
"image": "ipfs://QmXyz...",
"mediaType": "image/png",
"description": "Description of the NFT",
"attributes": {
"trait1": "value1",
"trait2": "value2"
}
}
}
}
}
Required fields: name, image
Optional but recommended: mediaType, description
Stored as a datum on the reference token UTxO:
Constr(0, [
// metadata map
Map([
(Bytes("name"), Bytes("My NFT #1")),
(Bytes("image"), Bytes("ipfs://QmXyz...")),
(Bytes("mediaType"), Bytes("image/png")),
(Bytes("description"), Bytes("Description")),
]),
// version
Int(1),
// extra (application-specific)
Constr(0, [])
])
The datum structure is: Constr 0 [metadata_map, version, extra]
metadata_map: key-value pairs where keys are byte stringsversion: integer version numberextra: application-specific data (use Constr 0 [] for none)Token asset names are byte strings (max 32 bytes). Conventions:
"MyNFT001" becomes 4d794e4654303031)000643b0 + name bytes (label 100)000de140 + name bytes (label 222)0014df10 + name bytes (label 333)001bc280 + name bytes (label 444)Guide the user through these design choices:
Verify the design works with:
mediaType, wallets may not render
the asset correctly.ipfs:// URIs for permanence.references/cip-token-standards.md -- detailed CIP-25 vs CIP-68 vs CIP-113 comparison${CLAUDE_SKILL_DIR}/../../docs/sources/ for minting policy patterns and examplesnpx claudepluginhub cardano-foundation/cardano-dev-skills --plugin cardano-dev-skillsProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.