[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F9DFGT2YF45QC8Y8V444RC":3,"skill-same:01M6F9DFGT2YF45QC8Y8V444RC":75},{"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":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":55,"repositoryHtmlUrl":56,"repositoryHomepageUrl":57,"ownerHtmlUrl":58,"ownerBlogUrl":6,"ownerDescription":59,"updatedAt":60,"install":61,"resources":74},"01M6F9DFGT2YF45QC8Y8V444RC","customerio-cost-tuning",null,"Optimize Customer.io costs and usage efficiency.\nUse when reducing profile count, cleaning inactive users,\ndeduplicating events, or right-sizing your plan.\nTrigger: \"customer.io cost\", \"reduce customer.io spend\",\n\"customer.io billing\", \"customer.io pricing\", \"customer.io cleanup\".","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\u002Fcustomerio-cost-tuning\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"customerio cost tuning","tuning","cost","write","customer-io","billing","events","io","efficiency","optimize","edit","openclaw","read","plan","Bash","Optimization","code","cleanup","pricing","customer","2026-11-10 10:12:30",false,"---\nname: customerio-cost-tuning\ndescription: |\n  Optimize Customer.io costs and usage efficiency.\n  Use when reducing profile count, cleaning inactive users,\n  deduplicating events, or right-sizing your plan.\n  Trigger: \"customer.io cost\", \"reduce customer.io spend\",\n  \"customer.io billing\", \"customer.io pricing\", \"customer.io cleanup\".\nallowed-tools: Read, Write, Edit, Bash(npm:*), Bash(npx:*), Glob, Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ncompatible-with: claude-code, codex, openclaw\ntags: [saas, customer-io, cost-optimization, billing]\n\n---\n# Customer.io Cost Tuning\n\n## Overview\n\nOptimize Customer.io costs by managing profile count (the primary billing driver), suppressing\u002Fdeleting inactive users, deduplicating events, reducing unnecessary API calls, and monitoring usage trends.\n\n## How Customer.io Pricing Works\n\nCustomer.io bills based on **profile count** (number of identified people in your workspace) and **email\u002FSMS volume**. Key cost drivers:\n\n| Factor | Impact | Optimization Strategy |\n|--------|--------|----------------------|\n| Total profiles | Primary cost driver | Delete inactive profiles |\n| Email sends | Per-email cost above tier | Suppress unengaged users |\n| SMS sends | Per-SMS cost | Only send to opt-in users |\n| Overidentification | Creates unnecessary profiles | Don't identify users who'll never receive messages |\n| Event volume | Can increase processing costs | Deduplicate and sample |\n\n## Instructions\n\n### Step 1: Profile Audit\n\n```typescript\n\u002F\u002F scripts\u002Fcio-profile-audit.ts\n\u002F\u002F Audit your Customer.io integration for cost optimization opportunities\n\nimport { TrackClient, RegionUS } from \"customerio-node\";\n\nconst cio = new TrackClient(\n  process.env.CUSTOMERIO_SITE_ID!,\n  process.env.CUSTOMERIO_TRACK_API_KEY!,\n  { region: RegionUS }\n);\n\n\u002F\u002F Check: Are you identifying users who'll never receive messages?\nconst AUDIT_RULES = {\n  \u002F\u002F Users without email can't receive email campaigns\n  noEmail: \"Don't identify users without email unless using push\u002FSMS\",\n\n  \u002F\u002F Test users should be cleaned up\n  testUsers: \"Suppress and delete test-*, ci-*, dev-* prefixed users\",\n\n  \u002F\u002F Anonymous users that never convert inflate profile count\n  staleAnonymous: \"Delete anonymous profiles older than 90 days without conversion\",\n\n  \u002F\u002F Inactive users who haven't opened email in 6+ months\n  unengaged: \"Suppress users with no email opens in 180+ days\",\n};\n\nconsole.log(\"=== Customer.io Cost Audit Rules ===\\n\");\nfor (const [rule, action] of Object.entries(AUDIT_RULES)) {\n  console.log(`${rule}: ${action}`);\n}\nconsole.log(\"\\nRun these checks in Customer.io dashboard:\");\nconsole.log(\"1. People > Segments > Create 'Inactive 90 days' segment\");\nconsole.log(\"2. People > Segments > Create 'No email attribute' segment\");\nconsole.log(\"3. People > Filter by created_at \u003C 90 days ago AND email_opened = 0\");\n```\n\n### Step 2: Suppress and Delete Inactive Users\n\n```typescript\n\u002F\u002F scripts\u002Fcio-cleanup-inactive.ts\nimport { TrackClient, RegionUS } from \"customerio-node\";\n\nconst cio = new TrackClient(\n  process.env.CUSTOMERIO_SITE_ID!,\n  process.env.CUSTOMERIO_TRACK_API_KEY!,\n  { region: RegionUS }\n);\n\ninterface CleanupTarget {\n  userId: string;\n  reason: string;\n}\n\nasync function cleanupInactiveUsers(\n  targets: CleanupTarget[],\n  dryRun: boolean = true\n): Promise\u003Cvoid> {\n  let suppressed = 0;\n  let deleted = 0;\n  let errors = 0;\n\n  for (const target of targets) {\n    if (dryRun) {\n      console.log(`[DRY RUN] Would suppress+delete: ${target.userId} (${target.reason})`);\n      continue;\n    }\n\n    try {\n      \u002F\u002F Step 1: Suppress — stops all messaging immediately\n      await cio.suppress(target.userId);\n      suppressed++;\n\n      \u002F\u002F Step 2: Destroy — removes from billing\n      await cio.destroy(target.userId);\n      deleted++;\n\n      \u002F\u002F Rate limit to 50\u002Fsec for bulk operations\n      await new Promise((r) => setTimeout(r, 20));\n    } catch (err: any) {\n      errors++;\n      console.error(`Failed ${target.userId}: ${err.message}`);\n    }\n\n    if ((suppressed + errors) % 100 === 0) {\n      console.log(`Progress: ${suppressed} deleted, ${errors} errors`);\n    }\n  }\n\n  console.log(`\\nResult: ${suppressed} suppressed, ${deleted} deleted, ${errors} errors`);\n}\n\n\u002F\u002F Usage: Build target list from your database\n\u002F\u002F const inactiveUsers = await db.query(`\n\u002F\u002F   SELECT id FROM users\n\u002F\u002F   WHERE last_login_at \u003C NOW() - INTERVAL '180 days'\n\u002F\u002F   AND email_verified = false\n\u002F\u002F `);\n```\n\n### Step 3: Event Deduplication\n\n```typescript\n\u002F\u002F lib\u002Fcustomerio-dedup-events.ts\n\u002F\u002F Prevent sending duplicate events that inflate volume\n\nimport { createHash } from \"crypto\";\nimport { TrackClient, RegionUS } from \"customerio-node\";\n\nconst cio = new TrackClient(\n  process.env.CUSTOMERIO_SITE_ID!,\n  process.env.CUSTOMERIO_TRACK_API_KEY!,\n  { region: RegionUS }\n);\n\n\u002F\u002F Simple LRU dedup (use Redis in production)\nconst recentEvents = new Map\u003Cstring, number>();\nconst MAX_CACHE = 50_000;\nconst DEDUP_WINDOW_MS = 60 * 1000;  \u002F\u002F 1 minute window\n\nfunction isDuplicate(userId: string, eventName: string, data?: any): boolean {\n  const hash = createHash(\"sha256\")\n    .update(`${userId}:${eventName}:${JSON.stringify(data ?? {})}`)\n    .digest(\"hex\")\n    .substring(0, 12);\n\n  const last = recentEvents.get(hash);\n  if (last && Date.now() - last \u003C DEDUP_WINDOW_MS) {\n    return true;\n  }\n\n  recentEvents.set(hash, Date.now());\n\n  \u002F\u002F Prevent unbounded growth\n  if (recentEvents.size > MAX_CACHE) {\n    const cutoff = Date.now() - DEDUP_WINDOW_MS;\n    for (const [key, time] of recentEvents) {\n      if (time \u003C cutoff) recentEvents.delete(key);\n    }\n  }\n\n  return false;\n}\n\nexport async function trackDeduped(\n  userId: string,\n  name: string,\n  data?: Record\u003Cstring, any>\n): Promise\u003Cvoid> {\n  if (isDuplicate(userId, name, data)) {\n    return; \u002F\u002F Skip duplicate\n  }\n  await cio.track(userId, { name, data });\n}\n```\n\n### Step 4: Event Sampling for High-Volume Events\n\n```typescript\n\u002F\u002F lib\u002Fcustomerio-sampling.ts\n\u002F\u002F Sample high-volume events to reduce API calls\n\nconst EVENT_SAMPLE_RATES: Record\u003Cstring, number> = {\n  page_viewed: 0.1,          \u002F\u002F Sample 10% of page views\n  button_clicked: 0.25,      \u002F\u002F Sample 25% of clicks\n  search_performed: 0.5,     \u002F\u002F Sample 50% of searches\n  signed_up: 1.0,            \u002F\u002F Always track signups\n  checkout_completed: 1.0,   \u002F\u002F Always track purchases\n  subscription_cancelled: 1.0, \u002F\u002F Always track cancellations\n};\n\nexport function shouldTrack(eventName: string): boolean {\n  const rate = EVENT_SAMPLE_RATES[eventName] ?? 1.0;\n  return Math.random() \u003C rate;\n}\n\n\u002F\u002F Usage\nif (shouldTrack(\"page_viewed\")) {\n  await cio.track(userId, {\n    name: \"page_viewed\",\n    data: { url: \"\u002Fpricing\", sampled: true },\n  });\n}\n```\n\n### Step 5: Usage Monitoring\n\n```typescript\n\u002F\u002F scripts\u002Fcio-usage-monitor.ts\n\u002F\u002F Track your Customer.io usage trends\n\ninterface UsageMetrics {\n  identifyCalls: number;\n  trackCalls: number;\n  transactionalSends: number;\n  broadcastTriggers: number;\n  webhooksReceived: number;\n}\n\nclass UsageMonitor {\n  private metrics: UsageMetrics = {\n    identifyCalls: 0,\n    trackCalls: 0,\n    transactionalSends: 0,\n    broadcastTriggers: 0,\n    webhooksReceived: 0,\n  };\n\n  increment(metric: keyof UsageMetrics): void {\n    this.metrics[metric]++;\n  }\n\n  report(): void {\n    console.log(\"\\n=== Customer.io Usage Report ===\");\n    console.log(`Period: ${new Date().toISOString()}`);\n    for (const [key, value] of Object.entries(this.metrics)) {\n      console.log(`  ${key}: ${value.toLocaleString()}`);\n    }\n    const total = Object.values(this.metrics).reduce((a, b) => a + b, 0);\n    console.log(`  TOTAL API calls: ${total.toLocaleString()}`);\n  }\n\n  reset(): void {\n    for (const key of Object.keys(this.metrics)) {\n      this.metrics[key as keyof UsageMetrics] = 0;\n    }\n  }\n}\n\nexport const usageMonitor = new UsageMonitor();\n```\n\n## Cost Savings Estimates\n\n| Optimization | Typical Savings | Implementation Effort |\n|--------------|-----------------|----------------------|\n| Delete inactive profiles (180+ days) | 15-30% profile cost | Low |\n| Event deduplication | 5-15% event volume | Low |\n| Event sampling (analytics events) | 50-80% event volume for sampled events | Low |\n| Suppress bounced emails | 2-5% email cost | Low |\n| Don't identify email-less users | 5-20% profile cost | Medium |\n| Annual billing | 10-20% total cost | None |\n\n## Monthly Cost Review Checklist\n\n- [ ] Review profile count trend (People > Overview)\n- [ ] Identify and delete stale test profiles\n- [ ] Review segment for users with no email attribute\n- [ ] Check bounce rate and suppress chronic bouncers\n- [ ] Review event volume by type (optimize high-volume\u002Flow-value events)\n- [ ] Compare plan tier vs actual usage\n\n## Resources\n\n- [Customer.io Pricing](https:\u002F\u002Fcustomer.io\u002Fpricing\u002F)\n- [Track API - Suppress\u002FDestroy](https:\u002F\u002Fdocs.customer.io\u002Fintegrations\u002Fapi\u002Ftrack\u002F)\n\n## Next Steps\n\nAfter cost optimization, proceed to `customerio-reference-architecture` for enterprise patterns.\n\n","# Customer.io Cost Tuning\n\n## Overview\n\nOptimize Customer.io costs by managing profile count (the primary billing driver), suppressing\u002Fdeleting inactive users, deduplicating events, reducing unnecessary API calls, and monitoring usage trends.\n\n## How Customer.io Pricing Works\n\nCustomer.io bills based on **profile count** (number of identified people in your workspace) and **email\u002FSMS volume**. Key cost drivers:\n\n| Factor | Impact | Optimization Strategy |\n|--------|--------|----------------------|\n| Total profiles | Primary cost driver | Delete inactive profiles |\n| Email sends | Per-email cost above tier | Suppress unengaged users |\n| SMS sends | Per-SMS cost | Only send to opt-in users |\n| Overidentification | Creates unnecessary profiles | Don't identify users who'll never receive messages |\n| Event volume | Can increase processing costs | Deduplicate and sample |\n\n## Instructions\n\n### Step 1: Profile Audit\n\n```typescript\n\u002F\u002F scripts\u002Fcio-profile-audit.ts\n\u002F\u002F Audit your Customer.io integration for cost optimization opportunities\n\nimport { TrackClient, RegionUS } from \"customerio-node\";\n\nconst cio = new TrackClient(\n  process.env.CUSTOMERIO_SITE_ID!,\n  process.env.CUSTOMERIO_TRACK_API_KEY!,\n  { region: RegionUS }\n);\n\n\u002F\u002F Check: Are you identifying users who'll never receive messages?\nconst AUDIT_RULES = {\n  \u002F\u002F Users without email can't receive email campaigns\n  noEmail: \"Don't identify users without email unless using push\u002FSMS\",\n\n  \u002F\u002F Test users should be cleaned up\n  testUsers: \"Suppress and delete test-*, ci-*, dev-* prefixed users\",\n\n  \u002F\u002F Anonymous users that never convert inflate profile count\n  staleAnonymous: \"Delete anonymous profiles older than 90 days without conversion\",\n\n  \u002F\u002F Inactive users who haven't opened email in 6+ months\n  unengaged: \"Suppress users with no email opens in 180+ days\",\n};\n\nconsole.log(\"=== Customer.io Cost Audit Rules ===\\n\");\nfor (const [rule, action] of Object.entries(AUDIT_RULES)) {\n  console.log(`${rule}: ${action}`);\n}\nconsole.log(\"\\nRun these checks in Customer.io dashboard:\");\nconsole.log(\"1. People > Segments > Create 'Inactive 90 days' segment\");\nconsole.log(\"2. People > Segments > Create 'No email attribute' segment\");\nconsole.log(\"3. People > Filter by created_at \u003C 90 days ago AND email_opened = 0\");\n```\n\n### Step 2: Suppress and Delete Inactive Users\n\n```typescript\n\u002F\u002F scripts\u002Fcio-cleanup-inactive.ts\nimport { TrackClient, RegionUS } from \"customerio-node\";\n\nconst cio = new TrackClient(\n  process.env.CUSTOMERIO_SITE_ID!,\n  process.env.CUSTOMERIO_TRACK_API_KEY!,\n  { region: RegionUS }\n);\n\ninterface CleanupTarget {\n  userId: string;\n  reason: string;\n}\n\nasync function cleanupInactiveUsers(\n  targets: CleanupTarget[],\n  dryRun: boolean = true\n): Promise\u003Cvoid> {\n  let suppressed = 0;\n  let deleted = 0;\n  let errors = 0;\n\n  for (const target of targets) {\n    if (dryRun) {\n      console.log(`[DRY RUN] Would suppress+delete: ${target.userId} (${target.reason})`);\n      continue;\n    }\n\n    try {\n      \u002F\u002F Step 1: Suppress — stops all messaging immediately\n      await cio.suppress(target.userId);\n      suppressed++;\n\n      \u002F\u002F Step 2: Destroy — removes from billing\n      await cio.destroy(target.userId);\n      deleted++;\n\n      \u002F\u002F Rate limit to 50\u002Fsec for bulk operations\n      await new Promise((r) => setTimeout(r, 20));\n    } catch (err: any) {\n      errors++;\n      console.error(`Failed ${target.userId}: ${err.message}`);\n    }\n\n    if ((suppressed + errors) % 100 === 0) {\n      console.log(`Progress: ${suppressed} deleted, ${errors} errors`);\n    }\n  }\n\n  console.log(`\\nResult: ${suppressed} suppressed, ${deleted} deleted, ${errors} errors`);\n}\n\n\u002F\u002F Usage: Build target list from your database\n\u002F\u002F const inactiveUsers = await db.query(`\n\u002F\u002F   SELECT id FROM users\n\u002F\u002F   WHERE last_login_at \u003C NOW() - INTERVAL '180 days'\n\u002F\u002F   AND email_verified = false\n\u002F\u002F `);\n```\n\n### Step 3: Event Deduplication\n\n```typescript\n\u002F\u002F lib\u002Fcustomerio-dedup-events.ts\n\u002F\u002F Prevent sending duplicate events that inflate volume\n\nimport { createHash } from \"crypto\";\nimport { TrackClient, RegionUS } from \"customerio-node\";\n\nconst cio = new TrackClient(\n  process.env.CUSTOMERIO_SITE_ID!,\n  process.env.CUSTOMERIO_TRACK_API_KEY!,\n  { region: RegionUS }\n);\n\n\u002F\u002F Simple LRU dedup (use Redis in production)\nconst recentEvents = new Map\u003Cstring, number>();\nconst MAX_CACHE = 50_000;\nconst DEDUP_WINDOW_MS = 60 * 1000;  \u002F\u002F 1 minute window\n\nfunction isDuplicate(userId: string, eventName: string, data?: any): boolean {\n  const hash = createHash(\"sha256\")\n    .update(`${userId}:${eventName}:${JSON.stringify(data ?? {})}`)\n    .digest(\"hex\")\n    .substring(0, 12);\n\n  const last = recentEvents.get(hash);\n  if (last && Date.now() - last \u003C DEDUP_WINDOW_MS) {\n    return true;\n  }\n\n  recentEvents.set(hash, Date.now());\n\n  \u002F\u002F Prevent unbounded growth\n  if (recentEvents.size > MAX_CACHE) {\n    const cutoff = Date.now() - DEDUP_WINDOW_MS;\n    for (const [key, time] of recentEvents) {\n      if (time \u003C cutoff) recentEvents.delete(key);\n    }\n  }\n\n  return false;\n}\n\nexport async function trackDeduped(\n  userId: string,\n  name: string,\n  data?: Record\u003Cstring, any>\n): Promise\u003Cvoid> {\n  if (isDuplicate(userId, name, data)) {\n    return; \u002F\u002F Skip duplicate\n  }\n  await cio.track(userId, { name, data });\n}\n```\n\n### Step 4: Event Sampling for High-Volume Events\n\n```typescript\n\u002F\u002F lib\u002Fcustomerio-sampling.ts\n\u002F\u002F Sample high-volume events to reduce API calls\n\nconst EVENT_SAMPLE_RATES: Record\u003Cstring, number> = {\n  page_viewed: 0.1,          \u002F\u002F Sample 10% of page views\n  button_clicked: 0.25,      \u002F\u002F Sample 25% of clicks\n  search_performed: 0.5,     \u002F\u002F Sample 50% of searches\n  signed_up: 1.0,            \u002F\u002F Always track signups\n  checkout_completed: 1.0,   \u002F\u002F Always track purchases\n  subscription_cancelled: 1.0, \u002F\u002F Always track cancellations\n};\n\nexport function shouldTrack(eventName: string): boolean {\n  const rate = EVENT_SAMPLE_RATES[eventName] ?? 1.0;\n  return Math.random() \u003C rate;\n}\n\n\u002F\u002F Usage\nif (shouldTrack(\"page_viewed\")) {\n  await cio.track(userId, {\n    name: \"page_viewed\",\n    data: { url: \"\u002Fpricing\", sampled: true },\n  });\n}\n```\n\n### Step 5: Usage Monitoring\n\n```typescript\n\u002F\u002F scripts\u002Fcio-usage-monitor.ts\n\u002F\u002F Track your Customer.io usage trends\n\ninterface UsageMetrics {\n  identifyCalls: number;\n  trackCalls: number;\n  transactionalSends: number;\n  broadcastTriggers: number;\n  webhooksReceived: number;\n}\n\nclass UsageMonitor {\n  private metrics: UsageMetrics = {\n    identifyCalls: 0,\n    trackCalls: 0,\n    transactionalSends: 0,\n    broadcastTriggers: 0,\n    webhooksReceived: 0,\n  };\n\n  increment(metric: keyof UsageMetrics): void {\n    this.metrics[metric]++;\n  }\n\n  report(): void {\n    console.log(\"\\n=== Customer.io Usage Report ===\");\n    console.log(`Period: ${new Date().toISOString()}`);\n    for (const [key, value] of Object.entries(this.metrics)) {\n      console.log(`  ${key}: ${value.toLocaleString()}`);\n    }\n    const total = Object.values(this.metrics).reduce((a, b) => a + b, 0);\n    console.log(`  TOTAL API calls: ${total.toLocaleString()}`);\n  }\n\n  reset(): void {\n    for (const key of Object.keys(this.metrics)) {\n      this.metrics[key as keyof UsageMetrics] = 0;\n    }\n  }\n}\n\nexport const usageMonitor = new UsageMonitor();\n```\n\n## Cost Savings Estimates\n\n| Optimization | Typical Savings | Implementation Effort |\n|--------------|-----------------|----------------------|\n| Delete inactive profiles (180+ days) | 15-30% profile cost | Low |\n| Event deduplication | 5-15% event volume | Low |\n| Event sampling (analytics events) | 50-80% event volume for sampled events | Low |\n| Suppress bounced emails | 2-5% email cost | Low |\n| Don't identify email-less users | 5-20% profile cost | Medium |\n| Annual billing | 10-20% total cost | None |\n\n## Monthly Cost Review Checklist\n\n- [ ] Review profile count trend (People > Overview)\n- [ ] Identify and delete stale test profiles\n- [ ] Review segment for users with no email attribute\n- [ ] Check bounce rate and suppress chronic bouncers\n- [ ] Review event volume by type (optimize high-volume\u002Flow-value events)\n- [ ] Compare plan tier vs actual usage\n\n## Resources\n\n- [Customer.io Pricing](https:\u002F\u002Fcustomer.io\u002Fpricing\u002F)\n- [Track API - Suppress\u002FDestroy](https:\u002F\u002Fdocs.customer.io\u002Fintegrations\u002Fapi\u002Ftrack\u002F)\n\n## Next Steps\n\nAfter cost optimization, proceed to `customerio-reference-architecture` for enterprise patterns.\n\n",{"name":5,"tags":44,"author":47,"license":15,"version":48,"description":49,"allowed-tools":50,"compatible-with":51},[45,23,46,24],"saas","cost-optimization","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Optimize Customer.io costs and usage efficiency.\nUse when reducing profile count, cleaning inactive users,\ndeduplicating events, or right-sizing your plan.\nTrigger: \"customer.io cost\", \"reduce customer.io spend\",\n\"customer.io billing\", \"customer.io pricing\", \"customer.io cleanup\".\n","Read, Write, Edit, Bash(npm:*), Bash(npx:*), Glob, Grep","claude-code, codex, openclaw","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fcustomerio-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":62,"prompt":72,"zipAvailable":73},[63,66,69],{"tool":64,"command":65},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill customerio-cost-tuning",{"tool":67,"command":68},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill customerio-cost-tuning",{"tool":70,"command":71},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill customerio-cost-tuning","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fcustomerio-cost-tuning\u002FSKILL.md",true,[],[76,90,100,109,115,122],{"skillNo":77,"name":78,"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":79,"categories":80,"keywords":86,"publishedAt":39},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[81],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[87,88,89],"model","model hierarchy","model hierarchy skill",{"skillNo":91,"name":92,"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":93,"categories":94,"keywords":96,"publishedAt":39},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[95],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[97,98,99],"MCP","zoom","zoom mcp",{"skillNo":101,"name":102,"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":103,"categories":104,"keywords":105,"publishedAt":39},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[106,107,108,98],"sdk","zoom apps sdk","apps",{"skillNo":110,"name":111,"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":112,"categories":113,"keywords":114,"publishedAt":39},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[111],{"skillNo":116,"name":117,"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":118,"categories":119,"keywords":121,"publishedAt":39},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[120],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[117],{"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":127,"publishedAt":39},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[124]]