[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F75712MTE009Z8ASXVEKXC":3,"skill-same:01M6F75712MTE009Z8ASXVEKXC":84},{"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":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":61,"commitSha":62,"skillDirectory":63,"forksCount":64,"repositoryHtmlUrl":65,"repositoryHomepageUrl":66,"ownerHtmlUrl":67,"ownerBlogUrl":6,"ownerDescription":68,"updatedAt":69,"install":70,"resources":83},"01M6F75712MTE009Z8ASXVEKXC","apollo-cost-tuning",null,"Optimize Apollo.io costs and credit usage.\nUse when managing Apollo credits, reducing API costs,\nor optimizing subscription usage.\nTrigger with phrases like \"apollo cost\", \"apollo credits\",\n\"apollo billing\", \"reduce apollo costs\", \"apollo usage\".","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\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fapollo-cost-tuning\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"tuning","apollo cost tuning","apollo","cost","edit","billing","trigger","io","optimize","credits","use","openclaw","write","read","gh","Bash","api","saas","Optimization","code","2026-11-10 10:12:30",false,"---\nname: apollo-cost-tuning\ndescription: |\n  Optimize Apollo.io costs and credit usage.\n  Use when managing Apollo credits, reducing API costs,\n  or optimizing subscription usage.\n  Trigger with phrases like \"apollo cost\", \"apollo credits\",\n  \"apollo billing\", \"reduce apollo costs\", \"apollo usage\".\nallowed-tools: Read, Write, Edit, Bash(gh:*), Bash(curl:*)\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ncompatible-with: claude-code, codex, openclaw\ntags: [saas, apollo, api, cost-optimization]\n\n---\n# Apollo Cost Tuning\n\n## Overview\nOptimize Apollo.io API costs through credit-aware enrichment. Key cost model: **search is free, enrichment costs credits.** Apollo charges per unique contact\u002Fcompany lookup. Credits do not roll over. Strategies: deduplicate before enriching, score leads before spending credits, and track daily budget.\n\n## Prerequisites\n- Valid Apollo API key\n- Node.js 18+\n\n## Instructions\n\n### Step 1: Understand Apollo's Credit Model\n```\nAction                      | Credits | Notes\n----------------------------+---------+-----------------------------------\nPeople Search               | 0       | \u002Fmixed_people\u002Fapi_search (free!)\nOrganization Search         | 0       | \u002Fmixed_companies\u002Fsearch (free!)\nPeople Enrichment (single)  | 1       | \u002Fpeople\u002Fmatch\nPeople Enrichment (bulk)    | 1\u002Fmatch | \u002Fpeople\u002Fbulk_match (up to 10\u002Fcall)\nOrganization Enrichment     | 1       | \u002Forganizations\u002Fenrich\nReveal Personal Email       | +1      | reveal_personal_emails param\nReveal Phone Number         | +1      | reveal_phone_number param\n```\n\nPlans (approximate):\n- **Free**: 50 credits\u002Fmonth\n- **Basic**: 1,200 credits\u002Fmonth (~$0.04\u002Fcredit)\n- **Professional**: 6,000 credits\u002Fmonth\n- **Organization**: 12,000+ credits\u002Fmonth\n\n### Step 2: Track Credit Usage\n```typescript\n\u002F\u002F src\u002Fcost\u002Fcredit-tracker.ts\nclass CreditTracker {\n  private daily: Map\u003Cstring, number> = new Map();\n  private readonly budget: number;\n\n  constructor(dailyBudget: number = 200) {\n    this.budget = dailyBudget;\n  }\n\n  record(count: number = 1) {\n    const today = new Date().toISOString().split('T')[0];\n    this.daily.set(today, (this.daily.get(today) ?? 0) + count);\n  }\n\n  todayUsage(): number {\n    const today = new Date().toISOString().split('T')[0];\n    return this.daily.get(today) ?? 0;\n  }\n\n  isOverBudget(): boolean {\n    return this.todayUsage() >= this.budget;\n  }\n\n  report(): string {\n    const used = this.todayUsage();\n    return `${used}\u002F${this.budget} credits (${Math.round((used \u002F this.budget) * 100)}%)`;\n  }\n}\n\nexport const creditTracker = new CreditTracker(\n  parseInt(process.env.APOLLO_DAILY_CREDIT_BUDGET ?? '200', 10),\n);\n```\n\n### Step 3: Deduplicate Before Enriching\n```typescript\n\u002F\u002F src\u002Fcost\u002Fdedup.ts\nimport { LRUCache } from 'lru-cache';\n\n\u002F\u002F Track enriched contacts to avoid paying twice\nconst enrichedCache = new LRUCache\u003Cstring, boolean>({\n  max: 50_000,\n  ttl: 30 * 24 * 60 * 60 * 1000,  \u002F\u002F 30 days\n});\n\nexport function enrichmentKey(params: { email?: string; linkedin_url?: string;\n  first_name?: string; last_name?: string; organization_domain?: string }): string {\n  \u002F\u002F Prefer email as unique key, fall back to LinkedIn, then name+domain\n  return params.email\n    ?? params.linkedin_url\n    ?? `${params.first_name}:${params.last_name}:${params.organization_domain}`;\n}\n\nexport function isAlreadyEnriched(key: string): boolean {\n  return enrichedCache.has(key);\n}\n\nexport function markEnriched(key: string) {\n  enrichedCache.set(key, true);\n}\n```\n\n### Step 4: Score Leads Before Enriching\nOnly spend credits on leads worth contacting.\n\n```typescript\n\u002F\u002F src\u002Fcost\u002Flead-scorer.ts\ninterface LeadSignals {\n  seniority?: string;\n  title?: string;\n  companyEmployees?: number;\n  hasEmail: boolean;\n  hasPhone: boolean;\n  hasLinkedIn: boolean;\n}\n\nexport function shouldEnrich(signals: LeadSignals, threshold: number = 40): boolean {\n  let score = 0;\n\n  \u002F\u002F Seniority — only enrich decision-makers\n  const topSeniority = ['c_suite', 'vp', 'founder', 'owner'];\n  if (topSeniority.includes(signals.seniority ?? '')) score += 40;\n  else if (signals.seniority === 'director') score += 30;\n  else if (signals.seniority === 'manager') score += 15;\n  else score += 5;\n\n  \u002F\u002F Company size — mid-market is highest value\n  if (signals.companyEmployees && signals.companyEmployees >= 50 && signals.companyEmployees \u003C= 1000) score += 25;\n  else if (signals.companyEmployees && signals.companyEmployees > 1000) score += 15;\n\n  \u002F\u002F Missing data — worth enriching if we need the contact info\n  if (!signals.hasEmail) score += 20;\n  if (!signals.hasPhone) score += 10;\n\n  return score >= threshold;\n}\n```\n\n### Step 5: Budget-Aware API Client\n```typescript\n\u002F\u002F src\u002Fcost\u002Fbudget-client.ts\nimport axios from 'axios';\nimport { creditTracker } from '.\u002Fcredit-tracker';\nimport { isAlreadyEnriched, markEnriched, enrichmentKey } from '.\u002Fdedup';\n\nconst client = axios.create({\n  baseURL: 'https:\u002F\u002Fapi.apollo.io\u002Fapi\u002Fv1',\n  headers: { 'Content-Type': 'application\u002Fjson', 'x-api-key': process.env.APOLLO_API_KEY! },\n});\n\n\u002F\u002F Credit-consuming endpoints\nconst CREDIT_ENDPOINTS = ['\u002Fpeople\u002Fmatch', '\u002Fpeople\u002Fbulk_match', '\u002Forganizations\u002Fenrich'];\n\n\u002F\u002F Block requests when over budget\nclient.interceptors.request.use((config) => {\n  const isCreditEndpoint = CREDIT_ENDPOINTS.some((ep) => config.url?.includes(ep));\n  if (isCreditEndpoint && creditTracker.isOverBudget()) {\n    throw new Error(`Daily credit budget exceeded (${creditTracker.report()})`);\n  }\n  return config;\n});\n\n\u002F\u002F Track credit usage on success\nclient.interceptors.response.use((response) => {\n  const isCreditEndpoint = CREDIT_ENDPOINTS.some((ep) => response.config.url?.includes(ep));\n  if (isCreditEndpoint) {\n    \u002F\u002F Bulk match: count matches, not calls\n    const matchCount = response.data?.matches?.length ?? 1;\n    creditTracker.record(matchCount);\n\n    \u002F\u002F Mark as enriched for dedup\n    const email = response.data?.person?.email;\n    if (email) markEnriched(email);\n  }\n  return response;\n});\n\nexport { client as budgetClient };\n```\n\n### Step 6: Cost-Optimized Pipeline\n```typescript\nimport { budgetClient } from '.\u002Fcost\u002Fbudget-client';\nimport { shouldEnrich } from '.\u002Fcost\u002Flead-scorer';\nimport { isAlreadyEnriched, enrichmentKey } from '.\u002Fcost\u002Fdedup';\nimport { creditTracker } from '.\u002Fcost\u002Fcredit-tracker';\n\nasync function enrichHighValueLeads(people: any[]) {\n  let enriched = 0, skipped = 0, deduped = 0;\n\n  const toEnrich: any[] = [];\n\n  for (const person of people) {\n    const key = enrichmentKey({ email: person.email, linkedin_url: person.linkedin_url,\n      first_name: person.first_name, last_name: person.last_name });\n\n    if (isAlreadyEnriched(key)) { deduped++; continue; }\n    if (!shouldEnrich({ seniority: person.seniority, hasEmail: !!person.email,\n      hasPhone: false, hasLinkedIn: !!person.linkedin_url })) { skipped++; continue; }\n\n    toEnrich.push(person);\n  }\n\n  \u002F\u002F Bulk enrich in batches of 10\n  for (let i = 0; i \u003C toEnrich.length; i += 10) {\n    const batch = toEnrich.slice(i, i + 10);\n    await budgetClient.post('\u002Fpeople\u002Fbulk_match', {\n      details: batch.map((p: any) => ({\n        first_name: p.first_name, last_name: p.last_name,\n        organization_domain: p.organization?.primary_domain,\n      })),\n    });\n    enriched += batch.length;\n  }\n\n  console.log(`Enriched: ${enriched}, Skipped (low-value): ${skipped}, Deduped: ${deduped}`);\n  console.log(`Credits: ${creditTracker.report()}`);\n}\n```\n\n## Output\n- Credit model reference table (free vs paid operations)\n- `CreditTracker` with daily budget enforcement\n- LRU deduplication preventing double-enrichment charges\n- Lead scoring to enrich only high-value contacts\n- Budget-aware client blocking requests at daily limit\n- Cost-optimized pipeline combining all strategies\n\n## Error Handling\n| Issue | Resolution |\n|-------|------------|\n| Budget exceeded | Increase `APOLLO_DAILY_CREDIT_BUDGET` or wait until tomorrow |\n| High dedup misses | Extend LRU TTL, verify key generation logic |\n| Enriching low-value leads | Lower the `shouldEnrich` threshold |\n| Month-end credit crunch | Spread enrichment evenly with daily budgets |\n\n## Resources\n- [Apollo API Pricing](https:\u002F\u002Fdocs.apollo.io\u002Fdocs\u002Fapi-pricing)\n- [Apollo Plans](https:\u002F\u002Fwww.apollo.io\u002Fpricing)\n- [View API Usage Stats](https:\u002F\u002Fdocs.apollo.io\u002Freference\u002Fview-api-usage-stats)\n\n## Next Steps\nProceed to `apollo-reference-architecture` for architecture patterns.\n\n","# Apollo Cost Tuning\n\n## Overview\nOptimize Apollo.io API costs through credit-aware enrichment. Key cost model: **search is free, enrichment costs credits.** Apollo charges per unique contact\u002Fcompany lookup. Credits do not roll over. Strategies: deduplicate before enriching, score leads before spending credits, and track daily budget.\n\n## Prerequisites\n- Valid Apollo API key\n- Node.js 18+\n\n## Instructions\n\n### Step 1: Understand Apollo's Credit Model\n```\nAction                      | Credits | Notes\n----------------------------+---------+-----------------------------------\nPeople Search               | 0       | \u002Fmixed_people\u002Fapi_search (free!)\nOrganization Search         | 0       | \u002Fmixed_companies\u002Fsearch (free!)\nPeople Enrichment (single)  | 1       | \u002Fpeople\u002Fmatch\nPeople Enrichment (bulk)    | 1\u002Fmatch | \u002Fpeople\u002Fbulk_match (up to 10\u002Fcall)\nOrganization Enrichment     | 1       | \u002Forganizations\u002Fenrich\nReveal Personal Email       | +1      | reveal_personal_emails param\nReveal Phone Number         | +1      | reveal_phone_number param\n```\n\nPlans (approximate):\n- **Free**: 50 credits\u002Fmonth\n- **Basic**: 1,200 credits\u002Fmonth (~$0.04\u002Fcredit)\n- **Professional**: 6,000 credits\u002Fmonth\n- **Organization**: 12,000+ credits\u002Fmonth\n\n### Step 2: Track Credit Usage\n```typescript\n\u002F\u002F src\u002Fcost\u002Fcredit-tracker.ts\nclass CreditTracker {\n  private daily: Map\u003Cstring, number> = new Map();\n  private readonly budget: number;\n\n  constructor(dailyBudget: number = 200) {\n    this.budget = dailyBudget;\n  }\n\n  record(count: number = 1) {\n    const today = new Date().toISOString().split('T')[0];\n    this.daily.set(today, (this.daily.get(today) ?? 0) + count);\n  }\n\n  todayUsage(): number {\n    const today = new Date().toISOString().split('T')[0];\n    return this.daily.get(today) ?? 0;\n  }\n\n  isOverBudget(): boolean {\n    return this.todayUsage() >= this.budget;\n  }\n\n  report(): string {\n    const used = this.todayUsage();\n    return `${used}\u002F${this.budget} credits (${Math.round((used \u002F this.budget) * 100)}%)`;\n  }\n}\n\nexport const creditTracker = new CreditTracker(\n  parseInt(process.env.APOLLO_DAILY_CREDIT_BUDGET ?? '200', 10),\n);\n```\n\n### Step 3: Deduplicate Before Enriching\n```typescript\n\u002F\u002F src\u002Fcost\u002Fdedup.ts\nimport { LRUCache } from 'lru-cache';\n\n\u002F\u002F Track enriched contacts to avoid paying twice\nconst enrichedCache = new LRUCache\u003Cstring, boolean>({\n  max: 50_000,\n  ttl: 30 * 24 * 60 * 60 * 1000,  \u002F\u002F 30 days\n});\n\nexport function enrichmentKey(params: { email?: string; linkedin_url?: string;\n  first_name?: string; last_name?: string; organization_domain?: string }): string {\n  \u002F\u002F Prefer email as unique key, fall back to LinkedIn, then name+domain\n  return params.email\n    ?? params.linkedin_url\n    ?? `${params.first_name}:${params.last_name}:${params.organization_domain}`;\n}\n\nexport function isAlreadyEnriched(key: string): boolean {\n  return enrichedCache.has(key);\n}\n\nexport function markEnriched(key: string) {\n  enrichedCache.set(key, true);\n}\n```\n\n### Step 4: Score Leads Before Enriching\nOnly spend credits on leads worth contacting.\n\n```typescript\n\u002F\u002F src\u002Fcost\u002Flead-scorer.ts\ninterface LeadSignals {\n  seniority?: string;\n  title?: string;\n  companyEmployees?: number;\n  hasEmail: boolean;\n  hasPhone: boolean;\n  hasLinkedIn: boolean;\n}\n\nexport function shouldEnrich(signals: LeadSignals, threshold: number = 40): boolean {\n  let score = 0;\n\n  \u002F\u002F Seniority — only enrich decision-makers\n  const topSeniority = ['c_suite', 'vp', 'founder', 'owner'];\n  if (topSeniority.includes(signals.seniority ?? '')) score += 40;\n  else if (signals.seniority === 'director') score += 30;\n  else if (signals.seniority === 'manager') score += 15;\n  else score += 5;\n\n  \u002F\u002F Company size — mid-market is highest value\n  if (signals.companyEmployees && signals.companyEmployees >= 50 && signals.companyEmployees \u003C= 1000) score += 25;\n  else if (signals.companyEmployees && signals.companyEmployees > 1000) score += 15;\n\n  \u002F\u002F Missing data — worth enriching if we need the contact info\n  if (!signals.hasEmail) score += 20;\n  if (!signals.hasPhone) score += 10;\n\n  return score >= threshold;\n}\n```\n\n### Step 5: Budget-Aware API Client\n```typescript\n\u002F\u002F src\u002Fcost\u002Fbudget-client.ts\nimport axios from 'axios';\nimport { creditTracker } from '.\u002Fcredit-tracker';\nimport { isAlreadyEnriched, markEnriched, enrichmentKey } from '.\u002Fdedup';\n\nconst client = axios.create({\n  baseURL: 'https:\u002F\u002Fapi.apollo.io\u002Fapi\u002Fv1',\n  headers: { 'Content-Type': 'application\u002Fjson', 'x-api-key': process.env.APOLLO_API_KEY! },\n});\n\n\u002F\u002F Credit-consuming endpoints\nconst CREDIT_ENDPOINTS = ['\u002Fpeople\u002Fmatch', '\u002Fpeople\u002Fbulk_match', '\u002Forganizations\u002Fenrich'];\n\n\u002F\u002F Block requests when over budget\nclient.interceptors.request.use((config) => {\n  const isCreditEndpoint = CREDIT_ENDPOINTS.some((ep) => config.url?.includes(ep));\n  if (isCreditEndpoint && creditTracker.isOverBudget()) {\n    throw new Error(`Daily credit budget exceeded (${creditTracker.report()})`);\n  }\n  return config;\n});\n\n\u002F\u002F Track credit usage on success\nclient.interceptors.response.use((response) => {\n  const isCreditEndpoint = CREDIT_ENDPOINTS.some((ep) => response.config.url?.includes(ep));\n  if (isCreditEndpoint) {\n    \u002F\u002F Bulk match: count matches, not calls\n    const matchCount = response.data?.matches?.length ?? 1;\n    creditTracker.record(matchCount);\n\n    \u002F\u002F Mark as enriched for dedup\n    const email = response.data?.person?.email;\n    if (email) markEnriched(email);\n  }\n  return response;\n});\n\nexport { client as budgetClient };\n```\n\n### Step 6: Cost-Optimized Pipeline\n```typescript\nimport { budgetClient } from '.\u002Fcost\u002Fbudget-client';\nimport { shouldEnrich } from '.\u002Fcost\u002Flead-scorer';\nimport { isAlreadyEnriched, enrichmentKey } from '.\u002Fcost\u002Fdedup';\nimport { creditTracker } from '.\u002Fcost\u002Fcredit-tracker';\n\nasync function enrichHighValueLeads(people: any[]) {\n  let enriched = 0, skipped = 0, deduped = 0;\n\n  const toEnrich: any[] = [];\n\n  for (const person of people) {\n    const key = enrichmentKey({ email: person.email, linkedin_url: person.linkedin_url,\n      first_name: person.first_name, last_name: person.last_name });\n\n    if (isAlreadyEnriched(key)) { deduped++; continue; }\n    if (!shouldEnrich({ seniority: person.seniority, hasEmail: !!person.email,\n      hasPhone: false, hasLinkedIn: !!person.linkedin_url })) { skipped++; continue; }\n\n    toEnrich.push(person);\n  }\n\n  \u002F\u002F Bulk enrich in batches of 10\n  for (let i = 0; i \u003C toEnrich.length; i += 10) {\n    const batch = toEnrich.slice(i, i + 10);\n    await budgetClient.post('\u002Fpeople\u002Fbulk_match', {\n      details: batch.map((p: any) => ({\n        first_name: p.first_name, last_name: p.last_name,\n        organization_domain: p.organization?.primary_domain,\n      })),\n    });\n    enriched += batch.length;\n  }\n\n  console.log(`Enriched: ${enriched}, Skipped (low-value): ${skipped}, Deduped: ${deduped}`);\n  console.log(`Credits: ${creditTracker.report()}`);\n}\n```\n\n## Output\n- Credit model reference table (free vs paid operations)\n- `CreditTracker` with daily budget enforcement\n- LRU deduplication preventing double-enrichment charges\n- Lead scoring to enrich only high-value contacts\n- Budget-aware client blocking requests at daily limit\n- Cost-optimized pipeline combining all strategies\n\n## Error Handling\n| Issue | Resolution |\n|-------|------------|\n| Budget exceeded | Increase `APOLLO_DAILY_CREDIT_BUDGET` or wait until tomorrow |\n| High dedup misses | Extend LRU TTL, verify key generation logic |\n| Enriching low-value leads | Lower the `shouldEnrich` threshold |\n| Month-end credit crunch | Spread enrichment evenly with daily budgets |\n\n## Resources\n- [Apollo API Pricing](https:\u002F\u002Fdocs.apollo.io\u002Fdocs\u002Fapi-pricing)\n- [Apollo Plans](https:\u002F\u002Fwww.apollo.io\u002Fpricing)\n- [View API Usage Stats](https:\u002F\u002Fdocs.apollo.io\u002Freference\u002Fview-api-usage-stats)\n\n## Next Steps\nProceed to `apollo-reference-architecture` for architecture patterns.\n\n",{"name":5,"tags":54,"author":56,"license":15,"version":57,"description":58,"allowed-tools":59,"compatible-with":60},[46,31,45,55],"cost-optimization","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Optimize Apollo.io costs and credit usage.\nUse when managing Apollo credits, reducing API costs,\nor optimizing subscription usage.\nTrigger with phrases like \"apollo cost\", \"apollo credits\",\n\"apollo billing\", \"reduce apollo costs\", \"apollo usage\".\n","Read, Write, Edit, Bash(gh:*), Bash(curl:*)","claude-code, codex, openclaw","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fapollo-cost-tuning",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":8,"skillName":5,"commands":71,"prompt":81,"zipAvailable":82},[72,75,78],{"tool":73,"command":74},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill apollo-cost-tuning",{"tool":76,"command":77},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill apollo-cost-tuning",{"tool":79,"command":80},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill apollo-cost-tuning","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fapollo-cost-tuning\u002FSKILL.md",true,[],[85,97,107,116,122,129],{"skillNo":86,"name":87,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":93,"publishedAt":49},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[90],{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[94,95,96],"model","model hierarchy","model hierarchy skill",{"skillNo":98,"name":99,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":103,"publishedAt":49},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[102],{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},[104,105,106],"MCP","zoom","zoom mcp",{"skillNo":108,"name":109,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":49},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[113,114,115,105],"sdk","zoom apps sdk","apps",{"skillNo":117,"name":118,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":49},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[118],{"skillNo":123,"name":124,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":128,"publishedAt":49},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[127],{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},[124],{"skillNo":130,"name":131,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":49},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[131]]