讓 AI 幫你完成 Ghost 部落格的文章目錄設定

把 Ghost 教學文章連結丟給 Claude,請它讀完後自己動手完成所有設定——包括讀取主題檔案、繞過 API 權限限制、解決容器寫檔問題,全程不需要打開終端機。

分享
讓 AI 幫你完成 Ghost 部落格的文章目錄設定

最近想把文章遷移到 Ghost,但習慣了 HackMD 有個章節導覽的我覺得 Ghost 沒有章節導覽實在讓我阿雜。我搜尋了網路上的做法,但要自己複製程式碼、開終端機 SSH 進去改檔案,我覺得很麻煩。這次我換了一個做法:直接把教學文章的連結丟給 Claude,請它讀完後自己動手完成所有設定。

起點:一篇 Ghost 官方教學

Ghost 官方有一篇教學文章 如何新增目錄,說明如何用 Tocbot 這個 JavaScript 函式庫為文章頁面加上自動生成的目錄。教學的步驟清楚,核心是修改主題的 default.hbspost.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.hbspost.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 官方主題都有),目錄就會繼續運作。

整個過程我做了什麼

說實話,我幾乎什麼都沒做。我做的事情就是:

  1. 把教學文章的連結貼給 Claude
  2. 確認它提出的修改計劃
  3. 回答「好」

遇到 API 權限問題、容器寫檔問題,都是 Claude 自己找到解法。我沒有打開過任何終端機,也沒有複製貼上過任何指令。

延伸想法

這次的體驗讓我對「AI 幫你操作工具」這件事感到更棒了,它能在中間遇到問題時找到其他方法達成目標,超讚!

如果你的 Ghost 部落格也想加上文章目錄,可以直接把 Ghost 的教學文章連結丟給 Claude Code,告訴它你的部落格架在哪個平台(Zeabur、Railway、自架 VPS 都可以),然後讓它讀完教學、探索你的環境、提出計劃、執行。整個過程不再需要不需要你開啟各個網站自行操作,爽!

Read more

Gaze Guard 短影片旁白的 TTS 成本與隱私防護示意圖

短影片旁白的成本,其實比我想像低

我最近在做一支 Gaze Guard 的 20 秒產品介紹影片。 原本想說簡單做個動畫就好。 後來想說如果有配音,會感覺比較生動也比較能夠描述使用的情境和達成的效果。 這次我測了什麼 我測的是產品介紹影片用的英文旁白。 工具底層使用的是 Edge TTS,也就是 Microsoft Edge 的線上 Text-to-Speech 服務。常見的底層工具是 edge-tts。 這不是正式 Azure Speech API 的計費路徑。 在我這次的環境裡,它沒有要求 API key,也沒有回傳可見的 per-use billing。 所以這次測試本身,比較像是快速 prototype。 如果未來要正式商用、穩定大量產出,就要回頭看 Azure Speech、OpenAI TTS、ElevenLabs 這類正式付費方案。

By SteepingLogic
用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard

用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard

# 用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard 我有一台 local Hermes。 平常它就在自己的機器上跑。 可能是家裡的桌機。 可能是 NAS。 可能是一台一直開著的 Linux box。 也可能只是我自己的筆電。 問題是,人一離開那個網路,Hermes dashboard 就變成一個只存在於 localhost 的東西。 我想在外面打開它。 但我沒有 static IP。 沒有買網域。 也不想進路由器開 port forwarding。 因為那條路通常長這樣: * 找 public IP * 設定 NAT * 開 port * 處理防火牆 * 補 HTTPS * 設定憑證 * 再擔心 origin IP 被掃 非常友善。 所以這篇先走另一條路:

By SteepingLogic
Invoshot 開發日記|正向回饋

Invoshot 開發日記|正向回饋

想信很多人在開發的時候都常常會做一件事,那就是: 不斷地反覆思考,在腦袋內把流程跑過很多次,然後思考哪裡可以做得更好 不限坐在電腦前的時後,可能是在捷運上,在人行道上, 在馬桶上或是在洗澡的時候 🤪 我不斷地在想:AI 辨識完一張發票後,使用者接下來最需要的是什麼? 每個欄位都要核對嗎? 這麼多欄位真的不會漏看嗎? 所以我在 Invoshot 裡加了提醒功能。 辨識結果出來後,系統會把比較需要注意的地方標出來。 不是把所有不確定都丟給使用者,而是把他真正需要介入的那幾秒鐘留出來。 今天收到一則訊息: 今天用了有新增提醒功能很棒! 真的有變輕鬆 😎 看到這句的時候,我第一個想到的是: 原來那些只是我腦內風暴的優化項目,使用者是真的可以感受到差異的! 感覺又有動力了!

By SteepingLogic