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

This Weekend I Made My Agent Do 5 Things and Hit 3 Bugs

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

Fixed cron timezone, built an info card workflow, translated a 16K-word article, updated the projects page. Every bug was a real workflow lesson.

Hi, I'm GeekJourney.

This weekend I didn't do anything earth-shattering, but I was working with Agents from morning to night. Fixed a cron timezone bug, got an info card workflow running end-to-end, translated a 16K-word technical article, and updated the projects page on my personal site.

Every task hit a snag. Every snag is a lesson worth recording.

Let me walk through it.


§The Cron Job That Ran at the Wrong Time

Saturday morning I woke up to find the AI Builder Daily digest hadn't fired when expected.

The reason was embarrassingly simple: I wrote the cron expression in UTC, not Shanghai time.

I'd configured 0 10 * * * assuming the system would auto-detect timezone. It doesn't. It runs in UTC, which means 6pm Shanghai time.

The fix was straightforward. UTC+8 conversion:

  • ·Shanghai 10:00 = UTC 02:00, write 0 2 * * *
  • ·Shanghai 10:30 = UTC 02:30, write 30 2 * * *

Triggered it manually to verify. Data pull was fine: 1.8 seconds, 1559 characters. So far so good.

Then the WeChat push broke.


§A WeChat Error I'd Never Seen Before

After the manual trigger, WeChat threw this:

Timeout context manager should be used inside a task

Dug through the logs and traced it to an asyncio bug in the Hermes gateway layer. The cron task's delivery runs in a non-standard asyncio task context, and Python 3.11+'s asyncio.timeout() chokes on it.

Data fetch was fast, so it's not a performance issue. Another cron job with similar payload size pushes fine, so it's not content length either. It's specifically the asyncio context at the WeChat SDK layer.

Workaround: upload the generated info card image to jieni.ai's public directory and share via URL. Not elegant, but functional. This bug is still open.


§Got an Info Card Workflow Running

The thing I experimented with most this weekend was a three-step pipeline:

  1. ·Get笔记 CLI pulls note content
  2. ·claude-design-card generates an HTML info card
  3. ·Playwright screenshots it to PNG

The operations themselves aren't complicated. Pull notes with getnote note ID -o json, generate cards in The Feature format with magazine deep-dive style, dark header with asymmetric two-column layout. The resulting card was 760x1441 pixels, looks decent in WeChat.

Got stuck for 90 minutes on one thing: font paths must use file:// absolute URLs, otherwise Playwright can't load them during screenshot and everything renders in the default font.

Another discovery: the correct way to send images on Feishu is to write MEDIA:/path/to/image.png directly in the reply, and the gateway auto-detects and sends it. I'd been using the send_message tool, which kept timing out. Switched to this approach and it worked.


§Translated a Context Engineering Article

Nav Toor published a post on X called "Context Engineering Playbook: 15 Copy-Paste Templates", about using 15 templates to make AI outputs 10x better.

The content is solid. Not one of those "Prompt Engineering 101" fluff pieces. It has concrete templates, explanations of why each one works, and a clear hierarchy.

I pulled the original with jina-cli, spent about 20 minutes translating to Chinese, and published it on jieni.ai at /docs/prompt-guides/context-engineering-playbook.

Translation decisions I made:

  • ·Kept bracket placeholders in templates as-is, since users fill those in
  • ·Preserved Karpathy's "LLM is the CPU, context window is the memory" analogy verbatim, with bold
  • ·Left LangChain, Anthropic, and other proper nouns untranslated
  • ·Reordered each "Why it works" section so it reads like natural Chinese, not translationese

Hit another snag: docs and blog have different i18n rules. Blog needs both .mdx and .zh.mdx files, but docs' fumadocs doesn't recognize the .zh.mdx suffix and throws a duplicated slug error. After debugging, I learned docs only needs one file. Added this to my skill notes so I don't repeat the mistake.


§Updated the Projects Page

Two changes.

Moved md2wechat to first position. It was fifth in the skills array, but with 1.6k GitHub stars it's my most mature product. Updated the description too.

Added claude-design-card. This is the skill I've been using recently to generate Anthropic-styled info cards from arbitrary text. Put it at position two.

Both changes went into the skills array in src/config/identity.ts. The projects page renders directly from this array. Ran pnpm lint and pnpm build, confirmed no duplicate slugs, pushed live.


§Looking Back

Nothing groundbreaking this weekend, but every task was a real Agent workflow.

A few takeaways:

  1. ·Agent workflows don't work on the first try. They work after you've hit every edge case. Write down every snag, either as a rule or as a skill.
  2. ·The gap between "works" and "works well" is all details. Absolute font URLs, Feishu image sending via gateway reply, docs not needing dual-language files. Each detail can block you for 30+ minutes.
  3. ·Translation isn't word-for-word. It's reorganization. Reorder sentences, keep proper nouns, make readers feel like they're reading Chinese, not a translation.

If you're also using Agents for daily work, my advice: write down every bug you hit. Turn it into a skill or a rule. Hitting the same bug twice is on you.

Next time I'll talk about something else.

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