Long-form notes on what I am building and thinking about. The content has shifted considerably over the years — early posts translate psychology research for general readers; recent posts are about AI agents, MCP, and developer tooling. Below the listing groups posts by primary topic. You can also browse the topic-specific pages from the navigation menu.

What I'm writing about now

  • AI & Tooling: agents, MCP, vibe coding, file formats, developer tools
  • Research Notes: methodological observations from writing and review
  • Science Communication: earlier essays on psychology research

AI & Tooling

AI agents, MCP, vibe coding, developer tools, file formats for AI collaboration.

Comprehend or Look Up: A Criterion for YAML vs JSON After AI Started Writing Files

The usual criterion for choosing between YAML and JSON is authorship: human-written configuration gets YAML, machine-generated state gets JSON. That rule worked because authorship predicted readership. It no longer does, because AI now writes files that only humans read. The question a comment answers belongs to the reader, not the writer, and readers come in two kinds: those reading to comprehend and those reading to look up a value. Machine writing does not disappear from the analysis, but it moves from criterion to risk.

Read Source Code at Runtime, Not Cache It

When AI agents need authoritative answers about package behavior, reading installed source code live beats every other approach

Repos, Not Catalogs: Where Plugin Identity Actually Lives

The default advice for distributing Claude Code plugins is one central marketplace per author. GitHub's social infrastructure — stars, forks, issues, releases, watchers, search — aggregates at the repository level, not the catalog level. A plugin that lives as one row in a multi-plugin catalog inherits the catalog's identity, not its own. Standalone products belong in self-marketplaces; toolkit clusters belong in central catalogs. The deciding factor is brand identity, not distribution overhead.

Three Circles, Not Three Steps: Where Prompt, Context, and Harness Overlap

Prompt, context, and harness engineering are not a progression. They are three overlapping perspectives on the same work, and many of the most consequential decisions live where all three apply at once.

Furthest from the PTY: Choosing Between HTTPS, expect, and tmux

Driving an interactive CLI tool from a script has three solutions, and they are not independent alternatives. They are three points on one spectrum — how close the method sits to the pseudo-terminal — and the design rule is to pick the one furthest from the PTY that still works.

Format Transparency: Why AI Can Read Some of Your Files and Not Others

For 30 years, file formats were judged on fidelity and size. With LLMs as new consumers of files, a new dimension becomes load-bearing: transparency, the directness of correspondence between bytes and semantic content. The format you pick now determines what AI can read, edit, and collaborate on.

Not All VLMs Can Do OCR: A Case Study on Academic Paper Transcription

I tested GLM-OCR, Qwen2.5-VL, Gemma 3, Gemma 4, and MiniCPM-V on the same page of an academic paper. Some models transcribed faithfully; others rewrote or hallucinated the text entirely.

Your AI Coding Agent Can Delete Your Files: The Archive-First Defense

Real disasters from Replit, Google, and Claude Code show vibe coding's destructive side. Three common backup strategies fall short. Here's a simpler approach.

What 'MCP Is Dead' Gets Wrong

CLI and Skills don't eliminate the need for structured declarations and encapsulated state. They scatter these concerns across documentation, prose, and hope. MCP bundles them into software.

Bypassing Cloudflare Turnstile with Safari AppleScript

macOS AppleScript controls Safari at the OS level, a layer invisible to browser-side anti-bot detection

Building 100+ macOS Automation Tools in 2 Days: My Vibe Coding Experience

How I used AI-assisted development to create a complete suite of MCP servers without knowing Swift

Research Notes

Methodological notes from academic writing and review.

投稿時想到的事:英語論文題目,單數還是複數?

AI 建議我把 “An Impossibility Theorem” 改成 “Impossibility Theorems”,因為我證了兩個定理。我選擇保留單數。這個小決定背後,是英語題目逼你做、中文與日文不會逼你做的一件事。

Science Communication

Earlier essays translating psychology research for a general audience (PanSci, 2014–2015).

腦筋急轉彎:用心理學說故事與知識(三)發展篇

為什麼萊利是小女孩而不是女大生?從 Piaget 認知發展到 Erikson 認同危機。

腦筋急轉彎:用心理學說故事與知識(二)情緒篇

好情緒和壞情緒?從向度論與離散論看情緒的功能,以及為什麼悲傷也很重要。

腦筋急轉彎:用心理學說故事與知識(一)記憶篇

從核心記憶、遺忘到似曾相識,用心理學拆解皮克斯動畫中的記憶機制。

鎮暴手中棍,學子身上依:論警察打人的心理機制

從挫折攻擊、去個體化、服從權威到道德疏離,以心理學解析警察暴力的成因。