ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

热度不靠首发:一个规则仓库,为什么半年后还在涨

热度不靠首发:一个规则仓库,为什么半年后还在涨

热度不靠首发:一个规则仓库,为什么半年后还在涨

【免费下载链接】taste-skillAgent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages项目地址: https://gitcode.com/GitHub_Trending/ta/taste-skill

一个开源项目最风光的一天,通常是它第一次被大 V 转发的那天。此后曲线单调下滑,除非发新版。

taste-skill是个例外。它不是新项目,仓库里跑的已经是2.1.5;它的传播周期也不是一周两周,而是从 2025 年下半年一路拖到 2026 年 10 月,中文技术社区每隔几周就会冒出一篇新的解读、实测或踩坑记录。更反常的是,这些文章写的东西并不重复:早期在讲"SKILL.md 怎么注入审美",中期在讲"三个旋钮",近期在讲移动端与 App 屏幕、讲浏览器检查器、讲 V2 之后页面还认不认得出是 AI 做的。

首发红利早就吃完了。那它靠什么继续涨?

这篇文章不复述 README,而是把仓库当成一份可审计的证据链:看它的版本节奏、看它的数据结构、看它那些"不性感"的修复记录,回答三个问题——长尾增长到底来自哪里,技能类项目和工具类项目的热度为什么长得不一样,以及什么样的项目具备二次起量的资格。


一、把时间轴摊开:热度不是一条曲线,是一串台阶

先看社区侧的事实。把公开可检索到的中文文章按内容代际归类,会看到非常整齐的分层:

时间(发布)文章主题重心对应的仓库阶段
2025-09SKILL.md规则文件、13 个技能、三档参数v1 时代
2026-03 ~ 2026-06反模板约束、三大旋钮、VARIANCE/MOTION/DENSITYv2-experimental
2026-06 ~ 2026-07Cursor 集成、Key 配置、技能不生效排错安装面扩张期
2026-08 ~ 2026-09"81K Star"、结构化规则集、活文档维护体量叙事期
2026-10V2 效果对比、App 屏幕、检查器与预飞自检v2.0.0 / v2.1.x

需要说明一点严谨性问题:社区文章里出现的星标数字彼此矛盾——有人在 7 月底写 6 万,有人在 9 月中写 8.1 万,又有人在 10 月初写 5.2 万。这些是二次转载与洗稿造成的时间戳错乱,只能当作量级参考,不能当成精确的增长曲线。真正可信的时间锚点在仓库内部:CHANGELOG.md记录2.0.0发布于 2026-10-13,随后2.1.0到2.1.5全部压缩在 10-19 至 10-25 这一周内。

这就构成了第一个反常识的观察:这个项目的"活跃期"和它的"传播期"是错位的。内容创作者的节奏,明显慢于代码提交的节奏;一篇文章从动笔到发布,往往跨过了一个甚至两个小版本。于是每一轮传播,讲的都是"上一版"的故事,而仓库里已经又长出了新东西。

台阶就是这么形成的:不是一条被反复加热的旧曲线,而是"能力扩张 → 内容消化 → 再扩张"的循环。要理解它为什么能循环起来,得看三条具体的供给来源。


二、长尾增长的三条来源

来源一:安装名不变,让存量用户变成分发渠道

README 里有一句很不显眼、但极其关键的话:已经装过的人,重新跑一遍安装命令即可,安装名没有变。

npx skills add https://github.com/Leonxlnx/taste-skill --skill "design-taste-frontend"

从 v1 到 v2 再到 v2.1,技能的内容被整体重写过至少一次,skills/taste-skill/下的SKILL.md已经膨胀到 39KB,九个library/*.json加起来超过 1.7MB,脚本从"一个 Markdown"变成了五个可执行文件。但对外暴露的那个名字design-taste-frontend始终没动。

这不是随手为之。仓库里同时维护着三种安装通道:

  • npx skills的安装名(跨 Agent 通用)
  • .claude-plugin/marketplace.json(Claude Code 插件市场,name: taste-skill,version: 2.1.5)
  • .codex-plugin/plugin.json(Codex 插件,版本号与前者逐字对齐)

外加一个 install.sh,用符号链接代替复制:

./install.sh会把技能软链进 Claude Code(--codex对应 Codex,--all-agents两者都装),所以一次git pull就能就地更新。

软链这件事看起来只是省磁盘,实际是把"升级"的成本压到了零。存量用户不需要重新搜索、重新比较、重新决策,只要拉一次代码,能力就换了代。对一个"输入层"项目来说,这是最重要的一条分发杠杆:你不是在争取新用户,你是在让老用户每一次升级都重新体验一次产品。

而那些被重新体验的用户,正是下一波内容的作者。

来源二:每个版本都新增"可被复述"的素材

规则类项目最容易死在一个地方:它的全部内容就是一篇文章,写完了就没得写了。

taste-skill的应对方式是把能力边界一层层往外推,每一层都自带新的可写点。

2.0.0(2026-10-13)不是一次修订,而是一次重写。旧版那套"三个旋钮"的哲学被保留,但载体换成了"一个目录":指令、九个参考文件、一个素材库、四个零依赖脚本。这一步提供了大量可写的机制细节——发牌、素材检索、浏览器检查、盲测。

2.1.0把范围从"页面"扩到"应用屏幕"。SKILL.md开头第一件事就变成让 Agent 判断:这是给人读的页面,还是给人用的界面?后者走完全独立的一条路——自己的发牌命令draw.mjs --app、自己的样式库、自己的检查器inspect.mjs --app、自己的规则文件 app-screens.md。这一个版本直接给社区贡献了一个新话题:"AI 做的后台长什么样才算专业"。

2.1.3反而在做减法:把七个经典技能拆到独立仓库,本仓库只留一个design-taste-frontend。理由是"装这个仓库不该意味着 Agent 可能挑到一个更老的技能来完成工作"。拆出去的部分各自拥有了独立的叙事空间——风格实验归一个仓库,图像生成归另一个。

2.1.5则是社区修复合集,七条 fix,全部指向真实用户报的问题。

这条节奏线的精妙之处在于:它不是"发版 → 写公告",而是"发版 → 产生新的一类可被第三方验证的事实"。下一节展开。

来源三:可复算的数字,而不是"效果显著提升"

绝大多数 AI 工具类项目的宣传是形容词:"更专业""更像人做的""质感提升明显"。形容词无法被检验,也就无法被二次引用。

taste-skill选择了一条更笨的路:把结论做成可复算的表格,并且明确禁止自己人把数字说漂亮。research.md 开篇第一句就是:

Everything numeric in this skill comes from here. Cite these figures; do not round them up or invent others.

文中给出的盲测记录是这样的(六份客户简报,每份由全新 Agent 分别"无技能""带本技能""带另一个已发布的设计技能"各建一次,截图匿名后由独立评审按 Awwwards 权重打分):

轮次简报数本技能无技能基线另一技能胜出
146.67.76.81/4
237.18.0—0/3
337.57.5—1/3
4(未见过的新简报)36.97.97.50/3
5(重复第 4 轮)37.77.87.22/3

请注意前三轮:这个项目在公开自己的失败。第 1 轮它比"什么都不用"还低 1.1 分。作者没有把这段删掉,而是把它留在仓库里,后面紧跟着一句"每一轮之后都根据评审给出的理由和构建者的笔记做了修订"。

同章节还给了另一组更硬的数字:在检查器下,最终版本每次构建 0 个 FAIL,而"无技能"基线每次 8 到 13 个 FAIL——眉标、等宽字体标签、01/02/03 编号、细分割线、渐变、静态阴影、三行标题、13px 以下正文。

这就是长尾传播真正的燃料。一个可以被别人重新跑一遍、并且可能推翻你的实验,比十句"效果惊艳"更有传播力。因为任何想写这个题材的人,都能从这两张表里直接取到论据;而任何想质疑它的人,也必须回到同一组数字上,而不是隔空开火。

顺带一提,research.md里还老老实实写了限制条件:每份简报每轮只有一位评审,单个分数大概有半分的噪声;评审是模型不是人;第 5 轮用的简报在第 4 轮里出现过。这种"自曝其短"的写法,恰恰是它能被反复引用的原因。


三、真正的护城河不在 SKILL.md,在它背后的三样东西

中文社区有一句很尖锐的评价:市面上几千个 Agent Skill,大部分只是"换了壳的 Prompt"。这句话对taste-skill早期版本是成立的——它当年确实只是一份 Markdown。但现在这个仓库的重心早就转移了:SKILL.md只是入口,真正决定输出差异的是三样工程件。

1)结构化素材库,而不是形容词词汇表

skills/taste-skill/library 下是九个 JSON,规模如下(按当前文件实际条目统计):

文件条目内容
directions.json20研究方向:每种是一个"创意引擎",带适用行业、语气、所需素材
heroes.json58首屏构图
sections.json185分区构图
type.json44免费字体组合的排版系统
palettes.json56配色(含明暗比例,不只是色值)
motions.json18动效签名动作
sites.json202拆解过的真实站点
app.json7 风格 / 5 外壳 / 25 屏型 / 13 类产品应用屏幕
photos.json19 个氛围主题占位照片(Lorem Picsum / Unsplash)

关键不是数量,是每一条都带约束。以directions.json的第一条为例,它叫 "The name as a monument"(把名字当作纪念碑),限定适用行业、语气、需要的素材,然后给出这个方向的具体做法:名字大到成为建筑,被视口裁切,或堆叠满屏,首屏上不再有第二个东西与之竞争。

这种东西模型自己"想"不出来吗?想得出来,但它每次都会想到同一个——品类默认值。项目在 draw.mjs 顶部把这件事写成了设计前提:

The script chooses, not the model: a model asked to pick a direction returns the category default every time.

2)发牌器:把"随机"做成可复现的工程

draw.mjs不是随机推荐器,它做的是"发牌":按简报(行业、语气、分区、真实拥有的素材)过滤出候选池,从中发三张,让 Agent 挑一张能承载"只有这个客户才有"的东西的方向,然后按选定方向把排版、配色、首屏、分区、参考站一并发出。

随机性是可注入种子的:

let seed = opt('seed') !== undefined && opt('seed') !== true ? Number(opt('seed')) : randomInt(1, 2 ** 31 - 1);

同一个--seed能复现同一套方向,这让"效果对比"这件事第一次具备了实验意义。同时它会记住最近的发牌记录(~/.taste-skill/history.json),避免连续两个项目长得一样——这是一个很朴素的产品判断:同质化不是模型的毛病,是采样分布没有记忆的毛病。

更重要的是,发牌结果是一张可以被审计的"方向单",落在项目目录的.taste-skill/direction.json。它包含每个蓝图与"家规"冲突的地方。重新发某一个槽位(--redraw hero|type|palette|...)必须给出理由:与品牌约束冲突、缺少所需素材、或者这个分区装不下真实内容。理由要写进报告。

这就把"AI 的设计决策"从不可见变成了可追溯。可追溯,才可讨论;可讨论,才有内容。

3)检查器:把"好不好看"降级成"过不过"

这是整个仓库最不像"规则文件"的部分。inspect.mjs 用 Node 内置 WebSocket 直连本机 Chrome 的 DevTools 协议,零依赖,把页面在 1440 / 768 / 390 三个宽度下真实渲染、测量、截图,然后跑一套规则。

规则分两级,写在 rules.mjs 开头:

FAIL= 被禁的套路或坏掉的页面,只要还剩一个,工作就没做完。WARN= 通常是错的;保留它需要一个你能当着设计师面说出口的理由。

FAIL 名单读起来像一份"AI 味"的尸检报告:眉标(标题上方的小标签)、代码之外的等宽字体、装饰性编号、三张同构图标卡、渐变、静态阴影、奶油色配赤陶橙、靛紫、首屏无焦点、正文小于 13px、横向溢出、断图、标题超过两行、页面不居中、区块一侧留空、空白带、无标题区块、文字贴边……

而且阈值不是拍脑袋来的。2.1 版本新增的"页面框架"检查(off-centre、lopsided、empty-middle、blank-gap、untitled-section、edge-text、ragged-edges)的阈值,来自对最近 100 个 Awwwards Sites of the Day 的实测:强页面的外边距误差在几个像素内,约百分之一的文本区块会空掉一半宽度,82% 的文本区块以标题开头。

这套东西的价值在于,它把"审美"这个不可辩论的对象,切成了几十个可判定的布尔值。可判定就能自动化,能自动化就能进 CI,能进 CI 就能被第三方复现。

而"能被复现",就是长尾的全部秘密。


四、技能类项目与工具类项目,热度曲线为什么不一样

把taste-skill和典型的工具类项目(CLI、框架、SDK)放在一起对比,差异是结构性的,不是运营层面的。

维度工具类项目技能类项目
触发方式用户显式调用寄宿在 Agent 里,写页面时被动触发
使用频次项目周期内集中每天多次,但单次感知弱
热度驱动版本发布、性能基准新场景覆盖、新对比截图
传播介质教程、迁移指南前后对比图、禁则清单、"旋钮"
衰减原因有明确替代品宿主模型换代、规则失效
维护成本集中在核心逻辑分散在兼容性、检查器、素材版权

三条值得展开。

第一,技能类的传播介质天生更友好。工具类项目要讲清楚价值,得先讲清楚使用场景,再讲架构,读者要付出理解成本。技能类不需要:一张"改前/改后"的截图,加上一句"这就是模板味的来源",信息就传递完了。taste-skill的禁则清单(眉标、等宽、编号、细线、渐变)之所以在中文社区被反复抄写,正因为它们是可命名的症状——读者一看就知道自己见过。

第二,技能类的热度受宿主节奏支配。它的能力边界不完全由自己决定。宿主换了解析器、换了插件协议、换了技能发现机制,技能就可能一夜失效。仓库里最典型的一次事故记录在2.1.2:

design-taste-frontend在 Claude Code 里不加载。2.1.0 新增的 description 里有一个未加引号的:,YAML frontmatter 解析失败,技能被静默丢弃("Unknown skill")。

一个冒号,让所有写了这个项目的评测文章同时过期——因为读者照着装,装不上,还不报错。这种失效模式是工具类项目很少遇到的:工具报错,技能静默。

应对方式也很说明问题。修复之后,仓库立刻加了 tests/frontmatter.mjs,用严格 YAML 解析器逐个解析每份SKILL.md的 frontmatter,检查 name 的 kebab-case 规则、description 长度上限(Agent 侧最多 1024 字符)、disable-model-invocation的类型,还要校验三个插件清单里的每个技能路径都真实存在。然后 .github/workflows/check-skills.yml 在每次 push 和 PR 上跑它。

第三,技能类的维护成本会从"写规则"漂移到"修基础设施"。看2.1.4的条目:

一次 inspector 运行可能删掉另一次仍在运行的浏览器 profile。

原因是 macOS 和 Linux 上 Chrome 不留lockfile,2.1.0 引入的清理逻辑只能按时间判断"这个 profile 没人用了",于是一个长任务可能被后启动的任务把 profile 抽走。修复方式是给每个 profile 写一个taste-skill-owner.json,记录机器名和两个进程号(运行本身、以及它拉起的 Chrome),只有确认是同一台机器、且两个进程都已死亡时才回收;没有这个文件的 profile 永不触碰。同时删掉了那套按时间扫的逻辑,并补了回归测试。

再往前一版,2.1.5修的是图表标签与分栏标题的 HTML 转义(用户数据能注入标记了)、两个宽度共用 class 时截图互相覆盖(--widths 1280,1024,768,390会丢掉一张平板图)、斜体字重没有真正加载(浏览器在伪造斜体)、以及 ellipsis 截断文本被edge-text误判。

这些条目没有一条能写成爆款标题。但它们决定了一件事:别人引用你的数字时,那些数字还成立吗?一个检查器如果在长任务里偶发丢截图、偶发误报,那么"0 FAIL vs 8–13 FAIL"这组论据就会在某天被人推翻。长尾传播最怕的不是没人写,是写了之后被证伪。


五、一个容易被忽略的细节:把"不要做什么"写成了资产

翻开 references/tells.md 和SKILL.md的家规部分,会发现大量篇幅在描述"失败长什么样",而不是"成功长什么样"。

这不是风格偏好,是成本计算。描述成功需要形容词,形容词无法执行;描述失败只需要一条可判定的特征。所以整个项目采取的策略是:用禁则收敛下限,用素材库抬高上限。

下限那半边是可以被机器验证的,于是进了inspect.mjs;上限那半边(概念、构图、图片、动效)交给发牌器和人的判断,只保留一句可检验的自检句:

On this page,[something that belongs to the subject]becomes[the device the direction calls for].

以及一个"竞争对手测试":把最近的同类竞品代进这句话,如果句子依然成立,说明这个想法属于品类,不属于这个客户。面包属于每一家面包店;这条街的七扇门只属于这一家。

这个"下限可验证 / 上限靠判断"的分工,恰好解释了为什么这个仓库能持续产出可写的内容:每一条 FAIL 规则被触发,都会产生一个新的反例;每一个反例,都是一篇文章的素材。而反过来,如果项目只写"要高级、要克制、要有呼吸感",那么它写完第一版就再也没有第二篇可写了。

顺带一提许可证与素材这条线也做得很干净:默认只检索允许商用的授权(CC0、公有领域、CC BY、CC BY-SA),--get下载时把标题、作者、许可、来源写进项目里的assets/credits.json,页面必须带署名。examples/v2/CREDITS.md 就是这套机制跑出来的产物——每一张图都能追到维基共享资源的具体文件与授权类型。对一个以"真实图片"为卖点的技能来说,这既是法律底线,也是可信度的一部分。


六、可复用的判断:什么样的项目能二次起量

把上面的观察收敛成可操作的检查项。这不是"运营技巧",而是项目结构层面的判据。

1. 安装标识是否稳定,升级路径是否零成本。design-taste-frontend这个名字跨了三个大版本没变;install.sh用软链让git pull等于升级。如果你的项目每次重构都换包名、换目录、换配置格式,那么每一版都在清零用户,长尾从数学上就不可能发生。

2. 每个版本是否新增了"新的一类事实",而不只是"更好的同一件事"。v1 是规则文件;v2 是素材库 + 检查器;2.1 是应用屏幕;2.1.5 是社区修复。四个阶段对应四种完全不同类型的可写内容。如果版本之间只有"性能提升 20%",外部创作者没有新角度可写,热度必然一次性释放完。

3. 是否公开了可复算的数字,并且允许它不好看。那张盲测表里前三轮全是输的。这种事只有一种项目敢做:把"实验方法"本身当成产品的一部分。反过来,如果所有指标都是自家口径、不可复现、只涨不跌,那么它注定只能被引用一次。

4. 是否把"约束"实体化成可检查的东西。规则写成 Markdown 是文案;规则写成FAIL/WARN两级、带阈值来源、能进 CI,才是资产。前者随模型换代而蒸发,后者会随着每一次误报而被修得更准。

5. 是否有能力做减法。2.1.1让七个经典技能变成"必须点名调用",2.1.3把它们整个搬去独立仓库,2.1.1还删掉了full-output-enforcement。一个只增不减的项目,最终会变成没人能理解的合集;而拆出去的子仓库,每个都获得了自己的叙事寿命。

反向判据同样清晰。如果一个项目:内容与代码无法分离(全部价值在一篇长文里)、没有安装标识的连续性、没有任何可被第三方验证的产出、把失败数据藏起来、且每次更新都只是重写同一段 prompt——那么它的热度曲线一定是单峰的:首发即巅峰。


结语

回到标题里的那个问题:热度为什么不靠首发。

因为首发的本质是注意力的一次性分配,而注意力的总量在任何赛道都是有限的、快速枯竭的。真正能撑住长尾的,是别的东西:一个不会变的安装名,让老用户每次升级都重新体验一次;一套结构化的素材库与发牌器,让"随机"变成可复现的工程;一组敢于公开失败数字的盲测,让结论可以被别人重新跑一遍;以及一堆没人愿意写、但决定前面三样是否成立的基础设施修复——YAML 解析、浏览器 profile 回收、图表转义、截图命名。

这些东西没有一条适合做标题。但它们共同构成了一个前提:当别人想写你的时候,有真东西可写;当他们写完,你说的还是真的。

对规则类、技能类项目而言,这可能就是唯一可持续的增长模型。不是把声音放大,而是让事实密度足够高,高到每过几周,就有人愿意重新讲述一遍。

【免费下载链接】taste-skillAgent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages项目地址: https://gitcode.com/GitHub_Trending/ta/taste-skill

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进