[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-runkids--skillshare":3,"tool-runkids--skillshare":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",138956,2,"2026-04-05T11:33:21",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":79,"owner_email":79,"owner_twitter":79,"owner_website":79,"owner_url":80,"languages":81,"stars":115,"forks":116,"last_commit_at":117,"license":118,"difficulty_score":119,"env_os":120,"env_gpu":121,"env_ram":121,"env_deps":122,"category_tags":126,"github_topics":127,"view_count":23,"oss_zip_url":79,"oss_zip_packed_at":79,"status":16,"created_at":147,"updated_at":148,"faqs":149,"releases":184},3120,"runkids\u002Fskillshare","skillshare","📚 Sync skills across all AI CLI tools with one command and simplify team sharing. Supporting Codex, Claude Code, OpenClaw & more","skillshare 是一款专为 AI 命令行工具设计的技能同步管理器。在开发工作中，开发者往往同时使用 Codex、Claude Code、Cursor 等多种 AI 助手，而每个工具都有独立的配置目录，导致技能文件、规则指令和提示词难以统一维护，容易遗漏或版本混乱。\n\nskillshare 通过“单一事实来源”的理念解决了这一痛点。用户只需将技能文件集中存放在本地特定目录，运行一条 `skillshare sync` 命令，即可自动将所有配置同步到支持的 50 多种 AI 工具中。它不仅支持从 GitHub、GitLab 等各类代码托管平台拉取配置，还内置了安全审计功能，能在使用前检测潜在的提示词注入或数据泄露风险。此外，它允许团队在项目级或组织级共享技能库，并通过灵活的过滤机制控制不同技能的适用范围。\n\n这款工具特别适合频繁切换不同 AI 编程助手的软件开发者、技术团队以及 DevOps 工程师。作为一个轻量级的单二进制文件，skillshare 无需联网注册或上传数据，完全支持离线运行，在提升多工具协作效率的同时，充分保障了代码与配置的安全性。","\u003Cp align=\"center\" style=\"margin-bottom: 0;\">\n  \u003Cimg src=\".github\u002Fassets\u002Flogo.png\" alt=\"skillshare\" width=\"280\">\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\" style=\"margin-top: 0.5rem; margin-bottom: 0.5rem;\">skillshare\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fskillshare.runkids.cc\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FWebsite-skillshare.runkids.cc-blue?logo=docusaurus\" alt=\"Website\">\u003C\u002Fa>\n  \u003Ca href=\"LICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg\" alt=\"License: MIT\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Freleases\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Frunkids\u002Fskillshare\" alt=\"Release\">\u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-macOS%20%7C%20Linux%20%7C%20Windows-blue\" alt=\"Platform\">\n  \u003Ca href=\"https:\u002F\u002Fgoreportcard.com\u002Freport\u002Fgithub.com\u002Frunkids\u002Fskillshare\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_2b4a70945b89.png\" alt=\"Go Report Card\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdeepwiki.com\u002Frunkids\u002Fskillshare\">\u003Cimg src=\"https:\u002F\u002Fdeepwiki.com\u002Fbadge.svg\" alt=\"Ask DeepWiki\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FRoggeOhta\u002Fawesome-codex-cli\">\u003Cimg src=\"https:\u002F\u002Fawesome.re\u002Fmentioned-badge.svg\" alt=\"Mentioned in Awesome Codex CLI\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fstargazers\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Frunkids\u002Fskillshare?style=social\" alt=\"Star on GitHub\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F21835\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_da43bb0fd7bb.png\" alt=\"runkids%2Fskillshare | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"\u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>One source of truth for AI CLI skills, rules, commands & more. Sync everywhere with one command — from personal to organization-wide.\u003C\u002Fstrong>\u003Cbr>\n  Codex, Claude Code, OpenClaw, OpenCode & 50+ more.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".github\u002Fassets\u002Fdemo.gif\" alt=\"skillshare demo\" width=\"960\">\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fskillshare.runkids.cc\">Website\u003C\u002Fa> •\n  \u003Ca href=\"#installation\">Install\u003C\u002Fa> •\n  \u003Ca href=\"#quick-start\">Quick Start\u003C\u002Fa> •\n  \u003Ca href=\"#highlights\">Highlights\u003C\u002Fa> •\n  \u003Ca href=\"#cli-and-ui-preview\">Screenshots\u003C\u002Fa> •\n  \u003Ca href=\"https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\">Docs\u003C\u002Fa>\n\u003C\u002Fp>\n\n> [!NOTE]\n> **Latest**: [v0.18.3](https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Freleases\u002Ftag\u002Fv0.18.3) — enable\u002Fdisable skills, skills sub-key config, upgrade auto-sudo. [All releases →](https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Freleases)\n\n## Why skillshare\n\nEvery AI CLI has its own skills directory.\nYou edit in one, forget to copy to another, and lose track of what's where.\n\nskillshare fixes this:\n\n- **One source, every agent** — sync to Claude, Cursor, Codex & 50+ more with `skillshare sync`\n- **More than skills** — manage rules, commands, prompts & any file-based resource with [extras](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Freference\u002Ftargets\u002Fconfiguration#extras)\n- **Install from anywhere** — GitHub, GitLab, Bitbucket, Azure DevOps, or any self-hosted Git\n- **Built-in security** — audit skills for prompt injection and data exfiltration before use\n- **Team-ready** — project skills in `.skillshare\u002F`, org-wide skills via tracked repos\n- **Local & lightweight** — single binary, no registry, no telemetry, fully offline-capable\n- **Fine-grained filtering** — control which skills reach which targets with [`.skillignore`](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Fhow-to\u002Fdaily-tasks\u002Ffiltering-skills), SKILL.md `targets`, and per-target include\u002Fexclude\n\n> Coming from another tool? [Migration Guide](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Fhow-to\u002Fadvanced\u002Fmigration) · [Comparison](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Funderstand\u002Fphilosophy\u002Fcomparison)\n\n## How It Works\n\n- macOS \u002F Linux: `~\u002F.config\u002Fskillshare\u002F`\n- Windows: `%AppData%\\skillshare\\`\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                    Source Directory                         │\n│   ~\u002F.config\u002Fskillshare\u002Fskills\u002F    ← skills (SKILL.md)       │\n│   ~\u002F.config\u002Fskillshare\u002Fextras\u002F    ← rules, commands, etc.   │\n└─────────────────────────────────────────────────────────────┘\n                              │ sync\n              ┌───────────────┼───────────────┐\n              ▼               ▼               ▼\n       ┌───────────┐   ┌───────────┐   ┌───────────┐\n       │  Claude   │   │  OpenCode │   │ OpenClaw  │   ...\n       └───────────┘   └───────────┘   └───────────┘\n```\n\n| Platform | Skills Source | Extras Source | Link Type |\n|----------|---------------|---------------|-----------|\n| macOS\u002FLinux | `~\u002F.config\u002Fskillshare\u002Fskills\u002F` | `~\u002F.config\u002Fskillshare\u002Fextras\u002F` | Symlinks |\n| Windows | `%AppData%\\skillshare\\skills\\` | `%AppData%\\skillshare\\extras\\` | NTFS Junctions (no admin required) |\n\n| | Imperative (install-per-command) | Declarative (skillshare) |\n|---|---|---|\n| **Source of truth** | Skills copied independently | Single source → symlinks (or copies) |\n| **New machine setup** | Re-run every install manually | `git clone` config + `sync` |\n| **Security audit** | None | Built-in `audit` + auto-scan on install\u002Fupdate |\n| **Web dashboard** | None | `skillshare ui` |\n| **Runtime dependency** | Node.js + npm | None (single Go binary) |\n\n> [Full comparison →](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Funderstand\u002Fphilosophy\u002Fcomparison)\n\n## CLI and UI Preview\n\n| Skill Detail | Security Audit |\n|---|---|\n| \u003Cimg src=\".github\u002Fassets\u002Fskill-detail-tui.png\" alt=\"CLI sync output\" width=\"480\" height=\"300\"> | \u003Cimg src=\".github\u002Fassets\u002Faudit-tui.png\" alt=\"CLI install with security audit\" width=\"480\" height=\"300\"> |\n\n| UI Dashboard | UI Skills |\n|---|---|\n| \u003Cimg src=\".github\u002Fassets\u002Fui\u002Fweb-dashboard-demo.png\" alt=\"Web dashboard overview\" width=\"480\"> | \u003Cimg src=\".github\u002Fassets\u002Fui\u002Fweb-skills-demo.png\" alt=\"Web UI skills page\" width=\"480\"> |\n\n## Installation\n\n### macOS \u002F Linux\n\n```bash\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Frunkids\u002Fskillshare\u002Fmain\u002Finstall.sh | sh\n```\n\n### Windows PowerShell\n\n```powershell\nirm https:\u002F\u002Fraw.githubusercontent.com\u002Frunkids\u002Fskillshare\u002Fmain\u002Finstall.ps1 | iex\n```\n\n### Homebrew\n\n```bash\nbrew install skillshare\n```\n\n> **Tip:** Run `skillshare upgrade` to update to the latest version. It auto-detects your install method and handles the rest.\n\n### GitHub Actions\n\n```yaml\n- uses: runkids\u002Fsetup-skillshare@v1\n  with:\n    source: .\u002Fskills\n- run: skillshare sync\n```\n\nSee [`setup-skillshare`](https:\u002F\u002Fgithub.com\u002Fmarketplace\u002Factions\u002Fsetup-skillshare) for all options (audit, project mode, version pinning).\n\n### Shorthand (Optional)\n\nAdd an alias to your shell config (`~\u002F.zshrc` or `~\u002F.bashrc`):\n\n```bash\nalias ss='skillshare'\n```\n\n## Quick Start\n\n```bash\nskillshare init            # Create config, source, and detected targets\nskillshare sync            # Sync skills to all targets\n```\n\n## Highlights\n\n**Install & update skills** —from GitHub, GitLab, or any Git host\n\n```bash\nskillshare install github.com\u002Freponame\u002Fskills\nskillshare update --all\nskillshare target claude --mode copy  # if symlinks don't work\n```\n\n**Symlink issues?** — switch to copy mode per target\n\n```bash\nskillshare target \u003Cname> --mode copy\nskillshare sync\n```\n\n**Security audit** —scan before skills reach your agent\n\n```bash\nskillshare audit\n```\n\n**Project skills** —per-repo, committed with your code\n\n```bash\nskillshare init -p && skillshare sync\n```\n\n**Extras** —manage rules, commands, prompts & more\n\n```bash\nskillshare extras init rules          # create a \"rules\" extra\nskillshare sync --all                 # sync skills + extras together\nskillshare extras collect rules       # collect local files back to source\n```\n\n**Web dashboard** —visual control panel\n\n```bash\nskillshare ui\n```\n\n[All commands & guides →](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Freference\u002Fcommands)\n\n## Contributing\n\nContributions welcome! Open an issue first, then submit a draft PR with tests.\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for setup details.\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare.git && cd skillshare\nmake check  # format + lint + test\n```\n\n> [!TIP]\n> Not sure where to start? Browse [open issues](https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fissues) or try the [Playground](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Flearn\u002Fwith-playground) for a zero-setup dev environment.\n\n## Contributors\n\nThanks to everyone who helped shape skillshare.\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fleeeezx\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_485884372580.png\" width=\"50\" style=\"border-radius:50%\" alt=\"leeeezx\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FVergil333\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_d960da4c4f9f.png\" width=\"50\" style=\"border-radius:50%\" alt=\"Vergil333\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fromanr\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_1676af28053d.png\" width=\"50\" style=\"border-radius:50%\" alt=\"romanr\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxocasdashdash\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_6d98bae10aeb.png\" width=\"50\" style=\"border-radius:50%\" alt=\"xocasdashdash\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fphilippe-granet\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_7ee5de40ca09.png\" width=\"50\" style=\"border-radius:50%\" alt=\"philippe-granet\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fterranc\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_8203d4e55156.png\" width=\"50\" style=\"border-radius:50%\" alt=\"terranc\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbenrfairless\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_81e9f43c9e6e.png\" width=\"50\" style=\"border-radius:50%\" alt=\"benrfairless\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnerveband\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_198640af9ba0.png\" width=\"50\" style=\"border-radius:50%\" alt=\"nerveband\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FEarthChen\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_25751ccf7a2c.png\" width=\"50\" style=\"border-radius:50%\" alt=\"EarthChen\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgdm257\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_b31ee93984c9.png\" width=\"50\" style=\"border-radius:50%\" alt=\"gdm257\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fskovtunenko\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_03a0817f97ce.png\" width=\"50\" style=\"border-radius:50%\" alt=\"skovtunenko\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FTyceHerrman\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_295cf36b557b.png\" width=\"50\" style=\"border-radius:50%\" alt=\"TyceHerrman\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002F1am2syman\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_6203b52c1c9c.png\" width=\"50\" style=\"border-radius:50%\" alt=\"1am2syman\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fthealokkr\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_57d46664e684.png\" width=\"50\" style=\"border-radius:50%\" alt=\"thealokkr\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FJasonLandbridge\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_7e77b058bfdf.png\" width=\"50\" style=\"border-radius:50%\" alt=\"JasonLandbridge\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmasonc15\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_eed5f67e9612.png\" width=\"50\" style=\"border-radius:50%\" alt=\"masonc15\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frichardwhatever\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_221b967e3950.png\" width=\"50\" style=\"border-radius:50%\" alt=\"richardwhatever\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Freneleonhardt\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_0b4a69afe042.png\" width=\"50\" style=\"border-radius:50%\" alt=\"reneleonhardt\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fndeybach\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_16b904413f74.png\" width=\"50\" style=\"border-radius:50%\" alt=\"ndeybach\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsalmonumbrella\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_96a66060eefb.png\" width=\"50\" style=\"border-radius:50%\" alt=\"salmonumbrella\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdaylamtayari\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_a37642740b78.png\" width=\"50\" style=\"border-radius:50%\" alt=\"daylamtayari\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdstotijn\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_059a0d419f94.png\" width=\"50\" style=\"border-radius:50%\" alt=\"dstotijn\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fipruning\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_52966924ffbf.png\" width=\"50\" style=\"border-radius:50%\" alt=\"ipruning\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fkevincobain2000\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_28a66da71b7b.png\" width=\"50\" style=\"border-radius:50%\" alt=\"kevincobain2000\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FStephenPAdams\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_5dbf13a8cf44.png\" width=\"50\" style=\"border-radius:50%\" alt=\"StephenPAdams\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmk-imagine\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_63c201088004.png\" width=\"50\" style=\"border-radius:50%\" alt=\"mk-imagine\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCurtion\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_39334c914ffb.png\" width=\"50\" style=\"border-radius:50%\" alt=\"Curtion\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Famdoi7\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_742acec6b912.png\" width=\"50\" style=\"border-radius:50%\" alt=\"amdoi7\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjessica-engel\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_64c75a216fbc.png\" width=\"50\" style=\"border-radius:50%\" alt=\"jessica-engel\">\u003C\u002Fa>\n\n---\n\nIf you find skillshare useful, consider giving it a ⭐\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_f233277b3d57.png)](https:\u002F\u002Fwww.star-history.com\u002F#runkids\u002Fskillshare&type=date&legend=top-left)\n\n---\n\n## License\n\nMIT\n","\u003Cp align=\"center\" style=\"margin-bottom: 0;\">\n  \u003Cimg src=\".github\u002Fassets\u002Flogo.png\" alt=\"skillshare\" width=\"280\">\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\" style=\"margin-top: 0.5rem; margin-bottom: 0.5rem;\">skillshare\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fskillshare.runkids.cc\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FWebsite-skillshare.runkids.cc-blue?logo=docusaurus\" alt=\"Website\">\u003C\u002Fa>\n  \u003Ca href=\"LICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg\" alt=\"License: MIT\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Freleases\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Frunkids\u002Fskillshare\" alt=\"Release\">\u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-macOS%20%7C%20Linux%20%7C%20Windows-blue\" alt=\"Platform\">\n  \u003Ca href=\"https:\u002F\u002Fgoreportcard.com\u002Freport\u002Fgithub.com\u002Frunkids\u002Fskillshare\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_2b4a70945b89.png\" alt=\"Go Report Card\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdeepwiki.com\u002Frunkids\u002Fskillshare\">\u003Cimg src=\"https:\u002F\u002Fdeepwiki.com\u002Fbadge.svg\" alt=\"Ask DeepWiki\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FRoggeOhta\u002Fawesome-codex-cli\">\u003Cimg src=\"https:\u002F\u002Fawesome.re\u002Fmentioned-badge.svg\" alt=\"Mentioned in Awesome Codex CLI\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fstargazers\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Frunkids\u002Fskillshare?style=social\" alt=\"Star on GitHub\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F21835\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_da43bb0fd7bb.png\" alt=\"runkids%2Fskillshare | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"\u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>AI CLI 技能、规则、命令等信息的唯一可信源。只需一条命令，即可在个人与组织范围内同步所有内容。\u003C\u002Fstrong>\u003Cbr>\n  支持 Codex、Claude Code、OpenClaw、OpenCode 等 50 多种工具。\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".github\u002Fassets\u002Fdemo.gif\" alt=\"skillshare 演示\" width=\"960\">\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fskillshare.runkids.cc\">官网\u003C\u002Fa> •\n  \u003Ca href=\"#installation\">安装\u003C\u002Fa> •\n  \u003Ca href=\"#quick-start\">快速入门\u003C\u002Fa> •\n  \u003Ca href=\"#highlights\">亮点\u003C\u002Fa> •\n  \u003Ca href=\"#cli-and-ui-preview\">截图\u003C\u002Fa> •\n  \u003Ca href=\"https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\">文档\u003C\u002Fa>\n\u003C\u002Fp>\n\n> [!NOTE]\n> **最新版本**: [v0.18.3](https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Freleases\u002Ftag\u002Fv0.18.3) — 支持启用\u002F禁用技能、技能子键配置以及自动提升权限升级。[所有版本 →](https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Freleases)\n\n## 为什么选择 skillshare\n\n每个 AI CLI 都有自己的技能目录。\n你在一个地方编辑后，可能忘记同步到其他地方，从而导致混乱。\n\nskillshare 解决了这一问题：\n\n- **一处源头，多端同步** — 使用 `skillshare sync` 将技能同步至 Claude、Cursor、Codex 等 50 多个工具。\n- **不止于技能** — 可通过 [extras](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Freference\u002Ftargets\u002Fconfiguration#extras) 管理规则、命令、提示词等任何基于文件的资源。\n- **多平台支持** — 可从 GitHub、GitLab、Bitbucket、Azure DevOps 或任何自托管 Git 仓库安装。\n- **内置安全机制** — 在使用前对技能进行审计，防止提示注入和数据泄露。\n- **团队友好** — 项目级技能可放置于 `.skillshare\u002F` 目录下，组织级技能则可通过跟踪的代码库管理。\n- **轻量本地化** — 单一二进制文件，无需注册中心或遥测功能，完全支持离线使用。\n- **精细过滤** — 使用 [`.skillignore`](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Fhow-to\u002Fdaily-tasks\u002Ffiltering-skills)、SKILL.md 的 `targets` 以及针对不同目标的包含\u002F排除规则，控制哪些技能会同步到哪些工具。\n\n> 从其他工具迁移过来？[迁移指南](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Fhow-to\u002Fadvanced\u002Fmigration) · [对比](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Funderstand\u002Fphilosophy\u002Fcomparison)\n\n## 工作原理\n\n- macOS \u002F Linux: `~\u002F.config\u002Fskillshare\u002F`\n- Windows: `%AppData%\\skillshare\\`\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                    源目录                         │\n│   ~\u002F.config\u002Fskillshare\u002Fskills\u002F    ← 技能 (SKILL.md)       │\n│   ~\u002F.config\u002Fskillshare\u002Fextras\u002F    ← 规则、命令等           │\n└─────────────────────────────────────────────────────────────┘\n                              │ 同步\n              ┌───────────────┼───────────────┐\n              ▼               ▼               ▼\n       ┌───────────┐   ┌───────────┐   ┌───────────┐\n       │  Claude   │   │  OpenCode │   │ OpenClaw  │   ...\n       └───────────┘   └───────────┘   └───────────┘\n```\n\n| 平台 | 技能源 | 其他资源源 | 链接类型 |\n|----------|---------------|---------------|-----------|\n| macOS\u002FLinux | `~\u002F.config\u002Fskillshare\u002Fskills\u002F` | `~\u002F.config\u002Fskillshare\u002Fextras\u002F` | 符号链接 |\n| Windows | `%AppData%\\skillshare\\skills\\` | `%AppData%\\skillshare\\extras\\` | NTFS 连接点（无需管理员权限） |\n\n| | 命令式（逐次安装） | 声明式（skillshare） |\n|---|---|---|\n| **可信源** | 技能独立复制 | 单一源 → 符号链接（或副本） |\n| **新机器设置** | 手动重新执行每次安装 | 克隆配置 + `sync` |\n| **安全审计** | 无 | 内置 `audit` 功能，并在安装\u002F更新时自动扫描 |\n| **Web 控制面板** | 无 | `skillshare ui` |\n| **运行时依赖** | Node.js + npm | 无（单个 Go 二进制文件） |\n\n> [完整对比 →](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Funderstand\u002Fphilosophy\u002Fcomparison)\n\n## CLI 和 UI 预览\n\n| 技能详情 | 安全审计 |\n|---|---|\n| \u003Cimg src=\".github\u002Fassets\u002Fskill-detail-tui.png\" alt=\"CLI 同步输出\" width=\"480\" height=\"300\"> | \u003Cimg src=\".github\u002Fassets\u002Faudit-tui.png\" alt=\"带安全审计的 CLI 安装\" width=\"480\" height=\"300\"> |\n\n| UI 控制面板 | UI 技能列表 |\n|---|---|\n| \u003Cimg src=\".github\u002Fassets\u002Fui\u002Fweb-dashboard-demo.png\" alt=\"Web 控制面板概览\" width=\"480\"> | \u003Cimg src=\".github\u002Fassets\u002Fui\u002Fweb-skills-demo.png\" alt=\"Web UI 技能页面\" width=\"480\"> |\n\n## 安装\n\n### macOS \u002F Linux\n\n```bash\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Frunkids\u002Fskillshare\u002Fmain\u002Finstall.sh | sh\n```\n\n### Windows PowerShell\n\n```powershell\nirm https:\u002F\u002Fraw.githubusercontent.com\u002Frunkids\u002Fskillshare\u002Fmain\u002Finstall.ps1 | iex\n```\n\n### Homebrew\n\n```bash\nbrew install skillshare\n```\n\n> **提示**: 运行 `skillshare upgrade` 可以更新到最新版本。它会自动检测你的安装方式并完成后续操作。\n\n### GitHub Actions\n\n```yaml\n- uses: runkids\u002Fsetup-skillshare@v1\n  with:\n    source: .\u002Fskills\n- run: skillshare sync\n```\n\n更多选项（如安全审计、项目模式、版本锁定等），请参阅 [`setup-skillshare`](https:\u002F\u002Fgithub.com\u002Fmarketplace\u002Factions\u002Fsetup-skillshare)。\n\n### 快捷方式（可选）\n\n在你的 shell 配置文件中添加别名（例如 `~\u002F.zshrc` 或 `~\u002F.bashrc`）：\n\n```bash\nalias ss='skillshare'\n```\n\n## 快速入门\n\n```bash\nskillshare init            # 创建配置、源目录及检测到的目标\nskillshare sync            # 将技能同步到所有目标\n```\n\n## 亮点\n\n**安装与更新技能** — 从 GitHub、GitLab 或任何 Git 托管平台\n\n```bash\nskillshare install github.com\u002Freponame\u002Fskills\nskillshare update --all\nskillshare target claude --mode copy  # 如果符号链接不起作用\n```\n\n**符号链接有问题？** — 按目标切换到复制模式\n\n```bash\nskillshare target \u003Cname> --mode copy\nskillshare sync\n```\n\n**安全审计** — 在技能被你的代理使用之前进行扫描\n\n```bash\nskillshare audit\n```\n\n**项目技能** — 每个仓库独立，随代码一起提交\n\n```bash\nskillshare init -p && skillshare sync\n```\n\n**附加功能** — 管理规则、命令、提示等\n\n```bash\nskillshare extras init rules          # 创建一个“rules”附加功能\nskillshare sync --all                 # 同步技能和附加功能\nskillshare extras collect rules       # 将本地文件收集回源\n```\n\n**Web 控制面板** — 可视化控制台\n\n```bash\nskillshare ui\n```\n\n[所有命令与指南 →](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Freference\u002Fcommands)\n\n## 贡献\n\n欢迎贡献！请先打开一个问题，然后提交带有测试的草稿 PR。设置详情请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare.git && cd skillshare\nmake check  # 格式化 + 静态检查 + 测试\n```\n\n> [!TIP]\n> 不知道从哪里开始？浏览 [未解决的问题](https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fissues) 或尝试 [Playground](https:\u002F\u002Fskillshare.runkids.cc\u002Fdocs\u002Flearn\u002Fwith-playground)，这是一个无需设置的开发环境。\n\n## 贡献者\n\n感谢所有帮助塑造 skillshare 的人。\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fleeeezx\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_485884372580.png\" width=\"50\" style=\"border-radius:50%\" alt=\"leeeezx\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FVergil333\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_d960da4c4f9f.png\" width=\"50\" style=\"border-radius:50%\" alt=\"Vergil333\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fromanr\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_1676af28053d.png\" width=\"50\" style=\"border-radius:50%\" alt=\"romanr\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fxocasdashdash\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_6d98bae10aeb.png\" width=\"50\" style=\"border-radius:50%\" alt=\"xocasdashdash\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fphilippe-granet\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_7ee5de40ca09.png\" width=\"50\" style=\"border-radius:50%\" alt=\"philippe-granet\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fterranc\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_8203d4e55156.png\" width=\"50\" style=\"border-radius:50%\" alt=\"terranc\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbenrfairless\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_81e9f43c9e6e.png\" width=\"50\" style=\"border-radius:50%\" alt=\"benrfairless\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnerveband\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_198640af9ba0.png\" width=\"50\" style=\"border-radius:50%\" alt=\"nerveband\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FEarthChen\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_25751ccf7a2c.png\" width=\"50\" style=\"border-radius:50%\" alt=\"EarthChen\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgdm257\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_b31ee93984c9.png\" width=\"50\" style=\"border-radius:50%\" alt=\"gdm257\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fskovtunenko\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_03a0817f97ce.png\" width=\"50\" style=\"border-radius:50%\" alt=\"skovtunenko\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FTyceHerrman\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_295cf36b557b.png\" width=\"50\" style=\"border-radius:50%\" alt=\"TyceHerrman\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002F1am2syman\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_6203b52c1c9c.png\" width=\"50\" style=\"border-radius:50%\" alt=\"1am2syman\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fthealokkr\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_57d46664e684.png\" width=\"50\" style=\"border-radius:50%\" alt=\"thealokkr\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FJasonLandbridge\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_7e77b058bfdf.png\" width=\"50\" style=\"border-radius:50%\" alt=\"JasonLandbridge\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmasonc15\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_eed5f67e9612.png\" width=\"50\" style=\"border-radius:50%\" alt=\"masonc15\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frichardwhatever\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_221b967e3950.png\" width=\"50\" style=\"border-radius:50%\" alt=\"richardwhatever\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Freneleonhardt\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_0b4a69afe042.png\" width=\"50\" style=\"border-radius:50%\" alt=\"reneleonhardt\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fndeybach\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_16b904413f74.png\" width=\"50\" style=\"border-radius:50%\" alt=\"ndeybach\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsalmonumbrella\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_96a66060eefb.png\" width=\"50\" style=\"border-radius:50%\" alt=\"salmonumbrella\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdaylamtayari\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_a37642740b78.png\" width=\"50\" style=\"border-radius:50%\" alt=\"daylamtayari\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdstotijn\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_059a0d419f94.png\" width=\"50\" style=\"border-radius:50%\" alt=\"dstotijn\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fipruning\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_52966924ffbf.png\" width=\"50\" style=\"border-radius:50%\" alt=\"ipruning\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fkevincobain2000\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_28a66da71b7b.png\" width=\"50\" style=\"border-radius:50%\" alt=\"kevincobain2000\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FStephenPAdams\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_5dbf13a8cf44.png\" width=\"50\" style=\"border-radius:50%\" alt=\"StephenPAdams\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmk-imagine\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_63c201088004.png\" width=\"50\" style=\"border-radius:50%\" alt=\"mk-imagine\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCurtion\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_39334c914ffb.png\" width=\"50\" style=\"border-radius:50%\" alt=\"Curtion\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Famdoi7\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_742acec6b912.png\" width=\"50\" style=\"border-radius:50%\" alt=\"amdoi7\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjessica-engel\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_64c75a216fbc.png\" width=\"50\" style=\"border-radius:50%\" alt=\"jessica-engel\">\u003C\u002Fa>\n\n---\n\n如果你觉得 skillshare 很有用，请考虑给它点个赞 ⭐\n\n## 星标历史\n\n[![星标历史图表](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_readme_f233277b3d57.png)](https:\u002F\u002Fwww.star-history.com\u002F#runkids\u002Fskillshare&type=date&legend=top-left)\n\n---\n\n## 许可证\n\nMIT","# Skillshare 快速上手指南\n\nSkillshare 是一个统一的 AI CLI 技能管理工具，支持将技能、规则、命令等同步到 Claude Code、Cursor、Codex、OpenCode 等 50+ 种 AI 代理中。它通过单一源文件管理，实现跨平台、跨项目的技能同步。\n\n## 环境准备\n\n- **操作系统**：macOS、Linux 或 Windows\n- **前置依赖**：无（单二进制文件，无需 Node.js 或其他运行时）\n- **网络要求**：首次安装需访问 GitHub；后续可完全离线使用\n- **权限要求**：普通用户权限即可（Windows 下使用 NTFS  Junction，无需管理员）\n\n> 💡 国内用户若遇到 GitHub 下载慢的问题，可自行配置 Git 镜像或使用代理加速安装脚本的下载。\n\n## 安装步骤\n\n### macOS \u002F Linux\n\n```bash\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Frunkids\u002Fskillshare\u002Fmain\u002Finstall.sh | sh\n```\n\n### Windows (PowerShell)\n\n```powershell\nirm https:\u002F\u002Fraw.githubusercontent.com\u002Frunkids\u002Fskillshare\u002Fmain\u002Finstall.ps1 | iex\n```\n\n### Homebrew (macOS)\n\n```bash\nbrew install skillshare\n```\n\n### 验证安装\n\n```bash\nskillshare --version\n```\n\n> 💡 建议添加别名方便使用：\n> ```bash\n> echo \"alias ss='skillshare'\" >> ~\u002F.zshrc  # 或 ~\u002F.bashrc\n> source ~\u002F.zshrc\n> ```\n\n## 基本使用\n\n### 1. 初始化配置\n\n创建本地配置目录并自动检测已安装的 AI 工具：\n\n```bash\nskillshare init\n```\n\n如需为当前项目创建独立技能配置（配合 `.skillshare\u002F` 目录）：\n\n```bash\nskillshare init -p\n```\n\n### 2. 安装技能\n\n从 GitHub 仓库安装技能包：\n\n```bash\nskillshare install github.com\u002Freponame\u002Fskills\n```\n\n更新所有已安装技能：\n\n```bash\nskillshare update --all\n```\n\n### 3. 同步技能\n\n将技能同步到所有检测到的 AI 代理（如 Claude、Cursor 等）：\n\n```bash\nskillshare sync\n```\n\n若某目标不支持软链接，可切换为复制模式：\n\n```bash\nskillshare target claude --mode copy\nskillshare sync\n```\n\n### 4. 安全审计（可选）\n\n在应用前扫描技能是否存在提示注入或数据泄露风险：\n\n```bash\nskillshare audit\n```\n\n### 5. 启动 Web 仪表盘（可选）\n\n可视化查看和管理技能：\n\n```bash\nskillshare ui\n```\n\n---\n\n完成以上步骤后，你的 AI 技能已统一同步至所有支持的代理工具。后续只需维护 `~\u002F.config\u002Fskillshare\u002F`（macOS\u002FLinux）或 `%AppData%\\skillshare\\`（Windows）下的源文件，再次运行 `skillshare sync` 即可全局更新。","某后端开发团队正在同时使用 Codex、Claude Code 和 Cursor 等多种 AI 命令行工具进行微服务重构，急需统一团队的代码规范与安全提示词。\n\n### 没有 skillshare 时\n- **配置分散难维护**：每位成员的每种 AI 工具都有独立的技能目录，修改一个安全规则需要手动复制粘贴到五六个不同文件夹，极易遗漏。\n- **团队标准不一致**：新人入职后，资深工程师编写的最佳实践提示词无法自动同步到新人的本地环境，导致不同成员生成的代码风格迥异。\n- **安全隐患难察觉**：缺乏统一审计机制，团队成员可能无意中使用了包含提示词注入漏洞的旧版技能文件，且难以追溯来源。\n- **多平台同步繁琐**：在 macOS 开发机和 Linux 服务器之间切换时，需反复通过 U 盘或私有脚本来搬运配置文件，效率低下且容易出错。\n\n### 使用 skillshare 后\n- **一键全局同步**：只需运行 `skillshare sync`，即可将统一的技能库自动分发到团队所有成员的 Codex、Claude Code 等 50+ 种工具中，彻底消除手动复制。\n- **单一事实来源**：将团队规范托管在 Git 仓库中，新人初始化环境后自动拉取最新规则，确保所有人使用的提示词和代码标准完全一致。\n- **内置安全审计**：在同步前自动扫描技能文件，拦截潜在的提示词注入和数据泄露风险，让团队放心复用共享资源。\n- **灵活精细管控**：通过 `.skillignore` 和项目级配置，轻松控制哪些通用技能适用于全公司，哪些特定技能仅在当前微服务项目中生效。\n\nskillshare 通过将分散的 AI 配置转化为可版本控制的“单一事实来源”，让团队能以最低成本实现 AI 协作能力的标准化与安全化。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frunkids_skillshare_193c1743.png","runkids","Willie","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Frunkids_bbd2b8d3.png","👨🏻‍💻 ꜰʀᴏɴᴛᴇɴᴅ ᴅᴇᴠᴇʟᴏᴘᴇʀ\r\n🤖 ᴀɪ-ʙᴜɪʟᴅᴇʀ",null,"https:\u002F\u002Fgithub.com\u002Frunkids",[82,86,90,94,98,102,105,108,111],{"name":83,"color":84,"percentage":85},"Go","#00ADD8",76.5,{"name":87,"color":88,"percentage":89},"TypeScript","#3178c6",18.7,{"name":91,"color":92,"percentage":93},"Shell","#89e051",2.8,{"name":95,"color":96,"percentage":97},"CSS","#663399",1.6,{"name":99,"color":100,"percentage":101},"PowerShell","#012456",0.1,{"name":103,"color":104,"percentage":101},"Dockerfile","#384d54",{"name":106,"color":107,"percentage":101},"Makefile","#427819",{"name":109,"color":110,"percentage":101},"JavaScript","#f1e05a",{"name":112,"color":113,"percentage":114},"HTML","#e34c26",0,1319,71,"2026-04-04T04:18:49","MIT",1,"Linux, macOS, Windows","未说明",{"notes":123,"python":124,"dependencies":125},"该工具是基于 Go 语言编写的单二进制文件，无需安装 Python、Node.js 或其他运行时依赖。在 macOS\u002FLinux 上通过符号链接（Symlinks）同步技能，在 Windows 上使用 NTFS 连接点（无需管理员权限）。支持完全离线运行，无遥测数据收集。","不需要",[],[26,15,13,53,14],[128,129,130,131,132,133,134,67,135,136,137,138,139,140,141,142,143,144,145,146],"ai","cli","codex","cursor","skills","team-management","skills-management","cross-machine-sync","claude-code","openclaw","skills-ui","skills-audit","skills-manager","gemini","copilot","go","gui","codex-skills","agenthub","2026-03-27T02:49:30.150509","2026-04-06T05:17:03.708707",[150,155,160,165,170,175,180],{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},14387,"如何手动添加 GitHub Copilot CLI 作为技能目标？","由于 Copilot CLI 不会预先创建 `~\u002F.copilot\u002F` 目录，自动发现功能可能无法检测到它。解决方法是手动运行一次 Copilot CLI 以创建目录，或者手动创建目录并添加目标：\n1. 运行命令创建目录：`mkdir -p ~\u002F.copilot\u002Fskills`\n2. 将 copilot 添加为目标：`skillshare target add copilot ~\u002F.copilot\u002Fskills`\n后续版本将改进对此类代理的发现流程。","https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fissues\u002F50",{"id":156,"question_zh":157,"answer_zh":158,"source_url":159},14388,"GitHub Copilot CLI 无法识别通过 skillshare 同步的技能（符号链接问题）怎么办？","这通常是因为 Copilot CLI 对符号链接（symlinks）的处理限制。解决方案有两种：\n1. **使用复制模式（推荐）**：在 v0.15.0+ 版本中，可以将同步模式切换为“复制”，使技能作为真实文件同步而非符号链接。\n   命令：\n   ```bash\n   skillshare target copilot --mode copy\n   skillshare sync\n   ```\n2. **更新版本**：较新版本的 Copilot CLI (0.1.x+) 已改善了对符号链接的支持，可先尝试默认模式，若仍无效再切换为复制模式。","https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fissues\u002F2",{"id":161,"question_zh":162,"answer_zh":163,"source_url":164},14389,"是否支持通过 Mise 包管理器安装此工具？","是的，该工具已通过 Aqua Registry 支持 Mise 安装。用户可以通过提交到 aqua registry 的方式使其可用（参考 PR: https:\u002F\u002Fgithub.com\u002Faquaproj\u002Faqua-registry\u002Fpull\u002F48654）。如果在 mise search 中找不到，请确保您的 registry 已更新或检查相关 PR 的合并状态。","https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fissues\u002F17",{"id":166,"question_zh":167,"answer_zh":168,"source_url":169},14390,"如何在反向代理后配置 UI 的 BASE PATH？","该工具支持为 UI 设置 BASE PATH 以适应反向代理场景。虽然具体配置参数未在对话中详细列出，但维护者确认该功能已实现且用户反馈“像魔法一样有效（Works like charm）”。通常此类配置可通过环境变量或启动参数（如 `--base-path`）设置，建议查阅最新文档或尝试常见配置项。","https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fissues\u002F85",{"id":171,"question_zh":172,"answer_zh":173,"source_url":174},14391,"除了技能（skills），是否支持同步其他类型的文件（如 agents, commands, rules）？","是的，项目计划并已开始支持同步更多类型的定义文件，例如 `.claude\u002Fagents\u002F`、commands 和 rules 等。这使得用户在切换电脑或在多个 AI 助手间迁移时更加便捷。具体支持的文件类型和配置方式请参考最新版本的文档或发布说明。","https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fissues\u002F59",{"id":176,"question_zh":177,"answer_zh":178,"source_url":179},14392,"是否可以跟踪多个不同的代码仓库或同一仓库的不同分支？","是的，从 v0.18.4 版本开始，支持跟踪多个仓库以及同一仓库的不同分支。\n- **多仓库**：可以多次使用 `--track` 参数指向不同的仓库 URL。\n- **多分支**：使用 `--branch` 或 `-b` 参数指定分支。\n示例：\n```bash\nskillshare --track github.com\u002Fmy\u002Fskills\nskillshare --track github.com\u002Fmy\u002Fskills --branch=frontend\nskillshare --track github.com\u002Fmy2\u002Fskills2\n```\n这允许团队内部构建技能市场，从不同来源拉取技能。","https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fissues\u002F111",{"id":181,"question_zh":182,"answer_zh":183,"source_url":154},14393,"为什么某些代理（如 Cursor）在 clean install 下没有被 --discover 发现？","`--discover` 命令通过检查代理的父目录（例如 `~\u002F.cursor\u002F`）是否存在来工作。如果在干净的安装环境中这些目录不存在（即未运行过相关工具或安装扩展），则不会被发现。这不是平台问题（Windows ARM64 等已确认正常），而是检测机制依赖目录存在性。解决方法是先运行一次对应的 AI 工具以创建目录，或手动创建目录后再运行 discover。",[185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275,280],{"id":186,"version":187,"summary_zh":188,"released_at":189},81154,"v0.18.6","# Skillshare v0.18.6 发行说明\n\n发布日期：2026-04-01\n\n## 简而言之\n\n1. **卸载后的注册表清理** — 通过 Web UI 批量卸载时，现在能够正确移除 `registry.yaml` 中的嵌套技能条目\n2. **同步会清除过时的注册表条目** — `skillshare sync` 会自动清理磁盘上已不存在的技能对应的注册表条目\n3. **界面优化** — 卸载页面搜索、路径显示以及更新页面的清理工作\n\n---\n\n## 卸载后的注册表清理\n\n此前，通过 Web UI 进行批量卸载时，无法移除嵌套或分组技能（例如 `frontend\u002Fvue\u002Fvue-best-practices`）在 `registry.yaml` 中的条目。原因是 API 处理程序使用的是扁平化的名称（`frontend__vue__vue-best-practices`）进行匹配，而注册表中存储的是带有 `\u002F` 的路径名称。这导致了过时条目不断累积。\n\n现在，处理程序会跟踪每个成功移除技能的完整解析路径，因此无论嵌套层级如何，注册表条目都能被准确地清理干净。\n\n## 同步会清除过时的注册表条目\n\n`skillshare sync`（CLI 和 Web UI）现在会自动移除源目录中已不存在的技能在 `registry.yaml` 中的条目。这适用于那些未使用 `uninstall` 命令而直接从磁盘上手动删除技能的情况。\n\n```bash\nrm -rf ~\u002F.config\u002Fskillshare\u002Fskills\u002Fsome-old-skill\nskillshare sync    # some-old-skill 对应的 registry.yaml 条目会被自动移除\n```\n\n被 `.skillignore` 隐藏的技能将被保留——只有源目录确实已不存在的条目才会被清理掉。\n\n## 界面优化\n\n- **卸载页面搜索** — 现在支持纯文本子字符串匹配（例如输入 `matt` 可以找到 `mattpocock\u002Ftdd`）。如果包含 `*` 或 `?`，则仍可使用通配符模式（如 `*matt*` 或 `frontend\u002F*`）\n- **卸载页面路径显示** — 确认对话框和结果摘要中会显示 `frontend\u002Fvue\u002Fvue-best-practices`，而不是 `frontend__vue__vue-best-practices`\n- **更新页面** — 当所有内容均已处于最新状态时，移除了冗余的“0 个仓库和 20 个技能已为最新”这一行\n\n## 更改日志\n* a570670a92d8e5dd75ff033ad9621453db72ed55 修复：卸载及同步后的注册表清理、界面优化\n\n","2026-04-01T14:39:58",{"id":191,"version":192,"summary_zh":193,"released_at":194},81155,"v0.18.5","# Skillshare v0.18.5 发行说明\n\n发布日期：2026-04-01\n\n## 简而言之\n\n1. **所有命令支持 `--help`** —— 现在，只要传递 `--help` 或 `-h`，每个 CLI 命令都会显示用法信息，而不会误执行该命令。\n\n---\n\n## 所有命令支持 `--help`\n\n现在，所有 CLI 命令都支持 `--help` \u002F `-h` 选项，并会显示包含可用标志和示例的使用信息。此前，有 7 个命令（`push`、`pull`、`sync`、`status`、`collect`、`doctor`、`ui`）不会检查 `--help` 参数，因此运行例如 `skillshare push --help` 实际上会将内容推送到远程仓库，而不是显示帮助信息。\n\n```bash\nskillshare push --help     # 显示用法、标志和示例\nskillshare sync -h         # 显示 --dry-run、--force、--json 等选项\nskillshare ui --help       # 显示 --port、--host、--no-open 等选项\n```\n\n每个命令的帮助输出包括：\n- 命令功能的简要描述\n- 所有可用标志及其简短说明\n- 使用示例\n\n此功能的实现源于 [#113](https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fissues\u002F113)。\n\n## 更改日志\n* 3f7cfc7fbcc6ad2c82c1ab0cbe3890bb9cfe4a0b 功能：为所有命令添加 `--help` 支持\n\n","2026-04-01T06:31:50",{"id":196,"version":197,"summary_zh":198,"released_at":199},81156,"v0.18.4","# Skillshare v0.18.4 发行说明\n\n发布日期：2026-03-31\n\n## 简而言之\n\n1. **分支支持** — `skillshare install` 命令新增 `--branch` \u002F `-b` 标志，允许从任意分支克隆，并提供完整的生命周期支持（更新、检查、注册表重建）。\n2. **目标命名模式** — 新增 `target_naming` 配置项，可选择扁平化目录名（`flat`）或符合 Agent Skills 规范的裸名（`standard`）。\n3. **同步准确性** — “目标”页面现在会显示准确的技能数量，并说明为何某些技能被跳过（命名冲突、碰撞）。\n4. **文件夹树形视图** — “技能”页面的文件夹布局现已变为真正的树形结构，支持展开\u002F折叠、固定表头以及虚拟化渲染。\n5. **GitHub Actions** — 通过 `setup-skillshare@v1` 可实现一步式 CI 配置。\n\n---\n\n## 分支支持\n\n`skillshare install` 命令新增 `--branch` \u002F `-b` 标志，允许从指定的 Git 分支而非远程默认分支进行克隆：\n\n```bash\nskillshare install github.com\u002Fteam\u002Fskills --branch develop --all\nskillshare install github.com\u002Fteam\u002Fskills --track --branch frontend\n```\n\n此功能适用于已跟踪的仓库和普通技能安装。分支信息会持久化存储在元数据中，因此 `skillshare update` 和 `skillshare check` 会自动使用正确的分支，无需再次指定。\n\n若需在同一仓库的不同分支上安装多个目标，可使用 `--name` 参数避免命名冲突：\n\n```bash\nskillshare install github.com\u002Fteam\u002Fskills --track --branch frontend --name team-frontend\nskillshare install github.com\u002Fteam\u002Fskills --track --branch backend --name team-backend\n```\n\nWeb UI 的安装表单在检测到 Git URL 时，会在“源”字段旁直接显示“分支”输入框。“技能”页面的卡片上会显示分支标签，“技能详情”页面的元数据部分也会包含分支信息。\n\n## 同步准确性\n\n“目标”页面现在会显示准确的预期技能数量。此前，使用 `standard` 命名模式的目标可能会显示误导性的数字，例如“39032\u002F64075 已共享”——其中 64075 包括因名称冲突或验证失败而被静默丢弃的技能，而实际同步成功的只有 39032 个。\n\n现在，预期数量反映了同步真正解析的结果；“目标”页面和“同步”页面会在有技能被跳过时显示摘要信息（如“跳过 12345 个技能，存在 456 处名称冲突”），并建议切换至 `flat` 命名模式以包含所有技能。\n\n此外，CLI 的 `sync` 命令不再向终端大量输出每项技能的验证警告，而是以简洁的汇总行形式呈现。\n\n## 目标命名模式\n\n新增 `target_naming` 配置选项，用于控制同步后技能目录在目标中的命名方式：\n\n```yaml\ntarget_naming: standard\ntargets:\n  claude:\n    skills:\n      target_naming: flat  # 目标级别的覆盖设置\n```\n\n在 `flat` 模式下（默认行为，未更改），嵌套技能如 `frontend\u002Fdev` 在目标中会变为 `frontend__dev`。而在 `standard` 模式下，则直接使用 SKILL.md 文件中的 `name` 字段（例如 `dev`），随","2026-03-31T17:12:51",{"id":201,"version":202,"summary_zh":203,"released_at":204},81157,"v0.18.3","# 🛠️ skillshare v0.18.3 发行说明\n\n发布日期：2026-03-29\n\n## 简而言之\n\n1. **启用\u002F禁用** — 新增命令 + TUI 的 `E` 键 + Web UI 按钮，用于临时隐藏技能以避免同步\n2. **技能子键** — 目标配置支持专用的 `skills` 子键，并提供自动迁移功能\n3. **升级自动提升权限** — 受保护安装路径下不再需要手动执行 `sudo skillshare upgrade` (#105)\n4. **差异修复** — `diff` 不再为 `targets` 值不支持的技能显示虚假的“仅源”条目\n5. **收集修复** — 修正模式继承及过时清单处理问题\n\n---\n\n## 启用\u002F禁用技能\n\n新增两个命令可让您在不卸载技能的情况下，临时将其从同步中隐藏：\n\n```bash\nskillshare disable draft-*        # 将模式添加到 .skillignore 文件\nskillshare enable draft-*         # 从 .skillignore 文件中移除该模式\n```\n\n被禁用的技能仍保留在您的源目录中，但会被排除在 `sync` 和 `collect` 操作之外。这两个命令均支持 `--project` \u002F `--global` 模式以及 `--dry-run` 预览。\n\n在交互式的 `skillshare list` TUI 中，按下 **E** 键即可在不退出界面的情况下切换所选技能的启用或禁用状态。Web UI 中的技能详情页面也提供了一个切换按钮，后端由新的 REST API 端点支持。\n\n切换后，请运行 `skillshare sync` 以将更改应用到目标。\n\n## 目标配置 — 技能子键\n\n目标配置现在支持一个嵌套的 `skills` 子键，该子键拥有自己的 `path`、`mode`、`include` 和 `exclude` 设置。这使您能够针对每个目标，独立于顶层目标配置，明确控制与技能相关的同步行为。\n\n使用扁平字段的现有配置将在首次加载时自动迁移到新结构，无需手动编辑。\n\n## 升级自动提升权限\n\n`skillshare upgrade` 现在会在尝试升级之前检查二进制文件所在目录的写入权限。如果该目录受到保护（例如 `\u002Fusr\u002Flocal\u002Fbin`），CLI 会透明地以 `sudo` 重新执行自身。不再出现“权限拒绝”错误——只需在必要时输入 sudo 密码即可。\n\n## 差异修复\n\n`diff`（CLI、TUI 和 Web UI）现在会应用与 `sync` 相同的 SKILL.md `targets` 字段过滤规则。此前，对于 `targets` 值不支持的技能（例如 `targets: [\"*\"]`），它们会作为“仅源”待处理项显示，而运行 `sync` 也无法解决这一问题，从而造成混淆。现在，这些技能将被正确地排除在差异结果之外。\n\n## 其他错误修复\n\n- 修复了 `collect` 中的模式继承问题：当目标从全局配置继承同步模式时，`collect` 现在能够正确解析有效模式，而不会默认为 `merge`。\n- 修复了 `collect` 中的过时清单问题：在将目标模式从 `copy` 切换到 `merge` 后，`collect` 不再因残留的清单而跳过本地技能。\n- 修复了 `pull` 在信息提示中显示 `git stash` 而非 `git stash -u` 的问题。\n- 配置迁移现采用原子写入临时文件后再重命名的方式，以防止磁盘错误导致文件损坏。\n\n## 更改日志\n* 7a247dd0862f9165","2026-03-28T21:25:47",{"id":206,"version":207,"summary_zh":208,"released_at":209},81158,"v0.18.2","# 💅 Skillshare v0.18.2 发行说明\n\n发布日期：2026年3月28日\n\n## 简而言之\n\n1. **更新页面进度条** — 批量更新时显示实时固定进度条及预计剩余时间\n2. **自动滚动** — 更新列表会自动跟随当前正在更新的项目\n3. **清理过时技能** — 一键移除其仓库子目录已不存在的技能\n4. **分析与安装界面优化** — 更好的技能选择器、更智能的工具提示以及错误修复\n\n---\n\n## 更新页面改进\n\n更新页面新增了三项提升使用体验的功能：\n\n**固定进度条** — 在执行批量更新时，页面顶部现在会显示一个包含百分比、已完成\u002F总数量以及预计剩余时间的进度条。无论您如何滚动项目列表，该进度条都会始终固定在页面顶部。\n\n**自动滚动** — 当每个项目开始更新时，页面会自动滚动以将其居中显示。您无需再手动滚动长长的技能列表来查看更新进度。\n\n**清理过时技能按钮** — 如果某个技能因上游仓库中其子目录已被移除而无法更新（例如，稀疏检出路径已不存在），则不再显示强制重试按钮，而是出现一个“清理”按钮。点击该按钮即可一键卸载该过时技能。此按钮能够检测服务器可能返回的两种错误类型。\n\n此外，更新失败的项目将显示浅红色背景，错误信息也以红色高亮显示，以便更清晰地识别；被阻塞的项目则会以橙色突出显示。\n\n## 分析与安装界面优化\n\n- 技能选择模态框（安装和分析页面均使用）现在会在打开时自动聚焦搜索框，并提供更清晰的描述，同时改善键盘导航体验。\n- 仪表板上的工具提示现在会跟随光标位置，并确保始终位于视口范围内，避免被裁剪。\n- 修复了当目标没有技能时分析页面发生的崩溃问题。\n- 修复了技能详情对话框中多余的路径行。\n- 修复了成功安装后安装源字段未清空的问题。\n\n## 变更日志\n* 44420a8b847edfa0cfba0ff85e4b66b2841aa873 feat(ui): 改进分析展示、安装选择器及工具提示的用户体验\n* 56bffa7d2545e2e10c84cce0ef8c2ddd0e560b8c feat(ui): 通过固定进度条、自动滚动和清理功能优化更新页面\n* bb029f79506e69a79919c184890c1a76fc33483a fix(analyze): 处理 API 响应中目标数组为 null 的情况\n* e2106ba06f3062edad9808be47e9b6cb087f9ba7 fix(analyze): 移除技能详情对话框中的冗余路径行\n* a5b2425565ceb9ff6929f54768a29696ecc699cd refactor(ui): 将 UpdatePage 中的辅助函数提取出来，以提高代码复用性和正确性\n\n","2026-03-27T19:07:13",{"id":211,"version":212,"summary_zh":213,"released_at":214},81159,"v0.18.1","# 🔍 skillshare v0.18.1 发行说明\n\n发布日期：2026-03-27\n讨论：https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fdiscussions\u002F99\n\n## 简而言之\n\n1. **`--filter` 用于 analyze** — 可以在 CLI、TUI 和 JSON 输出中按技能名称或组路径过滤技能\n2. **动态令牌小计** — 实时查看筛选后的技能集需要多少令牌\n3. **注册表移至源目录** — `registry.yaml` 现在移动到 skills 目录下，以便 `git sync` 能够保留它\n4. **`init --remote` 更智能** — 当远程仓库已包含技能时，会跳过选择技能的提示\n\n---\n\n## Analyze 过滤功能\n\n`skillshare analyze` 现在支持 `--filter` 参数，用于将结果缩小到特定技能子集。该过滤器是基于技能相对路径的不区分大小写的子字符串匹配，其中包含从 `--into` 指定的组目录。\n\n```bash\n# 我的前端技能需要多少令牌？\nskillshare analyze claude --json --filter frontend\n\n# 预填充 TUI 搜索框\nskillshare analyze --filter marketing\n```\n\n当 `--filter` 与 `--json` 一起使用时，输出格式会变为一个包含 `filtered_summary` 的扁平对象：\n\n```json\n{\n  \"filter\": \"frontend\",\n  \"matched_count\": 5,\n  \"total_count\": 50,\n  \"filtered_summary\": {\n    \"always_loaded\": { \"chars\": 2400, \"tokens\": 600 },\n    \"on_demand\": { \"chars\": 8000, \"tokens\": 2000 },\n    \"total\": { \"chars\": 10400, \"tokens\": 2600 }\n  },\n  \"skills\": [...]\n}\n```\n\n在 TUI 模式下，`--filter` 会预填充过滤输入框。统计行会动态更新，显示“5\u002F50 技能”，并为当前可见的技能集提供始终加载、按需加载和总令牌数的汇总。\n\nWeb UI 在技能表格上方也会显示一个摘要栏，当搜索或 lint 过滤器处于激活状态时。该栏会平滑地淡入淡出。\n\n## 注册表位置\n\n`registry.yaml`（用于跟踪已安装和已追踪的技能）已从 `~\u002F.config\u002Fskillshare\u002Fregistry.yaml` 移至 `~\u002F.config\u002Fskillshare\u002Fskills\u002Fregistry.yaml` — 即源目录内。这意味着 `git sync` 现在会自动包含注册表，因此在跨设备共享配置时，已追踪技能的元数据将得以保留。\n\n首次运行时会自动完成迁移，无需手动操作。\n\n## init 改进\n\n`init --remote` 现在会在克隆的远程仓库已经包含技能时，跳过交互式的“选择要安装的技能”提示。由于远程仓库已经定义了技能集合，因此无需再进行选择。\n\n## 更改日志\n* ffdded311ff9ec601030befc6866447fc4b0ddee feat(analyze): 添加 --filter 标志，并在 JSON 输出中加入 filtered_summary\n* fb044d68a6ff8d3a2ccc57c24e61ccd12d1a4635 feat(analyze): 在 Web UI 中添加过滤后的令牌摘要栏\n* 2ba561f66764c3db06f1f26cb02590949c366013 feat(analyze): 在 TUI 统计行中显示动态令牌总数\n* a7de6a3a692728cf73c682ef54cf7c222e326d9d feat(registry): 将 registry.yaml 移至源目录以便 git sync (#103)\n* 0f7f6101fbe8bc052ca13c21521b408100e725f4 fix(analyze): 将图标组件引用传递给 EmptyState，而不是 JSX 元素\n* 1ceccb936c9f7f44023521ec04f25297184f8db6 fix(e2e): 添加 step_setup cd $HOME，以防止 wor","2026-03-26T18:38:17",{"id":216,"version":217,"summary_zh":218,"released_at":219},81160,"v0.18.0","# 📊 skillshare v0.18.0 发行说明\n\n发布日期：2026-03-26\n讨论：https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fdiscussions\u002F99\n\n## 简而言之\n\n1. **`skillshare analyze`** — 新增命令，用于衡量每个目标的上下文窗口 token 使用情况，并对技能质量进行 lint 检查\n2. **技能质量 lint** — 内置 7 条规则，可检测缺失字段、描述过短以及缺少触发短语等问题\n3. **Analyze TUI** — 交互式探索界面，支持切换目标、颜色标记、排序循环及 lint 图标显示\n4. **Web UI Analyze 页面** — 包含图表、表格和 token 细分的仪表盘\n5. **更新页面美化** — 固定搜索筛选器和 SplitButton 操作按钮\n\n---\n\n## Analyze 命令\n\n`skillshare analyze` 会计算您配置的每个目标下，各项技能所消耗的上下文窗口预算。它会报告两层内容：\n\n- **始终加载** — SKILL.md 前置元数据中的 `name` 和 `description`，AI 工具会在每次请求时加载这些内容，以决定触发哪些技能\n- **按需加载** — 前置元数据之后的技能主体内容，仅在技能被实际调用时才会加载\n\nToken 估算采用 `chars \u002F 4` 的近似值。\n\n```bash\nskillshare analyze               # 交互式 TUI（默认）\nskillshare analyze claude        # 单个目标的详细信息（自动启用详细模式）\nskillshare analyze --verbose     # 按目标列出前 10 大描述\nskillshare analyze --json        # JSON 输出，便于脚本处理\nskillshare analyze -p            # 项目模式\n```\n\n传递目标名称会自动启用详细输出。使用 `--no-tui` 可禁用交互式 TUI，直接输出纯文本。\n\n## 技能质量 Lint\n\n`analyze` 还会对所有发现的技能运行内置的 lint 引擎。该引擎会根据 `lint_rules.yaml` 中定义的 7 条规则，检查 SKILL.md 的结构和描述质量：\n\n| 规则 | 严重性 | 检查内容 |\n|------|----------|----------------|\n| `missing-name` | 错误 | `name` 字段为空或缺失 |\n| `missing-description` | 错误 | `description` 字段为空或缺失 |\n| `empty-body` | 错误 | 技能主体（前置元数据之后）为空 |\n| `description-too-short` | 警告 | 描述少于 50 个字符 |\n| `description-too-long` | 警告 | 描述超过 1024 字符限制 |\n| `description-near-limit` | 警告 | 描述介于 900–1024 字符之间 |\n| `no-trigger-phrase` | 警告 | 描述中缺少“当……时使用”之类的触发短语 |\n\nLint 问题会显示在 TUI 中技能名称旁（错误为 ✗，警告为 ⚠），并在 `--json` 输出中以每项技能的 `lint_issues` 形式呈现。这使得查找并修复那些可能无法被 AI 工具正确触发的技能变得十分便捷。\n\n## 交互式 TUI\n\n默认的 `analyze` 模式会启动一个全屏的气泡茶风格 TUI，包含以下内容：\n\n- **左侧面板** — 按 token 成本排序的技能列表，带有颜色编码的圆点（红色 = P75+，黄色 = P25–P75，绿色 = 低于 P25）\n- **右侧面板** — 详情视图，显示 token 细分、lint 质量问题、文件路径、跟踪状态以及描述预览\n- **底部栏** — 目标选择","2026-03-26T11:33:00",{"id":221,"version":222,"summary_zh":223,"released_at":224},81161,"v0.17.11","# 🚀 Skillshare v0.17.11 发行说明\n\n发布日期：2026年3月25日\n\n## 简而言之\n\n1. **Extras 展平** — extras 目标的全新 `flatten: true` 选项会将所有子目录中的文件直接同步到目标根目录，从而解决像 Claude Code 这样的 AI 工具只能发现顶级文件的问题。\n2. **完整 CLI 支持** — `extras init` 的 `--flatten` 选项，`extras mode` 的 `--flatten`\u002F`--no-flatten` 选项，以及 `extras list` 中的展平指示器。\n3. **TUI + Web UI** — 在初始化向导和 Extras 页面中添加展平切换开关，并对配置编辑器进行验证。\n\n---\n\n## Extras 展平\n\n像 Claude Code 的 `\u002Fagents` 这样的 AI CLI 工具只会发现其配置目录顶层的文件——它们不会递归进入子目录。如果你使用子目录来组织 extras 源文件（例如 `agents\u002Fcurriculum\u002F`、`agents\u002Fsoftware\u002F`），那么同步后的文件会出现在这些子目录中，工具就无法看到它们了。\n\n新的 `flatten` 选项可以解决这个问题：\n\n```yaml\nextras:\n  - name: agents\n    targets:\n      - path: ~\u002F.claude\u002Fagents\n        flatten: true\n```\n\n启用 `flatten: true` 后，`source\u002Fcurriculum\u002Ftactician.md` 将被同步到 `target\u002Ftactician.md`，而不是 `target\u002Fcurriculum\u002Ftactician.md`。\n\n**冲突处理**：当不同子目录中的文件具有相同的文件名时（例如 `team-a\u002Fagent.md` 和 `team-b\u002Fagent.md`），系统会按照路径的字母顺序选择第一个文件，后续出现的同名文件则会被跳过，并显示警告信息。\n\n**限制**：展平功能仅适用于 `merge` 和 `copy` 模式——它不能与 `symlink` 模式一起使用（因为 `symlink` 模式会链接整个目录）。\n\n## CLI 标志\n\n创建带有展平功能的新 extra：\n\n```bash\nskillshare extras init agents --target ~\u002F.claude\u002Fagents --flatten\n```\n\n为现有目标切换展平功能：\n\n```bash\nskillshare extras agents --flatten\nskillshare extras agents --no-flatten\n```\n\n现在，`extras list` 的输出会在启用了展平功能的目标模式旁边显示 `, flatten` 标识。\n\n## TUI\n\n`extras init` 的交互式向导在选择模式后，新增了一个“将文件展平到目标根目录吗？(y\u002FN)”提示。如果选择了 `symlink` 模式，则会自动跳过此步骤。\n\nExtras 列表的 TUI 新增了一个 `F` 键绑定，用于切换目标的展平功能。对于单目标的 extras，可以直接切换；而对于多目标的 extras，则会先显示一个目标选择器。\n\n## Web UI\n\nExtras 页面现在为每个目标都显示一个展平复选框——无论是在“添加 Extra”模态框中，还是在已存在的目标上。当模式为 `symlink` 时，该复选框会被禁用。YAML 配置编辑器会在 `flatten: true` 与 `mode: symlink` 组合时发出警告。\n\n## 配置编辑器 — 目标名称文档\n\n现在，在配置编辑器中点击目标名称时，会显示正确的“目标名称”字段说明。此前，点击 `targets` 下的 `name: claude` 时，会错误地显示同步模式的说明。短格式条目，如 `- agents`，同样会被识别，并显示相同的目标名称文档。\n\n## 更改记录\n* bda34d27afeda56a1ed2f2fd7c908e4d513db2d9 docs(cl","2026-03-25T13:22:36",{"id":226,"version":227,"summary_zh":228,"released_at":229},81162,"v0.17.10","## [0.17.10] - 2026-03-24\n\n### 新功能\n\n- **Web UI 中的更新通知** — 当有新版本的 CLI 或技能可用时，首次访问时会弹出一个对话框。显示当前版本和最新版本，并提供可复制的 `skillshare upgrade` 命令。每个浏览器会话仅提示一次\n\n### 错误修复\n\n- **技能卡片等高** — 技能页面上的技能卡片现在会在每行内拉伸至相同高度\n- **引导步骤目标修复** — 技能筛选器引导步骤现在能够正确高亮显示其目标元素\n\n## 更改日志\n* b93f437d8e977a03f6caf7065cdcc0b133b9da0f 特性(ui): 在 Web UI 中添加更新通知对话框\n* 690a625b3a46145e690ba215a43ab11456006dad 修复(ui): 为技能筛选器引导步骤添加缺失的 data-tour 属性\n* 053ecb428d2589e5b137d20aea2057e1fcac716c 修复(ui): 实现技能卡片等高，并改进主题参数的处理\n\n","2026-03-24T16:12:55",{"id":231,"version":232,"summary_zh":233,"released_at":234},81163,"v0.17.9","# Skillshare v0.17.9 发行说明\n\n发布日期：2026年3月20日\n\n## 简而言之\n\n1. **助手面板滚动** — 配置和审计规则编辑器面板现在具有固定高度的可滚动内容区域，高度与编辑器保持一致，均为500像素。\n2. **不再出现“未知目标”误报** — 配置中的目标名称由用户自定义；验证器不再将其标记为未知。\n3. **更丰富的 targets 字段文档** — `targets` 文档示例现已展示所有可用的子字段。\n4. **Filter Studio 虚拟滚动** — 技能预览列表采用虚拟化渲染技术，可在大型集合中实现流畅滚动。\n\n---\n\n## 助手面板滚动\n\n现在，配置页面和审计规则页面右侧的助手面板都拥有一个固定高度为500像素、可独立滚动的内容区域。此前，该面板会根据内容自动扩展，导致布局与左侧编辑器不一致。\n\n## 移除目标名称验证\n\n此前，配置编辑器会将目标名称与内置列表进行校验，并对任何未识别的名称显示“未知目标”警告。由于目标名称完全由用户自定义（您可以随意命名目标），这种验证会产生误报。现已彻底移除该验证功能——目前仅对每个目标下的字段值，如 `mode`，进行验证。\n\n## 更丰富的字段文档\n\n助手面板中 `targets` 字段的文档现提供了一个包含所有子字段的完整示例：\n\n```yaml\ntargets:\n  claude:\n    path: ~\u002F.claude\u002Fskills\n    mode: merge\n    include: [\"skill-a\", \"skill-b\"]\n    exclude: [\"debug-only\"]\n  cursor:\n    mode: symlink\n```\n\n## Filter Studio 虚拟滚动\n\nFilter Studio 中的技能预览列表现使用 `react-virtuoso` 实现虚拟滚动。只有可见的行才会被渲染到 DOM 中，且 `PreviewRow` 已包裹在 `memo` 中，以避免不必要的重新渲染。这显著提升了在筛选大型技能集合时的滚动性能。\n\n## 更改日志\n* 1c7bdcdd84c768567424e3f9774398c32135c039 新增（UI）：在 Extras 页面添加 Force 切换开关，并在同步后自动重置。\n* bfec6c8b362ffeecf864b3599fe3bdf258889147 新增（UI）：读取 URL 中的 ?theme= 参数以设置样式和模式。\n* 7e5a058f7b40531554db6f6f8f03b11886dc8b2c 新增（UI）：将 Force 操作统一为 SplitButton 组件。\n* ed8596fc7e002bcec6851e328384dec03236b7ff 修复（服务器）：修复 extras 同步响应键，并添加读锁。\n* 5198a7428714b9efcff1ad9457da5c81d4e6d5ee 修复（UI）：修复助手面板滚动问题，移除错误的目标警告，并新增虚拟滚动功能。","2026-03-20T10:36:03",{"id":236,"version":237,"summary_zh":238,"released_at":239},81164,"v0.17.8","# 🚀 skillshare v0.17.8 Release Notes\r\n\r\nRelease date: 2026-03-19\r\n\r\n## TL;DR\r\n\r\n1. **Configurable extras source** — extras source paths are no longer hardcoded; use `extras_source` or per-extra `source` in config\r\n2. **`extras source` command** — show or set `extras_source` from the CLI without editing config manually\r\n3. **`--force` for `extras init`** — overwrite an existing extra without needing `extras remove` first\r\n4. **`--source` flag** — `extras init --source \u003Cpath>` sets a custom source directory per extra (global mode only)\r\n5. **Source type tracking** — `extras list --json` shows which level resolved each extra's source path\r\n6. **Web UI source support** — create extras with custom source from the dashboard\r\n7. **Config editor assistant panel** — right-side panel with field docs, structure tree, real-time validation, and diff preview\r\n8. **Audit rules assistant panel** — same panel for the audit rules YAML editor, plus inline regex tester\r\n9. **Tracked repo ignores fix** — ignored skills from tracked repos now visible even without root `.skillignore`\r\n\r\n---\r\n\r\n## Configurable Extras Source Paths\r\n\r\nPreviously, extras source directories were always derived from the skills source path — users who set a custom `source` in config.yaml couldn't control where extras were read from. Now extras support a three-level priority chain:\r\n\r\n```yaml\r\nextras_source: ~\u002Fmy-extras               # global default for all extras\r\nextras:\r\n  - name: rules\r\n    source: ~\u002Fcompany-shared\u002Frules       # per-extra override (highest priority)\r\n    targets:\r\n      - path: ~\u002F.claude\u002Frules\r\n  - name: commands                        # uses extras_source → ~\u002Fmy-extras\u002Fcommands\u002F\r\n    targets:\r\n      - path: ~\u002F.cursor\u002Fcommands\r\n```\r\n\r\nPriority: per-extra `source` > `extras_source` > default (`~\u002F.config\u002Fskillshare\u002Fextras\u002F\u003Cname>\u002F`).\r\n\r\nAll extras commands respect the resolved path: `sync extras`, `extras collect`, `doctor`, `status`, and `diff` all use the correct custom source directory.\r\n\r\n---\r\n\r\n## CLI: `--source` Flag and TUI Phase\r\n\r\n`extras init` now accepts `--source` to specify a custom source directory:\r\n\r\n```bash\r\nskillshare extras init rules --target ~\u002F.claude\u002Frules --source ~\u002Fcompany-shared\u002Frules\r\n```\r\n\r\nThe interactive TUI wizard also includes a new source directory step between name and target input. Leave it empty to use the default path.\r\n\r\nNote: `--source` is only supported in global mode. Using it with `-p` now returns a clear error instead of silently ignoring the flag.\r\n\r\n---\r\n\r\n## CLI: `extras source` Command\r\n\r\nShow or set the global `extras_source` directory without manually editing `config.yaml`:\r\n\r\n```bash\r\nskillshare extras source                          # show current value\r\nskillshare extras source ~\u002Fcompany-shared\u002Fextras  # set new value\r\n```\r\n\r\nThis is global-only — project mode always uses `.skillshare\u002Fextras\u002F`.\r\n\r\n---\r\n\r\n## CLI: `--force` for `extras init`\r\n\r\nOverwrite an existing extra without needing to `extras remove` first:\r\n\r\n```bash\r\nskillshare extras init rules --target ~\u002F.cursor\u002Frules --force\r\n```\r\n\r\nThis replaces the existing config entry (name, targets, mode, source) with the new values. The source directory on disk is not deleted.\r\n\r\n---\r\n\r\n## Source Type in JSON Output\r\n\r\n`extras list --json` and the `GET \u002Fapi\u002Fextras` API now include a `source_type` field indicating which level resolved the path:\r\n\r\n- `\"per-extra\"` — from the extra's `source` field\r\n- `\"extras_source\"` — from the global `extras_source` config\r\n- `\"default\"` — standard derived path\r\n\r\nThe TUI detail panel shows a label for non-default sources.\r\n\r\n---\r\n\r\n## Web UI Extras Source\r\n\r\nThe Extras dashboard page now supports custom source paths:\r\n\r\n- Source type badge next to non-default source paths\r\n- Optional \"Source path\" input field in the Add Extra modal\r\n- `POST \u002Fapi\u002Fextras` accepts an optional `source` field\r\n\r\n---\r\n\r\n## Config Editor Assistant Panel\r\n\r\nThe Config page now has a context-aware assistant panel on the right side of the YAML editor. As you move your cursor through the config, the panel automatically shows relevant documentation:\r\n\r\n- **Field docs** — description, type, allowed values, and example for the field under your cursor. Covers all config fields including nested ones like `audit.block_threshold` and `extras.targets.mode`\r\n- **Structure tree** — visual outline of your YAML with line numbers. Click any node to jump to that line\r\n- **Real-time validation** — inline gutter markers for YAML syntax errors, plus schema warnings for unknown target names (with typo suggestions like \"did you mean claude?\"), invalid sync modes, and invalid audit settings\r\n- **Diff preview** — colored add\u002Fremove lines showing what changed since last save, with a Revert All button\r\n\r\nThe panel auto-switches by priority (errors → field docs → structure), or you can lock it to Structure or Diff view. Collapse with `Cmd+B`, save with `Cmd+S`.\r\n\r\nThe `.skillignore` tab gets a simplified panel showing change count and the full list of ig","2026-03-19T18:47:10",{"id":241,"version":242,"summary_zh":243,"released_at":244},81165,"v0.17.7","# 💅 skillshare v0.17.7 Release Notes\r\n\r\nRelease date: 2026-03-19\r\n\r\n## TL;DR\r\n\r\n1. **Uninstall Skills page** — batch remove skills from the dashboard with group\u002Fglob\u002Ftype filtering and multi-select\r\n2. **Target remove action** — press `R` in the target list TUI to remove a target\r\n3. **Sidebar layout fix** — no more horizontal shift when scrolling long skill lists\r\n\r\n---\r\n\r\n## Uninstall Skills Page\r\n\r\nThe dashboard now has an \"Uninstall Skills\" page (under Operations in the sidebar) for removing multiple skills at once. Instead of going to each skill's detail page and deleting one by one, you can:\r\n\r\n1. Filter skills by group directory, glob pattern (`*react*`, `frontend\u002F*`), or type (Tracked \u002F GitHub \u002F Local)\r\n2. Check the skills you want to remove (Select All \u002F Deselect All works on the filtered view)\r\n3. Confirm and execute — results show per-item success or failure\r\n\r\nTracked repos auto-escalate: selecting any skill inside a tracked repo selects the entire repo. A force option handles repos with uncommitted changes.\r\n\r\nThe backend uses a single `POST \u002Fapi\u002Funinstall\u002Fbatch` request with skip-and-continue semantics, so one failure doesn't block the rest. Registry cleanup, config reconciliation, and `.gitignore` removal are handled automatically.\r\n\r\n---\r\n\r\n## Target Remove Action\r\n\r\nThe target list TUI (`skillshare list --targets`) now supports pressing `R` to remove a target from your config directly from the list view.\r\n\r\n---\r\n\r\n## Sidebar Layout Fix\r\n\r\nFixed a layout issue where scrolling to the bottom of the Skills page caused the sidebar to shift horizontally.\r\n\r\n## Changelog\r\n* 436c9bc0b8c729db5c7ffe1db78e8db4d524cd71 chore: add StephenPAdams to contributors\r\n* bb04987f75e624c03bbf26ffd95967fa1aa0f273 feat(server): add POST \u002Fapi\u002Funinstall\u002Fbatch endpoint\r\n* b6722ed785044c9422f86a78c65a203aed9597d3 feat(ui): add BatchUninstallPage with filter + multi-select + batch uninstall\r\n* 0b5eba205da750fd8829c4bf04e564ae2aa4f9c4 feat(ui): add batch uninstall route, nav entry, and link from SkillsPage\r\n* 4f628c5d82af832bc9130cbdd4cfcd1c58717ea8 feat(ui): add batchUninstall API client method and types\r\n* 8c0e97ac13014bedc01f2d5606429d4279fac498 feat: add remove action (R key) to target list TUI\r\n* f9e4666fef5e9b7a2b6ef3e21e8cd2fe0958e05b fix: prevent sidebar layout shift when scrolling to bottom of Skills page\r\n\r\n","2026-03-19T08:42:49",{"id":246,"version":247,"summary_zh":248,"released_at":249},81166,"v0.17.6","# 🛠️ skillshare v0.17.6 Release Notes\r\n\r\nRelease date: 2026-03-19\r\n\r\n## TL;DR\r\n\r\nv0.17.6 fixes the strict target directory check from v0.17.5 that blocked first-time users from syncing, and improves the Web UI sync preview flow:\r\n\r\n1. **Auto-create target directories** — sync creates missing target directories automatically and notifies you, instead of failing ([#87](https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fissues\u002F87))\r\n2. **Init creates directories** — `skillshare init` auto-creates the skills subdirectory for detected CLI tools\r\n3. **Sync Preview stays open** — Config → Sync Now shows results in the modal instead of immediately closing\r\n\r\n---\r\n\r\n## Auto-Create Target Directories\r\n\r\nv0.17.5 blocked sync when a target directory didn't exist to catch typos. But this also blocked first-time setup — a CLI tool is installed but the `skills\u002F` subdirectory hasn't been created yet. A user reported this on Windows ([#87](https:\u002F\u002Fgithub.com\u002Frunkids\u002Fskillshare\u002Fissues\u002F87)).\r\n\r\nSync now auto-creates missing directories and reports what it did:\r\n\r\n```\r\n✓ claude: merged (99 linked, 0 local, 0 updated, 0 pruned)\r\nℹ   Created target directory: ~\u002F.claude\u002Fskills\r\n```\r\n\r\nDry-run shows `Will create target directory:` without actually creating it.\r\n\r\n---\r\n\r\n## Init Creates Directories\r\n\r\n`skillshare init` now creates the skills subdirectory when it detects an installed CLI tool (e.g., `~\u002F.claude\u002F` exists but `skills\u002F` doesn't), instead of just marking it as \"not initialized\".\r\n\r\n---\r\n\r\n## Sync Preview Stays Open\r\n\r\nThe Config page's Sync Preview modal no longer closes immediately after sync. It now shows a success banner with the sync results, so you can review what changed before dismissing.\r\n\r\n## Changelog\r\n* 024718c283337e19fd51033c6f21e537d06cbc0c chore: update readme\r\n* dc82b93d0566e67ba2b4572735efd73ff350f5b9 fix: address code review findings for auto-create target dirs\r\n* 643e3c5c075b5dfc6a5d6c625b213da7360b664d fix: auto-create missing target directories with notification (#87)\r\n\r\n","2026-03-18T20:24:59",{"id":251,"version":252,"summary_zh":253,"released_at":254},81167,"v0.17.5","# 🚀 skillshare v0.17.5 Release Notes\r\n\r\nRelease date: 2026-03-18\r\n\r\n## TL;DR\r\n\r\nv0.17.5 adds **fail-fast config validation**, **sync safety**, **reverse proxy support**, a **skill design pattern wizard**, **`.skillignore.local` override**, and **`metadata.targets`**:\r\n\r\n1. **Config Save Validation** — saving config now validates semantics (source path, sync modes, target paths), returning HTTP 400 for invalid configs instead of silently saving broken configurations\r\n2. **Sync Safety — No Auto-Create** — sync no longer auto-creates missing target directories. A typo like `~\u002F.cusor\u002Fskills` now fails immediately instead of silently creating the wrong directory\r\n3. **Dry-run Path Validation** — `sync --dry-run` now detects missing target paths, matching the behavior of a real sync\r\n4. **Config Save → Sync Preview** — after saving config, a banner offers to preview what sync will do via a dry-run modal before committing\r\n5. **Web UI Base Path** — serve the Web UI under a sub-path behind a reverse proxy with `--base-path` or `SKILLSHARE_UI_BASE_PATH`\r\n6. **Skill Design Patterns** — `skillshare new` now offers an interactive wizard with five design pattern templates (tool-wrapper, generator, reviewer, inversion, pipeline) and category tagging\r\n7. **`.skillignore.local`** — local-only override file that lets you un-ignore skills blocked by a shared `.skillignore` without modifying the shared file\r\n8. **`metadata.targets`** — `targets` can now live under a `metadata:` block in SKILL.md, aligning with the 30+ tool ecosystem convention. Top-level `targets:` still works\r\n9. **Hermes Agent** — new built-in target for Nous Research's Hermes Agent CLI (56+ total targets)\r\n\r\n---\r\n\r\n## Config Save Validation\r\n\r\n### The problem\r\n\r\n`PUT \u002Fapi\u002Fconfig` only validated YAML syntax. Users could save a config with a nonexistent source path, an invalid sync mode like `\"invalid\"`, or a misspelled target path — and get HTTP 200 OK. The error only appeared later when running sync, with a cryptic filesystem error message.\r\n\r\n### Solution\r\n\r\nConfig save now performs semantic validation after YAML parsing:\r\n\r\n- **Source path** must exist and be a directory\r\n- **Sync mode** must be `merge`, `symlink`, or `copy` (both global and per-target)\r\n- **Target paths** must exist and be directories\r\n\r\nFatal validation errors return HTTP 400 with a descriptive message. Non-fatal warnings (e.g., project mode source not created yet) return HTTP 200 with `{ success: true, warnings: [...] }`.\r\n\r\nThe same validation runs in the CLI: `skillshare sync` validates config before starting, so manually-edited `config.yaml` files get the same protection.\r\n\r\n### Design decisions\r\n\r\n- **Shared validation** — `config.ValidateConfig()` and `config.ValidateProjectConfig()` are used by both the API handler and CLI sync command, ensuring identical behavior\r\n- **Warnings vs errors** — two-tier severity: errors block the operation (400), warnings let it proceed but surface the issue. This matches the compiler warning\u002Ferror model\r\n- **Project mode leniency** — built-in target paths (like `.claude\u002Fskills`) skip existence checks in project mode because the user can't control whether the tool is installed. Only custom paths with explicit `path:` are validated\r\n- **Path expansion** — `ValidateConfig` handles `~` expansion internally, so callers don't need to pre-process paths\r\n\r\n---\r\n\r\n## Sync Safety — No Auto-Create\r\n\r\n### The problem\r\n\r\nWhen sync encountered a missing target directory, it silently ran `mkdir -p` to create it. This was convenient for first-time setup but dangerous for typos — `~\u002F.cusor\u002Fskills` (missing `r`) would silently create the wrong directory, and skills would sync there unnoticed.\r\n\r\n### Solution\r\n\r\nSync now fails fast with a clear error when a target directory doesn't exist:\r\n\r\n```\r\nError: target directory does not exist: \u002Fhome\u002Fuser\u002F.cusor\u002Fskills\r\n```\r\n\r\nThis applies to:\r\n- All sync modes (merge, copy)\r\n- Symlink-to-merge\u002Fcopy conversions (the only case where `mkdir` is still used — after removing an existing symlink)\r\n- `--dry-run` mode (previously skipped existence checks entirely)\r\n- Both CLI and API sync endpoints\r\n\r\n### Design decisions\r\n\r\n- **Symlink conversion is the exception** — when converting from symlink mode to merge\u002Fcopy, the code removes the directory-level symlink and recreates it as a real directory. This is not auto-creation from scratch — it's a deliberate mode conversion on an already-configured target\r\n- **Dry-run must also validate** — users run dry-run to check what will happen. If dry-run silently ignores a missing path but real sync fails, the dry-run output was misleading\r\n- **Extracted shared helper** — `ensureRealTargetDir()` handles both symlink conversion and existence verification in a single function, used by both merge and copy modes\r\n\r\n---\r\n\r\n## Config Save → Sync Preview\r\n\r\n### The problem\r\n\r\nAfter editing config (adding\u002Fremoving targets, changing sync mode) or updating `.skillignore`, users had to manually navigate t","2026-03-18T20:23:07",{"id":256,"version":257,"summary_zh":258,"released_at":259},81168,"v0.17.4","# skillshare v0.17.4 Release Notes\r\n\r\nRelease date: 2026-03-17\r\n\r\n## TL;DR\r\n\r\nv0.17.4 adds **machine-readable health checks** and **source-level skill filtering**:\r\n\r\n1. **`doctor --json`** — structured JSON output for CI pipelines, with per-check status and exit code 1 on errors\r\n2. **Web UI Health Check page** — visual dashboard for `doctor` results with filtering, expandable details, and re-check\r\n3. **Root-level `.skillignore`** — hide skills and directories from all commands using a single file at the source root\r\n4. **Full gitignore syntax for `.skillignore`** — `**`, `?`, `[abc]`, `!negation`, anchored `\u002Fpattern`, directory-only `pattern\u002F`, and escaped `\\#`\u002F`\\!` now all work\r\n5. **`.skillignore` visibility** — `status` and `doctor` now report active patterns and ignored skills; the web UI Config page has a `.skillignore` editor tab\r\n\r\n---\r\n\r\n## Doctor JSON Output\r\n\r\n### The problem\r\n\r\n`skillshare doctor` was text-only — useful for humans but impossible to integrate into CI pipelines, automation scripts, or the web dashboard. There was no way to programmatically check if a skillshare setup was healthy.\r\n\r\n### Solution\r\n\r\n`doctor --json` outputs structured JSON with every check result:\r\n\r\n```bash\r\nskillshare doctor --json\r\n```\r\n\r\n```json\r\n{\r\n  \"checks\": [\r\n    { \"name\": \"source\", \"status\": \"pass\", \"message\": \"Source: ~\u002F.config\u002Fskillshare\u002Fskills (12 skills)\" },\r\n    { \"name\": \"sync_drift\", \"status\": \"warning\", \"message\": \"claude: 1 skill(s) not synced\", \"details\": [\"new-skill\"] }\r\n  ],\r\n  \"summary\": { \"total\": 13, \"pass\": 12, \"warnings\": 1, \"errors\": 0 },\r\n  \"version\": { \"current\": \"0.17.4\", \"update_available\": false }\r\n}\r\n```\r\n\r\n### Design decisions\r\n\r\n- **Exit code semantics** — errors produce exit 1 (via `jsonSilentError`), warnings exit 0. This lets CI gate on errors while allowing warnings to pass\r\n- **Flat checks array** — each check is an independent entry with `name`, `status`, `message`, and optional `details`. Same check name can appear multiple times (e.g., one `targets` entry per configured target)\r\n- **Version info** — included as a top-level field, populated from the async update check that already runs during doctor\r\n\r\n### Usage patterns\r\n\r\n```bash\r\n# CI gate — fail if any errors\r\nskillshare doctor --json | jq -e '.summary.errors == 0'\r\n\r\n# Extract warnings for Slack notification\r\nskillshare doctor --json | jq '[.checks[] | select(.status == \"warning\") | .message]'\r\n\r\n# Quick health summary\r\nskillshare doctor --json | jq '.summary'\r\n```\r\n\r\n---\r\n\r\n## Web UI — Health Check Page\r\n\r\n### The problem\r\n\r\nThe web dashboard had no equivalent of `skillshare doctor`. Users had to switch to the terminal to run diagnostics.\r\n\r\n### Solution\r\n\r\nNew **Health Check** page at `\u002Fdoctor` in the sidebar under \"System\":\r\n\r\n- **Summary cards** — pass\u002Fwarnings\u002Ferrors counts with color-coded indicators\r\n- **Filter toggles** — show All, Errors, Warnings, or Pass checks\r\n- **Check list** — each check shows a human-readable label, status icon, and message. Checks with details (e.g., list of unsynced skills) are expandable\r\n- **Version section** — CLI version with update-available badge\r\n- **Re-check button** — re-run all checks without leaving the page\r\n\r\n### Design decisions\r\n\r\n- **Server handler shells out** — `GET \u002Fapi\u002Fdoctor` runs `skillshare doctor --json` as a subprocess rather than importing check functions directly. The check logic lives in `package main` and would require a large refactor to extract. Shelling out is zero-refactoring and stays in sync automatically\r\n- **Human-readable labels** — check names are mapped from identifiers (`sync_drift`) to labels (\"Sync Status\") in the frontend, not the backend, keeping the JSON API stable\r\n\r\n---\r\n\r\n## Root-Level .skillignore\r\n\r\n### The problem\r\n\r\n`.skillignore` only worked inside tracked repos (`_repo\u002F.skillignore`). There was no way to hide skills at the source root level — you couldn't exclude draft skills, archived directories, or test fixtures from discovery without uninstalling them.\r\n\r\n### Solution\r\n\r\nPlace a `.skillignore` at the source root to hide skills from all commands:\r\n\r\n```bash\r\n# ~\u002F.config\u002Fskillshare\u002Fskills\u002F.skillignore\r\ndraft-*          # Hide all draft skills\r\n_archived\u002F       # Hide entire directory\r\ntest-fixture     # Hide specific skill\r\n```\r\n\r\nBoth levels now work:\r\n- **Root-level** (`\u003Csource>\u002F.skillignore`) — affects all skills in the source\r\n- **Repo-level** (`\u003Csource>\u002F_repo\u002F.skillignore`) — scoped to that tracked repo\r\n\r\n### Design decisions\r\n\r\n- **SkipDir optimization** — when a directory matches a `.skillignore` pattern, the walker skips the entire directory tree (returns `fastwalk.SkipDir`) instead of entering it and filtering individual files. This meaningfully improves discovery time for source trees with large ignored directories\r\n- **Gitignore syntax** — uses the same glob patterns as `.gitignore` for familiarity\r\n\r\n---\r\n\r\n## Full Gitignore Syntax for .skillignore\r\n\r\n### The problem\r\n\r\n`.skillignore` used a naive string matcher t","2026-03-17T16:31:35",{"id":261,"version":262,"summary_zh":263,"released_at":264},81169,"v0.17.3","# 🚀 skillshare v0.17.3 Release Notes\r\n\r\nRelease date: 2026-03-17\r\n\r\n## TL;DR\r\n\r\nv0.17.3 brings the **target list** command into the interactive TUI family, adds **centralized skills repo** support, and fixes a couple of paper cuts:\r\n\r\n1. **Centralized skills repo** — `init -p --config local` enables one repo for skills, each developer manages own targets\r\n2. **Init source path prompt** — `init` now asks whether to customize source directory path instead of silently defaulting\r\n3. **Target list TUI** — full-screen interactive browser with split layout, fuzzy filter, and inline editing\r\n4. **Mode picker** — change a target's sync mode (`M` key) without leaving the TUI\r\n5. **Include\u002FExclude editor** — add\u002Fremove filter patterns (`I`\u002F`E` keys) directly from the TUI\r\n6. **Filter Studio** — dedicated web UI page for managing target include\u002Fexclude filters with live preview\r\n7. **Skill Detail sidebar** — Target Distribution, post-it styling, and semantic pastel cards\r\n8. **Web UI error guidance** — network failures now show actionable \"restart `skillshare ui`\" message\r\n9. **`init --help` fix** — `--subdir` flag now visible, flag ordering matches documentation\r\n\r\n---\r\n\r\n## Target List Interactive TUI\r\n\r\n### The problem\r\n\r\n`skillshare target list` printed a static plain-text table. To change a target's mode or filters, users had to run separate CLI commands with exact flag syntax, re-typing the target name each time.\r\n\r\n### Solution\r\n\r\nThe target list now launches a full-screen TUI (like `list`, `log`, `diff`, `audit`) with:\r\n\r\n- **Split panel layout** — target list on the left, detail panel on the right. Falls back to vertical stacking on narrow terminals (\u003C 70 columns)\r\n- **Fuzzy filter** — press `\u002F` to filter by target name. `Enter` locks the filter, `Esc` clears it\r\n- **Mode picker overlay** — press `M` to open a three-option picker (merge \u002F copy \u002F symlink) with descriptions. `Enter` confirms and saves immediately\r\n- **Include\u002FExclude editor** — press `I` or `E` to open an inline pattern list. `a` adds a new glob pattern, `d` deletes the selected one. All changes save to config on each action\r\n\r\n### Design decisions\r\n\r\n- **Immediate persistence** — mode and filter changes write to config on each action, matching the CLI behavior where `--add-include` saves immediately\r\n- **Consistent look** — reuses the same split-panel layout, color palette, and key conventions as other TUI views (skill list, audit, log)\r\n- **Dual-mode support** — works in both global and project mode, loading and saving to the correct config file\r\n\r\n### Usage patterns\r\n\r\n```bash\r\n# Interactive (default on TTY)\r\nskillshare target list\r\n\r\n# Project mode\r\nskillshare target list -p\r\n\r\n# Skip TUI\r\nskillshare target list --no-tui\r\n\r\n# JSON for scripting\r\nskillshare target list --json\r\n```\r\n\r\nTUI keybindings:\r\n| Key | Action |\r\n|-----|--------|\r\n| `↑`\u002F`↓` | Navigate target list |\r\n| `\u002F` | Start fuzzy filter |\r\n| `M` | Open mode picker for selected target |\r\n| `I` | Edit include patterns |\r\n| `E` | Edit exclude patterns |\r\n| `Ctrl+d`\u002F`Ctrl+u` | Scroll detail panel |\r\n| `q` | Quit |\r\n\r\n---\r\n\r\n## Init Source Path Prompt\r\n\r\n### The problem\r\n\r\n`skillshare init` silently set the source directory to `~\u002F.config\u002Fskillshare\u002Fskills\u002F` without telling the user this was customizable. Only users who read the docs or knew about `--source` could change it.\r\n\r\n### Solution\r\n\r\nIn interactive mode, `init` now displays the default source path and asks whether to customize it:\r\n\r\n```\r\nℹ Source directory stores your skills (single source of truth)\r\n  Default: \u002Fhome\u002Fuser\u002F.config\u002Fskillshare\u002Fskills\r\n  Customize source path? [y\u002FN]:\r\n```\r\n\r\nIf the user says yes, they enter a custom path (with `~` expansion). The success message also now includes a hint about `--source` and the config file location.\r\n\r\n### Design decisions\r\n\r\n- **TTY guard** — the prompt only appears in real terminal sessions. Piped stdin (tests, scripts) skips automatically\r\n- **`--source` priority** — when `--source` is provided on the CLI, the prompt is never shown. Zero behavior change for non-interactive workflows\r\n- **Consistent Y\u002FN pattern** — reuses the same yes\u002Fno prompt style as the `--subdir` prompt introduced in v0.17.1\r\n\r\n---\r\n\r\n## Centralized Skills Repo (`--config local`)\r\n\r\n### The problem\r\n\r\nTeams often want one dedicated repo to hold all shared AI skills, while keeping other projects clean. `init -p` technically worked, but the UX was poor:\r\n- `config.yaml` was committed to git, so all developers shared the same target list\r\n- When a teammate cloned the repo, there was no guidance on how to set up per-developer targets\r\n\r\n### Solution\r\n\r\nTwo-part change:\r\n\r\n1. **Creator flow**: `skillshare init -p --config local` adds `config.yaml` to `.skillshare\u002F.gitignore`. Skills are shared via git, but each developer gets their own config file with their own target paths.\r\n\r\n2. **Teammate flow**: When a teammate clones the repo and runs `skillshare init -p`, skillshare detects that `config.yaml` is gitigno","2026-03-16T20:56:42",{"id":266,"version":267,"summary_zh":268,"released_at":269},81170,"v0.17.2","# 🛠️ skillshare v0.17.2 Release Notes\r\n\r\nRelease date: 2026-03-14\r\n\r\n## TL;DR\r\n\r\nv0.17.2 brings **Git Sync page enhancements**, **TUI\u002FUI polish**, and a **restore TUI performance fix** for large backups:\r\n\r\n1. **Git Sync repo info + branch switcher** — see repo details and switch branches from the web dashboard\r\n2. **Trash TUI split panel** — trash list now uses the standard left-right layout with detail panel\r\n3. **Backup UX improvements** — spinner during CLI backup, better restore flow in web UI\r\n4. **Restore TUI async sizing** — no more freezing when browsing large backup versions\r\n\r\nNo breaking changes. Drop-in upgrade from v0.17.1.\r\n\r\n---\r\n\r\n## Web UI Git Sync Enhancements\r\n\r\n### The problem\r\n\r\nThe Git Sync page showed push\u002Fpull actions but lacked context — users couldn't see which repo or branch they were working with, and switching branches required leaving the web dashboard to use the CLI.\r\n\r\n### Solution\r\n\r\nTwo new components on the Git Sync page:\r\n\r\n- **Repository Info Card** — displays the current remote URL, active branch, and latest commit hash at the top of the page, giving immediate context before performing sync operations\r\n- **Branch switcher** — dropdown to switch between local branches directly from the web UI. The page refreshes to show the new branch's sync status\r\n\r\n---\r\n\r\n## Trash TUI Split Panel\r\n\r\n### The problem\r\n\r\nThe trash TUI used a simple vertical list without a detail panel, inconsistent with the list\u002Flog\u002Fsearch\u002Frestore TUIs that all use left-right split layouts.\r\n\r\n### Solution\r\n\r\nConverted the trash TUI to the standard split panel layout: list on the left, detail panel on the right showing item metadata (name, deleted date, expiry, size). Uses the same `newPrefixDelegate` bar style as all other TUIs.\r\n\r\n---\r\n\r\n## Backup & Sidebar UX\r\n\r\n### The problem\r\n\r\n- `skillshare backup` appeared frozen during backup operations — no visual feedback\r\n- The web UI Backup page restore flow had unclear action placement\r\n- Sidebar tool sections took up vertical space even when not needed\r\n\r\n### Solution\r\n\r\n- **CLI spinner** — `skillshare backup` now shows a spinner while the backup is running\r\n- **Restore UX** — improved button placement and confirmation dialogs in the web UI Backup page\r\n- **Collapsible sidebar** — tool sections in the sidebar can now be collapsed\u002Fexpanded\r\n- **Footer pinning** — Push\u002FPull action footers on the Git Sync page are pinned to the bottom, preventing layout shifts\r\n\r\n---\r\n\r\n## Restore TUI Performance\r\n\r\n### The problem\r\n\r\nWhen a backup contained many versions with large file trees, the restore TUI would freeze:\r\n\r\n1. `ListBackupVersions()` called `dirSize()` (full `filepath.Walk`) for every version — N versions × thousands of files\r\n2. `renderTargetDetail()` re-called `ListBackupVersions()` on every cursor hover (redundant + expensive)\r\n3. `renderVersionDetail()` ran `readSkillDescription()` + `listSkillFiles()` for every skill with no cap\r\n\r\nAll of this happened synchronously in the bubbletea event loop, blocking rendering.\r\n\r\n### Solution\r\n\r\nThree-layer fix:\r\n\r\n| Layer | Before | After |\r\n|-------|--------|-------|\r\n| Version list | `ListBackupVersions()` with `dirSize()` for all | `ListBackupVersionsLite()` — skips `dirSize()`, `TotalSize = -1` |\r\n| Size display | Synchronous `DirSize()` in `refreshDetailCache()` | Async `tea.Cmd` — shows \"calculating...\" then updates when ready |\r\n| Detail I\u002FO | Unbounded per-skill file reads | Capped at 20 skills with full detail, rest show name only |\r\n\r\n### Design decisions\r\n\r\n- **`TotalSize = -1` sentinel** — simpler than `*int64` pointer, no struct change needed\r\n- **`versionSizeCache map[string]int64`** — per-target lifecycle, reset when switching targets\r\n- **`computeVersionSizeCmd`** — standard bubbletea async pattern: dispatch `tea.Cmd`, receive `versionSizeMsg`, update cache, re-render\r\n- **Direct `os.ReadDir` in `renderTargetDetail`** — replaced full `ListBackupVersions()` call with a single directory read of the latest backup, avoiding the N-version scan entirely\r\n\r\n---\r\n\r\n## Bug Fixes\r\n\r\n- **Backup spinner** — `skillshare backup` now shows a progress spinner instead of appearing frozen during backup operations\r\n- **Git Sync footer** — Push\u002FPull action buttons are pinned to the bottom of the page, preventing layout shift when content changes\r\n\r\n## Changelog\r\n* 04b248ab92139aa8a488368d067d38d9f6b7953b feat(tui): convert trash TUI to left-right split panel layout\r\n* d842d7a871d6560456d64ade633c63b5da01fb03 feat(ui): add Repository Info Card to Git Sync page\r\n* 7d0952b8b625310a25646fc12ba82c4e856bf27f feat(ui): add branch switcher to Git Sync page\r\n* d572d1be251d75b289230d731ae79ef6043847c3 feat: add branch switcher to Git Sync page\r\n* ad34a5b38406f60d782d628e623f828978b861d8 fix(cli): add spinner to backup command and remove list indent\r\n* 3d58765953e0f448f9951aeae0c05091f7b8530f fix(git): propagate error from GetRemoteURL instead of swallowing it\r\n* 4726465f63021fd45f02bad8fb0053e43505276a fix(ui): improve Backup ","2026-03-13T20:08:27",{"id":271,"version":272,"summary_zh":273,"released_at":274},81171,"v0.17.1","# 🛠️ skillshare v0.17.1 Release Notes\r\n\r\nRelease date: 2026-03-13\r\n\r\n## TL;DR\r\n\r\nv0.17.1 adds a **web UI theme system**, a **source subdirectory option** for init, and fixes two bugs — **collect failing on git-cloned repos** and **cryptic git error messages**:\r\n\r\n1. **Web UI themes** — switch between Clean (professional) and Playful (hand-drawn) styles, with Light\u002FDark\u002FSystem color modes\r\n2. **Init `--subdir`** — store skills in a subdirectory when your repo contains non-skill files (dotfiles, CI config)\r\n3. **Collect `.git\u002F` skip** — collecting a git-cloned repo no longer produces empty directories\r\n4. **Actionable git errors** — install\u002Fupdate failures now show what went wrong and how to fix it\r\n\r\nNo breaking changes. Drop-in upgrade from v0.17.0.\r\n\r\n---\r\n\r\n## Web UI Theme System\r\n\r\n### The problem\r\n\r\nv0.17.0 shipped a redesigned \"clean\" UI, but the original hand-drawn aesthetic had its fans(me). Users had no way to choose between visual styles, and the dark\u002Flight toggle was a simple binary switch with no system-preference option.\r\n\r\n### Solution\r\n\r\nAdded a two-axis theme system:\r\n\r\n| Axis | Options | Default |\r\n|------|---------|---------|\r\n| **Style** | Clean, Playful | Playful |\r\n| **Mode** | Light, Dark, System | Light |\r\n\r\nThe Theme button in the sidebar opens a popover with both groups.\r\n\r\n---\r\n\r\n## Init Source Subdirectory\r\n\r\n### The problem\r\n\r\n`skillshare init --remote` treats the entire git repo as the skills source. Users who want to embed skills inside an existing repo (dotfiles, monorepo) had no clean way to specify that skills live in a subdirectory.\r\n\r\n### Solution\r\n\r\nAdded an interactive prompt during `init` and a `--subdir` flag for non-interactive use:\r\n\r\n```bash\r\n# Interactive: prompted during init\r\nskillshare init --remote git@github.com:you\u002Fdotfiles.git\r\n\r\n# Non-interactive\r\nskillshare init --remote git@github.com:you\u002Fdotfiles.git --subdir skills\r\n```\r\n\r\nResult:\r\n```\r\n~\u002F.config\u002Fskillshare\u002Fskills\u002F          ← git repo root\r\n  ├── README.md\r\n  ├── .github\u002F\r\n  └── skills\u002F                         ← source points here\r\n      ├── my-skill\u002F\r\n      └── another-skill\u002F\r\n```\r\n\r\n---\r\n\r\n## Collect `.git\u002F` Directory Skip\r\n\r\n### The problem\r\n\r\nWhen a user git-cloned a skill repo (e.g., `obra\u002Fsuperpowers`) directly into a target directory (`~\u002F.cursor\u002Fskills\u002Fsuperpowers\u002F`) and ran `skillshare collect`, only empty directories were copied to source. The nested skill files were missing.\r\n\r\nThis happened because the directory copy encountered `.git\u002F` internal files (pack files, etc.) and aborted, leaving all other directories empty.\r\n\r\n### Solution\r\n\r\n`collect` now automatically skips `.git\u002F` directories when copying skills from target to source. Only skill content is copied — repository metadata stays behind.\r\n\r\n---\r\n\r\n## Actionable Git Error Messages\r\n\r\n### The problem\r\n\r\nWhen `skillshare install` or `skillshare update` encountered a git failure, users saw:\r\n\r\n```\r\nError: exit status 128\r\n```\r\n\r\nNo indication of what went wrong or how to fix it.\r\n\r\n### Solution\r\n\r\nError messages now include context-specific guidance:\r\n\r\n| Scenario | Before | After |\r\n|----------|--------|-------|\r\n| Missing auth | `exit status 128` | `git failed (exit 128): repository not found or authentication required` |\r\n| Token rejected | `exit status 128` | `authentication token was rejected — check permissions and expiry` |\r\n| SSL cert error | `exit status 128` | `SSL certificate verification failed` + 3 solution options |\r\n| Divergent branches | `exit status 1` | Shows the `fatal:` line from git |\r\n\r\nIf a token was used but rejected, the message says \"token was rejected\" instead of \"authentication required.\" Tokens are never leaked in error output.\r\n\r\n---\r\n\r\n## Bug Fixes\r\n\r\n- **Collect empty directories** — `skillshare collect` on git-cloned repos (e.g., `obra\u002Fsuperpowers`) now correctly copies all nested files instead of producing empty directories. `.git\u002F` is excluded from the copy.\r\n- **Git error messages** — `skillshare install` and `skillshare update` now show actionable error messages with suggested fixes instead of raw exit codes like `exit status 128`.\r\n\r\n## Changelog\r\n* 06dae1c34fa9ebb4cb6ea710689d0a72cc4040aa Added new line for spacing in prompts\r\n* 4fc7b4b885cf0ebfc21221d77939597348bf368c Implemented source subdir specification\r\n* f8ce3387d30f52f3d204f85e0d1f55ee1747d4f6 Integrated checkGitRepo in pull cmd\r\n* 4a8814ffcf36880abe55390d97fc140d893c9c77 Switched dir name reading to bufio for space sup\r\n* e23bea133f2e450404304c1e9a6fb9bdf8bf85e5 Switched existing usage of cmd.Output to cmd.Run\r\n* c08ed7f96c0a776fef87cb53e8c7e9b7503b45a8 Switched git repo check to git rev-parse\r\n* 57419a51b823610a5a10a56adbe5e0d26232bc9d Updated checkGitRepo to use git status\r\n* 156e428bafbf76f76bbf7a561a63b2be8c839b7b Updated git initialization check in doctor cmd\r\n* 7c4aa7bc5a7a5c910e811f62524fbf55580f38e2 feat(init): add subdirectory prompt for source path (#78)\r\n* 6fb99035af53f1a8436db0309c14182eb12bd07c feat(ui): add multi-theme system w","2026-03-13T06:24:00",{"id":276,"version":277,"summary_zh":278,"released_at":279},81172,"v0.17.0","# 🚀 skillshare v0.17.0 Release Notes\r\n\r\nRelease date: 2026-03-11\r\n\r\n## TL;DR\r\n\r\nv0.17.0 promotes **extras** from a sync sub-feature to a **first-class citizen** with its own command group, project mode support, and Web UI page:\r\n\r\n1. **`extras` command group** — `init`, `list`, `remove`, `collect` subcommands for managing non-skill resources (rules, prompts, commands)\r\n2. **Interactive TUI wizard** — `extras init` with step-by-step name → target → mode flow\r\n3. **Project mode** — all extras commands support `-p` for `.skillshare\u002F`-scoped extras\r\n4. **Deep integration** — `status`, `doctor`, `diff`, `sync` all gain extras awareness\r\n5. **Web UI redesign** — complete visual overhaul with clean design, table view, keyboard shortcuts, onboarding tour\r\n6. **Web UI Extras page** — new Extras management page + Dashboard card + REST API endpoints\r\n7. **Auto-migration** — legacy flat directories (`configDir\u002Frules\u002F`) automatically move to `configDir\u002Fextras\u002Frules\u002F`\r\n\r\n### Breaking Change\r\n\r\nExtras source directory structure changed from flat to nested:\r\n```\r\n# Before (v0.16.x)\r\n~\u002F.config\u002Fskillshare\u002Frules\u002F\r\n\r\n# After (v0.17.0)\r\n~\u002F.config\u002Fskillshare\u002Fextras\u002Frules\u002F\r\n```\r\n**Auto-migration** runs on first `sync extras` — no manual action needed.\r\n\r\n---\r\n\r\n## New `extras` Command Group\r\n\r\n### `extras init`\r\n\r\nCreate a new extra resource type. Two modes:\r\n\r\n```bash\r\n# Interactive wizard\r\nskillshare extras init\r\n\r\n# CLI flags\r\nskillshare extras init rules --target ~\u002F.claude\u002Frules --target ~\u002F.cursor\u002Frules\r\nskillshare extras init prompts --target .claude\u002Fprompts --mode copy -p\r\n```\r\n\r\nThe TUI wizard walks through: name → target path → sync mode → add more targets → confirm.\r\n\r\n### `extras list`\r\n\r\nView all extras with sync status per target:\r\n\r\n```bash\r\nskillshare extras list\r\nskillshare extras list --json -p\r\n```\r\n\r\nStatus values: `synced`, `drift`, `not synced`, `no source`.\r\n\r\n### `extras remove`\r\n\r\nRemove an extra from configuration. Source files and synced targets are preserved.\r\n\r\n```bash\r\nskillshare extras remove rules\r\nskillshare extras remove prompts --force -p\r\n```\r\n\r\n### `extras collect`\r\n\r\nReverse-sync: copy local files from a target back into the extras source directory, replacing originals with symlinks.\r\n\r\n```bash\r\nskillshare extras collect rules\r\nskillshare extras collect rules --from ~\u002F.claude\u002Frules --dry-run\r\n```\r\n\r\n---\r\n\r\n## Integration with Existing Commands\r\n\r\n### `status`\r\n\r\nNow shows an Extras section with file count and target count per configured extra.\r\n\r\n### `doctor`\r\n\r\nChecks that extras source directories exist and target parent directories are reachable. Reports warnings for missing sources.\r\n\r\n### `diff` includes extras\r\n\r\n`diff` automatically includes per-file extras diff when extras are configured. No extra flags needed.\r\n\r\n```bash\r\nskillshare diff                   # skills + extras (if configured)\r\nskillshare diff --json            # JSON output includes extras\r\n```\r\n\r\n### `sync extras --json`\r\n\r\nStructured JSON output for programmatic consumption:\r\n\r\n```bash\r\nskillshare sync extras --json\r\n```\r\n\r\n### `sync --all -p`\r\n\r\nProject-mode `--all` now includes extras sync alongside skills.\r\n\r\n---\r\n\r\n## Web UI\r\n\r\n### Visual Redesign\r\n\r\nThe web dashboard received a complete visual overhaul — replacing the hand-drawn aesthetic with a clean, minimal design:\r\n\r\n- **New design system** — DM Sans typography, clean border-radius, streamlined color palette with proper dark mode support\r\n- **Table view with pagination** — skills and search results offer a table view alongside card\u002Fgrouped views, with client-side pagination\r\n- **Sticky search and filters** — SkillsPage toolbar stays pinned at the top, with grouped view sticky headers\r\n- **Keyboard modifier shortcuts** — press `?` to see available shortcuts, with on-screen HUD overlay\r\n- **Sync progress animation** — visual feedback during sync operations\r\n- **Onboarding tour** — step-by-step spotlight tour for first-time users\r\n- **Shared UI components** — DialogShell, IconButton, Pagination, SegmentedControl for consistent interactions\r\n\r\n### Extras Page\r\n\r\nNew page at `\u002Fextras` in the web dashboard:\r\n- List all extras with source path, file count, and per-target sync status\r\n- Sync individual extras or all at once\r\n- Add new extras via modal dialog (name + targets with path\u002Fmode)\r\n- Remove extras from config\r\n\r\n### Dashboard Card\r\n\r\nNew stat card showing extras count, total files, and total targets with a link to the Extras page.\r\n\r\n### REST API\r\n\r\n| Method | Endpoint | Description |\r\n|--------|----------|-------------|\r\n| GET | `\u002Fapi\u002Fextras` | List extras with sync status |\r\n| GET | `\u002Fapi\u002Fextras\u002Fdiff` | Per-file diff (optional `?name=`) |\r\n| POST | `\u002Fapi\u002Fextras` | Create new extra |\r\n| POST | `\u002Fapi\u002Fextras\u002Fsync` | Sync extras |\r\n| DELETE | `\u002Fapi\u002Fextras\u002F{name}` | Remove extra |\r\n\r\n---\r\n\r\n## Configuration\r\n\r\n### Global config (`~\u002F.config\u002Fskillshare\u002Fconfig.yaml`)\r\n\r\n```yaml\r\nextras:\r\n  - name: rules\r\n    targets:\r\n      - path: ~\u002F.claude\u002Frules\r\n      - path: ~\u002F.c","2026-03-12T08:52:19",{"id":281,"version":282,"summary_zh":283,"released_at":284},81173,"v0.16.14","# skillshare v0.16.14 Release Notes\r\n\r\nRelease date: 2026-03-09\r\n\r\n## TL;DR\r\n\r\nv0.16.14 replaces all **fixed gray colors with SGR dim** for consistent terminal rendering across themes, fixes the **progress bar** layout and concurrency bug, and **unifies accent colors**:\r\n\r\n1. **SGR dim everywhere** — CLI output, TUI styles, and skill path rendering all use the dim attribute instead of hardcoded gray palette entries\r\n2. **Progress bar layout fix** — counter now at a fixed position right after the percentage, visible on any terminal width\r\n3. **Progress bar 99% fix** — parallel scan workers no longer race past the final 100% frame\r\n\r\nNo breaking changes. Drop-in upgrade from v0.16.13.\r\n\r\n## Changelog\r\n* 401f526bce3bbfe250b67015422d4e889447de7c chore: update readme\r\n* ae80756b9abaa674aed979b4599834d6268c7161 feat(ui): replace bright-black gray with SGR dim for consistent terminal rendering\r\n* cca896dd912c1a79b5ca475f20925a000a621322 feat(ui): replace pterm progress bar with custom fixed-width bar\r\n* 404ad0afde58e043f262771a78929e2768b2cf5a fix(tui): replace 256-color gray gradient with SGR dim in skill path rendering\r\n* 7284d38d79ea981ea4b4b34da11b04d915be01e9 fix(ui): cap progress counter and guard RenderInlineBar against zero total\r\n* ad713bc66924429a1c4aca8ec8abb88600f575c9 fix(ui): render phase headers inline with progress bar to prevent visual duplication\r\n\r\n","2026-03-09T04:53:59"]