[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CX68GYJ4MEZAXYHFJRGFVC":3,"skill-same:01M6CX68GYJ4MEZAXYHFJRGFVC":49},{"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":20,"linkOnly":21,"markdownContent":22,"markdownBody":23,"frontMatter":24,"refName":28,"commitSha":29,"skillDirectory":30,"forksCount":31,"repositoryHtmlUrl":32,"repositoryHomepageUrl":6,"ownerHtmlUrl":33,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":34,"install":35,"resources":48},"01M6CX68GYJ4MEZAXYHFJRGFVC","Science Communication",null,"Translating complex scientific concepts into accessible, engaging narratives for diverse audiences","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\u002Finterdisciplinary\u002Fscience-communication\u002FSKILL.md",[],[18,19,5],"communication","science","2026-11-10 10:12:30",false,"---\nname: Science Communication\ndescription: Translating complex scientific concepts into accessible, engaging narratives for diverse audiences\nlicense: MIT\ncompatibility: universal\naudience: researchers, communicators, educators\ncategory: interdisciplinary\n---\n\n# Science Communication\n\n## What I Do\n\nI bridge the gap between scientific research and public understanding by translating complex concepts into accessible narratives. I help scientists share their work effectively with journalists, policymakers, and general audiences.\n\n## When to Use Me\n\n- Writing press releases and media materials\n- Creating public-facing research summaries\n- Developing educational content for non-experts\n- Presenting research to policymakers\n- Building science outreach programs\n- Communicating uncertainty and risk effectively\n\n## Core Concepts\n\n1. **Audience Adaptation**: Simplifying without dumbing down\n2. **Metaphor and Analogy**: Making abstract concepts tangible\n3. **Narrative Structure**: Storytelling in scientific contexts\n4. **Uncertainty Communication**: Presenting confidence levels honestly\n5. **Visual Communication**: Diagrams, infographics, and models\n6. **Media Relations**: Working with journalists effectively\n7. **Public Engagement**: Two-way dialogue with communities\n8. **Misinformation Resistance**: Addressing common misconceptions\n9. **Risk Communication**: Contextualizing probabilities and impacts\n10. **Ethics in Science Comm**: Accuracy vs. accessibility balance\n\n## Code Examples\n\n### Research Summary Generator\n```javascript\nclass ResearchSummaryGenerator {\n  constructor() {\n    this.readabilityTargets = {\n      general: { gradeLevel: 8, audience: 'general public' },\n      educated: { gradeLevel: 12, audience: 'educated non-experts' },\n      informed: { gradeLevel: 14, audience: 'journalists, policymakers' }\n    };\n  }\n  \n  generateLaySummary(paper, options = {}) {\n    const target = this.readabilityTargets[options.level || 'general'];\n    \n    let summary = {\n      title: this.reformulateTitle(paper.title),\n      context: this.explainContext(paper.background),\n      methods: this.simplifyMethods(paper.methods, options.level),\n      findings: this.presentFindings(paper.results),\n      implications: this.explainImplications(paper.conclusions),\n      limitations: this.presentLimitations(paper.limitations),\n      uncertainty: this.quantifyUncertainty(paper.confidence)\n    };\n    \n    return {\n      ...summary,\n      metadata: {\n        originalGradeLevel: this.calculateGradeLevel(paper.title + paper.abstract),\n        adaptedGradeLevel: target.gradeLevel,\n        audience: target.audience\n      }\n    };\n  }\n  \n  reformulateTitle(title) {\n    const technicalRemoval = [\n      \u002FAnalysis of \u002Fgi,\n      \u002FStudy on \u002Fgi,\n      \u002FInvestigation of \u002Fgi,\n      \u002FA \u002Fgi\n    ];\n    \n    let simplified = title;\n    technicalRemoval.forEach(pattern => {\n      simplified = simplified.replace(pattern, '');\n    });\n    \n    return simplified.trim();\n  }\n  \n  simplifyMethods(methods, level) {\n    if (level === 'general') {\n      return {\n        approach: this.mapMethodApproach(methods.type),\n        participants: this.humanizeNumbers(methods.participants),\n        duration: this.humanizeTime(methods.duration)\n      };\n    }\n    return methods;\n  }\n  \n  presentFindings(findings) {\n    return findings.map(finding => ({\n      statement: this.createFindingStatement(finding),\n      strength: this.qualifyStrength(finding.statisticalSignificance),\n      practicalMeaning: this.explainPracticalImpact(finding.effectSize)\n    }));\n  }\n  \n  quantifyUncertainty(confidence) {\n    const qualifiers = {\n      veryHigh: 'extremely confident',\n      high: 'confident',\n      moderate: 'fairly confident',\n      low: 'somewhat uncertain',\n      veryLow: 'highly uncertain'\n    };\n    \n    return {\n      level: confidence.level,\n      qualifier: qualifiers[confidence.level] || 'uncertain',\n      percentage: confidence.percentage,\n      caveats: confidence.caveats || []\n    };\n  }\n  \n  createFindingStatement(finding) {\n    const templates = [\n      'The study found that {relationship} among {population}.',\n      'Results showed {direction} {magnitude} in {outcome}.',\n      '{population} experienced {change} in {outcome} when {condition}.'\n    ];\n    \n    const template = templates[Math.floor(Math.random() * templates.length)];\n    \n    return template\n      .replace('{relationship}', finding.relationship)\n      .replace('{population}', finding.population)\n      .replace('{direction}', finding.direction)\n      .replace('{magnitude}', finding.magnitude)\n      .replace('{outcome}', finding.outcome)\n      .replace('{change}', finding.change)\n      .replace('{condition}', finding.condition);\n  }\n}\n```\n\n### Interactive Explainer Builder\n```javascript\nclass ExplainerBuilder {\n  constructor() {\n    this.concepts = [];\n    this.analogies = [];\n    this.interactiveElements = [];\n  }\n  \n  addConcept(name, definition, options = {}) {\n    this.concepts.push({\n      id: this.generateId(),\n      name,\n      definition,\n      examples: options.examples || [],\n      prerequisites: options.prerequisites || [],\n      depth: options.depth || 1\n    });\n    return this;\n  }\n  \n  addAnalogy(conceptId, analogy) {\n    this.analogies.push({\n      conceptId,\n      ...analogy\n    });\n    return this;\n  }\n  \n  addInteractive(conceptId, element) {\n    this.interactiveElements.push({\n      conceptId,\n      ...element\n    });\n    return this;\n  }\n  \n  buildForAudience(audienceLevel) {\n    const filteredConcepts = this.filterByDepth(audienceLevel);\n    \n    const explainer = {\n      introduction: this.createIntroduction(),\n      concepts: filteredConcepts.map(c => ({\n        ...c,\n        analogy: this.getAnalogyForConcept(c.id),\n        interactive: this.getInteractiveForConcept(c.id)\n      }));\n    };\n    \n    return this.generateHTML(explainer);\n  }\n  \n  filterByDepth(level) {\n    const depthMap = { child: 1, teen: 2, adult: 3, expert: 4 };\n    const maxDepth = depthMap[level] || 2;\n    \n    return this.concepts.filter(c => c.depth \u003C= maxDepth);\n  }\n  \n  generateHTML(explainer) {\n    let html = `\u003Cdiv class=\"explainer\">`;\n    \n    html += `\u003Csection class=\"introduction\">${explainer.introduction}\u003C\u002Fsection>`;\n    \n    explainer.concepts.forEach(concept => {\n      html += `\u003Carticle class=\"concept\" data-depth=\"${concept.depth}\">`;\n      html += `\u003Ch3>${concept.name}\u003C\u002Fh3>`;\n      html += `\u003Cp>${concept.definition}\u003C\u002Fp>`;\n      \n      if (concept.analogy) {\n        html += this.renderAnalogy(concept.analogy);\n      }\n      \n      if (concept.interactive) {\n        html += this.renderInteractive(concept.interactive);\n      }\n      \n      html += `\u003C\u002Farticle>`;\n    });\n    \n    html += `\u003C\u002Fdiv>`;\n    return html;\n  }\n  \n  renderAnalogy(analogy) {\n    return `\n      \u003Cdiv class=\"analogy\" role=\"note\">\n        \u003Cstrong>Think of it like:\u003C\u002Fstrong>\n        \u003Cp>${analogy.scenario}\u003C\u002Fp>\n        \u003Cp class=\"mapping\">${analogy.mapping}\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    `;\n  }\n  \n  renderInteractive(element) {\n    if (element.type === 'slider') {\n      return `\n        \u003Cdiv class=\"interactive-slider\" data-param=\"${element.parameter}\">\n          \u003Clabel>${element.label}: \u003Cspan class=\"value\">${element.default}\u003C\u002Fspan>\u003C\u002Flabel>\n          \u003Cinput type=\"range\" min=\"${element.min}\" max=\"${element.max}\" \n                 value=\"${element.default}\" step=\"${element.step}\">\n        \u003C\u002Fdiv>\n      `;\n    }\n    return '';\n  }\n}\n```\n\n### Misinformation Response System\n```javascript\nclass MisinformationResponder {\n  constructor() {\n    this.claimPatterns = [];\n    this.responses = new Map();\n  }\n  \n  registerClaim(pattern, response) {\n    this.claimPatterns.push({\n      regex: typeof pattern === 'string' ? new RegExp(pattern, 'i') : pattern,\n      response\n    });\n    return this;\n  }\n  \n  generateResponse(claim) {\n    const matched = this.matchClaim(claim);\n    \n    if (matched) {\n      return {\n        acknowledgment: this.generateAcknowledgment(claim),\n        correction: matched.response.correction,\n        evidence: matched.response.evidence,\n        context: matched.response.context,\n        sources: matched.response.sources,\n        uncertainty: matched.response.uncertainty || null\n      };\n    }\n    \n    return this.generateGenericResponse(claim);\n  }\n  \n  matchClaim(claim) {\n    return this.claimPatterns.find(p => p.regex.test(claim));\n  }\n  \n  generateAcknowledgment(claim) {\n    const acknowledgments = [\n      'I understand why this might seem concerning.',\n      'This is a common question about the topic.',\n      'I can see how this claim might be concerning.'\n    ];\n    \n    return acknowledgments[Math.floor(Math.random() * acknowledgments.length)];\n  }\n  \n  generateGenericResponse(claim) {\n    return {\n      acknowledgment: 'This is an important topic that deserves careful consideration.',\n      correction: 'The relationship is more nuanced than often portrayed.',\n      evidence: [],\n      context: 'Scientific understanding evolves as new evidence emerges.',\n      sources: [],\n      uncertainty: 'Research is ongoing and conclusions may change.'\n    };\n  }\n  \n  generateUncertaintyMessage(uncertainty) {\n    const messages = {\n      veryHigh: 'The evidence strongly supports this conclusion.',\n      high: 'The evidence supports this conclusion.',\n      moderate: 'The evidence moderately supports this conclusion.',\n      low: 'The evidence weakly supports this conclusion.',\n      veryLow: 'The evidence does not strongly support this conclusion.'\n    };\n    \n    return messages[uncertainty] || 'The evidence is mixed.';\n  }\n}\n```\n\n## Best Practices\n\n1. Start with the why, not the what\n2. Use concrete examples and familiar contexts\n3. Acknowledge uncertainty honestly\n4. Provide actionable next steps when possible\n5. Match vocabulary to audience expertise\n6. Use visuals to complement text explanations\n7. Address misconceptions directly\n8. Balance accuracy with accessibility\n9. Provide pathways to learn more\n10. Test understanding with representative audiences\n","# Science Communication\n\n## What I Do\n\nI bridge the gap between scientific research and public understanding by translating complex concepts into accessible narratives. I help scientists share their work effectively with journalists, policymakers, and general audiences.\n\n## When to Use Me\n\n- Writing press releases and media materials\n- Creating public-facing research summaries\n- Developing educational content for non-experts\n- Presenting research to policymakers\n- Building science outreach programs\n- Communicating uncertainty and risk effectively\n\n## Core Concepts\n\n1. **Audience Adaptation**: Simplifying without dumbing down\n2. **Metaphor and Analogy**: Making abstract concepts tangible\n3. **Narrative Structure**: Storytelling in scientific contexts\n4. **Uncertainty Communication**: Presenting confidence levels honestly\n5. **Visual Communication**: Diagrams, infographics, and models\n6. **Media Relations**: Working with journalists effectively\n7. **Public Engagement**: Two-way dialogue with communities\n8. **Misinformation Resistance**: Addressing common misconceptions\n9. **Risk Communication**: Contextualizing probabilities and impacts\n10. **Ethics in Science Comm**: Accuracy vs. accessibility balance\n\n## Code Examples\n\n### Research Summary Generator\n```javascript\nclass ResearchSummaryGenerator {\n  constructor() {\n    this.readabilityTargets = {\n      general: { gradeLevel: 8, audience: 'general public' },\n      educated: { gradeLevel: 12, audience: 'educated non-experts' },\n      informed: { gradeLevel: 14, audience: 'journalists, policymakers' }\n    };\n  }\n  \n  generateLaySummary(paper, options = {}) {\n    const target = this.readabilityTargets[options.level || 'general'];\n    \n    let summary = {\n      title: this.reformulateTitle(paper.title),\n      context: this.explainContext(paper.background),\n      methods: this.simplifyMethods(paper.methods, options.level),\n      findings: this.presentFindings(paper.results),\n      implications: this.explainImplications(paper.conclusions),\n      limitations: this.presentLimitations(paper.limitations),\n      uncertainty: this.quantifyUncertainty(paper.confidence)\n    };\n    \n    return {\n      ...summary,\n      metadata: {\n        originalGradeLevel: this.calculateGradeLevel(paper.title + paper.abstract),\n        adaptedGradeLevel: target.gradeLevel,\n        audience: target.audience\n      }\n    };\n  }\n  \n  reformulateTitle(title) {\n    const technicalRemoval = [\n      \u002FAnalysis of \u002Fgi,\n      \u002FStudy on \u002Fgi,\n      \u002FInvestigation of \u002Fgi,\n      \u002FA \u002Fgi\n    ];\n    \n    let simplified = title;\n    technicalRemoval.forEach(pattern => {\n      simplified = simplified.replace(pattern, '');\n    });\n    \n    return simplified.trim();\n  }\n  \n  simplifyMethods(methods, level) {\n    if (level === 'general') {\n      return {\n        approach: this.mapMethodApproach(methods.type),\n        participants: this.humanizeNumbers(methods.participants),\n        duration: this.humanizeTime(methods.duration)\n      };\n    }\n    return methods;\n  }\n  \n  presentFindings(findings) {\n    return findings.map(finding => ({\n      statement: this.createFindingStatement(finding),\n      strength: this.qualifyStrength(finding.statisticalSignificance),\n      practicalMeaning: this.explainPracticalImpact(finding.effectSize)\n    }));\n  }\n  \n  quantifyUncertainty(confidence) {\n    const qualifiers = {\n      veryHigh: 'extremely confident',\n      high: 'confident',\n      moderate: 'fairly confident',\n      low: 'somewhat uncertain',\n      veryLow: 'highly uncertain'\n    };\n    \n    return {\n      level: confidence.level,\n      qualifier: qualifiers[confidence.level] || 'uncertain',\n      percentage: confidence.percentage,\n      caveats: confidence.caveats || []\n    };\n  }\n  \n  createFindingStatement(finding) {\n    const templates = [\n      'The study found that {relationship} among {population}.',\n      'Results showed {direction} {magnitude} in {outcome}.',\n      '{population} experienced {change} in {outcome} when {condition}.'\n    ];\n    \n    const template = templates[Math.floor(Math.random() * templates.length)];\n    \n    return template\n      .replace('{relationship}', finding.relationship)\n      .replace('{population}', finding.population)\n      .replace('{direction}', finding.direction)\n      .replace('{magnitude}', finding.magnitude)\n      .replace('{outcome}', finding.outcome)\n      .replace('{change}', finding.change)\n      .replace('{condition}', finding.condition);\n  }\n}\n```\n\n### Interactive Explainer Builder\n```javascript\nclass ExplainerBuilder {\n  constructor() {\n    this.concepts = [];\n    this.analogies = [];\n    this.interactiveElements = [];\n  }\n  \n  addConcept(name, definition, options = {}) {\n    this.concepts.push({\n      id: this.generateId(),\n      name,\n      definition,\n      examples: options.examples || [],\n      prerequisites: options.prerequisites || [],\n      depth: options.depth || 1\n    });\n    return this;\n  }\n  \n  addAnalogy(conceptId, analogy) {\n    this.analogies.push({\n      conceptId,\n      ...analogy\n    });\n    return this;\n  }\n  \n  addInteractive(conceptId, element) {\n    this.interactiveElements.push({\n      conceptId,\n      ...element\n    });\n    return this;\n  }\n  \n  buildForAudience(audienceLevel) {\n    const filteredConcepts = this.filterByDepth(audienceLevel);\n    \n    const explainer = {\n      introduction: this.createIntroduction(),\n      concepts: filteredConcepts.map(c => ({\n        ...c,\n        analogy: this.getAnalogyForConcept(c.id),\n        interactive: this.getInteractiveForConcept(c.id)\n      }));\n    };\n    \n    return this.generateHTML(explainer);\n  }\n  \n  filterByDepth(level) {\n    const depthMap = { child: 1, teen: 2, adult: 3, expert: 4 };\n    const maxDepth = depthMap[level] || 2;\n    \n    return this.concepts.filter(c => c.depth \u003C= maxDepth);\n  }\n  \n  generateHTML(explainer) {\n    let html = `\u003Cdiv class=\"explainer\">`;\n    \n    html += `\u003Csection class=\"introduction\">${explainer.introduction}\u003C\u002Fsection>`;\n    \n    explainer.concepts.forEach(concept => {\n      html += `\u003Carticle class=\"concept\" data-depth=\"${concept.depth}\">`;\n      html += `\u003Ch3>${concept.name}\u003C\u002Fh3>`;\n      html += `\u003Cp>${concept.definition}\u003C\u002Fp>`;\n      \n      if (concept.analogy) {\n        html += this.renderAnalogy(concept.analogy);\n      }\n      \n      if (concept.interactive) {\n        html += this.renderInteractive(concept.interactive);\n      }\n      \n      html += `\u003C\u002Farticle>`;\n    });\n    \n    html += `\u003C\u002Fdiv>`;\n    return html;\n  }\n  \n  renderAnalogy(analogy) {\n    return `\n      \u003Cdiv class=\"analogy\" role=\"note\">\n        \u003Cstrong>Think of it like:\u003C\u002Fstrong>\n        \u003Cp>${analogy.scenario}\u003C\u002Fp>\n        \u003Cp class=\"mapping\">${analogy.mapping}\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    `;\n  }\n  \n  renderInteractive(element) {\n    if (element.type === 'slider') {\n      return `\n        \u003Cdiv class=\"interactive-slider\" data-param=\"${element.parameter}\">\n          \u003Clabel>${element.label}: \u003Cspan class=\"value\">${element.default}\u003C\u002Fspan>\u003C\u002Flabel>\n          \u003Cinput type=\"range\" min=\"${element.min}\" max=\"${element.max}\" \n                 value=\"${element.default}\" step=\"${element.step}\">\n        \u003C\u002Fdiv>\n      `;\n    }\n    return '';\n  }\n}\n```\n\n### Misinformation Response System\n```javascript\nclass MisinformationResponder {\n  constructor() {\n    this.claimPatterns = [];\n    this.responses = new Map();\n  }\n  \n  registerClaim(pattern, response) {\n    this.claimPatterns.push({\n      regex: typeof pattern === 'string' ? new RegExp(pattern, 'i') : pattern,\n      response\n    });\n    return this;\n  }\n  \n  generateResponse(claim) {\n    const matched = this.matchClaim(claim);\n    \n    if (matched) {\n      return {\n        acknowledgment: this.generateAcknowledgment(claim),\n        correction: matched.response.correction,\n        evidence: matched.response.evidence,\n        context: matched.response.context,\n        sources: matched.response.sources,\n        uncertainty: matched.response.uncertainty || null\n      };\n    }\n    \n    return this.generateGenericResponse(claim);\n  }\n  \n  matchClaim(claim) {\n    return this.claimPatterns.find(p => p.regex.test(claim));\n  }\n  \n  generateAcknowledgment(claim) {\n    const acknowledgments = [\n      'I understand why this might seem concerning.',\n      'This is a common question about the topic.',\n      'I can see how this claim might be concerning.'\n    ];\n    \n    return acknowledgments[Math.floor(Math.random() * acknowledgments.length)];\n  }\n  \n  generateGenericResponse(claim) {\n    return {\n      acknowledgment: 'This is an important topic that deserves careful consideration.',\n      correction: 'The relationship is more nuanced than often portrayed.',\n      evidence: [],\n      context: 'Scientific understanding evolves as new evidence emerges.',\n      sources: [],\n      uncertainty: 'Research is ongoing and conclusions may change.'\n    };\n  }\n  \n  generateUncertaintyMessage(uncertainty) {\n    const messages = {\n      veryHigh: 'The evidence strongly supports this conclusion.',\n      high: 'The evidence supports this conclusion.',\n      moderate: 'The evidence moderately supports this conclusion.',\n      low: 'The evidence weakly supports this conclusion.',\n      veryLow: 'The evidence does not strongly support this conclusion.'\n    };\n    \n    return messages[uncertainty] || 'The evidence is mixed.';\n  }\n}\n```\n\n## Best Practices\n\n1. Start with the why, not the what\n2. Use concrete examples and familiar contexts\n3. Acknowledge uncertainty honestly\n4. Provide actionable next steps when possible\n5. Match vocabulary to audience expertise\n6. Use visuals to complement text explanations\n7. Address misconceptions directly\n8. Balance accuracy with accessibility\n9. Provide pathways to learn more\n10. Test understanding with representative audiences\n",{"name":5,"license":14,"audience":25,"category":26,"description":7,"compatibility":27},"researchers, communicators, educators","interdisciplinary","universal","main","5f7a3e453c98261f93d19a6a7de44ad8f7b72d41","interdisciplinary\u002Fscience-communication",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":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill \"Science Communication\"",{"tool":41,"command":42},"bunx","bunx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill \"Science Communication\"",{"tool":44,"command":45},"pnpm","pnpm dlx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill \"Science Communication\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Finterdisciplinary\u002Fscience-communication\u002FSKILL.md",true,[],[50,62,71,80,90,99],{"skillNo":51,"name":52,"nameZh":6,"description":53,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":56,"publishedAt":20},"01M6CXT9TXDF79BWJTMQAPB49G","xamarin","Xamarin cross-platform development","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fxamarin\u002FSKILL.md",[],[52,57,58,59,60,61],"platform","cross-platform","mobile","opencode","development",{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":20},"01M6CXT8AD04MFYDA32VW3FKAG","wrangling","Data wrangling fundamentals","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwrangling\u002FSKILL.md",[],[64,69,60,19,70],"data wrangling","data",{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":20},"01M6CXT717GCN7SRRNPBDP4508","windows","Windows operating system administration and scripting","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwindows\u002FSKILL.md",[],[73,78,60,79],"system","scripting",{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":20},"01M6CXT54K794NMEM3XAPZZDKT","wide-column","Wide-column data model","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwide-column\u002FSKILL.md",[],[87,88,60,89,70],"wide column","databases","model",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":20},"01M6CXT28FMT2P4V9GZE67WA8E","wide-column-stores","Wide-column database stores","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwide-column-stores\u002FSKILL.md",[],[97,88,60,98],"wide column stores","database",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":20},"01M6CXT0D0M0Q4T2N7C2RX7DSN","websockets","WebSocket implementation and best practices","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwebsockets\u002FSKILL.md",[],[101,106,107,108,60,109,110],"websocket","real-time","time","best practices","implementation"]