[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FXJPZ2ZNNR2TGE9VM3F5F2":3,"skill-same:01M6FXJPZ2ZNNR2TGE9VM3F5F2":64},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6FXJPZ2ZNNR2TGE9VM3F5F2","jb-terminal-selection",null,"Dynamic terminal selection for Juicebox V5 payments. Use when: (1) building payment UIs that support\nmultiple tokens (ETH\u002FUSDC), (2) encountering JBMultiTerminal_TokenNotAccepted error, (3) paying a\nproject that uses ETH-only accounting with non-ETH tokens, (4) implementing cross-token payments\nwhere the project may not directly accept the user's payment token. Covers JBDirectory.primaryTerminalOf()\nquerying, JBSwapTerminal fallback logic, and permit2 integration with correct terminal addresses.","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\u002Fmejango\u002Fjuicy\u002Fjb-terminal-selection\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"jb terminal selection","selection","terminal","usdc","juicebox v5","with","error","eth","logic","tokens","token","project","payment","accounting","only","use","correct","payments","integration","support","2026-11-10 10:12:30",false,"---\nname: jb-terminal-selection\ndescription: |\n  Dynamic terminal selection for Juicebox V5 payments. Use when: (1) building payment UIs that support\n  multiple tokens (ETH\u002FUSDC), (2) encountering JBMultiTerminal_TokenNotAccepted error, (3) paying a\n  project that uses ETH-only accounting with non-ETH tokens, (4) implementing cross-token payments\n  where the project may not directly accept the user's payment token. Covers JBDirectory.primaryTerminalOf()\n  querying, JBSwapTerminal fallback logic, and permit2 integration with correct terminal addresses.\n---\n\n# Dynamic Terminal Selection for Juicebox V5 Payments\n\n## Problem\n\nWhen paying a Juicebox V5 project, users may want to pay with tokens (e.g., USDC) that the project\ndoesn't directly accept in its accounting context. Sending such payments to `JBMultiTerminal` results\nin a `JBMultiTerminal_TokenNotAccepted(token)` revert.\n\nCommon symptom: Transaction simulation shows \"likely to fail\" after permit2 signing, with the\n`TokenNotAccepted` error in Tenderly or other simulation tools.\n\n## Context \u002F Trigger Conditions\n\nApply this pattern when:\n- Building a payment UI that supports multiple tokens (ETH, USDC, etc.)\n- A project uses ETH accounting context but users want to pay with USDC\n- You see `JBMultiTerminal_TokenNotAccepted` errors in transaction simulations\n- MetaMask shows \"This transaction is likely to fail\" after permit2 signing\n- You need to determine which terminal to use at runtime\n\n## Solution\n\n### Core Concept\n\nQuery `JBDirectory.primaryTerminalOf(projectId, tokenAddress)` to discover which terminal\naccepts payments for a given token. If no terminal is registered (returns zero address),\nuse `JBSwapTerminal` which automatically swaps the payment token to what the project accepts.\n\n### Implementation\n\n```typescript\nimport { type PublicClient, type Address, zeroAddress } from 'viem'\n\n\u002F\u002F JBSwapTerminal addresses (same via CREATE2 across chains)\nconst JB_SWAP_TERMINAL: Record\u003Cnumber, Address> = {\n  1: '0x259385b97dfbd5576bd717dc7b25967ec8b145dd',      \u002F\u002F Ethereum\n  10: '0x73d04584bde126242c36c2c7b219cbdec7aad774',     \u002F\u002F Optimism\n  8453: '0x4fd73d8b285e82471f08a4ef9861d6248b832edd',   \u002F\u002F Base\n  42161: '0x483c9b12c5bd2da73133aae30642ce0008c752ad',  \u002F\u002F Arbitrum\n}\n\n\u002F\u002F JBDirectory address (same on all chains via CREATE2)\nconst JB_DIRECTORY = '0x0061e516886a0540f63157f112c0588ee0651dcf'\n\nconst JB_DIRECTORY_ABI = [\n  {\n    name: 'primaryTerminalOf',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { name: 'projectId', type: 'uint256' },\n      { name: 'token', type: 'address' },\n    ],\n    outputs: [{ name: '', type: 'address' }],\n  },\n] as const\n\ntype TerminalType = 'multi' | 'swap'\n\ninterface PaymentTerminal {\n  address: Address\n  type: TerminalType\n}\n\n\u002F**\n * Determines which terminal to use for a payment.\n *\n * 1. Query JBDirectory.primaryTerminalOf(projectId, tokenAddress)\n * 2. If zero address → project doesn't accept this token directly → use SwapTerminal\n * 3. If non-zero → use the returned terminal (could be Multi or Swap)\n *\u002F\nasync function getPaymentTerminal(\n  client: PublicClient,\n  chainId: number,\n  projectId: bigint,\n  paymentToken: Address\n): Promise\u003CPaymentTerminal> {\n  \u002F\u002F Query directory for the primary terminal that accepts this token\n  const terminal = await client.readContract({\n    address: JB_DIRECTORY,\n    abi: JB_DIRECTORY_ABI,\n    functionName: 'primaryTerminalOf',\n    args: [projectId, paymentToken],\n  })\n\n  const swapTerminal = JB_SWAP_TERMINAL[chainId]\n\n  \u002F\u002F No terminal registered for this token → use swap terminal\n  if (terminal === zeroAddress) {\n    return { address: swapTerminal, type: 'swap' }\n  }\n\n  \u002F\u002F Check if the returned terminal IS the swap terminal\n  const isSwapTerminal = terminal.toLowerCase() === swapTerminal?.toLowerCase()\n\n  return {\n    address: terminal,\n    type: isSwapTerminal ? 'swap' : 'multi'\n  }\n}\n```\n\n### Permit2 Integration\n\nWhen using permit2 for token approvals, the metadata ID computation must use the correct\nterminal address as the spender:\n\n```typescript\n\u002F\u002F Permit2 metadata ID = bytes4(bytes20(terminal) ^ bytes20(keccak256(\"permit2\")))\nfunction computePermit2MetadataId(terminalAddress: Address): `0x${string}` {\n  const permit2Hash = keccak256(toBytes('permit2'))\n  const terminalBytes = terminalAddress.slice(0, 42) \u002F\u002F 0x + 40 hex chars\n  const hashBytes = permit2Hash.slice(0, 42)\n\n  \u002F\u002F XOR the first 20 bytes\n  const xorResult = BigInt(terminalBytes) ^ BigInt(hashBytes)\n  const bytes4 = (xorResult >> 128n) & 0xffffffffn\n\n  return `0x${bytes4.toString(16).padStart(8, '0')}`\n}\n```\n\n### Usage in Payment Flow\n\n```typescript\nasync function pay(projectId: string, amount: string, token: 'ETH' | 'USDC') {\n  const tokenAddress = token === 'ETH'\n    ? '0x000000000000000000000000000000000000EEEe'  \u002F\u002F Native token\n    : USDC_ADDRESSES[chainId]\n\n  \u002F\u002F 1. Detect correct terminal\n  const terminal = await getPaymentTerminal(\n    publicClient,\n    chainId,\n    BigInt(projectId),\n    tokenAddress\n  )\n\n  \u002F\u002F 2. For ERC20, sign permit2 with terminal as spender\n  if (token !== 'ETH') {\n    const permit = await signPermit2({\n      spender: terminal.address,  \u002F\u002F CRITICAL: use detected terminal\n      token: tokenAddress,\n      amount,\n      \u002F\u002F ...\n    })\n  }\n\n  \u002F\u002F 3. Call pay on the correct terminal\n  await walletClient.writeContract({\n    address: terminal.address,\n    abi: terminal.type === 'swap' ? JB_SWAP_TERMINAL_ABI : JB_MULTI_TERMINAL_ABI,\n    functionName: 'pay',\n    args: [projectId, tokenAddress, amount, beneficiary, minTokens, memo, metadata],\n  })\n}\n```\n\n## Verification\n\n1. Query `primaryTerminalOf` for ETH → should return JBMultiTerminal address\n2. Query `primaryTerminalOf` for USDC on ETH-only project → should return zero address\n3. Use SwapTerminal when zero address returned\n4. Transaction simulation should no longer show `TokenNotAccepted` error\n\n## Example\n\n**Scenario**: User wants to pay NANA (Project ID 1) with USDC on Base. NANA only uses ETH accounting.\n\n```typescript\n\u002F\u002F Query: What terminal accepts USDC for NANA?\nconst terminal = await getPaymentTerminal(\n  publicClient,\n  8453,  \u002F\u002F Base\n  1n,    \u002F\u002F NANA project ID\n  '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'  \u002F\u002F USDC on Base\n)\n\n\u002F\u002F Result: { address: '0x4fd73d8b285e82471f08a4ef9861d6248b832edd', type: 'swap' }\n\u002F\u002F The SwapTerminal will swap USDC → ETH before paying NANA\n```\n\n## Notes\n\n- JBSwapTerminal swaps tokens via Uniswap before crediting the project\n- The swap uses TWAP pricing with slippage protection\n- Projects can explicitly register JBSwapTerminal for tokens they want to accept via swaps\n- Some projects register JBMultiTerminal for multiple tokens (e.g., both ETH and USDC)\n- Always query at runtime; terminal registrations can change\n\n## Related Skills\n\n- `\u002Fjb-v5-impl` - Deep dive into terminal mechanics and payment flow internals\n- `\u002Fjb-terminal-wrapper` - Pattern for wrapping terminals with custom logic\n- `\u002Fjb-v5-api` - Core terminal interface signatures\n- `\u002Fjb-query` - Querying project state from blockchain\n\n## References\n\n- [revnet-app terminal detection](https:\u002F\u002Fgithub.com\u002Frev-net\u002Frevnet-app\u002Fblob\u002Fmain\u002Fsrc\u002Flib\u002FpaymentTerminal.ts)\n- [JBSwapTerminal implementation](https:\u002F\u002Fgithub.com\u002FBananapus\u002Fnana-swap-terminal)\n- [JBDirectory contract](https:\u002F\u002Fgithub.com\u002FBananapus\u002Fnana-core-v5\u002Fblob\u002Fmain\u002Fsrc\u002FJBDirectory.sol)\n","# Dynamic Terminal Selection for Juicebox V5 Payments\n\n## Problem\n\nWhen paying a Juicebox V5 project, users may want to pay with tokens (e.g., USDC) that the project\ndoesn't directly accept in its accounting context. Sending such payments to `JBMultiTerminal` results\nin a `JBMultiTerminal_TokenNotAccepted(token)` revert.\n\nCommon symptom: Transaction simulation shows \"likely to fail\" after permit2 signing, with the\n`TokenNotAccepted` error in Tenderly or other simulation tools.\n\n## Context \u002F Trigger Conditions\n\nApply this pattern when:\n- Building a payment UI that supports multiple tokens (ETH, USDC, etc.)\n- A project uses ETH accounting context but users want to pay with USDC\n- You see `JBMultiTerminal_TokenNotAccepted` errors in transaction simulations\n- MetaMask shows \"This transaction is likely to fail\" after permit2 signing\n- You need to determine which terminal to use at runtime\n\n## Solution\n\n### Core Concept\n\nQuery `JBDirectory.primaryTerminalOf(projectId, tokenAddress)` to discover which terminal\naccepts payments for a given token. If no terminal is registered (returns zero address),\nuse `JBSwapTerminal` which automatically swaps the payment token to what the project accepts.\n\n### Implementation\n\n```typescript\nimport { type PublicClient, type Address, zeroAddress } from 'viem'\n\n\u002F\u002F JBSwapTerminal addresses (same via CREATE2 across chains)\nconst JB_SWAP_TERMINAL: Record\u003Cnumber, Address> = {\n  1: '0x259385b97dfbd5576bd717dc7b25967ec8b145dd',      \u002F\u002F Ethereum\n  10: '0x73d04584bde126242c36c2c7b219cbdec7aad774',     \u002F\u002F Optimism\n  8453: '0x4fd73d8b285e82471f08a4ef9861d6248b832edd',   \u002F\u002F Base\n  42161: '0x483c9b12c5bd2da73133aae30642ce0008c752ad',  \u002F\u002F Arbitrum\n}\n\n\u002F\u002F JBDirectory address (same on all chains via CREATE2)\nconst JB_DIRECTORY = '0x0061e516886a0540f63157f112c0588ee0651dcf'\n\nconst JB_DIRECTORY_ABI = [\n  {\n    name: 'primaryTerminalOf',\n    type: 'function',\n    stateMutability: 'view',\n    inputs: [\n      { name: 'projectId', type: 'uint256' },\n      { name: 'token', type: 'address' },\n    ],\n    outputs: [{ name: '', type: 'address' }],\n  },\n] as const\n\ntype TerminalType = 'multi' | 'swap'\n\ninterface PaymentTerminal {\n  address: Address\n  type: TerminalType\n}\n\n\u002F**\n * Determines which terminal to use for a payment.\n *\n * 1. Query JBDirectory.primaryTerminalOf(projectId, tokenAddress)\n * 2. If zero address → project doesn't accept this token directly → use SwapTerminal\n * 3. If non-zero → use the returned terminal (could be Multi or Swap)\n *\u002F\nasync function getPaymentTerminal(\n  client: PublicClient,\n  chainId: number,\n  projectId: bigint,\n  paymentToken: Address\n): Promise\u003CPaymentTerminal> {\n  \u002F\u002F Query directory for the primary terminal that accepts this token\n  const terminal = await client.readContract({\n    address: JB_DIRECTORY,\n    abi: JB_DIRECTORY_ABI,\n    functionName: 'primaryTerminalOf',\n    args: [projectId, paymentToken],\n  })\n\n  const swapTerminal = JB_SWAP_TERMINAL[chainId]\n\n  \u002F\u002F No terminal registered for this token → use swap terminal\n  if (terminal === zeroAddress) {\n    return { address: swapTerminal, type: 'swap' }\n  }\n\n  \u002F\u002F Check if the returned terminal IS the swap terminal\n  const isSwapTerminal = terminal.toLowerCase() === swapTerminal?.toLowerCase()\n\n  return {\n    address: terminal,\n    type: isSwapTerminal ? 'swap' : 'multi'\n  }\n}\n```\n\n### Permit2 Integration\n\nWhen using permit2 for token approvals, the metadata ID computation must use the correct\nterminal address as the spender:\n\n```typescript\n\u002F\u002F Permit2 metadata ID = bytes4(bytes20(terminal) ^ bytes20(keccak256(\"permit2\")))\nfunction computePermit2MetadataId(terminalAddress: Address): `0x${string}` {\n  const permit2Hash = keccak256(toBytes('permit2'))\n  const terminalBytes = terminalAddress.slice(0, 42) \u002F\u002F 0x + 40 hex chars\n  const hashBytes = permit2Hash.slice(0, 42)\n\n  \u002F\u002F XOR the first 20 bytes\n  const xorResult = BigInt(terminalBytes) ^ BigInt(hashBytes)\n  const bytes4 = (xorResult >> 128n) & 0xffffffffn\n\n  return `0x${bytes4.toString(16).padStart(8, '0')}`\n}\n```\n\n### Usage in Payment Flow\n\n```typescript\nasync function pay(projectId: string, amount: string, token: 'ETH' | 'USDC') {\n  const tokenAddress = token === 'ETH'\n    ? '0x000000000000000000000000000000000000EEEe'  \u002F\u002F Native token\n    : USDC_ADDRESSES[chainId]\n\n  \u002F\u002F 1. Detect correct terminal\n  const terminal = await getPaymentTerminal(\n    publicClient,\n    chainId,\n    BigInt(projectId),\n    tokenAddress\n  )\n\n  \u002F\u002F 2. For ERC20, sign permit2 with terminal as spender\n  if (token !== 'ETH') {\n    const permit = await signPermit2({\n      spender: terminal.address,  \u002F\u002F CRITICAL: use detected terminal\n      token: tokenAddress,\n      amount,\n      \u002F\u002F ...\n    })\n  }\n\n  \u002F\u002F 3. Call pay on the correct terminal\n  await walletClient.writeContract({\n    address: terminal.address,\n    abi: terminal.type === 'swap' ? JB_SWAP_TERMINAL_ABI : JB_MULTI_TERMINAL_ABI,\n    functionName: 'pay',\n    args: [projectId, tokenAddress, amount, beneficiary, minTokens, memo, metadata],\n  })\n}\n```\n\n## Verification\n\n1. Query `primaryTerminalOf` for ETH → should return JBMultiTerminal address\n2. Query `primaryTerminalOf` for USDC on ETH-only project → should return zero address\n3. Use SwapTerminal when zero address returned\n4. Transaction simulation should no longer show `TokenNotAccepted` error\n\n## Example\n\n**Scenario**: User wants to pay NANA (Project ID 1) with USDC on Base. NANA only uses ETH accounting.\n\n```typescript\n\u002F\u002F Query: What terminal accepts USDC for NANA?\nconst terminal = await getPaymentTerminal(\n  publicClient,\n  8453,  \u002F\u002F Base\n  1n,    \u002F\u002F NANA project ID\n  '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'  \u002F\u002F USDC on Base\n)\n\n\u002F\u002F Result: { address: '0x4fd73d8b285e82471f08a4ef9861d6248b832edd', type: 'swap' }\n\u002F\u002F The SwapTerminal will swap USDC → ETH before paying NANA\n```\n\n## Notes\n\n- JBSwapTerminal swaps tokens via Uniswap before crediting the project\n- The swap uses TWAP pricing with slippage protection\n- Projects can explicitly register JBSwapTerminal for tokens they want to accept via swaps\n- Some projects register JBMultiTerminal for multiple tokens (e.g., both ETH and USDC)\n- Always query at runtime; terminal registrations can change\n\n## Related Skills\n\n- `\u002Fjb-v5-impl` - Deep dive into terminal mechanics and payment flow internals\n- `\u002Fjb-terminal-wrapper` - Pattern for wrapping terminals with custom logic\n- `\u002Fjb-v5-api` - Core terminal interface signatures\n- `\u002Fjb-query` - Querying project state from blockchain\n\n## References\n\n- [revnet-app terminal detection](https:\u002F\u002Fgithub.com\u002Frev-net\u002Frevnet-app\u002Fblob\u002Fmain\u002Fsrc\u002Flib\u002FpaymentTerminal.ts)\n- [JBSwapTerminal implementation](https:\u002F\u002Fgithub.com\u002FBananapus\u002Fnana-swap-terminal)\n- [JBDirectory contract](https:\u002F\u002Fgithub.com\u002FBananapus\u002Fnana-core-v5\u002Fblob\u002Fmain\u002Fsrc\u002FJBDirectory.sol)\n",{"name":5,"description":7},"main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Fmejango\u002Fjuicy\u002Fjb-terminal-selection",0,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del","2026-08-23 22:39:37",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add kbarbel640-del\u002Fskills --skill jb-terminal-selection",{"tool":56,"command":57},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill jb-terminal-selection",{"tool":59,"command":60},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill jb-terminal-selection","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmejango\u002Fjuicy\u002Fjb-terminal-selection\u002FSKILL.md",true,[],[65,94,122,143,149,169],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":76,"publishedAt":38},"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",[71],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[77,78,79,23,27,80,81,82,83,84,85,86,87,88,89,90,91,92,93],"crowd prompting","prompting","api","domain","world","prompts","operations","instructions","text","tool","system","improve","productivity","marketplace","https","content","ai agents",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":105,"publishedAt":38},"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",[100],{"categoryNo":101,"categoryName":102,"taxonomyType":103,"taxonomyTypeDesc":104},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[106,79,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,82,33],"dilemm ai","arena","analyze","browser","openclaw agent","create","automation","browser automation","bot","openclaw","design","strategy","headless","compete","submit","matchmaking",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":131,"publishedAt":38},"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",[128],{"categoryNo":129,"categoryName":130,"taxonomyType":103,"taxonomyTypeDesc":104},"01JBSEEDCAT000000000000021","资料检索与研究",[132,133,134,135,136,137,138,23,139,120,33,140,79,141,142],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":144,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":148,"publishedAt":38},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[147],{"categoryNo":129,"categoryName":130,"taxonomyType":103,"taxonomyTypeDesc":104},[135,134,133,132,142,137,138,23,136,120,33,139,140,79,141],{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":38},"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",[],[156,157,158,159,160,161,162,163,164,165,166,167,168],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":179,"publishedAt":38},"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",[175,176],{"categoryNo":101,"categoryName":102,"taxonomyType":103,"taxonomyTypeDesc":104},{"categoryNo":177,"categoryName":178,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000037","律师与法务",[180,181,182,183,23,184,185,43,186,140,187,188,189,190,191,91,192,193,194],"agent constitution","constitution","contracts","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance","github"]