[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CXJ1F7EB9YPZR12FEJV4G2":3,"skill-same:01M6CXJ1F7EB9YPZR12FEJV4G2":122},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":23,"linkOnly":24,"markdownContent":25,"markdownBody":26,"frontMatter":27,"refName":30,"commitSha":31,"skillDirectory":5,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":6,"ownerHtmlUrl":34,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":35,"install":36,"resources":49},"01M6CXJ1F7EB9YPZR12FEJV4G2","saas",null,"Software as a Service architecture","ffsshhttiikk\u002Fopencode-agents-skills","ffsshhttiikk","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F226346827?v=4","01M6CWD9RR3Y7VRQX3MXYC8FYH","01M6CWD9WVPYAZW0J82G1VKGHY",3,"MIT","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fsaas\u002FSKILL.md",[],[5,18,19,20,21,22],"architecture","developer","architect","devops","opencode","2026-11-10 10:12:30",false,"---\nname: saas\ndescription: Software as a Service architecture\nlicense: MIT\ncompatibility: opencode\nmetadata:\n  audience: architect, developer\n  category: devops\n---\n\n## What I do\n\n- Design SaaS architectures and multi-tenancy\n- Implement tenant isolation strategies\n- Build metering and billing systems\n- Configure identity and access for SaaS\n- Optimize for multi-tenant costs\n- Implement tenant onboarding flows\n\n## When to use me\n\n- When building SaaS products\n- When implementing multi-tenancy\n- When designing billing systems\n- When managing tenant data isolation\n- When building SaaS infrastructure\n- When planning SaaS scaling\n\n## Key Concepts\n\n### SaaS Architecture Models\n\n| Model | Isolation | Complexity | Cost |\n|-------|-----------|------------|------|\n| **Shared Everything** | Database | Low | Low |\n| **Shared Database** | Schema | Medium | Medium |\n| **Shared Application** | Container | Medium | Medium |\n| **Isolated** | VPC\u002FAccount | High | High |\n\n### Multi-Tenant Database Schema\n\n```sql\n-- PostgreSQL multi-tenant schema\nCREATE TABLE tenants (\n    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n    name VARCHAR(255) NOT NULL,\n    subdomain VARCHAR(63) UNIQUE NOT NULL,\n    plan VARCHAR(50) DEFAULT 'free',\n    created_at TIMESTAMP DEFAULT NOW()\n);\n\nCREATE TABLE users (\n    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n    tenant_id UUID REFERENCES tenants(id) ON DELETE CASCADE,\n    email VARCHAR(255) NOT NULL,\n    name VARCHAR(255),\n    role VARCHAR(50) DEFAULT 'member',\n    created_at TIMESTAMP DEFAULT NOW(),\n    UNIQUE(tenant_id, email)\n);\n\n-- Row-level security\nALTER TABLE users ENABLE ROW LEVEL SECURITY;\n\nCREATE POLICY \"tenant_isolation\" ON users\n    FOR ALL\n    USING (tenant_id = current_setting('app.tenant_id')::UUID);\n```\n\n### Tenant Context\n\n```python\n# FastAPI multi-tenancy\nfrom contextvars import ContextVar\nfrom fastapi import Request, Depends\n\ntenant_context: ContextVar[str] = ContextVar('tenant_id', default=None)\n\ndef get_tenant_id(request: Request) -> str:\n    # Extract from subdomain\n    host = request.headers.get('host', '')\n    subdomain = host.split('.')[0]\n    \n    # Or from JWT\n    # token = request.headers.get('authorization')\n    # tenant_id = decode_jwt(token)['tenant_id']\n    \n    return tenant_context.set(subdomain)\n\ndef get_current_tenant() -> Tenant:\n    tenant_id = tenant_context.get()\n    return Tenant.objects.get(subdomain=tenant_id)\n\n@app.get(\"\u002Fapi\u002Fusers\")\nasync def list_users(tenant: Tenant = Depends(get_current_tenant)):\n    return User.objects.filter(tenant=tenant).all()\n```\n\n### SaaS Identity\n\n```typescript\n\u002F\u002F OAuth2 for SaaS\nconst oauth2Client = new OAuth2Client(\n  process.env.GOOGLE_CLIENT_ID,\n  process.env.GOOGLE_CLIENT_SECRET,\n  'https:\u002F\u002Fyourapp.com\u002Fcallback'\n);\n\n\u002F\u002F Multi-tenant SSO\nconst samlConfig = {\n  entryPoint: 'https:\u002F\u002Fidp.example.com\u002Fsso',\n  issuer: 'yourapp',\n  callbackHandler: async (profile) => {\n    const tenant = await findOrCreateTenant(profile.orgId);\n    const user = await findOrCreateUser(profile, tenant);\n    return { user, tenant };\n  }\n};\n\n\u002F\u002F Role-based access for SaaS\nconst permissions = {\n  admin: ['*'],\n  manager: ['read', 'write', 'users:read'],\n  member: ['read', 'write:own'],\n  viewer: ['read']\n};\n```\n\n### Usage Tracking\n\n```python\nclass UsageTracker:\n    def track_event(self, tenant_id: str, event_type: str, metadata: dict):\n        # Record usage event\n        event = UsageEvent(\n            tenant_id=tenant_id,\n            event_type=event_type,\n            metadata=metadata,\n            timestamp=datetime.utcnow()\n        )\n        self.db.save(event)\n        \n        # Update meter\n        meter = self.get_or_create_meter(tenant_id, event_type)\n        meter.increment(metadata.get('quantity', 1))\n        \n    def get_usage(self, tenant_id: str, period: Period) -> UsageReport:\n        events = self.db.query(UsageEvent)\n            .filter(\n                tenant_id=tenant_id,\n                timestamp__gte=period.start,\n                timestamp__lte=period.end\n            )\n        \n        return self.aggregate_events(events)\n```\n\n### Billing Integration\n\n```python\n# Stripe SaaS billing\nimport stripe\n\nstripe.api_key = os.environ['STRIPE_SECRET_KEY']\n\ndef create_customer(tenant: Tenant):\n    customer = stripe.Customer.create(\n        email=tenant.admin_email,\n        metadata={'tenant_id': str(tenant.id)}\n    )\n    tenant.stripe_customer_id = customer.id\n    tenant.save()\n    \ndef create_subscription(tenant: Tenant, plan_id: str):\n    subscription = stripe.Subscription.create(\n        customer=tenant.stripe_customer_id,\n        items=[{'price': plan_id}],\n        metadata={'tenant_id': str(tenant.id)},\n        trial_period_days=14\n    )\n    \ndef get_invoices(tenant: Tenant):\n    return stripe.Invoice.list(\n        customer=tenant.stripe_customer_id,\n        limit=12\n    )\n```\n\n### SaaS Best Practices\n\n- **Tenant Isolation**: Secure data separation\n- **Metered Billing**: Track usage accurately\n- **Scalable Architecture**: Support growth\n- **Self-Service Onboarding**: Reduce friction\n- **Feature Flags**: Gradual rollouts per tenant\n- **Usage Analytics**: Understand usage patterns\n- **SLA Management**: Define and monitor SLAs\n","## What I do\n\n- Design SaaS architectures and multi-tenancy\n- Implement tenant isolation strategies\n- Build metering and billing systems\n- Configure identity and access for SaaS\n- Optimize for multi-tenant costs\n- Implement tenant onboarding flows\n\n## When to use me\n\n- When building SaaS products\n- When implementing multi-tenancy\n- When designing billing systems\n- When managing tenant data isolation\n- When building SaaS infrastructure\n- When planning SaaS scaling\n\n## Key Concepts\n\n### SaaS Architecture Models\n\n| Model | Isolation | Complexity | Cost |\n|-------|-----------|------------|------|\n| **Shared Everything** | Database | Low | Low |\n| **Shared Database** | Schema | Medium | Medium |\n| **Shared Application** | Container | Medium | Medium |\n| **Isolated** | VPC\u002FAccount | High | High |\n\n### Multi-Tenant Database Schema\n\n```sql\n-- PostgreSQL multi-tenant schema\nCREATE TABLE tenants (\n    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n    name VARCHAR(255) NOT NULL,\n    subdomain VARCHAR(63) UNIQUE NOT NULL,\n    plan VARCHAR(50) DEFAULT 'free',\n    created_at TIMESTAMP DEFAULT NOW()\n);\n\nCREATE TABLE users (\n    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n    tenant_id UUID REFERENCES tenants(id) ON DELETE CASCADE,\n    email VARCHAR(255) NOT NULL,\n    name VARCHAR(255),\n    role VARCHAR(50) DEFAULT 'member',\n    created_at TIMESTAMP DEFAULT NOW(),\n    UNIQUE(tenant_id, email)\n);\n\n-- Row-level security\nALTER TABLE users ENABLE ROW LEVEL SECURITY;\n\nCREATE POLICY \"tenant_isolation\" ON users\n    FOR ALL\n    USING (tenant_id = current_setting('app.tenant_id')::UUID);\n```\n\n### Tenant Context\n\n```python\n# FastAPI multi-tenancy\nfrom contextvars import ContextVar\nfrom fastapi import Request, Depends\n\ntenant_context: ContextVar[str] = ContextVar('tenant_id', default=None)\n\ndef get_tenant_id(request: Request) -> str:\n    # Extract from subdomain\n    host = request.headers.get('host', '')\n    subdomain = host.split('.')[0]\n    \n    # Or from JWT\n    # token = request.headers.get('authorization')\n    # tenant_id = decode_jwt(token)['tenant_id']\n    \n    return tenant_context.set(subdomain)\n\ndef get_current_tenant() -> Tenant:\n    tenant_id = tenant_context.get()\n    return Tenant.objects.get(subdomain=tenant_id)\n\n@app.get(\"\u002Fapi\u002Fusers\")\nasync def list_users(tenant: Tenant = Depends(get_current_tenant)):\n    return User.objects.filter(tenant=tenant).all()\n```\n\n### SaaS Identity\n\n```typescript\n\u002F\u002F OAuth2 for SaaS\nconst oauth2Client = new OAuth2Client(\n  process.env.GOOGLE_CLIENT_ID,\n  process.env.GOOGLE_CLIENT_SECRET,\n  'https:\u002F\u002Fyourapp.com\u002Fcallback'\n);\n\n\u002F\u002F Multi-tenant SSO\nconst samlConfig = {\n  entryPoint: 'https:\u002F\u002Fidp.example.com\u002Fsso',\n  issuer: 'yourapp',\n  callbackHandler: async (profile) => {\n    const tenant = await findOrCreateTenant(profile.orgId);\n    const user = await findOrCreateUser(profile, tenant);\n    return { user, tenant };\n  }\n};\n\n\u002F\u002F Role-based access for SaaS\nconst permissions = {\n  admin: ['*'],\n  manager: ['read', 'write', 'users:read'],\n  member: ['read', 'write:own'],\n  viewer: ['read']\n};\n```\n\n### Usage Tracking\n\n```python\nclass UsageTracker:\n    def track_event(self, tenant_id: str, event_type: str, metadata: dict):\n        # Record usage event\n        event = UsageEvent(\n            tenant_id=tenant_id,\n            event_type=event_type,\n            metadata=metadata,\n            timestamp=datetime.utcnow()\n        )\n        self.db.save(event)\n        \n        # Update meter\n        meter = self.get_or_create_meter(tenant_id, event_type)\n        meter.increment(metadata.get('quantity', 1))\n        \n    def get_usage(self, tenant_id: str, period: Period) -> UsageReport:\n        events = self.db.query(UsageEvent)\n            .filter(\n                tenant_id=tenant_id,\n                timestamp__gte=period.start,\n                timestamp__lte=period.end\n            )\n        \n        return self.aggregate_events(events)\n```\n\n### Billing Integration\n\n```python\n# Stripe SaaS billing\nimport stripe\n\nstripe.api_key = os.environ['STRIPE_SECRET_KEY']\n\ndef create_customer(tenant: Tenant):\n    customer = stripe.Customer.create(\n        email=tenant.admin_email,\n        metadata={'tenant_id': str(tenant.id)}\n    )\n    tenant.stripe_customer_id = customer.id\n    tenant.save()\n    \ndef create_subscription(tenant: Tenant, plan_id: str):\n    subscription = stripe.Subscription.create(\n        customer=tenant.stripe_customer_id,\n        items=[{'price': plan_id}],\n        metadata={'tenant_id': str(tenant.id)},\n        trial_period_days=14\n    )\n    \ndef get_invoices(tenant: Tenant):\n    return stripe.Invoice.list(\n        customer=tenant.stripe_customer_id,\n        limit=12\n    )\n```\n\n### SaaS Best Practices\n\n- **Tenant Isolation**: Secure data separation\n- **Metered Billing**: Track usage accurately\n- **Scalable Architecture**: Support growth\n- **Self-Service Onboarding**: Reduce friction\n- **Feature Flags**: Gradual rollouts per tenant\n- **Usage Analytics**: Understand usage patterns\n- **SLA Management**: Define and monitor SLAs\n",{"name":5,"license":14,"metadata":28,"description":7,"compatibility":22},{"audience":29,"category":21},"architect, developer","main","5f7a3e453c98261f93d19a6a7de44ad8f7b72d41",2,"https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk","2026-03-01 06:55:40",{"source":8,"skillName":5,"commands":37,"prompt":47,"zipAvailable":48},[38,41,44],{"tool":39,"command":40},"npx","npx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill saas",{"tool":42,"command":43},"bunx","bunx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill saas",{"tool":45,"command":46},"pnpm","pnpm dlx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill saas","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fsaas\u002FSKILL.md",true,[50,56,60,64,70,74,78,82,86,90,94,98,102,106,110,114,118],{"path":51,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":54,"sourceHtmlUrl":55},"references\u002Farticle-posting.md","REFERENCE","参考文档",2567,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Freferences\u002Farticle-posting.md",{"path":57,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":58,"sourceHtmlUrl":59},"references\u002Fconfig\u002Ffirst-time-setup.md",5316,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Freferences\u002Fconfig\u002Ffirst-time-setup.md",{"path":61,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":62,"sourceHtmlUrl":63},"references\u002Fimage-text-posting.md",2833,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Freferences\u002Fimage-text-posting.md",{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"scripts\u002Fbun.lock","SCRIPT","脚本",39662,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fbun.lock",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"scripts\u002Fcdp.ts",8405,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fcdp.ts",{"path":75,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":76,"sourceHtmlUrl":77},"scripts\u002Fcheck-permissions.ts",8833,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fcheck-permissions.ts",{"path":79,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":80,"sourceHtmlUrl":81},"scripts\u002Fcopy-to-clipboard.ts",12179,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fcopy-to-clipboard.ts",{"path":83,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":84,"sourceHtmlUrl":85},"scripts\u002Fmd-to-wechat.ts",4817,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fmd-to-wechat.ts",{"path":87,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":88,"sourceHtmlUrl":89},"scripts\u002Fpackage.json",261,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fpackage.json",{"path":91,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Fpaste-from-clipboard.ts",5659,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fpaste-from-clipboard.ts",{"path":95,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":96,"sourceHtmlUrl":97},"scripts\u002Fwechat-agent-browser.ts",11400,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fwechat-agent-browser.ts",{"path":99,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":100,"sourceHtmlUrl":101},"scripts\u002Fwechat-api.ts",26530,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fwechat-api.ts",{"path":103,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":104,"sourceHtmlUrl":105},"scripts\u002Fwechat-article.ts",32803,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fwechat-article.ts",{"path":107,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":108,"sourceHtmlUrl":109},"scripts\u002Fwechat-browser.ts",28393,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fwechat-browser.ts",{"path":111,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":112,"sourceHtmlUrl":113},"scripts\u002Fwechat-extend-config.test.ts",4370,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fwechat-extend-config.test.ts",{"path":115,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":116,"sourceHtmlUrl":117},"scripts\u002Fwechat-extend-config.ts",10018,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fwechat-extend-config.ts",{"path":119,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":120,"sourceHtmlUrl":121},"scripts\u002Fwechat-image-processor.ts",8524,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FSocial-Media\u002Fbaoyu-post-to-wechat\u002Fscripts\u002Fwechat-image-processor.ts",[123,134,144,153,163,172],{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":23},"01M6CXT9TXDF79BWJTMQAPB49G","xamarin","Xamarin cross-platform development","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fxamarin\u002FSKILL.md",[],[125,130,131,132,22,133],"platform","cross-platform","mobile","development",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":23},"01M6CXT8AD04MFYDA32VW3FKAG","wrangling","Data wrangling fundamentals","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwrangling\u002FSKILL.md",[],[136,141,22,142,143],"data wrangling","science","data",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":150,"publishedAt":23},"01M6CXT717GCN7SRRNPBDP4508","windows","Windows operating system administration and scripting","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwindows\u002FSKILL.md",[],[146,151,22,152],"system","scripting",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":23},"01M6CXT54K794NMEM3XAPZZDKT","wide-column","Wide-column data model","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwide-column\u002FSKILL.md",[],[160,161,22,162,143],"wide column","databases","model",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":169,"publishedAt":23},"01M6CXT28FMT2P4V9GZE67WA8E","wide-column-stores","Wide-column database stores","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwide-column-stores\u002FSKILL.md",[],[170,161,22,171],"wide column stores","database",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":178,"publishedAt":23},"01M6CXT0D0M0Q4T2N7C2RX7DSN","websockets","WebSocket implementation and best practices","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwebsockets\u002FSKILL.md",[],[174,179,180,181,22,182,183],"websocket","real-time","time","best practices","implementation"]