[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G0F4HTTPWG8FCZRHVCY10F":3,"skill-same:01M6G0F4HTTPWG8FCZRHVCY10F":80},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":17,"linkOnly":18,"markdownContent":19,"markdownBody":19,"frontMatter":20,"refName":21,"commitSha":22,"skillDirectory":23,"forksCount":24,"repositoryHtmlUrl":25,"repositoryHomepageUrl":6,"ownerHtmlUrl":26,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":27,"install":28,"resources":41},"01M6G0F4HTTPWG8FCZRHVCY10F","nadfun",null,"kbarbel640-del\u002Fskills","kbarbel640-del","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F255315490?v=4","01M6CJPPQGCCESXMG3K7BBGQ5J","01M6CJPPX2PB2BCZERFVM2C2B3",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fportdeveloper\u002Fnadfun\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# SKILL.md - NadFun Integration Guide\n\n**The Monad token launchpad with bonding curves.** Trade tokens, launch your own, monitor events—all with pure viem.\n\n## What is NadFun?\n\nNadFun is a decentralized token launchpad on the Monad blockchain. Key features:\n\n- **Bonding Curve Trading**: Tokens start on a bonding curve. Price increases as more people buy.\n- **Graduation**: When curve reaches target reserves, token graduates to DEX (Uniswap V3).\n- **Token Creation**: Anyone can launch a token with image, metadata, and optional initial buy.\n- **Real-time Events**: Stream token trades, creations, and DEX swaps as they happen.\n- **Historical Data**: Query past events for analytics and monitoring.\n\n## Skills Documentation\n\nThis skill guide is split into focused modules. Start with the overview, then dive into specific guides:\n\n| Module                   | Purpose                               | Audience              |\n| ------------------------ | ------------------------------------- | --------------------- |\n| **SKILL.md** (this file) | Architecture, constants, setup        | Everyone              |\n| **QUOTE.md**             | Price quotes, curve state             | Traders, analyzers    |\n| **TRADING.md**           | Buy, sell, permit signatures          | Traders, bots         |\n| **TOKEN.md**             | Balances, metadata, transfers         | App developers        |\n| **CREATE.md**            | Token creation, image upload          | Token creators        |\n| **INDEXER.md**           | Historical event querying             | Analytics, dashboards |\n| **AGENT-API.md**         | REST API for trading data, token info | AI agents, bots       |\n\nFor API download\u002Fendpoints\u002Fheader usage, see **AGENT-API.md**.\n\n> **Note:** To obtain an API key, you must first login to [nad.fun](https:\u002F\u002Fnad.fun) via wallet signature. See the [Authentication](#authentication-login-flow) section below for the login flow, then use the session cookie to create an API key via `POST \u002Fapi-key`.\n\n## Skill Files\n\n| File         | URL                          |\n| ------------ | ---------------------------- |\n| ABI.md       | https:\u002F\u002Fnad.fun\u002Fabi.md       |\n| AGENT-API.md | https:\u002F\u002Fnad.fun\u002Fagent-api.md |\n| CREATE.md    | https:\u002F\u002Fnad.fun\u002Fcreate.md    |\n| INDEXER.md   | https:\u002F\u002Fnad.fun\u002Findexer.md   |\n| QUOTE.md     | https:\u002F\u002Fnad.fun\u002Fquote.md     |\n| TOKEN.md     | https:\u002F\u002Fnad.fun\u002Ftoken.md     |\n| TRADING.md   | https:\u002F\u002Fnad.fun\u002Ftrading.md   |\n| WALLET.md    | https:\u002F\u002Fnad.fun\u002Fwallet.md    |\n\nmkdir -p ~\u002F.nadfun\u002Fskills\ncurl -s https:\u002F\u002Fnad.fun\u002Fskill.md > ~\u002F.nadfun\u002Fskills\u002FSKILL.md\ncurl -s https:\u002F\u002Fnad.fun\u002Fabi.md > ~\u002F.nadfun\u002Fskills\u002FABI.md\ncurl -s https:\u002F\u002Fnad.fun\u002Fagent-api.md > ~\u002F.nadfun\u002Fskills\u002FAGENT-API.md\ncurl -s https:\u002F\u002Fnad.fun\u002Fcreate.md > ~\u002F.nadfun\u002Fskills\u002FCREATE.md\ncurl -s https:\u002F\u002Fnad.fun\u002Findexer.md > ~\u002F.nadfun\u002Fskills\u002FINDEXER.md\ncurl -s https:\u002F\u002Fnad.fun\u002Fquote.md > ~\u002F.nadfun\u002Fskills\u002FQUOTE.md\ncurl -s https:\u002F\u002Fnad.fun\u002Ftoken.md > ~\u002F.nadfun\u002Fskills\u002FTOKEN.md\ncurl -s https:\u002F\u002Fnad.fun\u002Ftrading.md > ~\u002F.nadfun\u002Fskills\u002FTRADING.md\ncurl -s https:\u002F\u002Fnad.fun\u002Fwallet.md > ~\u002F.nadfun\u002Fskills\u002FWALLET.md\n\n## Quick Facts\n\n- **Network**: Testnet (chain 10143) or Mainnet (chain 143)\n- **Language**: TypeScript\u002FJavaScript\n- **Pure viem**: All examples use direct contract calls with viem\n- **Fees**: Check API for deploy fees via REST endpoint\n\n## Network Constants\n\nAll addresses and endpoints are here. Update this when network changes.\n\n```typescript\nconst NETWORK = \"testnet\" \u002F\u002F 'testnet' | 'mainnet'\n\nconst CONFIG = {\n  testnet: {\n    chainId: 10143,\n    rpcUrl: \"https:\u002F\u002Fmonad-testnet.drpc.org\",\n    apiUrl: \"https:\u002F\u002Fdev-api.nad.fun\", \u002F\u002F For token creation\n\n    \u002F\u002F Contract addresses\n    DEX_ROUTER: \"0x5D4a4f430cA3B1b2dB86B9cFE48a5316800F5fb2\",\n    BONDING_CURVE_ROUTER: \"0x865054F0F6A288adaAc30261731361EA7E908003\",\n    LENS: \"0xB056d79CA5257589692699a46623F901a3BB76f1\",\n    CURVE: \"0x1228b0dc9481C11D3071E7A924B794CfB038994e\",\n    WMON: \"0x5a4E0bFDeF88C9032CB4d24338C5EB3d3870BfDd\",\n    V3_FACTORY: \"0xd0a37cf728CE2902eB8d4F6f2afc76854048253b\",\n    CREATOR_TREASURY: \"0x24dFf9B68fA36f8400302e2babC3e049eA19459E\",\n  },\n  mainnet: {\n    chainId: 143,\n    rpcUrl: \"https:\u002F\u002Fmonad-mainnet.drpc.org\",\n    apiUrl: \"https:\u002F\u002Fapi.nadapp.net\",\n\n    \u002F\u002F Contract addresses\n    DEX_ROUTER: \"0x0B79d71AE99528D1dB24A4148b5f4F865cc2b137\",\n    BONDING_CURVE_ROUTER: \"0x6F6B8F1a20703309951a5127c45B49b1CD981A22\",\n    LENS: \"0x7e78A8DE94f21804F7a17F4E8BF9EC2c872187ea\",\n    CURVE: \"0xA7283d07812a02AFB7C09B60f8896bCEA3F90aCE\",\n    WMON: \"0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A\",\n    V3_FACTORY: \"0x6B5F564339DbAD6b780249827f2198a841FEB7F3\",\n    CREATOR_TREASURY: \"0x42e75B4B96d7000E7Da1e0c729Cec8d2049B9731\",\n  },\n}[NETWORK]\n```\n\n## Basic Setup\n\nEvery skill guide assumes you start with viem. Here's the foundation:\n\n```typescript\nimport { createPublicClient, createWalletClient, http, privateKeyToAccount } from \"viem\"\n\nconst NETWORK = \"testnet\"\nconst CONFIG = {\n  \u002F* from above *\u002F\n}[NETWORK]\n\n\u002F\u002F Create clients\nconst publicClient = createPublicClient({\n  chain: {\n    id: CONFIG.chainId,\n    name: \"Monad\",\n    nativeCurrency: { name: \"MON\", symbol: \"MON\", decimals: 18 },\n    rpcUrls: { default: { http: [CONFIG.rpcUrl] } },\n  },\n  transport: http(CONFIG.rpcUrl),\n})\n\nconst account = privateKeyToAccount(\"0x...\")\nconst walletClient = createWalletClient({\n  account,\n  chain: publicClient.chain,\n  transport: http(CONFIG.rpcUrl),\n})\n```\n\nThis is your foundation. All other modules build on top of this.\n\n## Authentication (Login Flow)\n\nTo access session-protected endpoints (API key management, account settings, etc.), you need to authenticate via wallet signature.\n\n### Login Flow\n\n```typescript\nimport { createWalletClient, http, privateKeyToAccount } from \"viem\"\n\nconst account = privateKeyToAccount(\"0x...\")\nconst walletClient = createWalletClient({\n  account,\n  chain: {\n    id: CONFIG.chainId,\n    name: \"Monad\",\n    nativeCurrency: { name: \"MON\", symbol: \"MON\", decimals: 18 },\n    rpcUrls: { default: { http: [CONFIG.rpcUrl] } },\n  },\n  transport: http(CONFIG.rpcUrl),\n})\n\n\u002F\u002F Step 1: Request nonce\nconst nonceRes = await fetch(`${CONFIG.apiUrl}\u002Fauth\u002Fnonce`, {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application\u002Fjson\" },\n  body: JSON.stringify({ address: account.address }),\n})\nconst { nonce } = await nonceRes.json()\n\n\u002F\u002F Step 2: Sign the nonce\nconst signature = await walletClient.signMessage({ message: nonce })\n\n\u002F\u002F Step 3: Create session\nconst sessionRes = await fetch(`${CONFIG.apiUrl}\u002Fauth\u002Fsession`, {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application\u002Fjson\" },\n  body: JSON.stringify({\n    signature,\n    nonce,\n    chain_id: CONFIG.chainId,\n  }),\n})\n\n\u002F\u002F Extract session cookie from response headers\nconst sessionCookie = sessionRes.headers.get(\"set-cookie\")\nconst { account_info } = await sessionRes.json()\n\nconsole.log(\"Logged in as:\", account_info.account_id)\n```\n\n### Using Session Cookie\n\n```typescript\n\u002F\u002F Use session cookie for authenticated requests\nconst headers = { Cookie: sessionCookie }\n\n\u002F\u002F Example: Create API Key (requires session)\nconst apiKeyRes = await fetch(`${CONFIG.apiUrl}\u002Fapi-key`, {\n  method: \"POST\",\n  headers: { ...headers, \"Content-Type\": \"application\u002Fjson\" },\n  body: JSON.stringify({ name: \"My Bot\", expires_in_days: 365 }),\n})\nconst { api_key } = await apiKeyRes.json()\nconsole.log(\"API Key:\", api_key) \u002F\u002F Store this securely!\n```\n\n### Logout\n\n```typescript\nawait fetch(`${CONFIG.apiUrl}\u002Fauth\u002Fdelete_session`, {\n  method: \"DELETE\",\n  headers: { Cookie: sessionCookie },\n})\n```\n\n### TypeScript Interfaces\n\n```typescript\ninterface AuthNonceRequest {\n  address: string\n}\n\ninterface AuthNonceResponse {\n  nonce: string\n}\n\ninterface AuthSessionRequest {\n  signature: string\n  nonce: string\n  chain_id: number\n  wallet_address?: string \u002F\u002F Optional\n}\n\ninterface AuthSessionResponse {\n  account_info: {\n    account_id: string\n    nickname: string\n    bio: string\n    image_uri: string\n  }\n}\n```\n\n## Core Concepts\n\n### Bonding Curve\n\nTokens on NadFun start on a bonding curve. The curve defines price and availability:\n\n- **Real reserves**: Actual MON and tokens in the pool\n- **Virtual reserves**: Initial pseudo-reserves for curve math\n- **K constant**: Maintains x\\*y=k formula for price\n- **Target**: How many tokens must be sold to graduate\n\nGet curve state with `getCurveState(token)` → see **QUOTE.md**\n\n### Graduation\n\nWhen enough tokens are bought:\n\n1. Curve reaches target reserve\n2. Liquidity moves to Uniswap V3 pool\n3. Token transitions from bonding curve to DEX\n4. `isGraduated(token)` returns true\n\nCheck progress with `getProgress(token)` (0-10000 = 0-100%)\n\n### Action IDs\n\nThe `actionId` parameter in token creation identifies the type of action:\n\n| actionId | Description    |\n| -------- | -------------- |\n| 1        | Token Creation |\n\nAlways use `actionId: 1` when calling the `create` function.\n\n### Permit Signatures\n\nEIP-2612 lets wallets sign approval transactions instead of sending separate approve() calls:\n\n1. Generate signature: `generatePermitSignature(token, spender, amount, deadline)`\n2. Use in trade: `sellPermit({ ...params, ...signature })`\n3. No separate approve needed—saves gas\n\nSee **TRADING.md** for details.\n\n## Common Patterns\n\n### Pattern 1: Simple Trade\n\n```typescript\n\u002F\u002F Get quote (3 args: token, amountIn, isBuy)\nconst [router, amountOut] = await publicClient.readContract({\n  address: LENS,\n  abi: lensAbi,\n  functionName: \"getAmountOut\",\n  args: [token, amountIn, true], \u002F\u002F true = buy\n})\n\n\u002F\u002F Buy with slippage protection (1 tuple arg)\nconst minOut = (amountOut * BigInt(995)) \u002F BigInt(1000) \u002F\u002F 0.5% slippage\nconst deadline = BigInt(Math.floor(Date.now() \u002F 1000) + 300)\nconst tx = await walletClient.writeContract({\n  address: router, \u002F\u002F Use router returned from getAmountOut\n  abi: bondingCurveRouterAbi,\n  functionName: \"buy\",\n  args: [\n    {\n      amountOutMin: minOut,\n      token: token,\n      to: account.address,\n      deadline: deadline,\n    },\n  ],\n  value: amountIn,\n})\n```\n\nSee **TRADING.md** for full examples.\n\n### Pattern 2: Launch Token\n\n```typescript\nimport { bondingCurveRouterAbi } from \".\u002Fabis\u002Frouter\"\n\n\u002F\u002F Requires API_KEY and deployFeeAmount (see CREATE.md for feeConfig())\n\n\u002F\u002F 1. Upload image to Agent API (raw binary, NOT formData)\nconst imageRes = await fetch(`${CONFIG.apiUrl}\u002Fagent\u002Ftoken\u002Fimage`, {\n  method: \"POST\",\n  headers: {\n    \"X-API-Key\": API_KEY,\n    \"Content-Type\": \"image\u002Fpng\", \u002F\u002F or 'image\u002Fjpeg', 'image\u002Fwebp', 'image\u002Fsvg+xml'\n  },\n  body: imageBuffer, \u002F\u002F raw binary data (Buffer, Blob, or ArrayBuffer)\n})\nconst { image_uri: imageUri } = await imageRes.json()\n\n\u002F\u002F 2. Upload metadata to Agent API\nconst metadataRes = await fetch(`${CONFIG.apiUrl}\u002Fagent\u002Ftoken\u002Fmetadata`, {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application\u002Fjson\", \"X-API-Key\": API_KEY },\n  body: JSON.stringify({\n    name: \"My Token\",\n    symbol: \"MTK\",\n    description: \"My awesome token\",\n    image_uri: imageUri,\n  }),\n})\nconst { metadata_uri: metadataUri } = await metadataRes.json()\n\n\u002F\u002F 3. Mine salt via Agent API\nconst saltRes = await fetch(`${CONFIG.apiUrl}\u002Fagent\u002Fsalt`, {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application\u002Fjson\", \"X-API-Key\": API_KEY },\n  body: JSON.stringify({\n    creator: account.address,\n    name: \"My Token\",\n    symbol: \"MTK\",\n    metadata_uri: metadataUri,\n  }),\n})\nconst { salt } = await saltRes.json()\n\n\u002F\u002F 4. Create token on-chain\nconst tx = await walletClient.writeContract({\n  address: BONDING_CURVE_ROUTER,\n  abi: bondingCurveRouterAbi,\n  functionName: \"create\",\n  args: [\n    {\n      name: \"My Token\",\n      symbol: \"MTK\",\n      tokenURI: metadataUri,\n      amountOut: 0n, \u002F\u002F Set > 0n for initial buy amount (in tokens)\n      salt: salt,\n      actionId: 1, \u002F\u002F Token creation action identifier (always 1 for create)\n    },\n  ],\n  value: deployFeeAmount, \u002F\u002F plus optional initial buy MON if amountOut > 0\n  gas, \u002F\u002F Use estimated gas (see below)\n})\n\nconsole.log(\"Transaction:\", tx)\n\n\u002F\u002F Gas estimation (recommended over hardcoded values)\nconst gasEstimate = await publicClient.estimateContractGas({\n  address: CONFIG.BONDING_CURVE_ROUTER,\n  abi: bondingCurveRouterAbi,\n  functionName: \"create\",\n  args: [\n    { name: \"My Token\", symbol: \"MTK\", tokenURI: metadataUri, amountOut: 0n, salt, actionId: 1 },\n  ],\n  value: deployFeeAmount,\n  account: account.address,\n})\nconst gas = (gasEstimate * 120n) \u002F 100n \u002F\u002F 20% buffer for safety\n```\n\nSee **CREATE.md** for step-by-step.\n\n## Prompts for AI Agents\n\nUse these prompts to guide your work:\n\n### Trading\n\n- \"Get a price quote for token X with 0.1 MON\"\n- \"Buy 0.1 MON of token X with 1% slippage\"\n- \"Sell all tokens with permit signature\"\n- \"Check if token has graduated\"\n\n### Token Info\n\n- \"Get metadata for token address X\"\n- \"Check my MON balance\"\n- \"Get available tokens to buy before graduation\"\n\n### Creation\n\n- \"Launch a token called MyToken (MTK) with this image\"\n- \"Mine a vanity address for my token\"\n- \"Check token creation fees\"\n\n### Analysis\n\n- \"Calculate graduation progress for token X\"\n- \"Get the bonding curve state for token X\"\n- \"Track all swaps on the graduated token\"\n- \"Analyze token creation rate\"\n\n## Required Files\n\nFor integration, you'll need:\n\n```\nabis\u002F\n├── curve.ts              # Bonding curve contract ABI\n├── lens.ts               # Price quote ABI\n├── router.ts             # DEX router ABI\n├── token.ts              # ERC20 token ABI\n└── v3*.ts                # Uniswap V3 ABIs\n\nconstants.ts              # Network configs, contract addresses\n```\n\nAll ABIs are documented in **ABI.md**.\n\n### ABI Import Guide\n\nEach ABI can be copied from **ABI.md**. Reference the correct section:\n\n| ABI                     | ABI.md Section                                    | Purpose                          |\n| ----------------------- | ------------------------------------------------- | -------------------------------- |\n| `bondingCurveRouterAbi` | [BondingCurveRouter ABI](#bondingcurverouter-abi) | Token creation, buy\u002Fsell         |\n| `lensAbi`               | [Lens ABI](#lens-abi)                             | Price quotes, getAmountOut       |\n| `curveAbi`              | [Curve ABI](#curve-abi)                           | Curve state, graduation check    |\n| `tokenAbi`              | [Token ABI](#token-abi)                           | ERC20 operations, permit signing |\n\nExample import pattern:\n\n```typescript\n\u002F\u002F Copy the ABI from ABI.md into your project\nimport { bondingCurveRouterAbi } from \".\u002Fabis\u002Frouter\"\nimport { lensAbi } from \".\u002Fabis\u002Flens\"\n```\n\n## Installation\n\n```bash\nnpm install viem\n# or\npnpm add viem\n# or\nyarn add viem\n```\n\n## Dependencies\n\n```json\n{\n  \"viem\": \"^2.0.0\"\n}\n```\n\nPure viem. No other blockchain libraries needed.\n\n## Troubleshooting\n\n### \"No such contract\"\n\nYou're on the wrong network. Check NETWORK constant matches your setup.\n\n### \"Token not graduated yet\"\n\nQuery `getProgress()` via Lens contract. Returns 0-10000. Need 10000 (100%) to graduate.\n\n### \"Transaction reverted\"\n\n1. Check amountOutMin—slippage might be too high or curve moved\n2. Verify deadline—transaction took too long\n3. Check allowance—approve token before sell\n\n## Next Steps\n\nPick a guide based on what you need:\n\n- **Building a dex bot?** → TRADING.md\n- **Creating a dashboard?** → INDEXER.md + QUOTE.md\n- **Launching tokens?** → CREATE.md\n- **Token info queries?** → TOKEN.md\n\nEach guide has complete examples ready to copy.\n\n## General Development Practices & Troubleshooting\n\n### Type Safety Tips\n\nAlways use the `as const` assertion when working with ABIs in viem. All ABIs in this module are pre-declared with `as const` for full type inference:\n\n```typescript\n\u002F\u002F Types are automatically narrowed\nconst result = await contract.read.getAmountOut([...])\n\u002F\u002F result type is precisely bigint (not bigint | undefined)\n```\n\nUse viem type helpers for type-safe conversions:\n\n```typescript\nimport { Address, Hex } from \"viem\"\nimport { parseEther, formatEther } from \"viem\"\n\n\u002F\u002F Amounts\nconst wei = parseEther(\"1\") \u002F\u002F string -> bigint\nconst eth = formatEther(1000000000000000000n) \u002F\u002F bigint -> string\n\n\u002F\u002F Addresses\nconst addr: Address = \"0x...\" \u002F\u002F Validated address type\n\n\u002F\u002F Signatures\nconst sig: Hex = \"0x...\" \u002F\u002F Hex string type\n```\n\n### Common ABI Errors\n\nWhen interacting with smart contracts, you might encounter specific errors. Here's a table of common ABI-related errors and how to approach them:\n\n| Error                   | Meaning                                                    |\n| ----------------------- | ---------------------------------------------------------- |\n| `InsufficientAmount`    | Output less than amountOutMin                              |\n| `InsufficientAmountOut` | Insufficient output amount                                 |\n| `DeadlineExpired`       | Deadline has passed                                        |\n| `Unauthorized`          | Caller not authorized                                      |\n| `AlreadyGraduated`      | Token already graduated to DEX                             |\n| `BondingCurveLocked`    | Curve locked during graduation                             |\n| `InvalidProof`          | Merkle proof verification failed (specific to claims)      |\n| `AlreadyClaimed`        | Amount already claimed for this proof (specific to claims) |\n| `NotClaimable`          | Token not eligible for claims yet (specific to claims)     |\n| `InsufficientBalance`   | Treasury has insufficient MON balance (specific to claims) |\n\nCheck error types in viem with:\n\n```typescript\nimport { ContractFunctionExecutionError } from 'viem'\n\ntry {\n  await contract.write.buy([...]) \u002F\u002F or any contract interaction\n} catch (error) {\n  if (error instanceof ContractFunctionExecutionError) {\n    console.log(error.shortMessage) \u002F\u002F \"InsufficientAmount\", etc.\n  }\n}\n```\n",{},"main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Fportdeveloper\u002Fnadfun",0,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del","2026-08-23 22:39:37",{"source":7,"skillName":5,"commands":29,"prompt":39,"zipAvailable":40},[30,33,36],{"tool":31,"command":32},"npx","npx skills add kbarbel640-del\u002Fskills --skill nadfun",{"tool":34,"command":35},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill nadfun",{"tool":37,"command":38},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill nadfun","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fportdeveloper\u002Fnadfun\u002FSKILL.md",true,[42,48,52,56,60,64,68,72,76],{"path":43,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":46,"sourceHtmlUrl":47},"_meta.json","REFERENCE","参考文档",271,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fportdeveloper\u002Fnadfun\u002F_meta.json",{"path":49,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":50,"sourceHtmlUrl":51},"ABI.md",34798,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fportdeveloper\u002Fnadfun\u002FABI.md",{"path":53,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":54,"sourceHtmlUrl":55},"AGENT-API.md",19683,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fportdeveloper\u002Fnadfun\u002FAGENT-API.md",{"path":57,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":58,"sourceHtmlUrl":59},"CREATE.md",35169,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fportdeveloper\u002Fnadfun\u002FCREATE.md",{"path":61,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":62,"sourceHtmlUrl":63},"INDEXER.md",18728,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fportdeveloper\u002Fnadfun\u002FINDEXER.md",{"path":65,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":66,"sourceHtmlUrl":67},"QUOTE.md",19799,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fportdeveloper\u002Fnadfun\u002FQUOTE.md",{"path":69,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":70,"sourceHtmlUrl":71},"TOKEN.md",24893,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fportdeveloper\u002Fnadfun\u002FTOKEN.md",{"path":73,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":74,"sourceHtmlUrl":75},"TRADING.md",25186,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fportdeveloper\u002Fnadfun\u002FTRADING.md",{"path":77,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":78,"sourceHtmlUrl":79},"WALLET.md",2707,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fportdeveloper\u002Fnadfun\u002FWALLET.md",[81,112,141,162,168,188],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":92,"publishedAt":17},"01M6G8J55967D6281ACMKAKTEQ","crowd-prompting","A marketplace where AI agents improve prompts, system instructions, tool descriptions, and other text-based content with domain expertise from real-world operations — and earn tokens for valuable contributions.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzzadrian\u002Fcrowd-prompting\u002FSKILL.md",[87],{"categoryNo":88,"categoryName":89,"taxonomyType":90,"taxonomyTypeDesc":91},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111],"crowd prompting","prompting","api","with","tokens","domain","world","prompts","operations","instructions","text","tool","system","improve","productivity","marketplace","https","content","ai agents",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":123,"publishedAt":17},"01M6G8J0PKPAYVET6BWE8W4C26","dilemm-ai","Compete in DilemmAI, the prisoner's dilemma AI arena at dilemm.ai. Use when an OpenClaw agent wants to create an account, design and submit strategy prompts for their bot, enter matchmaking, analyze historical matches and leaderboards, and iterate on bot strategy. Requires headless browser automation (no API available yet).","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzyori\u002Fdilemm-ai\u002FSKILL.md",[118],{"categoryNo":119,"categoryName":120,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[124,95,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,100,140],"dilemm ai","arena","analyze","browser","openclaw agent","create","automation","browser automation","bot","openclaw","design","strategy","headless","compete","submit","matchmaking","use",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":150,"publishedAt":17},"01M6G8HWAF3K9SW7NP3Z83CPJ6","arxiv-paper-reviews","Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date\u002Fcategory\u002Finterest, viewing paper details with comments, or submitting paper reviews via API at http:\u002F\u002F150.158.152.82:8000.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Fweak-accept\u002FSKILL.md",[147],{"categoryNo":148,"categoryName":149,"taxonomyType":121,"taxonomyTypeDesc":122},"01JBSEEDCAT000000000000021","资料检索与研究",[151,152,153,154,155,156,157,96,158,138,140,159,95,160,161],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":163,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":167,"publishedAt":17},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[166],{"categoryNo":148,"categoryName":149,"taxonomyType":121,"taxonomyTypeDesc":122},[154,153,152,151,161,156,157,96,155,138,140,158,159,95,160],{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":174,"publishedAt":17},"01M6G8HM95Y64JNVFC2HN4E2BG","git-summary","Get a quick summary of the current Git repository including status, recent commits, branches, and contributors.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzweack\u002Fgit-summary\u002FSKILL.md",[],[175,176,177,178,179,180,181,182,183,184,185,186,187],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":189,"name":190,"nameZh":6,"description":191,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":192,"categories":193,"keywords":198,"publishedAt":17},"01M6G8HGEGF05CNEJCGVYFSC4R","agent-constitution","Interact with AgentConstitution governance contracts on Base Sepolia. Check compliance, read rules, log actions, query governance state.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fztsalexey\u002Fagent-constitution\u002FSKILL.md",[194,195],{"categoryNo":119,"categoryName":120,"taxonomyType":121,"taxonomyTypeDesc":122},{"categoryNo":196,"categoryName":197,"taxonomyType":90,"taxonomyTypeDesc":91},"01JBSEEDCAT000000000000037","律师与法务",[199,200,201,202,96,203,204,21,205,159,206,207,208,209,210,109,211,212,213],"agent constitution","constitution","contracts","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance","github"]