[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6E3QG4FZAXST1SWV04EQZ6J":3,"skill-same:01M6E3QG4FZAXST1SWV04EQZ6J":270},{"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":25,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":13,"repositoryHtmlUrl":47,"repositoryHomepageUrl":48,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":50,"install":51,"resources":64},"01M6E3QG4FZAXST1SWV04EQZ6J","vestaboard-automation",null,"Automate Vestaboard tasks via Rube MCP (Composio). Always search tools first for current schemas.","7dvq6yrkgs-stack\u002Fplaywright","7dvq6yrkgs-stack","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F251638143?v=4","01M6E061J2AMGWYZ6TK7Y8NM74","01M6E061PQCQJGQMPBERMCFN5G",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fvestaboard-automation\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[26,27,28,29,30,31,32,33,34,35],"automation","vestaboard automation","MCP","tasks","search","Tools","first","automate","composio","via","2026-11-10 10:12:30",false,"---\nname: vestaboard-automation\ndescription: \"Automate Vestaboard tasks via Rube MCP (Composio). Always search tools first for current schemas.\"\nrequires:\n  mcp: [rube]\n---\n\n# Vestaboard Automation via Rube MCP\n\nAutomate Vestaboard operations through Composio's Vestaboard toolkit via Rube MCP.\n\n**Toolkit docs**: [composio.dev\u002Ftoolkits\u002Fvestaboard](https:\u002F\u002Fcomposio.dev\u002Ftoolkits\u002Fvestaboard)\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Vestaboard connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `vestaboard`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `vestaboard`\n3. If connection is not ACTIVE, follow the returned auth link to complete setup\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Tool Discovery\n\nAlways discover available tools before executing workflows:\n\n```\nRUBE_SEARCH_TOOLS\nqueries: [{use_case: \"Vestaboard operations\", known_fields: \"\"}]\nsession: {generate_id: true}\n```\n\nThis returns available tool slugs, input schemas, recommended execution plans, and known pitfalls.\n\n## Core Workflow Pattern\n\n### Step 1: Discover Available Tools\n\n```\nRUBE_SEARCH_TOOLS\nqueries: [{use_case: \"your specific Vestaboard task\"}]\nsession: {id: \"existing_session_id\"}\n```\n\n### Step 2: Check Connection\n\n```\nRUBE_MANAGE_CONNECTIONS\ntoolkits: [\"vestaboard\"]\nsession_id: \"your_session_id\"\n```\n\n### Step 3: Execute Tools\n\n```\nRUBE_MULTI_EXECUTE_TOOL\ntools: [{\n  tool_slug: \"TOOL_SLUG_FROM_SEARCH\",\n  arguments: {\u002F* schema-compliant args from search results *\u002F}\n}]\nmemory: {}\nsession_id: \"your_session_id\"\n```\n\n## Known Pitfalls\n\n- **Always search first**: Tool schemas change. Never hardcode tool slugs or arguments without calling `RUBE_SEARCH_TOOLS`\n- **Check connection**: Verify `RUBE_MANAGE_CONNECTIONS` shows ACTIVE status before executing tools\n- **Schema compliance**: Use exact field names and types from the search results\n- **Memory parameter**: Always include `memory` in `RUBE_MULTI_EXECUTE_TOOL` calls, even if empty (`{}`)\n- **Session reuse**: Reuse session IDs within a workflow. Generate new ones for new workflows\n- **Pagination**: Check responses for pagination tokens and continue fetching until complete\n\n## Quick Reference\n\n| Operation | Approach |\n|-----------|----------|\n| Find tools | `RUBE_SEARCH_TOOLS` with Vestaboard-specific use case |\n| Connect | `RUBE_MANAGE_CONNECTIONS` with toolkit `vestaboard` |\n| Execute | `RUBE_MULTI_EXECUTE_TOOL` with discovered tool slugs |\n| Bulk ops | `RUBE_REMOTE_WORKBENCH` with `run_composio_tool()` |\n| Full schema | `RUBE_GET_TOOL_SCHEMAS` for tools with `schemaRef` |\n\n---\n*Powered by [Composio](https:\u002F\u002Fcomposio.dev)*\n","# Vestaboard Automation via Rube MCP\n\nAutomate Vestaboard operations through Composio's Vestaboard toolkit via Rube MCP.\n\n**Toolkit docs**: [composio.dev\u002Ftoolkits\u002Fvestaboard](https:\u002F\u002Fcomposio.dev\u002Ftoolkits\u002Fvestaboard)\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Vestaboard connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `vestaboard`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `vestaboard`\n3. If connection is not ACTIVE, follow the returned auth link to complete setup\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Tool Discovery\n\nAlways discover available tools before executing workflows:\n\n```\nRUBE_SEARCH_TOOLS\nqueries: [{use_case: \"Vestaboard operations\", known_fields: \"\"}]\nsession: {generate_id: true}\n```\n\nThis returns available tool slugs, input schemas, recommended execution plans, and known pitfalls.\n\n## Core Workflow Pattern\n\n### Step 1: Discover Available Tools\n\n```\nRUBE_SEARCH_TOOLS\nqueries: [{use_case: \"your specific Vestaboard task\"}]\nsession: {id: \"existing_session_id\"}\n```\n\n### Step 2: Check Connection\n\n```\nRUBE_MANAGE_CONNECTIONS\ntoolkits: [\"vestaboard\"]\nsession_id: \"your_session_id\"\n```\n\n### Step 3: Execute Tools\n\n```\nRUBE_MULTI_EXECUTE_TOOL\ntools: [{\n  tool_slug: \"TOOL_SLUG_FROM_SEARCH\",\n  arguments: {\u002F* schema-compliant args from search results *\u002F}\n}]\nmemory: {}\nsession_id: \"your_session_id\"\n```\n\n## Known Pitfalls\n\n- **Always search first**: Tool schemas change. Never hardcode tool slugs or arguments without calling `RUBE_SEARCH_TOOLS`\n- **Check connection**: Verify `RUBE_MANAGE_CONNECTIONS` shows ACTIVE status before executing tools\n- **Schema compliance**: Use exact field names and types from the search results\n- **Memory parameter**: Always include `memory` in `RUBE_MULTI_EXECUTE_TOOL` calls, even if empty (`{}`)\n- **Session reuse**: Reuse session IDs within a workflow. Generate new ones for new workflows\n- **Pagination**: Check responses for pagination tokens and continue fetching until complete\n\n## Quick Reference\n\n| Operation | Approach |\n|-----------|----------|\n| Find tools | `RUBE_SEARCH_TOOLS` with Vestaboard-specific use case |\n| Connect | `RUBE_MANAGE_CONNECTIONS` with toolkit `vestaboard` |\n| Execute | `RUBE_MULTI_EXECUTE_TOOL` with discovered tool slugs |\n| Bulk ops | `RUBE_REMOTE_WORKBENCH` with `run_composio_tool()` |\n| Full schema | `RUBE_GET_TOOL_SCHEMAS` for tools with `schemaRef` |\n\n---\n*Powered by [Composio](https:\u002F\u002Fcomposio.dev)*\n",{"name":5,"requires":41,"description":7},{"mcp":42},[43],"rube","main","a2e3284ed4488780397ee2f78217366e11470dfb","skills\u002Fvestaboard-automation","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright","https:\u002F\u002Fplaywright.dev","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack","2026-04-25 06:04:45",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add 7dvq6yrkgs-stack\u002Fplaywright --skill vestaboard-automation",{"tool":57,"command":58},"bunx","bunx skills add 7dvq6yrkgs-stack\u002Fplaywright --skill vestaboard-automation",{"tool":60,"command":61},"pnpm","pnpm dlx skills add 7dvq6yrkgs-stack\u002Fplaywright --skill vestaboard-automation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fvestaboard-automation\u002FSKILL.md",true,[65,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,190,194,198,202,206,210,214,218,222,226,230,234,238,242,246,250,254,258,262,266],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},".skillfish.json","REFERENCE","参考文档",261,"https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fvestaboard-automation\u002F.skillfish.json",{"path":72,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":73,"sourceHtmlUrl":74},"AGENTS.md",60535,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002FAGENTS.md",{"path":76,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":77,"sourceHtmlUrl":78},"metadata.json",921,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Fmetadata.json",{"path":80,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":81,"sourceHtmlUrl":82},"README.md",3360,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002FREADME.md",{"path":84,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":85,"sourceHtmlUrl":86},"rules\u002F_sections.md",1554,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002F_sections.md",{"path":88,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":89,"sourceHtmlUrl":90},"rules\u002F_template.md",631,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002F_template.md",{"path":92,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":93,"sourceHtmlUrl":94},"rules\u002Fadvanced-event-handler-refs.md",1478,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fadvanced-event-handler-refs.md",{"path":96,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":97,"sourceHtmlUrl":98},"rules\u002Fadvanced-use-latest.md",1191,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fadvanced-use-latest.md",{"path":100,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":101,"sourceHtmlUrl":102},"rules\u002Fasync-api-routes.md",1125,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fasync-api-routes.md",{"path":104,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":105,"sourceHtmlUrl":106},"rules\u002Fasync-defer-await.md",2028,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fasync-defer-await.md",{"path":108,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":109,"sourceHtmlUrl":110},"rules\u002Fasync-dependencies.md",942,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fasync-dependencies.md",{"path":112,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":113,"sourceHtmlUrl":114},"rules\u002Fasync-parallel.md",654,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fasync-parallel.md",{"path":116,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":117,"sourceHtmlUrl":118},"rules\u002Fasync-suspense-boundaries.md",2510,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fasync-suspense-boundaries.md",{"path":120,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":121,"sourceHtmlUrl":122},"rules\u002Fbundle-barrel-imports.md",2370,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fbundle-barrel-imports.md",{"path":124,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":125,"sourceHtmlUrl":126},"rules\u002Fbundle-conditional.md",866,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fbundle-conditional.md",{"path":128,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":129,"sourceHtmlUrl":130},"rules\u002Fbundle-defer-third-party.md",920,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fbundle-defer-third-party.md",{"path":132,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":133,"sourceHtmlUrl":134},"rules\u002Fbundle-dynamic-imports.md",791,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fbundle-dynamic-imports.md",{"path":136,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":137,"sourceHtmlUrl":138},"rules\u002Fbundle-preload.md",1149,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fbundle-preload.md",{"path":140,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":141,"sourceHtmlUrl":142},"rules\u002Fclient-event-listeners.md",1969,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fclient-event-listeners.md",{"path":144,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":145,"sourceHtmlUrl":146},"rules\u002Fclient-swr-dedup.md",1159,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fclient-swr-dedup.md",{"path":148,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":149,"sourceHtmlUrl":150},"rules\u002Fjs-batch-dom-css.md",1902,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-batch-dom-css.md",{"path":152,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":153,"sourceHtmlUrl":154},"rules\u002Fjs-cache-function-results.md",1949,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-cache-function-results.md",{"path":156,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":157,"sourceHtmlUrl":158},"rules\u002Fjs-cache-property-access.md",532,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-cache-property-access.md",{"path":160,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":161,"sourceHtmlUrl":162},"rules\u002Fjs-cache-storage.md",1651,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-cache-storage.md",{"path":164,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":165,"sourceHtmlUrl":166},"rules\u002Fjs-combine-iterations.md",753,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-combine-iterations.md",{"path":168,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":169,"sourceHtmlUrl":170},"rules\u002Fjs-early-exit.md",1133,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-early-exit.md",{"path":172,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":173,"sourceHtmlUrl":174},"rules\u002Fjs-hoist-regexp.md",1028,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-hoist-regexp.md",{"path":176,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":177,"sourceHtmlUrl":178},"rules\u002Fjs-index-maps.md",837,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-index-maps.md",{"path":180,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":181,"sourceHtmlUrl":182},"rules\u002Fjs-length-check-first.md",1752,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-length-check-first.md",{"path":184,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":185,"sourceHtmlUrl":186},"rules\u002Fjs-min-max-loop.md",2105,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-min-max-loop.md",{"path":188,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":157,"sourceHtmlUrl":189},"rules\u002Fjs-set-map-lookups.md","https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-set-map-lookups.md",{"path":191,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":192,"sourceHtmlUrl":193},"rules\u002Fjs-tosorted-immutable.md",1782,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fjs-tosorted-immutable.md",{"path":195,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":196,"sourceHtmlUrl":197},"rules\u002Frendering-activity.md",564,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frendering-activity.md",{"path":199,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":200,"sourceHtmlUrl":201},"rules\u002Frendering-animate-svg-wrapper.md",1185,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frendering-animate-svg-wrapper.md",{"path":203,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":204,"sourceHtmlUrl":205},"rules\u002Frendering-conditional-render.md",980,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frendering-conditional-render.md",{"path":207,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":208,"sourceHtmlUrl":209},"rules\u002Frendering-content-visibility.md",815,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frendering-content-visibility.md",{"path":211,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":212,"sourceHtmlUrl":213},"rules\u002Frendering-hoist-jsx.md",1039,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frendering-hoist-jsx.md",{"path":215,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":216,"sourceHtmlUrl":217},"rules\u002Frendering-hydration-no-flicker.md",2308,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frendering-hydration-no-flicker.md",{"path":219,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":220,"sourceHtmlUrl":221},"rules\u002Frendering-svg-precision.md",588,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frendering-svg-precision.md",{"path":223,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":224,"sourceHtmlUrl":225},"rules\u002Frerender-defer-reads.md",973,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frerender-defer-reads.md",{"path":227,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":228,"sourceHtmlUrl":229},"rules\u002Frerender-dependencies.md",824,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frerender-dependencies.md",{"path":231,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":232,"sourceHtmlUrl":233},"rules\u002Frerender-derived-state.md",724,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frerender-derived-state.md",{"path":235,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":236,"sourceHtmlUrl":237},"rules\u002Frerender-functional-setstate.md",2968,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frerender-functional-setstate.md",{"path":239,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":240,"sourceHtmlUrl":241},"rules\u002Frerender-lazy-state-init.md",2016,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frerender-lazy-state-init.md",{"path":243,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":244,"sourceHtmlUrl":245},"rules\u002Frerender-memo.md",1148,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frerender-memo.md",{"path":247,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":248,"sourceHtmlUrl":249},"rules\u002Frerender-transitions.md",1055,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Frerender-transitions.md",{"path":251,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":252,"sourceHtmlUrl":253},"rules\u002Fserver-after-nonblocking.md",2012,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fserver-after-nonblocking.md",{"path":255,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":256,"sourceHtmlUrl":257},"rules\u002Fserver-cache-lru.md",1353,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fserver-cache-lru.md",{"path":259,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":260,"sourceHtmlUrl":261},"rules\u002Fserver-cache-react.md",681,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fserver-cache-react.md",{"path":263,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":264,"sourceHtmlUrl":265},"rules\u002Fserver-parallel-fetching.md",1515,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fserver-parallel-fetching.md",{"path":267,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":268,"sourceHtmlUrl":269},"rules\u002Fserver-serialization.md",996,"https:\u002F\u002Fgithub.com\u002Fdatnguyense1104\u002Fhom-nay-an-gi\u002Fblob\u002Fmain\u002F.opencode\u002Fskills\u002Freact-best-practices\u002Frules\u002Fserver-serialization.md",[271,290,300,310,325,340],{"skillNo":272,"name":273,"nameZh":6,"description":274,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":275,"categories":276,"keywords":287,"publishedAt":36},"01M6E3XK4PRPMQHM7Y98FQPTY1","zyte-api-automation","Automate Zyte API tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzyte-api-automation\u002FSKILL.md",[277,278,281,282],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":279,"categoryName":280,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":283,"categoryName":284,"taxonomyType":285,"taxonomyTypeDesc":286},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[288,289,26,28,29,30,31,32,33,34,35],"zyte api automation","api",{"skillNo":291,"name":292,"nameZh":6,"description":293,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":294,"categories":295,"keywords":298,"publishedAt":36},"01M6E3XFX6QSTR1QR59NFXJTMA","zylvie-automation","Automate Zylvie tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzylvie-automation\u002FSKILL.md",[296,297],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[299,26,33,28,29,30,31,32,34,35],"zylvie automation",{"skillNo":301,"name":302,"nameZh":6,"description":303,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":304,"categories":305,"keywords":308,"publishedAt":36},"01M6E3XCX2GDYYCHN58ZJHT37M","zoominfo-automation","Automate Zoominfo tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzoominfo-automation\u002FSKILL.md",[306,307],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[309,26,30,31,32,33,34,35,29,28],"zoominfo automation",{"skillNo":311,"name":312,"nameZh":6,"description":313,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":314,"categories":315,"keywords":318,"publishedAt":36},"01M6E3X9WJ2T73216WQHHTB9BD","zoho_mail-automation","Automate Zoho Mail tasks via Rube MCP (Composio): email sending, folders, labels, and mailbox management. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzoho_mail-automation\u002FSKILL.md",[316,317],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[319,320,321,26,28,29,30,322,31,32,33,323,34,324,35],"mail","zoho mail automation","zoho","email","management","mailbox",{"skillNo":326,"name":327,"nameZh":6,"description":328,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":329,"categories":330,"keywords":336,"publishedAt":36},"01M6E3X719W648XZBW1EC6JQ64","zoho_invoice-automation","Automate Zoho Invoice tasks via Rube MCP (Composio): invoices, estimates, expenses, clients, and payment tracking. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzoho_invoice-automation\u002FSKILL.md",[331,332,333],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":334,"categoryName":335,"taxonomyType":285,"taxonomyTypeDesc":286},"01JBSEEDCAT000000000000040","财务",[337,321,26,29,30,31,32,33,338,339,34,35,28],"zoho invoice automation","tracking","payment",{"skillNo":341,"name":342,"nameZh":6,"description":343,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":344,"categories":345,"keywords":348,"publishedAt":36},"01M6E3X28JYTC3QTK32AQF7BYB","zoho_inventory-automation","Automate Zoho Inventory tasks via Rube MCP (Composio): items, orders, warehouses, shipments, and stock management. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzoho_inventory-automation\u002FSKILL.md",[346,347],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[26,349,321,350,32,33,31,30,29,28,34,35,351,352,323],"inventory","zoho inventory automation","stock","orders"]