[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F8M8V7HM9VCXSS901CWECF":3,"skill-same:01M6F8M8V7HM9VCXSS901CWECF":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},"01M6F8M8V7HM9VCXSS901CWECF","clickhouse-reference-architecture",null,"Production reference architecture for ClickHouse-backed applications —\nproject layout, data flow, multi-tenant patterns, and operational topology.\nUse when designing new ClickHouse systems, reviewing architecture,\nor establishing standards for ClickHouse integrations.\nTrigger: \"clickhouse architecture\", \"clickhouse project structure\",\n\"clickhouse design\", \"clickhouse multi-tenant\", \"clickhouse reference\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fclickhouse-reference-architecture\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"clickhouse reference architecture","architecture","clickhouse","reference","data","io","layout","project","structure","patterns","standards","read","design","flow","topology","olap","database","code","analytics","project structure","2026-11-10 10:12:30",false,"---\nname: clickhouse-reference-architecture\ndescription: |\n  Production reference architecture for ClickHouse-backed applications —\n  project layout, data flow, multi-tenant patterns, and operational topology.\n  Use when designing new ClickHouse systems, reviewing architecture,\n  or establishing standards for ClickHouse integrations.\n  Trigger: \"clickhouse architecture\", \"clickhouse project structure\",\n  \"clickhouse design\", \"clickhouse multi-tenant\", \"clickhouse reference\".\nallowed-tools: Read, Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, database, analytics, clickhouse, olap]\ncompatible-with: claude-code\n---\n\n# ClickHouse Reference Architecture\n\n## Overview\n\nProduction-grade architecture for ClickHouse analytics platforms covering\nproject layout, data flow, multi-tenancy, and operational patterns.\n\n## Prerequisites\n\n- Understanding of ClickHouse fundamentals (engines, ORDER BY, partitioning)\n- TypeScript\u002FNode.js project\n\n## Instructions\n\n### Step 1: Project Structure\n\n```\nmy-analytics-platform\u002F\n├── src\u002F\n│   ├── clickhouse\u002F\n│   │   ├── client.ts           # Singleton client with health checks\n│   │   ├── schemas\u002F            # SQL DDL files (source of truth)\n│   │   │   ├── 001-events.sql\n│   │   │   ├── 002-users.sql\n│   │   │   └── 003-materialized-views.sql\n│   │   ├── queries\u002F            # Named query functions\n│   │   │   ├── events.ts\n│   │   │   ├── users.ts\n│   │   │   └── dashboards.ts\n│   │   └── migrations\u002F         # Schema migrations\n│   │       ├── runner.ts\n│   │       └── 001-add-country.sql\n│   ├── ingestion\u002F\n│   │   ├── webhook-receiver.ts # HTTP webhook endpoint\n│   │   ├── kafka-consumer.ts   # Kafka consumer (if applicable)\n│   │   └── buffer.ts           # Insert batching buffer\n│   ├── api\u002F\n│   │   ├── routes.ts           # API endpoints\n│   │   └── middleware.ts       # Auth, rate limiting\n│   └── jobs\u002F\n│       ├── daily-rollup.ts     # Scheduled aggregations\n│       └── cleanup.ts          # TTL enforcement\n├── tests\u002F\n│   ├── unit\u002F\n│   └── integration\u002F\n├── docker-compose.yml          # Local ClickHouse\n├── init-db\u002F                    # Docker init scripts\n└── config\u002F\n    ├── development.env\n    ├── staging.env\n    └── production.env\n```\n\n### Step 2: Data Flow Architecture\n\n```\n                    ┌─────────────────┐\n                    │   Data Sources   │\n                    │  (Webhooks, API, │\n                    │   Kafka, S3)     │\n                    └────────┬────────┘\n                             │\n                    ┌────────▼────────┐\n                    │  Ingestion Layer │\n                    │  (Buffer + Batch │\n                    │   10K+ rows\u002Fins) │\n                    └────────┬────────┘\n                             │\n              ┌──────────────▼──────────────┐\n              │       ClickHouse Server      │\n              │                              │\n              │  ┌────────────────────────┐  │\n              │  │   Raw Event Tables     │  │\n              │  │   (MergeTree, append)  │  │\n              │  └───────────┬────────────┘  │\n              │              │               │\n              │  ┌───────────▼────────────┐  │\n              │  │  Materialized Views    │  │\n              │  │  (Auto-aggregate on    │  │\n              │  │   INSERT — hourly,     │  │\n              │  │   daily, tenant-level) │  │\n              │  └───────────┬────────────┘  │\n              │              │               │\n              │  ┌───────────▼────────────┐  │\n              │  │  Aggregate Tables      │  │\n              │  │  (AggregatingMergeTree)│  │\n              │  └────────────────────────┘  │\n              └──────────────┬──────────────┘\n                             │\n                    ┌────────▼────────┐\n                    │    API Layer     │\n                    │  (Query aggregate│\n                    │   tables, not    │\n                    │   raw events)    │\n                    └────────┬────────┘\n                             │\n                    ┌────────▼────────┐\n                    │   Dashboards \u002F   │\n                    │   Client Apps    │\n                    └─────────────────┘\n```\n\n### Step 3: Schema Design (3-Layer Pattern)\n\n```sql\n-- Layer 1: Raw events (append-only, full fidelity)\nCREATE TABLE analytics.events_raw (\n    event_id    UUID DEFAULT generateUUIDv4(),\n    tenant_id   UInt32,\n    event_type  LowCardinality(String),\n    user_id     UInt64,\n    properties  String CODEC(ZSTD(3)),\n    created_at  DateTime64(3) DEFAULT now64(3)\n)\nENGINE = MergeTree()\nORDER BY (tenant_id, event_type, toDate(created_at), user_id)\nPARTITION BY toYYYYMM(created_at)\nTTL created_at + INTERVAL 90 DAY;\n\n-- Layer 2: Hourly aggregation (auto-populated via materialized view)\nCREATE TABLE analytics.events_hourly (\n    hour        DateTime,\n    tenant_id   UInt32,\n    event_type  LowCardinality(String),\n    cnt         UInt64,\n    users       AggregateFunction(uniq, UInt64)\n)\nENGINE = AggregatingMergeTree()\nORDER BY (tenant_id, event_type, hour);\n\nCREATE MATERIALIZED VIEW analytics.events_hourly_mv TO analytics.events_hourly AS\nSELECT toStartOfHour(created_at) AS hour, tenant_id, event_type,\n       count() AS cnt, uniqState(user_id) AS users\nFROM analytics.events_raw GROUP BY hour, tenant_id, event_type;\n\n-- Layer 3: Daily rollup for dashboards\nCREATE TABLE analytics.events_daily (\n    date        Date,\n    tenant_id   UInt32,\n    total       UInt64,\n    users       AggregateFunction(uniq, UInt64)\n)\nENGINE = AggregatingMergeTree()\nORDER BY (tenant_id, date);\n\nCREATE MATERIALIZED VIEW analytics.events_daily_mv TO analytics.events_daily AS\nSELECT toDate(created_at) AS date, tenant_id,\n       count() AS total, uniqState(user_id) AS users\nFROM analytics.events_raw GROUP BY date, tenant_id;\n```\n\n### Step 4: Multi-Tenant Patterns\n\n**Approach A: Shared table with tenant_id in ORDER BY (recommended)**\n\n```sql\n-- Tenant_id first in ORDER BY = queries filter on tenant efficiently\nORDER BY (tenant_id, event_type, created_at)\n\n-- Query: only scans data for this tenant\nSELECT count() FROM events_raw WHERE tenant_id = 42;\n```\n\n**Approach B: Database per tenant (for strict isolation)**\n\n```sql\nCREATE DATABASE tenant_42;\nCREATE TABLE tenant_42.events (...) ENGINE = MergeTree() ...;\n\n-- Pros: Full isolation, easy to drop tenant\n-- Cons: Schema changes need per-tenant DDL, more operational overhead\n```\n\n**Approach C: Row-level security (ClickHouse RBAC)**\n\n```sql\nCREATE ROW POLICY tenant_isolation ON analytics.events_raw\n    FOR SELECT USING tenant_id = getSetting('custom_tenant_id')\n    TO app_user;\n```\n\n### Step 5: Client Module\n\n```typescript\n\u002F\u002F src\u002Fclickhouse\u002Fclient.ts\nimport { createClient, ClickHouseClient } from '@clickhouse\u002Fclient';\n\nlet instance: ClickHouseClient | null = null;\n\nexport function getClient(): ClickHouseClient {\n  if (!instance) {\n    instance = createClient({\n      url: process.env.CLICKHOUSE_HOST!,\n      username: process.env.CLICKHOUSE_USER!,\n      password: process.env.CLICKHOUSE_PASSWORD!,\n      database: process.env.CLICKHOUSE_DATABASE ?? 'analytics',\n      max_open_connections: Number(process.env.CH_MAX_CONNECTIONS ?? 10),\n      request_timeout: 30_000,\n      compression: { request: true, response: true },\n    });\n  }\n  return instance;\n}\n\n\u002F\u002F src\u002Fclickhouse\u002Fqueries\u002Fdashboards.ts\nexport async function getTenantDashboard(tenantId: number, days = 30) {\n  const client = getClient();\n  const rs = await client.query({\n    query: `\n      SELECT date, sum(total) AS events, uniqMerge(users) AS unique_users\n      FROM analytics.events_daily\n      WHERE tenant_id = {tid:UInt32} AND date >= today() - {days:UInt32}\n      GROUP BY date ORDER BY date\n    `,\n    query_params: { tid: tenantId, days },\n    format: 'JSONEachRow',\n  });\n  return rs.json\u003C{ date: string; events: string; unique_users: string }>();\n}\n```\n\n## Architecture Decision Records\n\n| Decision | Choice | Why |\n|----------|--------|-----|\n| Engine | MergeTree (raw) + AggregatingMergeTree (rollups) | Best for append + pre-agg |\n| Multi-tenant | Shared table + tenant_id in ORDER BY | Scales to 10K+ tenants |\n| Ingestion | Buffer + batch INSERT | Avoids \"too many parts\" |\n| Aggregation | Materialized views (not cron) | Real-time, zero-lag |\n| Format | JSONEachRow | Client support, debugging |\n| Compression | ZSTD(3) for strings, Delta for ints | 10-20x compression |\n\n## Error Handling\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Cross-tenant data leak | Missing WHERE tenant_id | Use row policies or middleware |\n| Stale dashboard data | MV not created | Verify MV exists and is attached |\n| Schema drift | Manual DDL changes | Use migration runner |\n| Slow dashboard queries | Querying raw table | Query aggregate tables instead |\n\n## Resources\n\n- [ClickHouse Architecture](https:\u002F\u002Fclickhouse.com\u002Fdocs\u002Fdevelopment\u002Farchitecture)\n- [SharedMergeTree (Cloud)](https:\u002F\u002Fclickhouse.com\u002Fdocs\u002Fcloud\u002Freference\u002Fshared-merge-tree)\n- [Materialized Views](https:\u002F\u002Fclickhouse.com\u002Fblog\u002Fusing-materialized-views-in-clickhouse)\n\n## Next Steps\n\nFor multi-environment configuration, see `clickhouse-multi-env-setup`.\n\n","# ClickHouse Reference Architecture\n\n## Overview\n\nProduction-grade architecture for ClickHouse analytics platforms covering\nproject layout, data flow, multi-tenancy, and operational patterns.\n\n## Prerequisites\n\n- Understanding of ClickHouse fundamentals (engines, ORDER BY, partitioning)\n- TypeScript\u002FNode.js project\n\n## Instructions\n\n### Step 1: Project Structure\n\n```\nmy-analytics-platform\u002F\n├── src\u002F\n│   ├── clickhouse\u002F\n│   │   ├── client.ts           # Singleton client with health checks\n│   │   ├── schemas\u002F            # SQL DDL files (source of truth)\n│   │   │   ├── 001-events.sql\n│   │   │   ├── 002-users.sql\n│   │   │   └── 003-materialized-views.sql\n│   │   ├── queries\u002F            # Named query functions\n│   │   │   ├── events.ts\n│   │   │   ├── users.ts\n│   │   │   └── dashboards.ts\n│   │   └── migrations\u002F         # Schema migrations\n│   │       ├── runner.ts\n│   │       └── 001-add-country.sql\n│   ├── ingestion\u002F\n│   │   ├── webhook-receiver.ts # HTTP webhook endpoint\n│   │   ├── kafka-consumer.ts   # Kafka consumer (if applicable)\n│   │   └── buffer.ts           # Insert batching buffer\n│   ├── api\u002F\n│   │   ├── routes.ts           # API endpoints\n│   │   └── middleware.ts       # Auth, rate limiting\n│   └── jobs\u002F\n│       ├── daily-rollup.ts     # Scheduled aggregations\n│       └── cleanup.ts          # TTL enforcement\n├── tests\u002F\n│   ├── unit\u002F\n│   └── integration\u002F\n├── docker-compose.yml          # Local ClickHouse\n├── init-db\u002F                    # Docker init scripts\n└── config\u002F\n    ├── development.env\n    ├── staging.env\n    └── production.env\n```\n\n### Step 2: Data Flow Architecture\n\n```\n                    ┌─────────────────┐\n                    │   Data Sources   │\n                    │  (Webhooks, API, │\n                    │   Kafka, S3)     │\n                    └────────┬────────┘\n                             │\n                    ┌────────▼────────┐\n                    │  Ingestion Layer │\n                    │  (Buffer + Batch │\n                    │   10K+ rows\u002Fins) │\n                    └────────┬────────┘\n                             │\n              ┌──────────────▼──────────────┐\n              │       ClickHouse Server      │\n              │                              │\n              │  ┌────────────────────────┐  │\n              │  │   Raw Event Tables     │  │\n              │  │   (MergeTree, append)  │  │\n              │  └───────────┬────────────┘  │\n              │              │               │\n              │  ┌───────────▼────────────┐  │\n              │  │  Materialized Views    │  │\n              │  │  (Auto-aggregate on    │  │\n              │  │   INSERT — hourly,     │  │\n              │  │   daily, tenant-level) │  │\n              │  └───────────┬────────────┘  │\n              │              │               │\n              │  ┌───────────▼────────────┐  │\n              │  │  Aggregate Tables      │  │\n              │  │  (AggregatingMergeTree)│  │\n              │  └────────────────────────┘  │\n              └──────────────┬──────────────┘\n                             │\n                    ┌────────▼────────┐\n                    │    API Layer     │\n                    │  (Query aggregate│\n                    │   tables, not    │\n                    │   raw events)    │\n                    └────────┬────────┘\n                             │\n                    ┌────────▼────────┐\n                    │   Dashboards \u002F   │\n                    │   Client Apps    │\n                    └─────────────────┘\n```\n\n### Step 3: Schema Design (3-Layer Pattern)\n\n```sql\n-- Layer 1: Raw events (append-only, full fidelity)\nCREATE TABLE analytics.events_raw (\n    event_id    UUID DEFAULT generateUUIDv4(),\n    tenant_id   UInt32,\n    event_type  LowCardinality(String),\n    user_id     UInt64,\n    properties  String CODEC(ZSTD(3)),\n    created_at  DateTime64(3) DEFAULT now64(3)\n)\nENGINE = MergeTree()\nORDER BY (tenant_id, event_type, toDate(created_at), user_id)\nPARTITION BY toYYYYMM(created_at)\nTTL created_at + INTERVAL 90 DAY;\n\n-- Layer 2: Hourly aggregation (auto-populated via materialized view)\nCREATE TABLE analytics.events_hourly (\n    hour        DateTime,\n    tenant_id   UInt32,\n    event_type  LowCardinality(String),\n    cnt         UInt64,\n    users       AggregateFunction(uniq, UInt64)\n)\nENGINE = AggregatingMergeTree()\nORDER BY (tenant_id, event_type, hour);\n\nCREATE MATERIALIZED VIEW analytics.events_hourly_mv TO analytics.events_hourly AS\nSELECT toStartOfHour(created_at) AS hour, tenant_id, event_type,\n       count() AS cnt, uniqState(user_id) AS users\nFROM analytics.events_raw GROUP BY hour, tenant_id, event_type;\n\n-- Layer 3: Daily rollup for dashboards\nCREATE TABLE analytics.events_daily (\n    date        Date,\n    tenant_id   UInt32,\n    total       UInt64,\n    users       AggregateFunction(uniq, UInt64)\n)\nENGINE = AggregatingMergeTree()\nORDER BY (tenant_id, date);\n\nCREATE MATERIALIZED VIEW analytics.events_daily_mv TO analytics.events_daily AS\nSELECT toDate(created_at) AS date, tenant_id,\n       count() AS total, uniqState(user_id) AS users\nFROM analytics.events_raw GROUP BY date, tenant_id;\n```\n\n### Step 4: Multi-Tenant Patterns\n\n**Approach A: Shared table with tenant_id in ORDER BY (recommended)**\n\n```sql\n-- Tenant_id first in ORDER BY = queries filter on tenant efficiently\nORDER BY (tenant_id, event_type, created_at)\n\n-- Query: only scans data for this tenant\nSELECT count() FROM events_raw WHERE tenant_id = 42;\n```\n\n**Approach B: Database per tenant (for strict isolation)**\n\n```sql\nCREATE DATABASE tenant_42;\nCREATE TABLE tenant_42.events (...) ENGINE = MergeTree() ...;\n\n-- Pros: Full isolation, easy to drop tenant\n-- Cons: Schema changes need per-tenant DDL, more operational overhead\n```\n\n**Approach C: Row-level security (ClickHouse RBAC)**\n\n```sql\nCREATE ROW POLICY tenant_isolation ON analytics.events_raw\n    FOR SELECT USING tenant_id = getSetting('custom_tenant_id')\n    TO app_user;\n```\n\n### Step 5: Client Module\n\n```typescript\n\u002F\u002F src\u002Fclickhouse\u002Fclient.ts\nimport { createClient, ClickHouseClient } from '@clickhouse\u002Fclient';\n\nlet instance: ClickHouseClient | null = null;\n\nexport function getClient(): ClickHouseClient {\n  if (!instance) {\n    instance = createClient({\n      url: process.env.CLICKHOUSE_HOST!,\n      username: process.env.CLICKHOUSE_USER!,\n      password: process.env.CLICKHOUSE_PASSWORD!,\n      database: process.env.CLICKHOUSE_DATABASE ?? 'analytics',\n      max_open_connections: Number(process.env.CH_MAX_CONNECTIONS ?? 10),\n      request_timeout: 30_000,\n      compression: { request: true, response: true },\n    });\n  }\n  return instance;\n}\n\n\u002F\u002F src\u002Fclickhouse\u002Fqueries\u002Fdashboards.ts\nexport async function getTenantDashboard(tenantId: number, days = 30) {\n  const client = getClient();\n  const rs = await client.query({\n    query: `\n      SELECT date, sum(total) AS events, uniqMerge(users) AS unique_users\n      FROM analytics.events_daily\n      WHERE tenant_id = {tid:UInt32} AND date >= today() - {days:UInt32}\n      GROUP BY date ORDER BY date\n    `,\n    query_params: { tid: tenantId, days },\n    format: 'JSONEachRow',\n  });\n  return rs.json\u003C{ date: string; events: string; unique_users: string }>();\n}\n```\n\n## Architecture Decision Records\n\n| Decision | Choice | Why |\n|----------|--------|-----|\n| Engine | MergeTree (raw) + AggregatingMergeTree (rollups) | Best for append + pre-agg |\n| Multi-tenant | Shared table + tenant_id in ORDER BY | Scales to 10K+ tenants |\n| Ingestion | Buffer + batch INSERT | Avoids \"too many parts\" |\n| Aggregation | Materialized views (not cron) | Real-time, zero-lag |\n| Format | JSONEachRow | Client support, debugging |\n| Compression | ZSTD(3) for strings, Delta for ints | 10-20x compression |\n\n## Error Handling\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Cross-tenant data leak | Missing WHERE tenant_id | Use row policies or middleware |\n| Stale dashboard data | MV not created | Verify MV exists and is attached |\n| Schema drift | Manual DDL changes | Use migration runner |\n| Slow dashboard queries | Querying raw table | Query aggregate tables instead |\n\n## Resources\n\n- [ClickHouse Architecture](https:\u002F\u002Fclickhouse.com\u002Fdocs\u002Fdevelopment\u002Farchitecture)\n- [SharedMergeTree (Cloud)](https:\u002F\u002Fclickhouse.com\u002Fdocs\u002Fcloud\u002Freference\u002Fshared-merge-tree)\n- [Materialized Views](https:\u002F\u002Fclickhouse.com\u002Fblog\u002Fusing-materialized-views-in-clickhouse)\n\n## Next Steps\n\nFor multi-environment configuration, see `clickhouse-multi-env-setup`.\n\n",{"name":5,"tags":54,"author":56,"license":15,"version":57,"description":58,"allowed-tools":59,"compatible-with":60},[55,45,47,31,44],"saas","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Production reference architecture for ClickHouse-backed applications —\nproject layout, data flow, multi-tenant patterns, and operational topology.\nUse when designing new ClickHouse systems, reviewing architecture,\nor establishing standards for ClickHouse integrations.\nTrigger: \"clickhouse architecture\", \"clickhouse project structure\",\n\"clickhouse design\", \"clickhouse multi-tenant\", \"clickhouse reference\".\n","Read, Grep","claude-code","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fclickhouse-reference-architecture",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 clickhouse-reference-architecture",{"tool":76,"command":77},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill clickhouse-reference-architecture",{"tool":79,"command":80},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill clickhouse-reference-architecture","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fclickhouse-reference-architecture\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]]