[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KER2HCWKC47WSMEWCSANGW":3,"skill-same:01M6KER2HCWKC47WSMEWCSANGW":131},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":60,"ownerHtmlUrl":61,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":62,"install":63,"resources":76},"01M6KER2HCWKC47WSMEWCSANGW","vercel-composition-patterns",null,"React composition patterns that scale. Use when refactoring components with boolean prop proliferation, building flexible component libraries, or designing reusable APIs. Triggers on tasks involving compound components, render props, context providers, or component architecture. Includes React 19 API changes.","RyouMon\u002FMyReader","RyouMon","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F42371625?v=4","01M6KEHCYA36Q3V1K41QV59W7E","Wen","01M6KEHD28Z5MHEK56872145JX",2,"MIT","https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"composition patterns","patterns","vercel","vercel composition patterns","Composition","when","components","react composition patterns","render","react 19","react composition","refactoring","api","Providers","component architecture","libraries","tasks","api changes","architecture","component","react","2026-11-10 10:12:30",false,"---\nname: airtable-automation\ndescription: \"Automate Airtable tasks via Rube MCP (Composio): records, bases, tables, fields, views. Always search tools first for current schemas.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Airtable Automation via Rube MCP\n\nAutomate Airtable operations through Composio's Airtable toolkit via Rube MCP.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Airtable connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `airtable`\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\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `airtable`\n3. If connection is not ACTIVE, follow the returned auth link to complete Airtable auth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Create and Manage Records\n\n**When to use**: User wants to create, read, update, or delete records\n\n**Tool sequence**:\n1. `AIRTABLE_LIST_BASES` - Discover available bases [Prerequisite]\n2. `AIRTABLE_GET_BASE_SCHEMA` - Inspect table structure [Prerequisite]\n3. `AIRTABLE_LIST_RECORDS` - List\u002Ffilter records [Optional]\n4. `AIRTABLE_CREATE_RECORD` \u002F `AIRTABLE_CREATE_RECORDS` - Create records [Optional]\n5. `AIRTABLE_UPDATE_RECORD` \u002F `AIRTABLE_UPDATE_MULTIPLE_RECORDS` - Update records [Optional]\n6. `AIRTABLE_DELETE_RECORD` \u002F `AIRTABLE_DELETE_MULTIPLE_RECORDS` - Delete records [Optional]\n\n**Key parameters**:\n- `baseId`: Base ID (starts with 'app', e.g., 'appXXXXXXXXXXXXXX')\n- `tableIdOrName`: Table ID (starts with 'tbl') or table name\n- `fields`: Object mapping field names to values\n- `recordId`: Record ID (starts with 'rec') for updates\u002Fdeletes\n- `filterByFormula`: Airtable formula for filtering\n- `typecast`: Set true for automatic type conversion\n\n**Pitfalls**:\n- pageSize capped at 100; uses offset pagination; changing filters between pages can skip\u002Fduplicate rows\n- CREATE_RECORDS hard limit of 10 records per request; chunk larger imports\n- Field names are CASE-SENSITIVE and must match schema exactly\n- 422 UNKNOWN_FIELD_NAME when field names are wrong; 403 for permission issues\n- INVALID_MULTIPLE_CHOICE_OPTIONS may require typecast=true\n\n### 2. Search and Filter Records\n\n**When to use**: User wants to find specific records using formulas\n\n**Tool sequence**:\n1. `AIRTABLE_GET_BASE_SCHEMA` - Verify field names and types [Prerequisite]\n2. `AIRTABLE_LIST_RECORDS` - Query with filterByFormula [Required]\n3. `AIRTABLE_GET_RECORD` - Get full record details [Optional]\n\n**Key parameters**:\n- `filterByFormula`: Airtable formula (e.g., `{Status}='Done'`)\n- `sort`: Array of sort objects\n- `fields`: Array of field names to return\n- `maxRecords`: Max total records across all pages\n- `offset`: Pagination cursor from previous response\n\n**Pitfalls**:\n- Field names in formulas must be wrapped in `{}` and match schema exactly\n- String values must be quoted: `{Status}='Active'` not `{Status}=Active`\n- 422 INVALID_FILTER_BY_FORMULA for bad syntax or non-existent fields\n- Airtable rate limit: ~5 requests\u002Fsecond per base; handle 429 with Retry-After\n\n### 3. Manage Fields and Schema\n\n**When to use**: User wants to create or modify table fields\n\n**Tool sequence**:\n1. `AIRTABLE_GET_BASE_SCHEMA` - Inspect current schema [Prerequisite]\n2. `AIRTABLE_CREATE_FIELD` - Create a new field [Optional]\n3. `AIRTABLE_UPDATE_FIELD` - Rename\u002Fdescribe a field [Optional]\n4. `AIRTABLE_UPDATE_TABLE` - Update table metadata [Optional]\n\n**Key parameters**:\n- `name`: Field name\n- `type`: Field type (singleLineText, number, singleSelect, etc.)\n- `options`: Type-specific options (choices for select, precision for number)\n- `description`: Field description\n\n**Pitfalls**:\n- UPDATE_FIELD only changes name\u002Fdescription, NOT type\u002Foptions; create a replacement field and migrate\n- Computed fields (formula, rollup, lookup) cannot be created via API\n- 422 when type options are missing or malformed\n\n### 4. Manage Comments\n\n**When to use**: User wants to view or add comments on records\n\n**Tool sequence**:\n1. `AIRTABLE_LIST_COMMENTS` - List comments on a record [Required]\n\n**Key parameters**:\n- `baseId`: Base ID\n- `tableIdOrName`: Table identifier\n- `recordId`: Record ID (17 chars, starts with 'rec')\n- `pageSize`: Comments per page (max 100)\n\n**Pitfalls**:\n- Record IDs must be exactly 17 characters starting with 'rec'\n\n## Common Patterns\n\n### Airtable Formula Syntax\n\n**Comparison**:\n- `{Status}='Done'` - Equals\n- `{Priority}>1` - Greater than\n- `{Name}!=''` - Not empty\n\n**Functions**:\n- `AND({A}='x', {B}='y')` - Both conditions\n- `OR({A}='x', {A}='y')` - Either condition\n- `FIND('test', {Name})>0` - Contains text\n- `IS_BEFORE({Due Date}, TODAY())` - Date comparison\n\n**Escape rules**:\n- Single quotes in values: double them (`{Name}='John''s Company'`)\n\n### Pagination\n\n- Set `pageSize` (max 100)\n- Check response for `offset` string\n- Pass `offset` to next request unchanged\n- Keep filters\u002Fsorts\u002Fview stable between pages\n\n## Known Pitfalls\n\n**ID Formats**:\n- Base IDs: `appXXXXXXXXXXXXXX` (17 chars)\n- Table IDs: `tblXXXXXXXXXXXXXX` (17 chars)\n- Record IDs: `recXXXXXXXXXXXXXX` (17 chars)\n- Field IDs: `fldXXXXXXXXXXXXXX` (17 chars)\n\n**Batch Limits**:\n- CREATE_RECORDS: max 10 per request\n- UPDATE_MULTIPLE_RECORDS: max 10 per request\n- DELETE_MULTIPLE_RECORDS: max 10 per request\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| List bases | AIRTABLE_LIST_BASES | (none) |\n| Get schema | AIRTABLE_GET_BASE_SCHEMA | baseId |\n| List records | AIRTABLE_LIST_RECORDS | baseId, tableIdOrName |\n| Get record | AIRTABLE_GET_RECORD | baseId, tableIdOrName, recordId |\n| Create record | AIRTABLE_CREATE_RECORD | baseId, tableIdOrName, fields |\n| Create records | AIRTABLE_CREATE_RECORDS | baseId, tableIdOrName, records |\n| Update record | AIRTABLE_UPDATE_RECORD | baseId, tableIdOrName, recordId, fields |\n| Update records | AIRTABLE_UPDATE_MULTIPLE_RECORDS | baseId, tableIdOrName, records |\n| Delete record | AIRTABLE_DELETE_RECORD | baseId, tableIdOrName, recordId |\n| Create field | AIRTABLE_CREATE_FIELD | baseId, tableIdOrName, name, type |\n| Update field | AIRTABLE_UPDATE_FIELD | baseId, tableIdOrName, fieldId |\n| Update table | AIRTABLE_UPDATE_TABLE | baseId, tableIdOrName, name |\n| List comments | AIRTABLE_LIST_COMMENTS | baseId, tableIdOrName, recordId |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Airtable Automation via Rube MCP\n\nAutomate Airtable operations through Composio's Airtable toolkit via Rube MCP.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Airtable connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `airtable`\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\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `airtable`\n3. If connection is not ACTIVE, follow the returned auth link to complete Airtable auth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Create and Manage Records\n\n**When to use**: User wants to create, read, update, or delete records\n\n**Tool sequence**:\n1. `AIRTABLE_LIST_BASES` - Discover available bases [Prerequisite]\n2. `AIRTABLE_GET_BASE_SCHEMA` - Inspect table structure [Prerequisite]\n3. `AIRTABLE_LIST_RECORDS` - List\u002Ffilter records [Optional]\n4. `AIRTABLE_CREATE_RECORD` \u002F `AIRTABLE_CREATE_RECORDS` - Create records [Optional]\n5. `AIRTABLE_UPDATE_RECORD` \u002F `AIRTABLE_UPDATE_MULTIPLE_RECORDS` - Update records [Optional]\n6. `AIRTABLE_DELETE_RECORD` \u002F `AIRTABLE_DELETE_MULTIPLE_RECORDS` - Delete records [Optional]\n\n**Key parameters**:\n- `baseId`: Base ID (starts with 'app', e.g., 'appXXXXXXXXXXXXXX')\n- `tableIdOrName`: Table ID (starts with 'tbl') or table name\n- `fields`: Object mapping field names to values\n- `recordId`: Record ID (starts with 'rec') for updates\u002Fdeletes\n- `filterByFormula`: Airtable formula for filtering\n- `typecast`: Set true for automatic type conversion\n\n**Pitfalls**:\n- pageSize capped at 100; uses offset pagination; changing filters between pages can skip\u002Fduplicate rows\n- CREATE_RECORDS hard limit of 10 records per request; chunk larger imports\n- Field names are CASE-SENSITIVE and must match schema exactly\n- 422 UNKNOWN_FIELD_NAME when field names are wrong; 403 for permission issues\n- INVALID_MULTIPLE_CHOICE_OPTIONS may require typecast=true\n\n### 2. Search and Filter Records\n\n**When to use**: User wants to find specific records using formulas\n\n**Tool sequence**:\n1. `AIRTABLE_GET_BASE_SCHEMA` - Verify field names and types [Prerequisite]\n2. `AIRTABLE_LIST_RECORDS` - Query with filterByFormula [Required]\n3. `AIRTABLE_GET_RECORD` - Get full record details [Optional]\n\n**Key parameters**:\n- `filterByFormula`: Airtable formula (e.g., `{Status}='Done'`)\n- `sort`: Array of sort objects\n- `fields`: Array of field names to return\n- `maxRecords`: Max total records across all pages\n- `offset`: Pagination cursor from previous response\n\n**Pitfalls**:\n- Field names in formulas must be wrapped in `{}` and match schema exactly\n- String values must be quoted: `{Status}='Active'` not `{Status}=Active`\n- 422 INVALID_FILTER_BY_FORMULA for bad syntax or non-existent fields\n- Airtable rate limit: ~5 requests\u002Fsecond per base; handle 429 with Retry-After\n\n### 3. Manage Fields and Schema\n\n**When to use**: User wants to create or modify table fields\n\n**Tool sequence**:\n1. `AIRTABLE_GET_BASE_SCHEMA` - Inspect current schema [Prerequisite]\n2. `AIRTABLE_CREATE_FIELD` - Create a new field [Optional]\n3. `AIRTABLE_UPDATE_FIELD` - Rename\u002Fdescribe a field [Optional]\n4. `AIRTABLE_UPDATE_TABLE` - Update table metadata [Optional]\n\n**Key parameters**:\n- `name`: Field name\n- `type`: Field type (singleLineText, number, singleSelect, etc.)\n- `options`: Type-specific options (choices for select, precision for number)\n- `description`: Field description\n\n**Pitfalls**:\n- UPDATE_FIELD only changes name\u002Fdescription, NOT type\u002Foptions; create a replacement field and migrate\n- Computed fields (formula, rollup, lookup) cannot be created via API\n- 422 when type options are missing or malformed\n\n### 4. Manage Comments\n\n**When to use**: User wants to view or add comments on records\n\n**Tool sequence**:\n1. `AIRTABLE_LIST_COMMENTS` - List comments on a record [Required]\n\n**Key parameters**:\n- `baseId`: Base ID\n- `tableIdOrName`: Table identifier\n- `recordId`: Record ID (17 chars, starts with 'rec')\n- `pageSize`: Comments per page (max 100)\n\n**Pitfalls**:\n- Record IDs must be exactly 17 characters starting with 'rec'\n\n## Common Patterns\n\n### Airtable Formula Syntax\n\n**Comparison**:\n- `{Status}='Done'` - Equals\n- `{Priority}>1` - Greater than\n- `{Name}!=''` - Not empty\n\n**Functions**:\n- `AND({A}='x', {B}='y')` - Both conditions\n- `OR({A}='x', {A}='y')` - Either condition\n- `FIND('test', {Name})>0` - Contains text\n- `IS_BEFORE({Due Date}, TODAY())` - Date comparison\n\n**Escape rules**:\n- Single quotes in values: double them (`{Name}='John''s Company'`)\n\n### Pagination\n\n- Set `pageSize` (max 100)\n- Check response for `offset` string\n- Pass `offset` to next request unchanged\n- Keep filters\u002Fsorts\u002Fview stable between pages\n\n## Known Pitfalls\n\n**ID Formats**:\n- Base IDs: `appXXXXXXXXXXXXXX` (17 chars)\n- Table IDs: `tblXXXXXXXXXXXXXX` (17 chars)\n- Record IDs: `recXXXXXXXXXXXXXX` (17 chars)\n- Field IDs: `fldXXXXXXXXXXXXXX` (17 chars)\n\n**Batch Limits**:\n- CREATE_RECORDS: max 10 per request\n- UPDATE_MULTIPLE_RECORDS: max 10 per request\n- DELETE_MULTIPLE_RECORDS: max 10 per request\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| List bases | AIRTABLE_LIST_BASES | (none) |\n| Get schema | AIRTABLE_GET_BASE_SCHEMA | baseId |\n| List records | AIRTABLE_LIST_RECORDS | baseId, tableIdOrName |\n| Get record | AIRTABLE_GET_RECORD | baseId, tableIdOrName, recordId |\n| Create record | AIRTABLE_CREATE_RECORD | baseId, tableIdOrName, fields |\n| Create records | AIRTABLE_CREATE_RECORDS | baseId, tableIdOrName, records |\n| Update record | AIRTABLE_UPDATE_RECORD | baseId, tableIdOrName, recordId, fields |\n| Update records | AIRTABLE_UPDATE_MULTIPLE_RECORDS | baseId, tableIdOrName, records |\n| Delete record | AIRTABLE_DELETE_RECORD | baseId, tableIdOrName, recordId |\n| Create field | AIRTABLE_CREATE_FIELD | baseId, tableIdOrName, name, type |\n| Update field | AIRTABLE_UPDATE_FIELD | baseId, tableIdOrName, fieldId |\n| Update table | AIRTABLE_UPDATE_TABLE | baseId, tableIdOrName, name |\n| List comments | AIRTABLE_LIST_COMMENTS | baseId, tableIdOrName, recordId |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":50,"risk":51,"source":52,"date_added":53,"description":54},"airtable-automation","unknown","community","2026-02-27","Automate Airtable tasks via Rube MCP (Composio): records, bases, tables, fields, views. Always search tools first for current schemas.","main","aae5fa43a57641df274d23f55d90e394333c4050",".agents\u002Fskills\u002Fvercel-composition-patterns",0,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader","https:\u002F\u002Fryoumon.github.io\u002Fprojects\u002Fmyreader\u002F","https:\u002F\u002Fgithub.com\u002FRyouMon","2026-11-10 02:18:46",{"source":8,"skillName":50,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add RyouMon\u002FMyReader --skill airtable-automation",{"tool":69,"command":70},"bunx","bunx skills add RyouMon\u002FMyReader --skill airtable-automation",{"tool":72,"command":73},"pnpm","pnpm dlx skills add RyouMon\u002FMyReader --skill airtable-automation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002FSKILL.md",true,[77,83,87,91,95,99,103,107,111,115,119,123,127],{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"AGENTS.md","REFERENCE","参考文档",22627,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002FAGENTS.md",{"path":84,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":85,"sourceHtmlUrl":86},"metadata.json",530,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002Fmetadata.json",{"path":88,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":89,"sourceHtmlUrl":90},"README.md",2140,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002FREADME.md",{"path":92,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":93,"sourceHtmlUrl":94},"rules\u002F_sections.md",829,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002Frules\u002F_sections.md",{"path":96,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":97,"sourceHtmlUrl":98},"rules\u002F_template.md",329,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002Frules\u002F_template.md",{"path":100,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":101,"sourceHtmlUrl":102},"rules\u002Farchitecture-avoid-boolean-props.md",2267,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002Frules\u002Farchitecture-avoid-boolean-props.md",{"path":104,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":105,"sourceHtmlUrl":106},"rules\u002Farchitecture-compound-components.md",2600,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002Frules\u002Farchitecture-compound-components.md",{"path":108,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":109,"sourceHtmlUrl":110},"rules\u002Fpatterns-children-over-render-props.md",1886,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002Frules\u002Fpatterns-children-over-render-props.md",{"path":112,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":113,"sourceHtmlUrl":114},"rules\u002Fpatterns-explicit-variants.md",2395,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002Frules\u002Fpatterns-explicit-variants.md",{"path":116,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":117,"sourceHtmlUrl":118},"rules\u002Freact19-no-forwardref.md",953,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002Frules\u002Freact19-no-forwardref.md",{"path":120,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":121,"sourceHtmlUrl":122},"rules\u002Fstate-context-interface.md",4974,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002Frules\u002Fstate-context-interface.md",{"path":124,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":125,"sourceHtmlUrl":126},"rules\u002Fstate-decouple-implementation.md",2699,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002Frules\u002Fstate-decouple-implementation.md",{"path":128,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":129,"sourceHtmlUrl":130},"rules\u002Fstate-lift-state.md",3224,"https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-composition-patterns\u002Frules\u002Fstate-lift-state.md",[132,169,192,216,234,254],{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":136,"licenseFileUrl":137,"sourceHtmlUrl":138,"categories":139,"keywords":149,"publishedAt":45},"01M6KEPBH08HMQVRGJQDG02AVP","frontend-design","Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML\u002FCSS layouts, or when styling\u002Fbeautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ffrontend-design\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ffrontend-design\u002FSKILL.md",[140,141,144],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":142,"categoryName":143,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":145,"categoryName":146,"taxonomyType":147,"taxonomyTypeDesc":148},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[150,151,152,153,154,30,44,155,156,157,158,159,160,161,162,163,164,165,166,167,168,29],"frontend","design","frontend design","css","web","react components","create","code","artifacts","examples","applications","landing","use","ui design","pages","aesthetics","web ui","with","generic",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":176,"publishedAt":45},"01M6KES6YTRMFMAGCCMFW26AN9","cross-platform-ui-spec","Apply the shared MyReader design workflow to desktop or mobile UI changes in Cursor.","https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fcross-platform-ui-spec\u002FSKILL.md",[175],{"categoryNo":145,"categoryName":146,"taxonomyType":147,"taxonomyTypeDesc":148},[177,178,179,180,181,182,151,183,184,185,186,187,188,189,190,191],"spec","cross platform","ui","platform","platform ui","cross platform ui spec","workflow","desktop","cursor","mobile","shared","mobile ui","changes","apply","myreader design",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":199,"publishedAt":45},"01M6KES2HFY9HGF5T9GDAGSFRE","zustand-state-management","Zustand v5 store patterns, TypeScript create\u003CT>()() usage, persist\u002Fdevtools middleware, hydration pitfalls, slices, and migration notes. Use when implementing or reviewing global client state with Zustand in React apps.","https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fzustand-state-management\u002FSKILL.md",[198],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[200,201,202,203,204,205,206,44,207,156,208,162,25,209,210,211,212,213,214,215,29],"state management","state","zustand","management","zustand state","zustand state management","typescript","notes","devtools","apps","store","middleware","pitfalls","usage","persist","implementing",{"skillNo":217,"name":218,"nameZh":6,"description":219,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":220,"categories":221,"keywords":223,"publishedAt":45},"01M6KERW3JC43BAGMFNA1FYVQ5","vercel-react-view-transitions","Guide for implementing smooth, native-feeling animations using React's View Transition API (`\u003CViewTransition>` component, `addTransitionType`, and CSS view transition pseudo-elements). Use this skill whenever the user wants to add page transitions, animate route changes, create shared element animations, animate enter\u002Fexit of components, animate list reorder, implement directional (forward\u002Fback) navigation animations, or integrate view transitions in Next.js. Also use when the user mentions view transitions, `startViewTransition`, `ViewTransition`, transition types, or asks about animating between UI states in React without third-party animation libraries.","https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-view-transitions\u002FSKILL.md",[222],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[44,224,26,225,226,227,153,30,43,39,156,36,228,229,230,187,231,232,233,215,29],"view","vercel react view transitions","react view transitions","transitions","Animation","back","route","element","types","states",{"skillNo":235,"name":236,"nameZh":6,"description":237,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":238,"categories":239,"keywords":241,"publishedAt":45},"01M6KERK6M3QARTY9GGVWH49XQ","vercel-react-native-skills","React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.","https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-native-skills\u002FSKILL.md",[240],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[44,242,243,26,244,245,246,30,40,247,162,248,186,249,180,250,251,209,215,252,253,29],"vercel react native skills","react native","react native skills","native","performance","list","modules","expo","triggers","mobile performance","for","animations",{"skillNo":255,"name":256,"nameZh":6,"description":257,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":258,"categories":259,"keywords":261,"publishedAt":45},"01M6KER8AQ7EJB3W68GTRZKHA3","vercel-react-best-practices","React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React\u002FNext.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.","https:\u002F\u002Fgithub.com\u002FRyouMon\u002FMyReader\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fvercel-react-best-practices\u002FSKILL.md",[260],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[44,262,263,264,26,265,246,30,155,266,40,157,267,268,35,25,269,164,250,270,29],"vercel react best practices","best practices","react best practices","writing","guidelines","Optimization","data","next","data fetching"]