Ch. 4 — Notes · § 012026·04·26 · — words
Ch. 4

这个周末我让 Agent 干了五件事,踩了三个坑

§ 01
COLOPHON
Source Serif 4 · JetBrains Mono · Forge Codex
TOOLS
Next 15 · MDX · framer-motion

cron 时区、生成信息卡、翻译上下文工程文章、更新网站项目页。每个坑都是真实的工作流,记录一下。

大家好,我是极客杰尼。

这个周末没做什么大事,但从早到晚一直在跟 Agent 协作干活。修了一个 cron 时区 bug,跑通了一条信息卡工作流,翻译了一篇 1.6 万字的技术文章,更新了个人网站的项目页。

每件事都踩了坑,每个坑都是一个要记住的知识点。

今天就聊聊这个。


§cron 任务没按时跑,原因很蠢

周六早上起来,发现 AI Builder Daily 的定时推送没在预期时间执行。

查了一下,原因特别低级:cron 表达式写的是 UTC 时间,不是上海时间。

我之前配的时候直接写了 0 10 * * *,以为系统会自动识别时区。它不会。老老实实按 UTC 跑了,等于上海时间下午六点才执行。

改起来倒也简单,UTC+8 反算:

  • ·上海 10:00 = UTC 02:00,写成 0 2 * * *
  • ·上海 10:30 = UTC 02:30,写成 30 2 * * *

手动触发了一次验证,数据拉取正常,1.8 秒出结果,1559 字符。到这一步都没问题。

推送到微信的时候,又出事了。


§微信推送报了一个我没见过的错

手动触发之后,微信端报了这么个错:

Timeout context manager should be used inside a task

翻了一圈日志,定位到原因:Hermes 网关层的 asyncio bug。cron 任务的交付跑在一个不是标准 asyncio task 的上下文里,Python 3.11+ 的 asyncio.timeout() 直接炸了。

数据拉取很快,不是性能问题。同样 3000 多字符的另一个定时任务能正常推送,也不是内容长度的问题。就是微信 SDK 那一层的 asyncio 上下文不对。

临时解法:把生成的信息卡图片上传到 jieni.ai 的 public 目录,通过 URL 分享。 不优雅,但能用。这个 bug 还没修,记在这里,后面再处理。


§跑通了一条信息卡工作流

这个周末试得最多的是一套三步组合:

  1. ·Get笔记 CLI 拉笔记内容
  2. ·claude-design-card 生成 HTML 信息卡
  3. ·Playwright 截图为 PNG

操作本身不复杂。拉笔记用 getnote note ID -o json,生成卡片选了 The Feature 格式,杂志深掘风格,暗色头部加不对称双栏。截出来的卡 760 乘 1441 像素,在微信里看着还行。

踩了一个半小时的坑:字体路径必须用 file:// 绝对 URL,不然 Playwright 截图时字体加载不上,出来全是默认字体。

还有一个发现。飞书发图片的正确方式不是用 send_message 工具,而是直接在回复里写 MEDIA:/path/to/image.png,网关会自动识别并发送。之前一直用工具发,各种超时报错。换成这个写法就好了。


§翻译了一篇上下文工程的文章

Nav Toor 在 X 上发了一篇文章,叫「Context Engineering Playbook: 15 Copy-Paste Templates」,讲怎么用 15 个模板让 AI 输出质量提升 10 倍。

内容很扎实,不是那种「提示词工程 101」的水文。有具体的模板,有「为什么有效」的解释,有层级结构。

我用 jina-cli 抓了原文,花了大概 20 分钟翻译成中文,放到了 jieni.ai 的文档区,路径是 /docs/prompt-guides/context-engineering-playbook

翻译过程中的几个判断:

  • ·模板的方括号占位符保留原样,因为那是用户自己填的
  • ·Karpathy 说的「LLM 是 CPU,上下文窗口是内存」这个比喻原样保留,加粗处理
  • ·LangChain、Anthropic 这些专有名词不翻
  • ·每个「为什么有效」的小节调整了语序,让它读起来像中文,不是翻译腔

又踩了一个坑:docs 和 blog 的 i18n 规则不同。 Blog 需要中英双版文件(.mdx.zh.mdx),但 docs 的 fumadocs 不认 .zh.mdx 后缀,会报 duplicated slug 错误。折腾了一圈才发现,docs 只需要一个文件就行。这个写进了 skill,下次不会再犯。


§更新了个人网站的项目页

两件事。

md2wechat 移到第一位。 之前它在项目列表排第五,但它现在 GitHub 1.6k star,是我最成熟的产品。描述也更新了:用 Markdown 写公众号文章,一键转换为精美排版并自动上传到微信草稿箱,支持 AI 多主题样式和批量发布。

新增了 claude-design-card。 这是最近在用的技能,把任意文本生成 Anthropic 设计风格的信息卡。加到了项目列表第二位。

改的是 src/config/identity.ts 里的 skills 数组,projects 页面直接从这个数组渲染。改完跑 pnpm lintpnpm build,确认没有重复 slug,推上线。


§复盘一下

这个周末干的活都不大,但每一件都是真实的 Agent 工作流。

几个体会:

  1. ·Agent 工作流不是一次跑通的,是踩坑踩出来的。 每个坑要么记住,要么写成规则。
  2. ·「能用」和「好用」之间差的是细节。 字体路径用绝对 URL、飞书发图片用 gateway 回复、docs 不需要双版文件,这些都是细节,但每个细节都能卡你半小时以上。
  3. ·翻译不是逐字翻,是重新组织。 调整语序、保留专有名词、让读者感觉在读中文而不是在读翻译,这个判断力是关键。

如果你也在用 Agent 做日常工作,建议:遇到坑就记下来,写成 skill 或者规则。 同一个坑踩两次,是你的问题。

下次聊聊别的。

SIGNED北京 · 2026·04·26 · git dev