起因
随着使用 Claude Code、WorkBuddy 这些 Agent 工具的时间越来越长,接触和使用的 Skill 也越来越多。有些 Skill 文件量特别大,动不动几百个文件,几百 M 甚至一个多 G 的空间占用,以前我的做法很简单:直接把 Skill 文件夹丢到对应的项目目录里,用到的时候对 Agent 说一句“加载 xx skill,做 xx”。
听着挺方便,用着用着问题就来了:
存放乱:Skill 散落在各个项目的文件夹里,没有一个集中的地方。
不好找:当时觉得好用的 Skill,过段时间就忘了搁哪儿了,再想用得扒拉半天。
重复下载:同一个 Skill 在不同项目要用到的时候需要复制粘贴一遍。
于是我就琢磨:能不能做个自己的 Skill 仓库,把用过的好 Skill 都传上去、记录下来,随时查看、随时下载?
也不求做的多好多精致,主要是方便自己平常使用和积累,于是就动起手手来 Vibecoding 了一个 Skill 商城
网站设计与功能
UI 设计
我在自己博客主题的项目里,先让 AI 帮我整理了一份博客主题的风格文档,然后直接把这份文档丢给 Claude Code,让它按照博客主题的风格来设计 Skill 商城。
最终落地的效果是温润通透的毛玻璃风格——大圆角卡片、半透明背景、霞鹜文楷字体,深色模式下卡片会微微 "自发光"。整体看起来挺舒服的,我个人也比较喜欢这种简约的感觉,后面就没再大改过。

首页
打开就是一个搜索框 + 分类标签 + Skill 卡片网格。可以按分类筛选(开发工具、调试诊断、部署运维、文档写作、AI 智能等),也可以直接敲关键词搜索。分类标签支持横向滚动,手机上也很好用。每张 Skill 卡片展示了标题、分类徽章、下载次数和版本号,信息一眼看完。

详情页
点进卡片就是详情页,会自动渲染 Skill 的 README.md。支持完整的 Markdown 语法——表格、代码块、删除线、任务列表全都正常显示。外部图片(比如 GitHub 上的截图)也能正常加载,还加上了最大宽度限制,不会把卡片撑爆。点击任意图片都会弹出一个毛玻璃遮罩灯箱,展示原图,按 Esc 或点背景关闭。

上传 Skill
上传方式准备了四种:单文件 .md、压缩包 .zip / .tar.gz、以及浏览器直接选择文件夹(后端自动打包成 zip 上传,主要是详情页对 readme 进行内容提取方便一些)。
上传后系统会智能提取预览内容:优先找根目录的 README.md;找不到就往子目录里找;还找不到就拿第一个 .md 文件顶上。不用手动指定哪个是主文档。压缩包里的图片也会被自动处理——提取后上传到七牛云 CDN,预览中的图片路径自动替换成直链。

分类管理
后台随时可以管理分类——新建、重命名、删除。删掉某个分类的时候,该分类下的 Skill 会自动归入 "其他",不会丢数据。

访客与管理员权限
项目没有做公开注册,管理员账号在 .env 中预设,一人管理。主要是使用的对象存储免费空间、流量额度有限,做出以下权限区分。访客虽然不能直接下载但我一般都会附上原项目的 github 地址,如果觉得 skill 还不错可以自行去源仓库下载源码,点个 star 支持一下开发者。
访客能做的:浏览首页、按分类和关键词搜索 Skill、进入详情页查看 README 渲染内容、点击图片看灯箱大图。如果管理员上传时填了 GitHub 地址,访客可以通过 "前往 GitHub 下载" 按钮自行获取资源。
管理员能做的:上传 Skill(支持 .md / .zip / .tar.gz / 文件夹)、下载 Skill 原始文件、编辑 Skill 信息、删除 Skill、管理分类。所有上传、删除、下载操作都会记录到本地日志文件中。
技术栈
后端用 Go + Chi Router 做路由,SQLite(modernc.org/sqlite,纯 Go 无 CGO)做数据库,Go 标准库的 html/template 做模板引擎,Goldmark 渲染 Markdown,七牛云 Kodo + CDN 做文件存储和下载加速。
前端没用什么框架,CSS (CSS 变量驱动毛玻璃 + 暗色模式 + 响应式),JS 只引了一个 Alpine.js 处理主题切换和图片灯箱。认证用 gorilla/sessions 做 Cookie Session,管理员账号预置在 SQLite 里,没有注册流程。日志是自己写的 logger 包,按文件大小滚动——单文件上限 10MB,最多保留 5 个,磁盘占用硬封顶 50MB。
核心设计决策
单文件部署。 整个应用编译为一个 24MB 的二进制文件,SQLite 嵌入其中,不依赖任何外部服务。拷贝到服务器上,旁边放 .env 和 template/、static/ 目录,一个 ./skill_market 命令就跑起来了。
下载不走服务器带宽。 云服务器只有 3Mbps 的带宽,下文件超级慢,于是考虑使用云对象存储。Skill 文件上传后直传七牛云 Kodo,数据库只存 CDN 链接。用户点击下载时,服务器做一次 302 Redirect 到七牛云直链,实际传输完全由 CDN 承担。3Mbps 的小水管只处理页面请求,绰绰有余。
智能预览提取。 上传 zip/tar.gz/ 文件夹时,后端会在压缩包内按优先级查找可预览内容:根目录 README.md → 子目录 README.md → 根目录第一个 .md → 任意 .md。找到后提取文本存入数据库,详情页通过 Goldmark 渲染为 HTML。用户不需要手动指定哪个文件是文档。
图片路径自动重写。 压缩包中 Markdown 引用的本地图片(如 ),上传时会被自动提取、上传七牛云,路径替换为 CDN 直链。这样详情页渲染出来的 <img> 标签直接指向 CDN,不会出现相对路径加载失败的问题。
按空间滚动的日志。 日志不是按天轮转,而是按文件大小:单个日志文件上限 10MB,超过自动切到下一个;总共最多保留 5 个文件,超出删最旧的。磁盘占用硬封顶 50MB,适合小容量系统盘。
分类可管理。 分类不是硬编码的,后台可以增删改。删除分类时,该分类下的 Skill 自动迁移到 "其他",不会出现孤立数据。
部署
我把 GitHub 链接通过飞书丢给服务器上的 Hermes,它自己走完了全流程:拉代码、装依赖、编译启动、写 systemd unit(进程守护 + 开机自启 + 崩溃自动重启)、配 nginx 反向代理、certbot 自动申请 Let's Encrypt 证书搞定 HTTPS。中间出了几个小问题,Hermes 直接改代码修好跑通,最后我给了 GitHub Personal Access Token,它顺手把改动提交到了我的仓库里。

最后
目前的效果我还是比较满意的,希望能坚持维护吧。在博客主页顶部导航栏 ‘项目集’ 中点击 ‘Skill 商城’ 或者直接访问 skill.rawleycode.art 即可跳转项目页面。
如果你也用 Agent 工具比较多、攒了不少 Skill,有和我同样的困扰,可以看看这个小项目,配好 .env 就能跑起来。
当然,这只是个为解决个人痛点而写的轻量工具,肯定还有不少不成熟和需要打磨的地方。如果你感兴趣,欢迎来看看、提提建议,一起让这个小工具变得更顺手。
代码已经在 GitHub 上开源,链接:https://github.com/xjwukk/skill_market,感谢每一个停留的目光。