[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FG0CQF009SWJ3NK708KQBT":3,"skill-same:01M6FG0CQF009SWJ3NK708KQBT":55},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":30,"frontMatter":31,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":37,"ownerHtmlUrl":38,"ownerBlogUrl":6,"ownerDescription":39,"updatedAt":40,"install":41,"resources":54},"01M6FG0CQF009SWJ3NK708KQBT","asc-revenuecat-catalog-sync",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Frudrankriyam\u002Fapp-store-connect-cli-skills\u002Fasc-revenuecat-catalog-sync\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25,26,27],"sync","catalog","asc","revenuecat","asc revenuecat catalog sync","2026-11-10 10:12:30",false,"# asc RevenueCat catalog sync\n\nUse this skill to keep App Store Connect (ASC) and RevenueCat aligned, including creating missing ASC items and mapping them to RevenueCat resources.\n\n## When to use\n- You want to bootstrap RevenueCat from an existing ASC catalog.\n- You want to create missing ASC subscriptions\u002FIAPs, then map them into RevenueCat.\n- You need a drift audit before release.\n- You want deterministic product mapping based on identifiers.\n\n## Preconditions\n- `asc` authentication is configured (`asc auth login` or `ASC_*` env vars).\n- RevenueCat MCP server is configured and authenticated.\n- In Cursor and VS Code, OAuth auth is available for RevenueCat MCP. API key auth is also supported.\n- You know:\n  - ASC app ID (`APP_ID`)\n  - RevenueCat `project_id`\n  - target RevenueCat app type (`app_store` or `mac_app_store`) and bundle ID for create flows\n- Use a write-enabled RevenueCat API v2 key when applying changes.\n\n## Safety defaults\n- Start in **audit mode** (read-only).\n- Require explicit confirmation before writes.\n- Never delete resources in this workflow.\n- Continue on per-item failures and report all failures at the end.\n\n## Canonical identifiers\n- Primary cross-system key: ASC `productId` == RevenueCat `store_identifier`.\n- Keep `productId` stable once products are live.\n- Do not use display names as unique identifiers.\n\n## Scope boundary\n- RevenueCat MCP configures RevenueCat resources; it does not create App Store Connect products directly.\n- Use `asc` commands to create missing ASC subscription groups, subscriptions, and IAPs before RevenueCat mapping.\n\n## Modes\n\n### 1) Audit mode (default)\n1. Read ASC source catalog.\n2. Read RevenueCat target catalog.\n3. Build a diff with actions:\n   - missing in ASC\n   - missing in RevenueCat\n   - mapping conflicts (identifier\u002Ftype\u002Fapp mismatch)\n4. Present a plan and wait for confirmation.\n\n### 2) Apply mode (explicit)\nExecute approved actions in this order:\n1. Ensure ASC groups\u002Fsubscriptions\u002FIAP exist.\n2. Ensure RevenueCat app\u002Fproducts exist.\n3. Ensure entitlements and product attachments.\n4. Ensure offerings\u002Fpackages and package attachments.\n5. Verify and print a final reconciliation summary.\n\n## Step-by-step workflow\n\n### Step A - Read current ASC catalog\n\n```bash\nasc subscriptions groups list --app \"APP_ID\" --paginate --output json\nasc iap list --app \"APP_ID\" --paginate --output json\n# for each subscription group:\nasc subscriptions list --group-id \"GROUP_ID\" --paginate --output json\n```\n\n### Step B - Read current RevenueCat catalog (MCP)\n\nUse these MCP tools (with `project_id` and pagination where applicable):\n- `mcp_RC_get_project`\n- `mcp_RC_list_apps`\n- `mcp_RC_list_products`\n- `mcp_RC_list_entitlements`\n- `mcp_RC_list_offerings`\n- `mcp_RC_list_packages`\n\n### Step C - Build mapping plan\n\nMap ASC product types to RevenueCat product types:\n- ASC subscription -> RevenueCat `subscription`\n- ASC IAP `CONSUMABLE` -> RevenueCat `consumable`\n- ASC IAP `NON_CONSUMABLE` -> RevenueCat `non_consumable`\n- ASC IAP `NON_RENEWING_SUBSCRIPTION` -> RevenueCat `non_renewing_subscription`\n\nSuggested entitlement policy:\n- subscriptions: one entitlement per subscription group (or explicit map provided by user)\n- non-consumable IAP: one entitlement per product\n- consumable IAP: no entitlement by default unless user asks\n\n### Step D - Ensure missing ASC items (if requested)\n\nCreate missing ASC resources first, then re-read ASC to capture canonical IDs.\n\n```bash\n# create subscription group\nasc subscriptions groups create --app \"APP_ID\" --reference-name \"Premium\"\n\n# create subscription\nasc subscriptions create \\\n  --group-id \"GROUP_ID\" \\\n  --reference-name \"Monthly\" \\\n  --product-id \"com.example.premium.monthly\" \\\n  --subscription-period ONE_MONTH\n\n# create iap\nasc iap create \\\n  --app \"APP_ID\" \\\n  --type NON_CONSUMABLE \\\n  --ref-name \"Lifetime\" \\\n  --product-id \"com.example.lifetime\"\n```\n\n### Step E - Ensure RevenueCat app and products\n\nUse MCP:\n- create app if missing: `mcp_RC_create_app`\n- create products: `mcp_RC_create_product`\n  - `store_identifier` = ASC `productId`\n  - `app_id` = RevenueCat app ID\n  - `type` from mapping above\n\n### Step F - Ensure entitlements and attachments\n\nUse MCP:\n- list\u002Fcreate entitlements: `mcp_RC_list_entitlements`, `mcp_RC_create_entitlement`\n- attach products: `mcp_RC_attach_products_to_entitlement`\n- verify attachments: `mcp_RC_get_products_from_entitlement`\n\n### Step G - Ensure offerings and packages (optional)\n\nUse MCP:\n- list\u002Fcreate\u002Fupdate offerings:\n  - `mcp_RC_list_offerings`\n  - `mcp_RC_create_offering`\n  - `mcp_RC_update_offering` (`is_current=true` only if requested)\n- list\u002Fcreate packages:\n  - `mcp_RC_list_packages`\n  - `mcp_RC_create_package`\n- attach products to packages:\n  - `mcp_RC_attach_products_to_package` with `eligibility_criteria: \"all\"`\n\nRecommended package keys:\n- `ONE_WEEK` -> `$rc_weekly`\n- `ONE_MONTH` -> `$rc_monthly`\n- `TWO_MONTHS` -> `$rc_two_month`\n- `THREE_MONTHS` -> `$rc_three_month`\n- `SIX_MONTHS` -> `$rc_six_month`\n- `ONE_YEAR` -> `$rc_annual`\n- lifetime IAP -> `$rc_lifetime`\n- custom -> `$rc_custom_\u003Cname>`\n\n## Expected output format\n\nReturn a final summary with:\n- ASC created counts (groups\u002Fsubscriptions\u002FIAP)\n- RevenueCat created counts (apps\u002Fproducts\u002Fentitlements\u002Fofferings\u002Fpackages)\n- attachment counts (entitlement-products, package-products)\n- skipped existing items\n- failed items with actionable errors\n\nExample:\n\n```text\nASC: created groups=1 subscriptions=2 iap=1, skipped=14, failed=0\nRC: created apps=0 products=3 entitlements=2 offerings=1 packages=2, skipped=27, failed=1\nAttachments: entitlement_products=3 package_products=2\nFailures:\n- com.example.premium.annual: duplicate store_identifier exists on another RC app\n```\n\n## Agent behavior\n- Always run audit first, even in apply mode.\n- Ask for confirmation before create\u002Fupdate operations.\n- Match by `store_identifier` first.\n- Use full pagination (`--paginate` for ASC, `starting_after` for RevenueCat tools).\n- Continue processing after per-item failures and report all failures together.\n- Never auto-delete ASC or RevenueCat resources in this skill.\n\n## Common pitfalls\n- Wrong RevenueCat `project_id` or app ID.\n- Creating RC products under the wrong platform app.\n- Accidentally assigning consumables to entitlements.\n- Skipping the post-create ASC re-read step.\n- Missing offering\u002Fpackage verification after product creation.\n\n## Additional resources\n- Workflow examples: [examples.md](examples.md)\n- Source references: [references.md](references.md)\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Frudrankriyam\u002Fapp-store-connect-cli-skills\u002Fasc-revenuecat-catalog-sync",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill asc-revenuecat-catalog-sync",{"tool":47,"command":48},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill asc-revenuecat-catalog-sync",{"tool":50,"command":51},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill asc-revenuecat-catalog-sync","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Frudrankriyam\u002Fapp-store-connect-cli-skills\u002Fasc-revenuecat-catalog-sync\u002FSKILL.md",true,[],[56,66,76,85,91,98],{"skillNo":57,"name":58,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":62,"publishedAt":28},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[61],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[63,64,65],"model","model hierarchy","model hierarchy skill",{"skillNo":67,"name":68,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":72,"publishedAt":28},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[71],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[73,74,75],"MCP","zoom","zoom mcp",{"skillNo":77,"name":78,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":28},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[82,83,84,74],"sdk","zoom apps sdk","apps",{"skillNo":86,"name":87,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":28},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[87],{"skillNo":92,"name":93,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":97,"publishedAt":28},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[96],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[93],{"skillNo":99,"name":100,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":28},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[100]]