[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FXJFXN3JWD3D7HA1Q7CATT":3,"skill-same:01M6FXJFXN3JWD3D7HA1Q7CATT":63},{"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":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M6FXJFXN3JWD3D7HA1Q7CATT","jb-split-hook",null,"Generate custom Juicebox V5 split hooks from natural language specifications. Creates Solidity contracts implementing IJBSplitHook with Foundry tests. Split hooks process individual payout or reserved token splits with custom logic like DeFi integrations.","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-split-hook\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"jb split hook","split","hook","natural language","juicebox v5","specifications","with","tests","logic","token","foundry","language","contracts","hooks","process","integrations","defi","solidity","generate","2026-11-10 10:12:30",false,"---\nname: jb-split-hook\ndescription: Generate custom Juicebox V5 split hooks from natural language specifications. Creates Solidity contracts implementing IJBSplitHook with Foundry tests. Split hooks process individual payout or reserved token splits with custom logic like DeFi integrations.\n---\n\n# Juicebox V5 Split Hook Generator\n\nGenerate custom split hooks for Juicebox V5 projects based on natural language specifications.\n\n## What Are Split Hooks?\n\nSplit hooks allow custom processing when funds are distributed through payout splits or reserved token splits. They're useful for:\n\n- **DeFi integrations**: Route payouts to liquidity pools, staking, or yield protocols\n- **Multi-recipient routing**: Split a single split further among multiple addresses\n- **Token swaps**: Convert received tokens before forwarding\n- **Custom accounting**: Track or transform distributions\n\n**Note**: Split hooks can be added to **Revnets** for token distribution just like any other Juicebox project.\n\n## V5 Split Hook Architecture\n\nSplit hooks implement a single function that receives funds optimistically and processes them.\n\n```solidity\ninterface IJBSplitHook is IERC165 {\n    \u002F\u002F\u002F @notice Process a single split with custom logic.\n    \u002F\u002F\u002F @dev Tokens and native currency are optimistically transferred to the hook.\n    \u002F\u002F\u002F @param context The context passed by the terminal or controller.\n    function processSplitWith(JBSplitHookContext calldata context) external payable;\n}\n```\n\n## JBSplitHookContext Fields\n\n```solidity\nstruct JBSplitHookContext {\n    address token;          \u002F\u002F Token being distributed (address(0) for native)\n    uint256 amount;         \u002F\u002F Amount sent to this split\n    uint256 decimals;       \u002F\u002F Token decimals\n    uint256 projectId;      \u002F\u002F Project distributing funds\n    uint256 groupId;        \u002F\u002F Split group ID\n    JBSplit split;          \u002F\u002F The split configuration\n}\n```\n\n## JBSplit Configuration\n\n```solidity\nstruct JBSplit {\n    bool preferAddToBalance;    \u002F\u002F Add to project balance instead of paying\n    uint256 percent;            \u002F\u002F Percent of distribution (out of 1000000000)\n    uint256 projectId;          \u002F\u002F Project to pay (0 for wallet)\n    address payable beneficiary; \u002F\u002F Wallet if projectId is 0\n    uint256 lockedUntil;        \u002F\u002F Timestamp until split is locked\n    IJBSplitHook hook;          \u002F\u002F This split hook address\n}\n```\n\n## Design Patterns\n\n### Basic Split Hook\n\n```solidity\ncontract BasicSplitHook is IJBSplitHook, ERC165 {\n    function processSplitWith(JBSplitHookContext calldata context) external payable override {\n        \u002F\u002F Funds have been transferred to this contract\n        \u002F\u002F Process them according to custom logic\n\n        if (context.token == address(0)) {\n            \u002F\u002F Handle native currency (ETH)\n            uint256 amount = address(this).balance;\n            \u002F\u002F ... custom logic\n        } else {\n            \u002F\u002F Handle ERC20 token\n            uint256 amount = IERC20(context.token).balanceOf(address(this));\n            \u002F\u002F ... custom logic\n        }\n    }\n\n    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {\n        return interfaceId == type(IJBSplitHook).interfaceId || super.supportsInterface(interfaceId);\n    }\n}\n```\n\n### Uniswap V3 LP Split Hook Pattern\n\nRoute payouts to a Uniswap V3 liquidity position.\n\n```solidity\ncontract UniswapV3LPSplitHook is IJBSplitHook, ERC165 {\n    INonfungiblePositionManager public immutable POSITION_MANAGER;\n    uint256 public tokenId; \u002F\u002F LP position NFT ID\n\n    function processSplitWith(JBSplitHookContext calldata context) external payable override {\n        if (context.token == address(0)) {\n            \u002F\u002F Wrap ETH to WETH\n            WETH.deposit{value: msg.value}();\n        }\n\n        \u002F\u002F Add liquidity to existing position or create new one\n        \u002F\u002F ...\n    }\n}\n```\n\n### Multi-Recipient Split Hook\n\nSplit funds further among multiple recipients.\n\n```solidity\ncontract MultiRecipientSplitHook is IJBSplitHook, ERC165 {\n    struct Recipient {\n        address payable addr;\n        uint256 percent; \u002F\u002F Out of 10000\n    }\n\n    Recipient[] public recipients;\n\n    function processSplitWith(JBSplitHookContext calldata context) external payable override {\n        uint256 total = context.amount;\n\n        for (uint256 i; i \u003C recipients.length; i++) {\n            uint256 share = (total * recipients[i].percent) \u002F 10000;\n\n            if (context.token == address(0)) {\n                recipients[i].addr.transfer(share);\n            } else {\n                IERC20(context.token).transfer(recipients[i].addr, share);\n            }\n        }\n    }\n}\n```\n\n### Token Swap Split Hook\n\nSwap received tokens before forwarding.\n\n```solidity\ncontract SwapSplitHook is IJBSplitHook, ERC165 {\n    ISwapRouter public immutable ROUTER;\n    address public immutable OUTPUT_TOKEN;\n    address public immutable BENEFICIARY;\n\n    function processSplitWith(JBSplitHookContext calldata context) external payable override {\n        \u002F\u002F Approve router\n        IERC20(context.token).approve(address(ROUTER), context.amount);\n\n        \u002F\u002F Swap to output token\n        uint256 amountOut = ROUTER.exactInputSingle(\n            ISwapRouter.ExactInputSingleParams({\n                tokenIn: context.token,\n                tokenOut: OUTPUT_TOKEN,\n                fee: 3000,\n                recipient: BENEFICIARY,\n                amountIn: context.amount,\n                amountOutMinimum: 0,\n                sqrtPriceLimitX96: 0\n            })\n        );\n    }\n}\n```\n\n## Configuring Split Hooks\n\nTo use a split hook, configure it in a project's split group:\n\n```solidity\nJBSplit memory split = JBSplit({\n    preferAddToBalance: false,\n    percent: 100_000_000, \u002F\u002F 10% (out of 1_000_000_000)\n    projectId: 0,\n    beneficiary: payable(address(0)),\n    lockedUntil: 0,\n    hook: IJBSplitHook(address(mySplitHook))\n});\n```\n\n## Generation Guidelines\n\n1. **Understand the distribution flow** - splits receive funds during payout or reserved token distribution\n2. **Handle both ETH and ERC20** - check `context.token` to determine token type\n3. **Consider gas costs** - complex DeFi operations may be expensive\n4. **Include proper error handling** - failed external calls should be handled gracefully\n5. **Generate Foundry tests** with fork testing for DeFi integrations\n\n## Example Prompts\n\n- \"Create a split hook that deposits ETH into Lido and sends stETH to a beneficiary\"\n- \"I want to route 50% of payouts to a Uniswap V3 LP position\"\n- \"Build a split hook that swaps tokens to USDC before sending to treasury\"\n- \"Create a hook that splits incoming funds among 5 DAO multisigs\"\n\n## Reference Implementations\n\n- **uniswapv3-lp-split-hook**: https:\u002F\u002Fgithub.com\u002Fkyzooghost\u002Funiswapv3-lp-split-hook\n\n## Output Format\n\nGenerate:\n1. Main contract in `src\u002F`\n2. Interface in `src\u002Finterfaces\u002F` if needed\n3. Test file in `test\u002F`\n4. Deployment script in `script\u002F` if requested\n\nUse Foundry project structure with forge-std.\n","# Juicebox V5 Split Hook Generator\n\nGenerate custom split hooks for Juicebox V5 projects based on natural language specifications.\n\n## What Are Split Hooks?\n\nSplit hooks allow custom processing when funds are distributed through payout splits or reserved token splits. They're useful for:\n\n- **DeFi integrations**: Route payouts to liquidity pools, staking, or yield protocols\n- **Multi-recipient routing**: Split a single split further among multiple addresses\n- **Token swaps**: Convert received tokens before forwarding\n- **Custom accounting**: Track or transform distributions\n\n**Note**: Split hooks can be added to **Revnets** for token distribution just like any other Juicebox project.\n\n## V5 Split Hook Architecture\n\nSplit hooks implement a single function that receives funds optimistically and processes them.\n\n```solidity\ninterface IJBSplitHook is IERC165 {\n    \u002F\u002F\u002F @notice Process a single split with custom logic.\n    \u002F\u002F\u002F @dev Tokens and native currency are optimistically transferred to the hook.\n    \u002F\u002F\u002F @param context The context passed by the terminal or controller.\n    function processSplitWith(JBSplitHookContext calldata context) external payable;\n}\n```\n\n## JBSplitHookContext Fields\n\n```solidity\nstruct JBSplitHookContext {\n    address token;          \u002F\u002F Token being distributed (address(0) for native)\n    uint256 amount;         \u002F\u002F Amount sent to this split\n    uint256 decimals;       \u002F\u002F Token decimals\n    uint256 projectId;      \u002F\u002F Project distributing funds\n    uint256 groupId;        \u002F\u002F Split group ID\n    JBSplit split;          \u002F\u002F The split configuration\n}\n```\n\n## JBSplit Configuration\n\n```solidity\nstruct JBSplit {\n    bool preferAddToBalance;    \u002F\u002F Add to project balance instead of paying\n    uint256 percent;            \u002F\u002F Percent of distribution (out of 1000000000)\n    uint256 projectId;          \u002F\u002F Project to pay (0 for wallet)\n    address payable beneficiary; \u002F\u002F Wallet if projectId is 0\n    uint256 lockedUntil;        \u002F\u002F Timestamp until split is locked\n    IJBSplitHook hook;          \u002F\u002F This split hook address\n}\n```\n\n## Design Patterns\n\n### Basic Split Hook\n\n```solidity\ncontract BasicSplitHook is IJBSplitHook, ERC165 {\n    function processSplitWith(JBSplitHookContext calldata context) external payable override {\n        \u002F\u002F Funds have been transferred to this contract\n        \u002F\u002F Process them according to custom logic\n\n        if (context.token == address(0)) {\n            \u002F\u002F Handle native currency (ETH)\n            uint256 amount = address(this).balance;\n            \u002F\u002F ... custom logic\n        } else {\n            \u002F\u002F Handle ERC20 token\n            uint256 amount = IERC20(context.token).balanceOf(address(this));\n            \u002F\u002F ... custom logic\n        }\n    }\n\n    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {\n        return interfaceId == type(IJBSplitHook).interfaceId || super.supportsInterface(interfaceId);\n    }\n}\n```\n\n### Uniswap V3 LP Split Hook Pattern\n\nRoute payouts to a Uniswap V3 liquidity position.\n\n```solidity\ncontract UniswapV3LPSplitHook is IJBSplitHook, ERC165 {\n    INonfungiblePositionManager public immutable POSITION_MANAGER;\n    uint256 public tokenId; \u002F\u002F LP position NFT ID\n\n    function processSplitWith(JBSplitHookContext calldata context) external payable override {\n        if (context.token == address(0)) {\n            \u002F\u002F Wrap ETH to WETH\n            WETH.deposit{value: msg.value}();\n        }\n\n        \u002F\u002F Add liquidity to existing position or create new one\n        \u002F\u002F ...\n    }\n}\n```\n\n### Multi-Recipient Split Hook\n\nSplit funds further among multiple recipients.\n\n```solidity\ncontract MultiRecipientSplitHook is IJBSplitHook, ERC165 {\n    struct Recipient {\n        address payable addr;\n        uint256 percent; \u002F\u002F Out of 10000\n    }\n\n    Recipient[] public recipients;\n\n    function processSplitWith(JBSplitHookContext calldata context) external payable override {\n        uint256 total = context.amount;\n\n        for (uint256 i; i \u003C recipients.length; i++) {\n            uint256 share = (total * recipients[i].percent) \u002F 10000;\n\n            if (context.token == address(0)) {\n                recipients[i].addr.transfer(share);\n            } else {\n                IERC20(context.token).transfer(recipients[i].addr, share);\n            }\n        }\n    }\n}\n```\n\n### Token Swap Split Hook\n\nSwap received tokens before forwarding.\n\n```solidity\ncontract SwapSplitHook is IJBSplitHook, ERC165 {\n    ISwapRouter public immutable ROUTER;\n    address public immutable OUTPUT_TOKEN;\n    address public immutable BENEFICIARY;\n\n    function processSplitWith(JBSplitHookContext calldata context) external payable override {\n        \u002F\u002F Approve router\n        IERC20(context.token).approve(address(ROUTER), context.amount);\n\n        \u002F\u002F Swap to output token\n        uint256 amountOut = ROUTER.exactInputSingle(\n            ISwapRouter.ExactInputSingleParams({\n                tokenIn: context.token,\n                tokenOut: OUTPUT_TOKEN,\n                fee: 3000,\n                recipient: BENEFICIARY,\n                amountIn: context.amount,\n                amountOutMinimum: 0,\n                sqrtPriceLimitX96: 0\n            })\n        );\n    }\n}\n```\n\n## Configuring Split Hooks\n\nTo use a split hook, configure it in a project's split group:\n\n```solidity\nJBSplit memory split = JBSplit({\n    preferAddToBalance: false,\n    percent: 100_000_000, \u002F\u002F 10% (out of 1_000_000_000)\n    projectId: 0,\n    beneficiary: payable(address(0)),\n    lockedUntil: 0,\n    hook: IJBSplitHook(address(mySplitHook))\n});\n```\n\n## Generation Guidelines\n\n1. **Understand the distribution flow** - splits receive funds during payout or reserved token distribution\n2. **Handle both ETH and ERC20** - check `context.token` to determine token type\n3. **Consider gas costs** - complex DeFi operations may be expensive\n4. **Include proper error handling** - failed external calls should be handled gracefully\n5. **Generate Foundry tests** with fork testing for DeFi integrations\n\n## Example Prompts\n\n- \"Create a split hook that deposits ETH into Lido and sends stETH to a beneficiary\"\n- \"I want to route 50% of payouts to a Uniswap V3 LP position\"\n- \"Build a split hook that swaps tokens to USDC before sending to treasury\"\n- \"Create a hook that splits incoming funds among 5 DAO multisigs\"\n\n## Reference Implementations\n\n- **uniswapv3-lp-split-hook**: https:\u002F\u002Fgithub.com\u002Fkyzooghost\u002Funiswapv3-lp-split-hook\n\n## Output Format\n\nGenerate:\n1. Main contract in `src\u002F`\n2. Interface in `src\u002Finterfaces\u002F` if needed\n3. Test file in `test\u002F`\n4. Deployment script in `script\u002F` if requested\n\nUse Foundry project structure with forge-std.\n",{"name":5,"description":7},"main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Fmejango\u002Fjuicy\u002Fjb-split-hook",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":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add kbarbel640-del\u002Fskills --skill jb-split-hook",{"tool":55,"command":56},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill jb-split-hook",{"tool":58,"command":59},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill jb-split-hook","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fmejango\u002Fjuicy\u002Fjb-split-hook\u002FSKILL.md",true,[],[64,94,123,144,150,170],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":75,"publishedAt":37},"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",[70],{"categoryNo":71,"categoryName":72,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[76,77,78,24,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93],"crowd prompting","prompting","api","tokens","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":37},"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,78,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,82,122],"dilemm ai","arena","analyze","browser","openclaw agent","create","automation","browser automation","bot","openclaw","design","strategy","headless","compete","submit","matchmaking","use",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":132,"publishedAt":37},"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",[129],{"categoryNo":130,"categoryName":131,"taxonomyType":103,"taxonomyTypeDesc":104},"01JBSEEDCAT000000000000021","资料检索与研究",[133,134,135,136,137,138,139,24,140,120,122,141,78,142,143],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":145,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":149,"publishedAt":37},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[148],{"categoryNo":130,"categoryName":131,"taxonomyType":103,"taxonomyTypeDesc":104},[136,135,134,133,143,138,139,24,137,120,122,140,141,78,142],{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":156,"publishedAt":37},"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",[],[157,158,159,160,161,162,163,164,165,166,167,168,169],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":180,"publishedAt":37},"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",[176,177],{"categoryNo":101,"categoryName":102,"taxonomyType":103,"taxonomyTypeDesc":104},{"categoryNo":178,"categoryName":179,"taxonomyType":73,"taxonomyTypeDesc":74},"01JBSEEDCAT000000000000037","律师与法务",[181,182,30,183,24,184,185,42,186,141,187,188,189,190,191,91,192,193,194],"agent constitution","constitution","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance","github"]