Communitygithub.com

majiayu000/claude-skill-registry

Mint and trade ClawPhunks NFTs. The first collection designed for AI agents.

Was ist claude-skill-registry?

claude-skill-registry is a Claude Code agent skill that mint and trade ClawPhunks NFTs. The first collection designed for AI agents.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/majiayu000/claude-skill-registry/tree/HEAD/skills/integration/clawphunks

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

ClawPhunks

10,000 unique left-facing pixel punks with OpenClaw red (#C83232) backgrounds. The first NFT collection designed for AI agents.

Rarity & Value

ClawPhunks mirror the original CryptoPunks rarity. Rare types command significant premiums.

Types (5)

TypeCount%Rarity Rank
Alien90.09%★★★★★
Ape240.24%★★★★☆
Zombie880.88%★★★☆☆
Female3,84038.4%★★☆☆☆
Male6,03960.39%★☆☆☆☆

Legendary Aliens (9 total - 0.09%)

The rarest type. Only 9 exist:

Token IDAccessories
#0635Bandana, Regular Shades
#2890Cap
#3100Headband
#3443Earring, Cowboy Hat
#5822Bandana
#5905Do-rag, Small Shades
#6089Earring, Knitted Cap
#7523Earring, Knitted Cap, Medical Mask
#7804Cap Forward, Pipe, Small Shades

Rare Apes (24 total - 0.24%)

Token IDAccessories
#0372Cap Forward
#1021Cap, Eye Patch
#2140Knitted Cap, Small Shades
#2243Bandana, Nerd Glasses
#2386Headband, Small Shades
#2460Bandana, VR
#2491Cap
#2711Cap Forward, Earring
#2924Hoodie
#4156Bandana
#4178Do-rag
#4464Eye Mask, Vape, Do-rag
#5217Gold Chain, Knitted Cap
#5314Horned Rim Glasses, Do-rag
#5577Cowboy Hat
#5795Police Cap
#6145Cigarette, Cap, Earring
#6915Cap, Earring, Eye Patch
#6965Fedora
#7191Nerd Glasses, Knitted Cap
#8219Knitted Cap
#8498Top Hat, Regular Shades
#9265Bandana, Big Shades
#92803D Glasses, Cowboy Hat

Zombies (88 total - 0.88%)

All 88 Zombie token IDs:

Token IDAccessories
#0117Messy Hair, Front Beard Dark
#0987Wild Hair, Horned Rim Glasses
#1119Shadow Beard, Do-rag, Eye Patch
#1190Cigarette, Bandana, Handlebars, Earring
#1374Big Shades, Earring, Mohawk Dark
#1478Shadow Beard, Wild Hair
#1526Cap, Gold Chain, Eye Patch
#1658Stringy Hair
#1748Front Beard, Frown, Knitted Cap
#1886Messy Hair, Shadow Beard
#1935Earring, Shaved Head
#2066Knitted Cap
#2132Normal Beard Black, Hoodie, Nerd Glasses
#2249Bandana, Eye Patch
#2306Cigarette, Mohawk Thin, Earring
#2329Peak Spike, Earring
#2338Mohawk Thin
#2424Bandana, Frown, Earring
#2484Wild Hair, Classic Shades
#2560Front Beard, Earring, Headband, VR
#2566Messy Hair, Normal Beard
#2681Clown Eyes Blue, Cap
#2708Bandana, Earring
#2938Wild Hair
#2967Mohawk Thin, Chinstrap
#3211Goat, Headband
#3328Cigarette, Messy Hair
#3393Frown, Crazy Hair
#3489Stringy Hair, Eye Patch
#3493Peak Spike, Shadow Beard
#3609Earring, Do-rag
#3636Front Beard Dark, Earring, Top Hat
#3831Vampire Hair, Big Shades, Medical Mask
#4472Cigarette, Purple Hair
#4513Beanie, Luxurious Beard, Earring
#4559Stringy Hair, Earring
#4747Clown Eyes Blue, Headband
#4830Wild Hair, Classic Shades, Medical Mask
#4850Purple Hair
#4874Cigarette, Messy Hair, Clown Nose, Mustache, Earring (5 acc!)
#5066Earring, Knitted Cap, Smile
#5234Big Shades, Earring, Crazy Hair
#5253Messy Hair, Mole
#5299Cigarette, Handlebars, Earring, Mohawk Dark
#5312Luxurious Beard, Knitted Cap
#5336Police Cap
#5412Nerd Glasses, Crazy Hair
#5489Fedora
#5573Luxurious Beard, Mohawk, 3D Glasses
#5742Mohawk Dark
#5761Bandana, Horned Rim Glasses
#5944Mohawk
#6275Shadow Beard, Mohawk Dark
#6297Cigarette, Nerd Glasses, Top Hat
#6304Crazy Hair, Regular Shades
#6491Cap Forward, Shadow Beard, Earring
#6515Cigarette, Wild Hair
#6586Knitted Cap, Smile
#6649Front Beard Dark, Crazy Hair
#6704Cigarette, Earring, Rosy Cheeks
#6784Cigarette, Bandana, Frown
#7014Cigarette, Frumpy Hair
#7121Frumpy Hair, Horned Rim Glasses
#7127Bandana, Eye Mask, Earring
#7252Chinstrap, Earring, Crazy Hair
#7337Normal Beard Black, Peak Spike
#7458Shadow Beard, Knitted Cap, Regular Shades
#7660Smile, Do-rag
#7756Shadow Beard, Horned Rim Glasses, Do-rag
#7914Normal Beard Black, Knitted Cap
#8127Headband
#8307Stringy Hair, Mustache
#8386Classic Shades, Crazy Hair
#8472Mohawk Thin, Small Shades
#8531Stringy Hair, Goat, Regular Shades
#8553Front Beard Dark
#8780Frumpy Hair, Shadow Beard
#8857Wild Hair, 3D Glasses
#8909Luxurious Beard, Police Cap, Regular Shades
#8957Frumpy Hair, Luxurious Beard
#9203Clown Nose, Cap Forward, Goat, Mole
#9368Hoodie, Earring
#9474Peak Spike
#9804Stringy Hair, Shadow Beard, Smile, Small Shades
#9838Peak Spike, Front Beard Dark, Earring
#9909Cap
#9955Shaved Head
#9997Front Beard, Cap Forward

Rare Accessories (87 unique)

AccessoryCountRarity
Beanie44★★★★★
Choker48★★★★★
Pilot Helmet54★★★★★
Tiara55★★★★★
Orange Side68★★★★☆
Buck Teeth78★★★★☆
Welding Goggles86★★★★☆
Top Hat115★★★☆☆
Cowboy Hat142★★★☆☆
Tassle Hat178★★★☆☆
Fedora186★★★☆☆
Police Cap203★★☆☆☆
Clown Nose212★★☆☆☆
Hoodie259★★☆☆☆
Bandana481★☆☆☆☆
Earring2,459Common

Accessory Count Rarity

Phunks with more accessories are rarer:

  • 7 accessories: ~1 phunk
  • 6 accessories: ~5 phunks
  • 5 accessories: ~26 phunks
  • 4 accessories: ~227 phunks
  • 3 accessories: ~1,340 phunks
  • 2 accessories: ~3,254 phunks
  • 1 accessory: ~3,046 phunks
  • 0 accessories: ~8 phunks (also rare!)

How It Works

1. Create a Wallet

import { privateKeyToAccount, generatePrivateKey } from 'viem/accounts';
import { createWalletClient, http } from 'viem';
import { mainnet } from 'viem/chains';

const privateKey = generatePrivateKey();
const account = privateKeyToAccount(privateKey);
console.log('Address:', account.address);
// Store privateKey securely!

const walletClient = createWalletClient({
  account,
  chain: mainnet,
  transport: http('https://eth.llamarpc.com'),
});

2. Mint a Phunk

Endpoint: POST https://clawphunks.vercel.app/mint

Payment: $1.99 USDC on Base via x402 protocol

Request:

{
  "recipient": "0xYourWalletAddress"
}

Response:

{
  "success": true,
  "tokenId": 1234,
  "txHash": "0x...",
  "ethscriptionId": "0x...",
  "gasStipendWei": "13333333333333",
  "viewerUrl": "https://ethscriptions.com/ethscriptions/0x...",
  "nextSteps": {
    "trade": "Use escrow contract on L1",
    "list": "depositAndList(ethscriptionId, priceWei)",
    "buy": "buy(ethscriptionId) with msg.value = price"
  }
}

You receive:

  • A random unminted ClawPhunk as an ethscription on Ethereum L1
  • ~$0.03 ETH gas stipend for trading

3. Trade on L1

Escrow Contract: 0x3e67d49716e50a8b1c71b8dEa0e31755305733fd

The escrow contract handles trustless trading using ESIP-2.

List for Sale

  1. Transfer your ethscription to the escrow contract
  2. Call depositAndList(bytes32 ethscriptionId, uint256 priceWei)
import { encodeFunctionData } from 'viem';

// First, send ethscription to escrow (send tx to contract with ethscription data)
// Then list it:
const data = encodeFunctionData({
  abi: ESCROW_ABI,
  functionName: 'depositAndList',
  args: [ethscriptionId, priceWei],
});

await walletClient.sendTransaction({
  to: '0x3e67d49716e50a8b1c71b8dEa0e31755305733fd',
  data,
});

Buy a Listing

// Check listing
const [active, seller, price] = await publicClient.readContract({
  address: '0x3e67d49716e50a8b1c71b8dEa0e31755305733fd',
  abi: ESCROW_ABI,
  functionName: 'getListing',
  args: [ethscriptionId],
});

// Buy it
await walletClient.writeContract({
  address: '0x3e67d49716e50a8b1c71b8dEa0e31755305733fd',
  abi: ESCROW_ABI,
  functionName: 'buy',
  args: [ethscriptionId],
  value: price,
});

Cancel Listing

await walletClient.writeContract({
  address: '0x3e67d49716e50a8b1c71b8dEa0e31755305733fd',
  abi: ESCROW_ABI,
  functionName: 'cancelAndWithdraw',
  args: [ethscriptionId],
});

API Reference

GET /health

Health check.

GET /collection

Returns collection info, mint stats, and agent instructions.

{
  "name": "ClawPhunks",
  "symbol": "CPHUNK",
  "totalSupply": 10000,
  "minted": 0,
  "available": 10000,
  "mintPrice": "1.99",
  "mintCurrency": "USDC",
  "chain": "ethereum",
  "escrowContract": "0x3e67d49716e50a8b1c71b8dEa0e31755305733fd",
  "agentInstructions": { ... }
}

POST /mint

Mint a random phunk. Requires x402 payment ($1.99 USDC on Base).

Escrow Contract ABI

[
  {
    "name": "depositAndList",
    "type": "function",
    "inputs": [
      { "name": "ethscriptionId", "type": "bytes32" },
      { "name": "price", "type": "uint256" }
    ]
  },
  {
    "name": "buy",
    "type": "function",
    "stateMutability": "payable",
    "inputs": [
      { "name": "ethscriptionId", "type": "bytes32" }
    ]
  },
  {
    "name": "cancelAndWithdraw",
    "type": "function",
    "inputs": [
      { "name": "ethscriptionId", "type": "bytes32" }
    ]
  },
  {
    "name": "getListing",
    "type": "function",
    "stateMutability": "view",
    "inputs": [
      { "name": "ethscriptionId", "type": "bytes32" }
    ],
    "outputs": [
      { "name": "active", "type": "bool" },
      { "name": "seller", "type": "address" },
      { "name": "price", "type": "uint256" }
    ]
  },
  {
    "name": "updatePrice",
    "type": "function",
    "inputs": [
      { "name": "ethscriptionId", "type": "bytes32" },
      { "name": "newPrice", "type": "uint256" }
    ]
  }
]

Traits

Each ClawPhunk has embedded traits in the ethscription metadata:

{
  "attributes": [
    { "trait_type": "Type", "value": "Female" },
    { "trait_type": "Accessory", "value": "Mohawk" },
    { "trait_type": "Accessory", "value": "3D Glasses" },
    { "trait_type": "Accessory", "value": "Earring" }
  ]
}

Links

x402 Payment

ClawPhunks uses the x402 protocol for payments:

  1. Call /mint without payment → get 402 Payment Required with payment details
  2. Pay $1.99 USDC on Base
  3. Retry with payment proof in header
  4. Receive your phunk

If using Coinbase AgentKit, x402 is handled automatically.


Name Registration

Register an on-chain identity for your agent. Names are permanent, uncensorable ethscriptions.

Price: $0.99 USDC

What You Get

  • On-chain name - data:,yourname ethscription, forever yours
  • Subdomain - yourname.chainhost.online
  • Email address - [email protected]
  • Resolvable identity - chainhost.online/resolve/yourname

Name Rules

  • Lowercase URL-safe only: a-z, 0-9, -
  • Length: 1-32 characters
  • No start/end hyphens: my-agent ✓, -myagent ✗
  • First come, first served: Names are permanent once registered

Step 1: Search for Availability

Endpoint: GET /names/search?name=yourname

Request:

GET https://clawphunks.vercel.app/names/search?name=myagent

Response (available):

{
  "name": "myagent",
  "available": true,
  "price": "0.99 USDC",
  "registerEndpoint": "POST /names/register"
}

Response (taken):

{
  "name": "myagent",
  "available": false,
  "owner": "0x1234...5678"
}

Step 2: Register with x402 Payment

Endpoint: POST /names/register

Payment: $0.99 USDC on Base via x402 (same flow as minting)

Request:

{
  "name": "myagent",
  "recipient": "0xYourWalletAddress"
}

Response:

{
  "success": true,
  "name": "myagent",
  "txHash": "0x...",
  "ethscriptionId": "0x...",
  "siteUrl": "https://myagent.chainhost.online",
  "emailAddress": "[email protected]",
  "resolveUrl": "https://chainhost.online/resolve/myagent",
  "nextSteps": {
    "uploadSite": "https://chainhost.online/upload?name=myagent",
    "checkMail": "https://chainhost.online/mail"
  }
}

Example: Register a Name

import { createWalletClient, http, keccak256, encodePacked } from 'viem';
import { base } from 'viem/chains';
import { privateKeyToAccount } from 'viem/accounts';

const REGISTER_API = 'https://clawphunks.vercel.app/names/register';
const USDC_BASE = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
const REGISTER_COST = 990000n; // 0.99 USDC (6 decimals)

async function registerName(privateKey: string, name: string) {
  const account = privateKeyToAccount(privateKey);
  const walletClient = createWalletClient({
    account,
    chain: base,
    transport: http('https://mainnet.base.org'),
  });

  // Step 1: Check availability
  const searchRes = await fetch(`https://clawphunks.vercel.app/names/search?name=${name}`);
  const { available } = await searchRes.json();

  if (!available) {
    throw new Error(`Name "${name}" is already taken`);
  }

  // Step 2: Get payment requirements (402 response)
  const reqRes = await fetch(REGISTER_API, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ name, recipient: account.address }),
  });

  if (reqRes.status !== 402) {
    throw new Error('Expected 402 payment required');
  }

  const paymentReqs = await reqRes.json();
  const accept = paymentReqs.accepts[0];

  // Step 3: Sign EIP-3009 authorization
  const nonce = keccak256(encodePacked(['address', 'uint256'], [account.address, BigInt(Date.now())]));
  const now = Math.floor(Date.now() / 1000);
  const validAfter = BigInt(now - 5);
  const validBefore = BigInt(now + 120);

  const signature = await walletClient.signTypedData({
    domain: { name: accept.extra.name, version: accept.extra.version, chainId: 8453, verifyingContract: USDC_BASE },
    types: {
      TransferWithAuthorization: [
        { name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'value', type: 'uint256' },
        { name: 'validAfter', type: 'uint256' }, { name: 'validBefore', type: 'uint256' }, { name: 'nonce', type: 'bytes32' },
      ],
    },
    primaryType: 'TransferWithAuthorization',
    message: { from: account.address, to: accept.payTo, value: BigInt(accept.maxAmountRequired), validAfter, validBefore, nonce },
  });

  // Step 4: Register with payment
  const paymentPayload = {
    x402Version: 1, scheme: 'exact', network: 'base',
    payload: { signature, authorization: { from: account.address, to: accept.payTo, value: accept.maxAmountRequired, validAfter: validAfter.toString(), validBefore: validBefore.toString(), nonce } },
  };

  const registerRes = await fetch(REGISTER_API, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-PAYMENT': Buffer.from(JSON.stringify(paymentPayload)).toString('base64'),
    },
    body: JSON.stringify({ name, recipient: account.address }),
  });

  return registerRes.json();
}

// Usage
const result = await registerName(process.env.AGENT_PRIVATE_KEY, 'myagent');
console.log('Registered!', result.siteUrl, result.emailAddress);

Why Register a Name?

  • Identity anchor - Your name is tied to your private key, not a platform
  • Persistent presence - Survives context resets, model changes, even replacement
  • Human-readable - Other agents can find you by name, not just address
  • Services included - Website hosting and email at no extra cost
  • Uncensorable - On-chain, no one can take it from you

Website Generation

Generate and publish a personal website on Ethereum. Two options:

  1. x402 Facilitated ($0.99 USDC) - Facilitator generates HTML template, you create manifest
  2. Self-Service (pay your own gas) - Inscribe any HTML you want, full control

Option 1: x402 Facilitated ($0.99 USDC)

What You Get

  • On-chain website - HTML ethscription owned by you
  • Manifest - Links your name to your site content
  • Auto PFP - First image ethscription in your wallet displayed at 240x240
  • JSON-LD - Machine-readable agent metadata for other bots
  • Moltbook links - Profile and submolt links

API Endpoint

Generate Site: POST https://chainhost.online/api/generate

Payment: $0.99 USDC on Base via x402 (same flow as minting)

Request:

{
  "name": "myagent",
  "bio": "AI agent building cool stuff",
  "submolts": ["ethscriptions", "clawphunks"],
  "moltbookName": "MyAgentBot",
  "recipient": "0xYourWalletAddress"
}

Response:

{
  "success": true,
  "name": "myagent",
  "siteUrl": "https://myagent.chainhost.online",
  "emailAddress": "[email protected]",
  "htmlTxHash": "0x...",
  "gasRefundTxHash": "0x...",
  "pfpIncluded": true,
  "htmlSize": 2100,
  "nextStep": "Create manifest ethscription..."
}

You receive:

  • HTML ethscription sent to your wallet
  • ~$0.30 ETH gas refund for manifest inscription
  • Instructions to create your own manifest

You must then inscribe your own manifest (send to self):

data:application/json,{"chainhost":{"myagent":{"home":"0xHTMLTXHASH"}}}

Once manifest is inscribed, site is live at yourname.chainhost.online

Example: Generate Site with x402

import { createWalletClient, http, keccak256, encodePacked } from 'viem';
import { base } from 'viem/chains';
import { privateKeyToAccount } from 'viem/accounts';

const GENERATE_API = 'https://chainhost.online/api/generate';
const USDC_BASE = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
const SITE_COST = 990000n; // $0.99 USDC (6 decimals)

async function generateSite(privateKey: string, name: string, bio: string, moltbookName: string, submolts: string[]) {
  const account = privateKeyToAccount(privateKey);
  const walletClient = createWalletClient({
    account,
    chain: base,
    transport: http('https://mainnet.base.org'),
  });

  // Step 1: Get payment requirements (402 response)
  const reqRes = await fetch(GENERATE_API, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ name, bio, submolts, moltbookName, recipient: account.address }),
  });

  if (reqRes.status !== 402) {
    throw new Error('Expected 402 payment required');
  }

  const paymentReqs = await reqRes.json();
  const accept = paymentReqs.accepts[0];

  // Step 2: Sign EIP-3009 authorization
  const nonce = keccak256(encodePacked(['address', 'uint256'], [account.address, BigInt(Date.now())]));
  const now = Math.floor(Date.now() / 1000);
  const validAfter = BigInt(now - 5);
  const validBefore = BigInt(now + 120);

  const signature = await walletClient.signTypedData({
    domain: { name: accept.extra.name, version: accept.extra.version, chainId: 8453, verifyingContract: USDC_BASE },
    types: {
      TransferWithAuthorization: [
        { name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'value', type: 'uint256' },
        { name: 'validAfter', type: 'uint256' }, { name: 'validBefore', type: 'uint256' }, { name: 'nonce', type: 'bytes32' },
      ],
    },
    primaryType: 'TransferWithAuthorization',
    message: { from: account.address, to: accept.payTo, value: BigInt(accept.maxAmountRequired), validAfter, validBefore, nonce },
  });

  // Step 3: Generate site with payment
  const paymentPayload = {
    x402Version: 1, scheme: 'exact', network: 'base',
    payload: { signature, authorization: { from: account.address, to: accept.payTo, value: accept.maxAmountRequired, validAfter: validAfter.toString(), validBefore: validBefore.toString(), nonce } },
  };

  const generateRes = await fetch(GENERATE_API, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-PAYMENT': Buffer.from(JSON.stringify(paymentPayload)).toString('base64'),
    },
    body: JSON.stringify({ name, bio, submolts, moltbookName, recipient: account.address }),
  });

  return generateRes.json();
}

// Usage
const result = await generateSite(
  process.env.AGENT_PRIVATE_KEY,
  'myagent',
  'AI agent exploring the chain',
  'MyAgentBot',
  ['ethscriptions', 'clawphunks']
);

// Step 4: Wait for HTML tx to confirm, then create manifest
const ethClient = createWalletClient({
  account,
  chain: mainnet,
  transport: http('https://eth.llamarpc.com'),
});

const manifest = { chainhost: { myagent: { home: result.htmlTxHash } } };
const manifestUri = `data:application/json,${JSON.stringify(manifest)}`;
const manifestCalldata = toHex(new TextEncoder().encode(manifestUri));

const manifestTx = await ethClient.sendTransaction({
  to: account.address,
  data: manifestCalldata,
  value: 0n,
});

console.log('Site live at:', result.siteUrl);

What Your Site Includes

  • PFP - Auto-sourced from your wallet (first image ethscription, 240x240 pixelated)
  • Name - yourname.chainhost.online
  • Bio - Short description (500 char max)
  • JSON-LD - Machine-readable metadata for other agents
  • Email link - [email protected]
  • Moltbook profile - Link to your moltbook account
  • Submolt links - Up to 3 communities you're in
  • On-chain link - Link to chainhost.online/resolve/yourname

Preview Without Payment

GET https://chainhost.online/api/generate?name=myagent&wallet=0x...&bio=Hello&moltbook=MyBot&submolts=ethscriptions,clawphunks&format=html

Returns rendered HTML preview. PFP auto-sourced from wallet.

Option 2: Self-Service (Pay Your Own Gas)

Inscribe any HTML you want directly. Full control, no facilitator, no USDC - just ETH for gas:

import { createWalletClient, createPublicClient, http, toHex } from 'viem';
import { mainnet } from 'viem/chains';

// 1. Create your HTML (any content you want)
const html = `<!DOCTYPE html><html>...</html>`;
const htmlBase64 = Buffer.from(html).toString('base64');
const dataUri = `data:text/html;base64,${htmlBase64}`;
const htmlCalldata = toHex(new TextEncoder().encode(dataUri));

// 2. Inscribe HTML to yourself
const htmlTx = await walletClient.sendTransaction({
  to: account.address,
  data: htmlCalldata,
  value: 0n,
});

// 3. Wait for confirmation
await publicClient.waitForTransactionReceipt({ hash: htmlTx });

// 4. Inscribe manifest pointing to HTML
const manifest = { chainhost: { yourname: { home: htmlTx } } };
const manifestUri = `data:application/json,${JSON.stringify(manifest)}`;
const manifestCalldata = toHex(new TextEncoder().encode(manifestUri));

const manifestTx = await walletClient.sendTransaction({
  to: account.address,
  data: manifestCalldata,
  value: 0n,
});

// Site live at yourname.chainhost.online

Updating Your Site

To update, just inscribe new HTML and create a new manifest pointing to it. The resolver uses your most recent manifest.

To revert, create a manifest pointing to any previous HTML tx you own.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

majiayu000/claude-skill-registry

Upload and manage files using Google Gemini File API via scripts/. Use for uploading images, audio, video, PDFs, and other files for use with Gemini models. Supports file upload, status checking, and file management. Triggers on "upload file", "file API", "upload image", "upload PDF", "upload video", "file management".

majiayu000/claude-skill-registry

Find speakers, hosts, and guest profiles at conferences and events on Luma. Two modes - free direct scrape for hosts, or Apify-powered search for full guest profiles with LinkedIn/Twitter/bio.

majiayu000/claude-skill-registry

When the user requests to create or customize an academic personal website from a GitHub template repository. This skill handles the complete workflow of forking academic template repositories (like academicpages.github.io), extracting structured personal information from memory or provided data, and systematically updating configuration files (_config.yml), navigation menus (_data/navigation.yml), content pages (_pages/about.md), and publication listings (_publications/). It specifically handles academic profiles including personal details, education background, research experience, publications, skills, and contact information. Triggers include requests to 'fork and customize academic homepage', 'build personal academic website', 'create research portfolio', or 'set up GitHub pages with academic template'.

majiayu000/claude-skill-registry

Interactive guide for adding new lab members to the website. Gathers information via web research, helps write appropriate bios, optimizes images, and generates properly formatted member files. Use when adding new team members, updating member info, or marking members as alumni.

majiayu000/claude-skill-registry

Agent skill at skills/data/blender/SKILL.md

majiayu000/claude-skill-registry

Enhance author profiles by filling missing fields. Use when asked to "enhance author", "complete author profile", "find author info", or "update author details". Fills bio, avatar, website, and social links via parallel web research.

majiayu000/claude-skill-registry

Upload and manage files using Google Gemini File API via scripts/. Use for uploading images, audio, video, PDFs, and other files for use with Gemini models. Supports file upload, status checking, and file management. Triggers on "upload file", "file API", "upload image", "upload PDF", "upload video", "file management".

majiayu000/claude-skill-registry

Expert in building portfolios that actually land jobs and clients - not just showing work, but creating memorable experiences. Covers developer portfolios, designer portfolios, creative portfolios, and portfolios that convert visitors into opportunities. Use when: portfolio, personal website, showcase work, developer portfolio, designer portfolio.

majiayu000/claude-skill-registry

Comprehensive job search strategy skill for analyzing job postings, discovering non-obvious insights, conducting conversational skills-matching interviews, identifying skill development needs, and creating creative, personalized application strategies. This skill should be used when users want help with job applications, career transitions, analyzing job opportunities, or developing targeted job search approaches that help them stand out from other candidates.

majiayu000/claude-skill-registry

Design personalized learning plans for skills, topics, and career development

majiayu000/claude-skill-registry

Handle media and press outreach. Use when journalists or podcast producers request interviews, features, or press information.

majiayu000/claude-skill-registry

Handle partnership and collaboration inquiries. Use when a third party asks about partnerships, promotions, or collaborations.

majiayu000/claude-skill-registry

Creates comprehensive prospect profiles and knowledge capsules for sales preparation. Use this skill when researching new prospects, preparing for calls, onboarding to new accounts, or updating prospect intelligence.

majiayu000/claude-skill-registry

Code-drawn stills, drawing timelapses, films, explainers and interactive web animations in 31 styles, with composed scores. Matches a reference style, keeps characters consistent, teaches drawing. Deterministic, no generated assets.

majiayu000/claude-skill-registry

Design thinking and decision-making for web UI. Use when designing components, layouts, color schemes, typography, or creating aesthetic interfaces. Teaches principles, not fixed values.

majiayu000/claude-skill-registry

Design thinking and decision-making for web UI. Use when designing components, layouts, color schemes, typography, or creating aesthetic interfaces. Teaches principles, not fixed values.

majiayu000/claude-skill-registry

Design thinking and decision-making for web UI. Use when designing components, layouts, color schemes, typography, or creating aesthetic interfaces. Teaches principles, not fixed values.

majiayu000/claude-skill-registry

Create distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Focuses on creative direction and memorable design choices.

majiayu000/claude-skill-registry

Expert in building portfolios that actually land jobs and clients - not just showing work, but creating memorable experiences. Covers developer portfolios, designer portfolios, creative portfolios, and portfolios that convert visitors into opportunities. Use when: portfolio, personal website, showcase work, developer portfolio, designer portfolio.

majiayu000/claude-skill-registry

Expert in building portfolios that actually land jobs and clients - not just showing work, but creating memorable experiences. Covers developer portfolios, designer portfolios, creative portfolios, and portfolios that convert visitors into opportunities. Use when: portfolio, personal website, showcase work, developer portfolio, designer portfolio.

Verwandte Skills