Community写作与编辑github.com

juspay/kolu

撰写基于真实构建历程的 kolu 博客文章——挖掘功能背后的 Claude Code 会话日志以获得真实故事(对于大型项目,使用 ultracode 工作流在多个会话记录中展开),以作者口吻起草,并将其接入 Astro 网站。当被要求撰写关于已构建功能的博客文章或工程随笔时使用,尤其是那些应作为真实发生事件叙述、而非虚构营销文案的文章。

kolu 是什么?

Kolu 技能使 AI 代理能够通过直接挖掘 Claude Code 会话日志来撰写基于事实的工程博客文章,确保每篇文章都基于实际构建过程的真实事件、决策和教训,而非虚构的营销内容。该技能强调叙事驱动型文章,其中可视化元素(如轨迹图、前后对比卡片、时间线和流程图)基于真实数据(如时间戳、`ps` 输出和测量时长),并且每个图表都旨在论证观点,而非装饰。对于涉及大量努力的事项,它采用 ultracode 工作流——为每个会话记录分配一个代理以返回结构化注释——然后综合这些注释形成一份经过事实核查的摘要,从中起草文章,并由对抗性编辑进行审阅。该技能支持在 Astro 网站中集成,提供关于标题约定(非晦涩标题)、使用站点组件(如 `Prompt` 和 `Callout`)、为主题感知的内联 SVG 图表的明确指导,以及通过 MCP 在 Chrome DevTools 中验证每个图形以确保可访问性和准确渲染。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/juspay/kolu/tree/HEAD/.apm/skills/blog-post

Installed? Explore more 写作与编辑 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

撰写一篇 kolu 博客文章

一篇 kolu 博客文章是一篇第一人称工程随笔,基于实际发生的构建过程——死胡同、关键决策、教会教训的 Bug。其事实来源是产生该工作的 Claude Code 会话日志,而非虚构的营销文案。

展示故事,而非仅仅讲述。 好的文章依赖图形胜于文字:轨迹图、前后对比卡片、时间线、流程图、对比柱状图、真实截图——可视化比文本承载更多论证内容。每个图形都基于真实数据(状态时间戳、ps 输出、测量时长);图表是一种论证,绝非装饰。这一点适用于每篇文章,不仅仅是那些明显可视化的文章。

步骤

  1. 定位工作的会话。 找到功能背后的 Claude Code 会话日志(它们位于 ~/.claude/projects/ 下,每个工作目录对应一个子目录)。通过追踪 PR → 分支 → 日志来确定性地映射它们,而不是通过关键字搜索。

  2. 挖掘故事。 从日志中读取人类/助手之间的叙述,提取决策背后的原因、来之不易的教训和死胡同、具体的机制以及生动的逐字引述。当工作量超过少数几个会话时,使用 ultracode 工作流 展开——为每个会话记录分配一个代理,返回结构化注释——然后将这些注释综合成一份摘要,从中起草,并进行对抗性编辑审阅。摘要是经过事实核查的脊梁;切勿捏造数字、日期、引述或 PR。

  3. 以作者的口吻撰写。 除非另有指示,否则使用 pg 技能(Paul Graham 口吻),并事先确定内联文体风格。与现有文章的语体保持一致;新文章通常是对某篇旧文章的续篇。给它一个非晦涩的标题。 前置元数据中的 title 是一个直白、不言自明的标题,陈述发生了什么事并传达收益——例如“将 Kolu 的 macOS e2e CI 通道提速 14 倍”,而不是一个无法解析的缩写或巧妙的诱饵。让 description 暗示具体的吸引点(例如 64 GB 泄漏、一个字符的排版错误)。这是有意从早期富有暗示性的标题向能事先告诉读者将学到什么的标题的转变——将其应用于每一篇新文章。当标题有意保持富有暗示性时(例如“代码的时空”),在前置元数据中给它一个可选的 subtitle——一行直白的话,将隐喻解密为读者将学到什么;它作为副标题呈现在主标题下方。

  4. 将其接入网站。 文章存放在 website/src/content/blog/ 下的短且稳定的 slug 中(文件名即 URL)。使用站点的组件来处理标注、GitHub PR/问题引用和目录;为每个主张引用真实的 PR,并为文章提供两级标题大纲,以便目录嵌套——将标题写成每个要点板块的直白路标,而非诱饵,这样目录列表本身读起来就像缩略版的论证。在首次提及每个技术、工具、库、格式和产品时进行链接——例如 [Playwright](https://playwright.dev/)、[ffmpeg](https://ffmpeg.org/)、CDP 方法链接到其文档页面——就像现有文章所做的那样;一个没有链接的命名技术就是遗漏。当内容是一系列步骤或简短的枚举(例如两个都有缺点的 API 方法、两个陷阱)时,使用 markdown 列表或表格代替密集段落——将论证保留在散文中,但停止将可枚举内容隐藏在段落中(这是对 pg 技能“不要用项目符号代替论证”规则的有意放宽,特定于某篇文章)。当你引用作者字面输入到代理 CLI 提示框(Claude Code、Codex 等)中的文本作为转折点时,使用 Prompt 组件(website/src/components/Prompt.astro)来渲染——<Prompt>…</Prompt>——而不是普通的块引用,这样读起来像人在代理输入字段中打字;请参考 auto-demo.mdx 的用法。平衡散文与截图和代码——将图片托管在站内,不要使用热链接。

    图形:手写内联 SVG,支持主题感知。 直接在 MDX 中将图表绘制为内嵌 <svg>(无需图表库)——参见 macos-e2e-lane.mdx 中的五个参考图形。使用站点中的 --color-* CSS 自定义属性为每个笔触和填充着色(例如 --color-ink、--color-ink-dim、--color-ink-muted、--color-rule-strong、--color-amber、--color-live-alert、--color-live-lime、--color-void……;调色板位于 website/src/styles/global.css),以便图形自动适应浅色/深色主题——切勿硬编码十六进制值。为每个 <svg> 提供 role="img" 和描述其显示数据的 aria-label。

    MDX/SVG 陷阱(在 macOS-lane 文章中学到的艰难教训)。 Astro 的 MDX 会原样传递驼峰式 SVG 呈现属性(如 textAnchor、fontSize),而 SVG 会静默忽略它们——每个标签都会以 16px 左对齐的默认值渲染。请使用每个属性的真实 kebab-case SVG 拼写:text-anchor、font-size、font-weight、font-family、stroke-width、fill-opacity。真正驼峰式的 SVG 属性(如 viewBox)保持不变。仅凭肉眼观察容易遗漏——通过在实际浏览器中对构建后的站点测量 getBBox() 来捕获问题。

  5. 验证并发布。 构建站点并确认其渲染正常,然后使用 chrome-devtools MCP 对构建后的输出在浅色和深色主题下验证每个图形——确认标签确实正确放置(getBBox()),而不仅仅在 DOM 中存在——然后再开启 PR。仅运行文档更改可能触发的 CI 通道(网站构建加上格式化和 lint——请参见 ci 技能)。

相关技能