Spectra:給 OpenSpec 的圖形介面
credit: Nano Banana

Spectra:給 OpenSpec 的圖形介面

約 5,214 字

之前寫過一篇關於 OpenSpec 的介紹,當時 OpenSpec 還是 0.x 版,指令就那三個,還滿容易上手的,不過用起來有些地方總覺得卡卡的。例如 proposal.md 寫完之後就被鎖在那個階段,想回頭改點東西得放棄進度重來,或是繞過 OpenSpec 的指令直接開編輯器改檔案。又或是任務做到一半,想看看目前做到哪裡或是有哪些還沒做完,結果發現 tasks.md 根本沒更新...但整體來說還是個不錯的工具。

最近 OpenSpec 更新的 1.0 版看起來是把這些我有點在意的問題都處理掉了,而且整個架構重新寫過,從原本的「照著固定流程走」變成「你想怎麼走都行」。這篇文章先來介紹一下 1.0 版改了哪些地方,順便介紹一個我寫的小工具 Spectra,讓 OpenSpec 用起來更簡單、更直覺...我是不知道其它人有沒有覺得好用,但至少我自己是用得很開心!

OpenSpec 1.0 的改變

工作流不再是一直線

在 0.x 版的時候,工作流是線性的,例如先執行 /openspec:proposal 撰寫提案,在這個當下會建立 proposal.mdspec.md 以及 tasks.md 這幾個檔案,看情況可能還會有 design.md。接著執行 /openspec:apply 開始實作,做完之後最後再執行 /openspec:archive 進行歸檔。這三個階段是鎖定的,意思是進了 apply 階段後 OpenSpec 沒有提供指令可以讓我們回頭修改 proposal 並重新規劃,除非自己開編輯器或是把整個提案砍掉再來一次。

1.0 版把這個設計打掉重練,新版的指令多了好幾個,而且全部都變成 /opxs 開頭的指令。雖然指令看起來變多了,但重點是這些指令沒有順序限制,想什麼時候用就什麼時候用。

介紹幾個 1.0 版的新指令:

  • /opsx:explore:可以在寫提案之前先跟 AI 聊聊想法,不用馬上產出文件。不過這個指令我不太常用,因為我會先用其它更好用的 Skills(例如我在這篇文章裡介紹到的 Superpowers),甚至光是 Claude Code 的 Plan Mode 就直接討論,等討論差不多之後再用 /opsx:new 來建立提案。
  • /opsx:continue:根據文件的相依性,顯示目前可以建立哪些檔案,執行一次建立一個,可重複執行來逐步完成所有文件。
  • /opsx:ff:快轉前進(Fast Forward)。跟 /opxs:continue 不同,這個指令可以一口氣把所有需要的文件都生出來,適合沒有耐心慢慢等的人,例如我。

其它像是 /opsx:new 就是之前的 /openspec:proposal,只是改了個名字,而 /opsx:apply/opsx:archive 光看名字就大概猜的出來用途。

1.0 版聽起來好像只是多了幾個新指令,但背後的設計哲學不太一樣,之前是「你在哪個階段,就只能做那個階段的事」,現在是「系統幫你追蹤狀態,你想做什麼就做什麼」。

任務進度即時更新

對我來說,這可能是我覺得最實用的改進 ♥

以前的 tasks.md 的進度更新是由 AI 自己決定,看它心情好壞而決定要不要更新。AI 在 apply 階段收到的是靜態的指令,意思是每次當執行 /openspec:apply 時,AI 收到的提示詞都是固定的,不會先去查詢目前 tasks.md 裡已經完成哪些任務(或是還沒做)。AI 只知道「喂!去做任務」,但不一定知道當前的進度狀態,所以有可能會做完一個任務就打一個勾,或是做到一半才想起來要更新進度,也可能根本忘記要打勾這回事。結果就是進度顯示經常不準確,有時候任務明明做完了,tasks.md 裡面的進度看起來都還沒做,我還得再回頭問 AI 說做完沒。

1.0 版不一樣,每次執行 /opsx:apply 指令的時候會先去讀 tasks.md 的內容,算一下目前完成了幾個、還剩幾個,然後才開始做事。做完一個任務就打個勾,下次 apply 時又會重新計算進度,所以看起來就會比較準確:

- [x] 建立資料模型
- [x] 實作 API 端點
- [ ] 寫前端介面
- [ ] 加入錯誤處理

這如果搭配我等一下要介紹的圖形介面軟體,看起來會更明顯,會真的看到它一個一個打勾。系統會告訴我們 5 個任務已經完成 3 個,還剩 2 個,完成度直接從 Markdown 檔案就能推導出來。這個設計很聰明,因為 tasks.md 本來就是我們可以編輯的檔案,現在它同時也是進度追蹤的來源。

文件相依性的自動管理

在 OpenSpec 裡,proposal.mdspec.mddesign.mdtasks.md 這些文件的建立是有先後順序的,例如 spec.md 要等 proposal.md 寫完才能開始,tasks.md 又要等 spec.mddesign.md 都完成才能產出。

之前的 /openspec:proposal 指令會一次把所有文件都產出來,沒辦法選擇「先寫 proposal 看一下,確認沒問題再繼續」這種一步一步的做法。1.0 版之後會把這些文件的相依性建成一個 DAG(Directed Acyclic Graph,有向無環圖),然後用拓撲排序來追蹤狀態...這些名詞不懂也沒關係,反正它就是可以幫我們算出「下一個可以做的是什麼」。如果你用 /opsx:continue 一步一步做,系統會告訴你現在可以建立哪些檔案;如果你用 /opsx:ff,系統會按照正確的順序一次把所有檔案都生出來。

補個不重要的冷知識,DAG 的結構在 Git 裡面也有用到,Git 的 commit 歷史就是一個 DAG,每個 commit 指向它的 parent,形成一個有方向但不會繞回來的圖。OpenSpec 用同樣的概念來管理檔案的相依性,proposal 是根節點,specs 和 design 都依賴它,tasks 又依賴 specs 和 design。這樣的結構讓系統能自動判斷哪些工件已經準備好可以建立,哪些還在等待依賴完成。啊,扯遠了,對 Git 有興趣的話,歡迎收看《為你自己學 Git》

這個改變讓 OpenSpec 的工作流變得簡單,我們不用記住「現在應該做什麼」,系統會幫我們處理這件事,在執行 AI 執行 /opsx:new 的時候應該有感受到明顯的差異。

Slash Commands 變成 Skills

這算是個比較大的改動,但也合理。

1.0 版把原本的 Slash Commands 改成 Skills 系統,以前每個 AI 工具都有自己的配置格式,Claude Code 用 CLAUDE.md,Cursor 用 .cursorrules,維護起來有點麻煩。現在統一放在專案的 .claude/skills/ 目錄裡(或是各 AI Agent 或編輯器對應的位置)。

目前 OpenSpec 支援的二十幾個 AI 工具都能自動讀取並使用這些 Skills,不用再為每個工具維護一份設定,這也是為什麼最近 Skills 會爆紅的原因。想了解什麼是 Skills 的話,可參閱我之前寫的「Claude Code Skills:讓 AI 變身專業工匠」文章。

這個改變讓跨 AI 工具變得更簡單。同一個專案裡,有人用 Claude Code,有人用 Cursor,有人用 Windsurf,大家都能載入相同的 Skills。

專案配置集中管理

以前專案設定是放在 openspec/project.md,用 Markdown 格式寫專案的技術棧、架構或程式碼撰寫慣例或偏好這些東西。問題是這個檔案只是放在那裡,AI 要不要讀完全看它心情,不像 CLAUDE.md 這種一啟動 Claude Code 就會主動拿來看的機制。

1.0 版改成用 openspec/config.yaml 做專案級設定。當 AI 執行 /opsx:new/opsx:continue 時,會呼叫 OpenSpec 的 CLI 指令取得下一步該做什麼,這時候 config.yaml 的內容會一起被帶進去,所以 AI 一定會看到。

這不只對 AI Agent 有用,對對團隊協作也很好用,新人 clone 專案之後,不用再問「這個專案用什麼設定」,看 config.yaml 就知道了。

更多關於 1.0 版的更新內容,可參閱 OpenSpec 的 GitHub介紹。

Spectra:給 OpenSpec 的圖形介面

前面寫那麼多,其實這篇文章的目的是要介紹我自己最近做的小玩具。

在用 OpenSpec 一段時間之後,我發現雖然它很好用,但純文字操作有時候有點麻煩。specs 目錄裡有幾十個檔案,changes 裡面又有好幾個進行中的變更,要找某個特定的規格或任務,得在檔案之間跳來跳去。

我是個用終端機十幾年的老人,如果我都會覺得有點麻煩的話,就更不用想把 OpenSpec 推給新手了。是的,你沒看錯,我就是要把它給 Vibe Coder!(一看就知道我在備課了吧)

所以我花了一個週末的時間跟 AI 一起寫了一個圖形介面的桌面版應用程式:Spectra

一開始我只打算做個 Viewer,讓使用者可以用圖形介面瀏覽 specs、changes 這些東西。但後來想想,既然都做了 GUI 了,乾脆把一些常用的功能也加進去,讓使用者(包括我自己)不用一直切換回終端機敲打指令。

既然 Spectra 是 OpenSpec 的 Viewer,不用說這整個開發流程就是套用 SDD 的開發方法,一塊一塊拼出來的。

規格與變更瀏覽

用圖形介面瀏覽 specs、changes、archive 這些內容。點進一個變更,可以看到它的 proposal、spec、design、tasks,每個檔案都會顯示最後修改時間。Delta spec 會自動解析,統計這次變更新增、修改、移除了多少需求,圖形化介面總是看起來比較直覺。

spectra-with-openspec-4

全文搜尋

我用 SQLite 建立搜尋索引,這會比搜尋所有的 .md 檔的內容來的有效率。搜尋結果會顯示行號和上下文,支援模糊搜尋,不用再開終端機下 grep 指令。

spectra-with-openspec-1

任務追蹤

這是我覺得滿實用的功能之一(自以為),Spectra 會解析 tasks.md 裡面的核取方塊,顯示成一個可以勾選的清單。打勾之後會直接更新檔案,這樣就不用手動去編輯 Markdown。而且還有支援拖放排序調整優先順序,頁面上還會顯示進度(像是 3/5 這樣)。我這人很懶,所以還做了一次全部標記成已完成或重置進度的功能。

即時檔案監視

當 AI 或是我們自己在編輯器裡改了 openspec 目錄的檔案,Spectra 會自動偵測到變更,馬上重新載入內容。不用手動重新整理,改完就能看到結果。

AI 工具管理

所有 OpenSpec 支援的 AI 工具也都支援(例如 Claude Code、Cursor、Windsurf 等等)。可以在 Spectra 裡面用圖形介面設定要用哪些工具,它會幫你生成對應的配置檔案和目錄結構。

spectra-with-openspec-2

主題與語言

我是個喜歡漂亮介面的人,所以也給 Spectra 支援主題切換,總共有 6 種主題 x 2 種配色方案,還有繁體中文和英文兩種語言可以選擇。

其他功能

  • 備份/還原:可以把 openspec/ 目錄匯出成 ZIP 檔案,之後也可以匯入還原。
  • CLI 命令:安裝後可以在終端機用 spectra . 快速開啟目前目錄的專案,這一看就知道我要用的。
  • 自動更新:會定期檢查新版本,有更新的話會提示下載。
  • 最近專案:側邊欄會顯示最近開啟的專案,可以加星星,方便快速切換

備忘功能

最後的最後,這個備忘功能是我自己加上去的,這跟 OpenSpec 無關。因為很多時候我在開發過程中會突然想到一些點子或是待辦事項,想記下來但又不想放在專案裡面,怕弄亂了規格文件。所以我就做了一個簡單的備忘錄功能,讓我可以隨時記錄一些零碎的想法,等有空檔再把它變成提案或是任務。

spectra-with-openspec-3

這跟 OpenSpec 的 tasks.md 沒關係,這應該是我在這個 App 裡最常用的功能。

下載連結:

小結

OpenSpec 1.0 的核心改變是把工作流從「照著固定流程走」變成「系統幫你追蹤狀態,你想怎麼做都行」。任務進度即時更新以及檔案依賴自動管理,這些改進讓它變得更有彈性,也更符合實際開發的節奏。

Spectra 則是給不想純文字操作的人一個選擇。有時候用圖形介面看東西就是比較直覺,特別是專案規模變大、文件變多的時候。兩個工具搭配著用,管理規格文件會輕鬆不少。

如果 Spectra 有什麼使用上的問題,都歡迎留言讓我知道 :)

合作夥伴

留言討論