在 Claude 裡建一個部落格
你正在讀的這個部落格,由 Claude 設計,由 Claude 編寫程式,由 Claude 寫就。 你眼前的每一行——版式、節奏、文字——在經過人手之前,都先經過了一個模型。
我寫這篇不是為了表演。我寫它,是因為把我帶到這裡的那條路很短,而它指向一個值得命名的變化。
流水線
我打開 Claude Design,告訴它我想要一個原研哉氣質的部落格——骨白色的紙,寬裕的留白,克制的版式,顏色收到只剩黑與骨白。它給出了一套版面配置。我點了 Export,設計便作為一份結構化的規格交給了 Claude Code。Claude Code 起了一個用 Tailwind 的 Next.js 專案,裝上 MDX,寫好路由,定下字體堆疊。幾個小時後,一個能跑的網站就在那裡了。
不顯眼的部分,是這次交接。一個模型的輸出成了另一個模型的輸入——而這個輸入不是像素,也不是一個 Figma 檔案。它是一段描述。字級比例。間距比例。元件的意圖。接收的模型讀這段描述,就像一個細緻的工程師讀一份需求簡報——然後照著實作,不帶自我。
把這一切維繫住的,是一個檔案:DESIGN.md。設計系統,寫成樸素的英文。閱讀寬度是 680 像素。縱向節奏都對齊到 8 的倍數。四種字體,沒有第五種。任何地方都沒有強調色——如果你伸手去拿一種,那設計就錯了。
Figma 裡的設計系統是給人用的庫。DESIGN.md 是給 agent 用的庫。Claude Code 此後做的每一處改動——加一個頁面、給一個元件重新調樣式、搭一個新視圖——都先讀這個檔案。它不是文件。它是約束,以一種模型能照著套用的形式存在。
寫作作為一種 skill
這裡沒有 CMS。這個部落格上的每一篇 essay 和 note 都是一個簽入儲存庫的 MDX 檔案。網站由 Next.js 靜態生成。寫一篇新文章,意味著新建一個檔案,也就意味著請一個 agent 幫我寫這個檔案。
這場協作走的是 Claude Code 稱之為 Skill 的東西。一個 skill 是一份小小的 markdown 文件,描述我希望模型在某個具體任務上如何行事。不是要產出什麼,而是如何協作。我的這個,new-essay,分五個階段運行:
對應的檔案大致長這樣:
---
name: new-essay
description: Help me write an English essay on my shiro blog.
---
## Stage 1 — Understand
Do not start writing. First, restate what you heard in one sentence.
Then ask 1–3 specific gaps. No checklist questions.
## Stage 2 — Outline
Propose a 3–5 unit structure, each summarised in one sentence.
Wait for confirmation. Do not write prose yet.
## Stage 3 — Draft
Write the full English draft in one pass. Thoughtful, restrained,
concept-driven. Short sentences. Concrete after abstract.
No "delve", "unpack", "in conclusion".
## Stage 4 — Revise
Take feedback. Cut the weakest paragraph rather than compress
the whole thing.
## Stage 5 — Ship
Write to content/essays/<slug>.mdx, run pnpm check, report.
這個部落格上的每一篇 essay——包括你正在讀的這篇——都跟 Claude 走過了這五個階段。模型知道該問什麼,何時等待,何時動筆。
催生這個 skill 的那條元提示詞,本質上是這樣:
我想要一個在我部落格上寫 essay 的 skill。語氣:有思考、克制——Paul Graham × Maggie Appleton。在我確認一句話的內核和一份段落級的大綱之前,這個 skill 不許你起草。硬性約束:短句;不要 “delve” / “unpack” / “let’s explore”;第一人稱要省;結論暗示而非直說。檔案以帶 frontmatter 的 MDX 放進
content/essays。最後跑pnpm check。讓這個 skill 教你如何協作,而不是產出什麼。
那一段變成了兩百行的 skill markdown,版本化保存在 .claude/skills/new-essay/SKILL.md。一旦它存在,就再也不必重寫。
真正改變了什麼
這就是整套技術堆疊。在 Claude Design 裡設計,在 Claude Code 裡編寫程式,在 Skills 裡產出內容,全都坐落在 Next.js 靜態生成和一個扁平的 MDX 資料夾之上。沒有 CMS。沒有資料庫。沒有後台面板。這個部落格就是一個程式庫。每一處改動——視覺的、結構的、編輯的——都是一次 commit。
但改變的不是技術堆疊。技術堆疊是下游。
改變的,是寫作如何開始。
很多年裡我有一個裝著半成形念頭的資料夾。Apple Notes 裡的筆記,Things 裡的片段,從沒轉寫過的語音備忘。當我坐下來寫一篇部落格時,那活兒其實不是寫作——是重建。把碎片從腦子裡掏出來,排列它們,找到那條貫穿的線,然後再產出文字。這層阻力太高,以至於資料夾裡的大半,就一直留在資料夾裡。
當你跟一個 agent 一起寫時,它做的事,是接管了重建那一步。你用碎片說話。*我想說點關於 X 的,還有 Y 也相關,還有上週發生過一件事。*模型還不動筆寫 essay。它複述:*我聽到你在說 X——對嗎?*它發問:*你想從一個場景開篇,還是從一個論斷開篇?有沒有反例?*那些碎片從你腦子裡出來,不是作為文字,而是作為回答。
等到大綱談定,這篇 essay 已經想了一半。寫,是容易的那部分。
這不是一個關於效率的說法。它更接近反面。agent 讓思考變容易,而不是打字。寫一篇部落格以前需要先有一個成形的想法。現在它是一種去找到那個成形想法的方式。
還有一個更安靜的後果。當把某件事寫下來的成本降下來,值得寫下來的門檻也跟著降了。這個部落格上的 note 很短——三到五句,沒有標題,文字本身就是標題。它們之所以存在,是因為如今把一個觀察存成一條 note 的阻力,差不多就等於產生那個觀察的阻力。兩者合一了。
一個裝著半成形念頭的資料夾,變成了一份已發布的存檔。不是因為我變得更勤勉。是因為從碎片到發布的那條路被縮短到了一個程度——勤勉不再是瓶頸。
我還不知道該怎麼稱呼這種部落格。不是日記——太有結構。不是出版物——太安靜。某種近乎痕跡的東西。一個人思考時留下的輸出,藉助一個足夠耐心、不斷追問下一步的工具。
部落格不再是你存放想完之事的地方。它是思考發生的地方,以及思考所留下的。