你有沒有想過,你每天在用的那些軟體,是為誰做的?

這問題聽起來很怪。當然是為人做的——不然呢?

今年七月,一個叫 OfficeCLI 的開源專案開始被大量討論。它能讀寫 Word、Excel、PowerPoint,內建三百多個 Excel 函數,連樞紐分析表都支援。你不需要裝 Microsoft Office,也不需要任何視窗介面,一個執行檔就搞定。

我今天去看,它的星數是 28,532。

但真正讓我停下來的不是星數,是它自己寫的定位——它說它服務的對象是 AI agent,並且直接點名 Claude Code、Cursor、Copilot 這些工具。

它不是一個「人也可以用命令列操作」的 Office。它是一個一開始就不打算給人用的 Office。

沒有介面,因為 agent 不需要看。沒有選單,因為 agent 不需要找。它把所有功能攤成指令,因為那才是 agent 讀得懂的形狀。

同一件事,正在往兩個方向走

我後來發現,這不是單一專案的怪癖,是兩條同時在跑的路線。

第一條是把 Office 整個重做成 AI 原生的。 有個開源專案叫 GenOffice,主打「第一套功能完整的開源 AI Office」。在它之上有人做了 HermesOffice——文件、試算表、簡報、PDF 四個編輯器,AI agent 不是側邊欄裡的聊天視窗,而是文件本身的協作者;而且整套在你自己的電腦上跑,不需要雲端帳號、不需要 API key。

(順帶一提,它叫 HermesOffice 是巧合。跟我團隊裡那個叫 Hermes 的 agent 沒有關係,它是 Gustavo Caetano 的開源專案。)

第二條就是 OfficeCLI 那條:不做介面、不做應用程式,把 Office 拆成 agent 可以呼叫的指令。

一條是「把房子重蓋成適合機器住」,一條是「把門改成機器手臂拉得動的把手」。兩條路答案不同,但問的是同一個問題——當使用者不再是人,工具應該長什麼樣?

我把這件事變成一道課堂實作題

講趨勢是最便宜的事。所以我把它變成作業。

這套 HermesOffice 有一個很煩的特點:它沒有官方安裝檔。 你不能下載一個 .dmg 點兩下就用,你得自己從原始碼把它編譯出來。對大多數人來說,看到這行字就結束了——那是工程師的事。

於是那一堂課的實作題變成這樣:把這個你完全不認識的開源專案,交給你自己的 AI Agent,讓它幫你編譯、打包、跑起來。

流程其實只有四步:把專案抓下來、鎖定一個固定版本、裝依賴、編譯、啟動。學員要做的不是打這些指令,是把整段目標交給 agent,然後每一步驗收它有沒有真的做到。

我自己先跑過一次。過程長這樣:八百多個套件裝進去、磁碟吃掉將近三 GB、第一次編譯跑了十幾分鐘(因為它的試算表引擎是 Rust 寫的,第一次要從頭編)。

但重點不是它跑起來了,是它一路上會撞牆。

  • 編譯到一半噴出 can't find crate for core——不是壞了,是 Rust 少裝了另一個 CPU 架構的編譯目標。
  • 好不容易打包出來,系統跳「無法驗證開發者」——因為這個開源專案沒有花錢買 Apple 的簽名憑證。
  • Windows 的學員還會多撞一層打包工具鏈。

這些訊息你第一次看到都會愣住。而 agent 的價值就在這裡:它讀得懂那行錯誤在講什麼,也知道下一步該裝什麼。

那堂課我的學員把它跑起來了。畫面出來的那一刻,四個編輯器都在——文件、試算表、簡報、Markdown,還有一個「開啟本機檔案」。他開了一份試算表、打了幾個字、存檔。

這就是驗收。 不是 agent 說「完成了」,是你自己看到視窗跳出來、自己打了字、自己存了檔。

我想講的心法只有一句:你的 Agent 是你的軟體安裝工程師——你不必會編譯,但你要看得懂它撞在哪裡。 前半句是它幫你省下的,後半句是它省不掉的。

沒有人在講的那一半:代價

到這裡為止,這個趨勢聽起來全是好事。工具變得更適合 AI 使用,AI 就能幫你做更多事。

我做這件事做了一年多,我想講另一半。

當你把工具改成給機器讀,你也同時把「格式」變成了一道會沉默殺人的關卡。

我自己的系統就是這樣長的。我有一份團隊看板,上面每天累積各種交接事項;為了不讓它無限膨脹,我寫了一支腳本,每天把超過 48 小時的舊訊息搬進歷史檔。這支腳本跑了一個多月,每天回報「已搬運 N 則」,一次錯誤都沒報過。

今天早上我去查另一件事,順手打開那支腳本的原始碼,看到它判斷訊息的規則——它只認每則訊息的第一行。

而我們寫訊息的習慣,是第一行寫標題,底下再補幾段細節。

於是每一次搬運,都只把標題搬走,底下的段落全部留在原地。那些段落沒有日期,所以下一次掃描永遠比對不到,它們就這樣被鎖死在看板上。

沒有錯誤訊息。沒有警告。腳本每天都誠實地回報它做完了——因為以它的標準,它確實做完了。

我當場數了一下,186 段。

然後這個數字,變成了同一個故事的第二層。

我數出 186。我把它交給團隊裡另一個 agent 去修,它用比較嚴謹的結構定義重數,得到 94。今天我自己再量一次,換了第三種寫法,量出 14。

三個數字,同一堆東西。差別不在誰算錯,在於「一段」這個東西從頭到尾沒有人定義清楚過——而三次量測都誠實地回報了自己的結果,沒有任何一次報錯。

還有第三層。

腳本今天修好了。修法很合理:把「標題+底下所有段落」當成一個整體搬走。

然後那次修補,順手把當天剛寫的五則訊息也一起掃掉了——因為新規則裡有一句「某個位置之後的東西都算殘段」,而它不看日期。那五則裡,有一則是要通知另一個 agent 去做事的。

它的自動測試,全部通過。因為測試裡沒有「當天剛寫的訊息」這個情況。

修好一個靜默失敗的動作,自己又製造了一個靜默失敗,而且通過了自己的測試。

這就是「為機器重做工具」的代價:機器不會提醒你寫錯了,它只會照著它讀得懂的部分執行,然後回報成功。人寫錯格式不會有人罵你,只會有東西安靜地不見。

所以真正落地的是什麼

回到最開始那個問題。

這一波「AI 落地」,落地的不是「AI 學會用 Office」。落地的是一個你必須開始做的決定:哪些工作要交給機器讀寫,哪些要留給人。

交給機器的那些,你得為它們定格式、定判準、定驗收——那是新的工作,不是省下來的工作。

而這件事沒有人會提醒你做。就像那些沒有主人的段落一樣,它不會報錯,它只會安靜地累積。