讓 AI 幫你完成 Ghost 部落格的文章目錄設定
把 Ghost 教學文章連結丟給 Claude,請它讀完後自己動手完成所有設定——包括讀取主題檔案、繞過 API 權限限制、解決容器寫檔問題,全程不需要打開終端機。
最近想把文章遷移到 Ghost,但習慣了 HackMD 有個章節導覽的我覺得 Ghost 沒有章節導覽實在讓我阿雜。我搜尋了網路上的做法,但要自己複製程式碼、開終端機 SSH 進去改檔案,我覺得很麻煩。這次我換了一個做法:直接把教學文章的連結丟給 Claude,請它讀完後自己動手完成所有設定。
起點:一篇 Ghost 官方教學
Ghost 官方有一篇教學文章 如何新增目錄,說明如何用 Tocbot 這個 JavaScript 函式庫為文章頁面加上自動生成的目錄。教學的步驟清楚,核心是修改主題的 default.hbs 和 post.hbs 兩個檔案,加入 CSS 和 JS,再插入一個 <aside> 的 HTML 元素當側邊欄。
我請 Claude 讀這篇教學,同時也請它先確認我的部落格是用哪個主題、檔案結構長什麼樣子。
Claude 怎麼「看到」我的主題檔案
這裡有個有趣的地方。我的 Ghost 部落格架設在 Zeabur 上,是一個雲端容器服務。要修改主題檔案,一般做法是 SSH 進容器、找到檔案、修改、存檔。
Claude 使用的是 zeabur-service-exec 這個指令,可以直接對容器執行指令,不需要我自己打開終端機。整個過程大概是這樣:
# Claude 用這種方式列出主題檔案
npx zeabur@latest service exec --id <service-id> -- ls /var/lib/ghost/content/themes/
Claude 讀完主題的 default.hbs 和 post.hbs 之後,擬定了修改計劃,然後問我確認。這個步驟我覺得做得不錯,它不是直接就改,而是先說明要改哪裡、改什麼、預期效果,讓我可以先確認方向。
方案調整:從改主題檔案,到 Code Injection
計劃執行後,目錄功能確實出現了。但我接著問了一個問題:如果我換主題,這個設定還在嗎?
Claude 的回答讓我多思考了一下。它說修改主題檔案的做法,設定是跟主題綁定的,換主題就消失了。但 Ghost 有另一個功能叫做 Code Injection,是在 Ghost 資料庫裡儲存的全域 CSS 和 JS,跟主題完全無關,換主題後依然存在。
這個差異很重要。我一聽就知道要用 Code Injection,請 Claude 改為這個方案。
遇到的第一個障礙:API 權限不足
Claude 嘗試用 Ghost Admin API 寫入 Code Injection 設定時,回傳了 HTTP 403 Forbidden。原因是 Custom Integration 產生的 API key,預設沒有 settings 端點的寫入權限,這層限制在 Ghost 的文件裡沒有特別強調,算是踩到了一個隱藏的坑。
面對這個障礙,Claude 提出了備用方案:直接修改 MySQL 資料庫。Ghost 的所有設定,包含 Code Injection 的 HTML,都存在 settings 資料表裡。不需要透過 API,直接下 UPDATE 指令就能寫進去。
第二個障礙:容器不支援 stdin 管道
要把 SQL 檔案傳進容器執行,Claude 一開始嘗試用管道(pipe)的方式:
# 這行不通
cat toc.sql | npx zeabur@latest service exec -- sh -c "mysql < /dev/stdin"
Zeabur 的 exec 指令不把本機的 stdin 接到容器裡,所以管道傳不進去,寫出來的檔案是空的。
Claude 找到的解法是用 base64 編碼:把 SQL 檔案在本機編碼成一串文字,再用 echo 當成指令參數傳進容器,容器內再解碼還原成檔案。
B64=$(base64 -i toc_injection.sql | tr -d '\n')
npx zeabur@latest service exec --id <mysql-service-id> -- \
sh -c "echo $B64 | base64 -d > /tmp/toc_injection.sql"
這個方法繞過了 stdin 限制,成功把 SQL 檔案送進容器執行。
最終結果
設定寫入 MySQL 之後,重啟 Ghost 服務,目錄功能就出現了。在 1300px 以上的螢幕寬度,文章左側會出現一個跟隨捲動的目錄,目前閱讀的段落標題會用強調色高亮。手機版寬度不夠,目錄自動隱藏,不影響閱讀。
更重要的是,這份設定現在存在資料庫裡,不管之後換哪個主題,只要新主題的文章內容區塊有 .gh-content 這個 CSS class(Ghost 官方主題都有),目錄就會繼續運作。
整個過程我做了什麼
說實話,我幾乎什麼都沒做。我做的事情就是:
- 把教學文章的連結貼給 Claude
- 確認它提出的修改計劃
- 回答「好」
遇到 API 權限問題、容器寫檔問題,都是 Claude 自己找到解法。我沒有打開過任何終端機,也沒有複製貼上過任何指令。
延伸想法
這次的體驗讓我對「AI 幫你操作工具」這件事感到更棒了,它能在中間遇到問題時找到其他方法達成目標,超讚!
如果你的 Ghost 部落格也想加上文章目錄,可以直接把 Ghost 的教學文章連結丟給 Claude Code,告訴它你的部落格架在哪個平台(Zeabur、Railway、自架 VPS 都可以),然後讓它讀完教學、探索你的環境、提出計劃、執行。整個過程不再需要不需要你開啟各個網站自行操作,爽!