跳到正文

makerskills

二十一个给个人经营者用的 agent 技能——decide、unstuck、maker-council、deep-research、second-brain、company-brain、domain、jab-hook、pm、personal-cfo 等等——每一个都是一份用 Markdown 写的工作流文档,而不是一个程序;装进 Claude Code、Codex、Cursor 或任何认 Agent Skill 格式的环境就能用,而所有个人数据都放在仓库碰不到的一个配置目录里。

Screenshot of makerskills
编辑截图, 30 Sep 2026makerskills ↗

这是什么

makerskills 是一套给个人经营者手艺用的 agent 插件,共二十一个技能,装进 Claude Code、Codex、Cursor 或任何认 Agent Skill 格式的环境,并按工种分组:三个用来造更多东西的元技能(skillify、toolify、loopify)、决策与策略(decide、unstuck、maker-council、business-brainstorm、deep-research、domain)、知识与内容消化(second-brain、company-brain、read-book、watch-video、ingest)、产出(jab-hook、slide-deck),以及运营杂务(pm、personal-cfo、company-cfo、paste、social-fetch)。整套东西底下只有一个想法:SKILL.md 就是技能本身——Markdown 就是工作流逻辑,没有构建步骤,迭代技能等于改文字,而任何人都能照着文档手动把步骤跑一遍,不必依赖那个把它自动化的宿主。所有个人数据都活在另一个配置目录里,只通过一个环境变量被找到,所以仓库里没有密钥、没有真实作品集、没有客户名字,可以放心 fork;二十一个技能加起来是 90 个文件、587 KB,全部由一个人写和维护。版本同时跑两条语义化线,一条给插件的发布标签,一条给单个技能,于是同一次发布里可以同时装着版本号完全不同的技能;技能之间按名字互相调用,被引用最多的是 watch-video、skillify 和 second-brain。整套东西真正的产物是文档:一个技能就是一份人也能读、能照着做的工作流说明。

谁做的这个仓库唯一的贡献者:71 次提交全部来自同一个账号 coreyhaines31,同一个名字、同一个邮箱,贡献者列表里再没有别人。其中 30 次提交带共同作者尾注并指名某个 Claude 模型——Fable 5 二十条、Opus 4.7 十条。README 结尾一行写他是 Conversion Factory 与 Magister 的创始人;他另有一个公开技能包 marketingskills,含 46 个营销技能,这里的 maker-council 就是从那个包的 marketing-council 改来的。

它是怎么搭起来的

组成 · 6

核心想法是:真正耐久的产物是文档,不是程序。一个技能就是一个装着 SKILL.md 的目录,那份 Markdown 就是工作流逻辑:没有构建步骤、没有测试框架、没有编译,迭代等于改文字,调试等于读文件,行为和文档是同一件事,而任何人都能照着步骤手动跑完、不必依赖把它自动化的宿主。两个后果决定了其余一切。第一,凡是涉及个人的东西都必须放在仓库够不着的地方,于是整个包被拆成一个通用的公开树和一个私有配置目录,技能靠一个环境变量找到后者;这条界线由三次动作落实:重写历史、一份 gitignore、以及一次把五个技能的归档搬出去的数据丢失修复。第二,组合优先于完备——二十一个小技能按名字互相调用,而不是一个大而全的东西——所以那张组合图里的引用次数是有分量的信息而不是装饰,也所以扩展家族被一条写下来的规矩锁在三个。版本在这里被当成接口的一部分:两条各自独立的语义化线,并明确写出各自的 patch、minor、major 是什么意思。

skills/
二十一个可独立安装的目录,整棵树 90 个文件。每个目录一份 SKILL.md,需要时再加一个 references/:最大的是六文件 52 KB 的 slide-deck,然后是七文件 48 KB 的 company-cfo、十文件 39 KB 的 maker-council(含八份顾问档案与一份模板),以及六文件 38 KB 的 skillify(覆盖改编分桶、license 检查、版本传播与变更类型)。
根目录文档
README.md(14,960 字节)装着安装命令、五分钟上手路径、从意图到技能的对照表、技能表和组合计数;ARCHITECTURE.md(12,326 字节)装着两层结构图、家族划分、组合图、版本政策与八条设计原则。旁边还有 CHANGELOG.md(21,519)、EXAMPLES.md(20,637)、FAQ.md(8,222)、CONTRIBUTING.md(6,817)、INSTALL.md(5,617)与 BACKLOG.md(4,301)。
.claude-plugin/
让这个包作为插件可安装的两份清单——marketplace.json(963 字节)与 plugin.json(493 字节)——README 里的 marketplace 与安装命令消费的正是它们;旁边是一份 475 字节的 .gitignore,把私有层挡在仓库之外。
私有层
${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/,文档说它就是一个装着 Markdown 与 YAML 的普通目录:轮换作品集、Typefully 工作区 ID、本地语气规则、看板配置、七个按技能分的归档目录,以及自选的评议会成员。换机器时复制过去即可,不需要任何云同步,也不必担心 git pull 动到它。
元技能家族
skillify、toolify、loopify,各对应一种扩展编码 agent 的方式:用创建、改编、更新三种模式写一个技能;把集成、API 或 MCP server 接进项目;以及搭一个循环或定时任务。它们靠一条规矩被锁在三个,文档里也把它们写成一个命名家族,而不是三件互不相干的工具。
兄弟技能包与跨包引用
跨插件的引用在技能加载时按描述匹配解析,所以这里的技能可以叫另一个包的技能,反过来也行,不需要任何清单互链;ARCHITECTURE.md 列出了公开的兄弟包,而 skillify 会从配置目录读一份用户自建私有包的清单,让经验能在它们之间传播。

取舍,以及它替代了什么

  • 通用的公开仓库,旁边放一个私有配置目录 替代 用一个仓库装下每个用户的真实数据

    ARCHITECTURE.md 写明公开层不含个人数据、不含 API 密钥、不含真实作品集名,这才让它可分享、可 star、可 fork、可采纳;而私有层只是一个装着 Markdown 与 YAML 的普通目录,更新永远碰不到它。这条界线在记录里被落实了两次:2026-06-28 那次 git filter-repo 翻公开抹掉了此前的历史,以及七月那次——重装被证明会抹掉归档之后,五个技能的归档被搬了出去。

  • SKILL.md 就是技能 替代 用代码去实现那个技能

    这是写进文档的核心判断:Markdown 在调用时被读进去并执行,所以迭代技能就是改 Markdown,调试就是读那份文件,行为与文档是同一件事,而且每个技能都清楚到可以脱离自动化它的宿主、手动照着跑。

  • 用户状态放在配置目录 替代 把归档留在各自的技能目录里

    issue 5 里带着四步复现,用 skills CLI 1.5.15 证明安装会从源头重新同步技能、并毁掉用户存在里面的东西。修法是把每个受影响的归档搬到配置目录,为活下来的旧归档加一步尽力而为的迁移,并以一个写着 user-state safety 的 release 发出去。

  • 把新增问题单独标成一节,而不是改借来的问题集 替代 把机会成本直接加进 37signals 的 38 问里

    pull request 里写明,新开的一节清楚标注了不是 37signals 的东西,好让原来那套保持原样。于是 Q39 住在自己的一节里,分诊表和速查表被扩展去接上它,而不是把那套借来的清单悄悄改掉。

  • 扩展技能就三个 替代 在同一个命名家族里加第四个

    ARCHITECTURE.md 把这条写成规矩,并点名它拒绝的诱惑——家族停在三个,Hookify、Configify、Memorify 是被明确否掉的三个具体想法——这样才能保住那个把一个好记后缀对应到宿主真正暴露的三种扩展面的节奏。

  • 跨引用一个外部技能,而不是把它 vendor 进来 替代 把那个技能复制进树里

    pull request 记下了一个外部的 Apache-2.0 展示层技能:在调用它的技能里用一条精确的安装命令去跨引用,而不是 vendor 进仓库;许可先核对过,同一轮评审的发现也都应用到了这次集成上。

依据ARCHITECTURE.md(11,506 字符,全文读过)、README.md(14,882 字符;recon 报告只带了前 6,000 字符,其余从原始地址补取全文)、recon 报告里的三十个 issue 与 pull request(十二个 issue、十八个 pull request,编号 1 到 31,缺 20)连同评论串,以及完整的 90 个文件树及其体积。

制作过程

6 个阶段
  1. 01

    跑了十三周,然后安静了四周

    仓库建于 2026-06-03,同分钟的第一次提交就放下了插件清单、marketplace 条目和 README。今天还看得见的公开历史是被重写过的:ARCHITECTURE.md 记着 2026-06-28 用 git filter-repo 做的那次翻公开,把翻之前的个人数据从历史里全部抹掉;第一个 release v0.1.0 落在 2026-06-29,标题写着「first public release」。六天后,2026-07-06 一天里发了三个:v1.0.0 — Public launch、v1.0.1 — Fix SKILL.md frontmatter YAML、v1.1.0 — company-brain trust levels + /cb review。整条版本线很短——从 2026-06-29 到 2026-08-12,十六个 release、十六个 tag——其中六个的发布时间挤在 2026-07-01 的三十四秒内:v0.2.0 在 19:40:03,到 19:40:08 已经是 v0.5.0,接着 v0.5.1 和 v0.5.2 分别在 19:40:36 与 19:40:37。一条一次性冒出来的版本线,更像是事后把历史补上标签,而不是边写边发。最新的 release 是 2026-08-12 的 v1.5.0;可八月和九月的 pull request 里写着发了 v1.5.1、又把插件清单升到 1.6.0,这两个版本在 release 列表里都找不到。提交曲线说的是同一件事:总共 71 次,六月 36 次、七月 25 次、八月 9 次、九月 1 次,最后一次是 2026-09-04——本记录的四周之前。周围是 839 个星、69 个 fork、6 个 watcher、5 个开着的条目(三个 issue、两个 pull request),以及 MIT 许可下 587 KB 的文件。仓库没有归档,还有一个没合并的技能 pull request 挂在那里,所以本记录称它为 active,让那四周的空白自己说话。

  2. 02

    文档优先,以及让它可被 fork 的两层结构

    解释整体形状的是 ARCHITECTURE.md,它开头就是一张两层图。公开层放 skills/*/SKILL.md 与 skills/*/references/*.md,并明确不含个人数据、密钥和真实作品集名;私有层是 ~/.config/makerskills/,被 gitignore,装着内容轮换的作品集、Typefully 工作区 ID、本地语气规则、看板配置、七个按技能分的归档目录,以及自选的评议会成员。技能只通过一个契约找到它:MAKERSKILLS_CONFIG,默认 $HOME/.config/makerskills;只有路径确实在别处时才加技能专属变量。整套按工种分成五个家族——元技能、决策与策略、知识与内容消化、产出与创意、运营与杂务——另有一节讲横跨它们的两种模式:个人与团队的同源兄弟(second-brain 对着 company-brain,personal-cfo 对着 company-cfo),以及那组扩展三件套。三件套身上带着仓库里最硬的一条规矩:「Rule of 3: the family stays at three. Resist Hookify / Configify / Memorify temptations.」组合关系是被量出来的,不是嘴上说的:同一份文件里有一张图,数每个技能被多少处兄弟上下文引用——watch-video 54、skillify 51、second-brain 48、slide-deck 38、company-brain 33、domain 32——采纳顺序也是从这些数字推出来的:先把中心技能配好,因为 watch-video 要 yt-dlp、ffmpeg 与 MLX-Whisper,而 second-brain 要一个 vault 路径。版本在这里是政策而不是习惯:两条语义化线,一条给插件标签、一条给单个技能,各自写明什么算 patch、什么算 minor、什么算 major,并直说 v0.5.0 的一次发布里可以同时装着 0.1.0、0.1.1、0.2.0 和 0.3.1 的技能。

  3. 03

    那条 LinkedIn 私信,把用户状态搬出了安装目录

    issue 5 最能说明问题是怎么找到作者的:一份用户 bug 报告,走的是 LinkedIn 私信,来自 Cotopaxi Lyon,Lyon 的创始人。它其实是三份报告。第一份是数据丢失——五个技能把用户状态归档在自己的技能目录里,而 npx skills add 会从源头重新同步技能,于是下一次安装就把归档抹掉;issue 里带着一段四步复现,2026-07-10 用 skills CLI 1.5.15 跑的:装 decide、往它的归档目录写一个文件、重跑同一条安装命令,然后用户那个文件不见了,只剩仓库自带的索引。第二份是十六处性别代词,散在九个文件里,把用户称作 he。第三份是 slide-deck 模板把作者自己的身份写死了——页脚是 @coreyhaines · corey.co,默认目标也是他的站点——于是用户渲染出来的演示文稿可能带着别人的名号。三件事在同一个 pull request 里修完:归档搬到 ${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/<skill>/archive/,每个受影响的技能都加了一步尽力而为的迁移,好把活下来的旧归档带走,另有五个技能升到 0.2.0。写这次修复的过程中,同一类 bug 又在三个地方被翻出来——jab-hook 里的 Typefully social-set ID 与累积的模式、toolify 里用户存下的配方、pm 里的看板快照缓存。承载这次修复的 release 标题是 v1.2.0 — archives out of the install tree (user-state safety):当一个缺陷被当成规矩而不是事故来对待时,看起来就是这个样子。

  4. 04

    外面的两次报告,一次改了技能,一次还开着

    这里最有用的 issue 里,有两个讲的是「被陌生人指出问题」。2026-07-16,作者开了 issue 11,记录 @rabahrahil 在 X 上指出 decide 的问题集里没有机会成本这一问。核对写在 issue 里:37signals 那 38 问已经很接近——Q36 投入回报、Q37 更简单还是更难、Q20 会不会制造新工作——但从来没有直接问「答应这件事,等于放弃了什么」。修法比报告本身更小心:questions.md 里新开一节「House additions」,并明确标注这不是 37signals 的东西,好让借来的那套保持原样,Q39 就住在这里;同时把分诊表接上——涉及钱的决定走 Q36、Q38、Q39,重大的时间或注意力承诺单独一行。decide 升到 0.3.0,插件升到 v1.4.0,frontmatter 用 js-yaml 重新验过。第二个是 issue 2,开在 v1.0.1 修掉五个技能 description 里未加引号的冒号那一天:那处断裂在 skill 页面上被 GitHub 渲染成 YAML 报错横幅,而 Claude Code 宽松的解析器在本地把它藏了起来——发布当天就被用户抓到。issue 提议加一道持续集成守卫,严格解析每个技能的 frontmatter。它一直开着,直到 2026-08-10 一位叫 kasparovabi 的评论者把它变得更锋利:frontmatter 规范给 description 上限 1,024 字符、name 上限 64,而他是把值真数了一遍而不是目测——当时 main 上的十九个技能里有六个超限,company-brain 1,411 字符、skillify 1,267 字符。这也是全部讨论串里唯一一条不是作者本人写的评论。

  5. 05

    先开 issue,和一个故意搁置的技能

    这一段时间里有两个技能是先提案、后动手。unstuck 来自 2026-07-15 的 issue 9,里面有一张分工表把它和邻居分开——decide 在已知选项之间选,business-brainstorm 评估一个生意点子,deep-research 收集外部信息,而这个技能是在看起来没有选项时造出选项;同一天还记下了前一天的决定:它必须对 agent 主动生效而不只是等人来喊,所以它的描述要在 agent 自己快要报「做不到」的时候触发。评议会走得更远。issue 1 开在 2026-07-02;成品以 pull request 13 的形式出现,标题上标着「DRAFT on purpose — do not merge until the unstuck launch has gone out」,搁置日期是 2026-07-15,2026-08-12 解除,同一天 v1.5.0 把它发了出去,并注明作者已同意发布。它的设计答案全都写了下来:八人长凳——Fried、Musk、Bezos、Jensen Huang、Iger、Graham、Naval、Blakely——按作者的说法是为了让视角互相撞车;按问题类型落座三到五人,并指定一名唱反调的人,理由是「an agreeing council is a mirror, not a board」;发言要落在各成员的档案文件上,那些档案经过了 Codex 两轮核验;可选的一次实时检索;一张分歧地图;以及主席综合,最后交棒给 decide。公开人物的档案随仓库发布,自选成员与会话归档住在配置目录里。发布它需要同步 README 与 changelog 里的目录,pull request 里写明了它推动的数字:十九个技能到二十个。

  6. 06

    还开着的东西,和被移出去的东西

    快照拍下时还有两个 pull request 开着,而它们更像论证而不是补丁。第 30 号加的是 /radar:按计划轮询已知来源,把好的内容推进第二大脑;讨论串里记着它自己设计的两轮修订——v0.2.0 读完几个兄弟技能后绕开原先的局限,补上无需密钥的 Bluesky 与联邦宇宙实例接口;v0.3.0 则把付费抓取服务升为 X 与 LinkedIn 的主路径,因为作者真的调了那几个接口:花掉两个额度、还剩 22,195 个,并发现 X 的结果不按时间排——同一次调用先返回 2026-08-27,然后是 2024-08-19,再是 2025-06-15。它写下的取舍也很直白:每次运行只出一份摘要,只有高分条目自动入库;每个来源各存一份已见 ID 的状态文件,所以计划任务之后手动再跑一次也是安全的;打分只读元数据、抓正文另有一步。加进去的东西也不是全都留下了。vibecad——木工优先、把大白话变成 OpenSCAD 脚本并无头渲染四视图预览的对话式参数化 CAD 技能——在 2026-07-26 用 git filter-repo 连着完整历史抽到自己的私有仓库,并从树里删掉;issue 里用一句话记下这个判断:它不属于这个目录。这次搬动在发布流程上留了痕:main 上带着它的加入与移出,开发分支上没有,于是发布用的 pull request 14 冲突了,后来才有一个 pull request 把 main 合进来、把 changelog 对齐,v1.5.0 才发得出去。文档也会漂:README 数的是二十一个技能、表里有 ingest,而 ARCHITECTURE.md 还写着二十个,家族表里也没有 ingest 那一行。在这里,产品和它的文档是同一件东西,所以其中一个落后一个版本值得记下来。

相关档案

全部档案 →