在開始之前先簡短聲明:當我說「情感」時,我指的是狀態機、羈絆進程與互動歷史——不是 LLM。Mochi 並沒有在任何 AI 模型上執行,也沒有語言模型在決定他的反應。這裡的每個「情緒」都是可決定性的:狀態生命週期、計時器,以及對過往互動的記憶,而不是推論。只是先把這個期待說清楚。繼續吧 🌱
我最近一直在打造一隻住在 Linux 桌面的綠色小生物。
他叫 Mochi。

這是 Mochi 的 0.01 版,我知道看起來很可笑,但他真的很可愛!
一開始,目標老實說很單純:讓這坨東西動起來。
後來變成:讓這坨東西看起來像活的。
而我現在顯然已經走到這一步了:給這坨東西一套生產力系統、情感進展、零食,以及多到嚇人的動畫。
所以……對,Mochi v0.3 就這樣誕生了。🌱

Mochi 最初是一個給 Linux 用的像素風桌面夥伴。
Python。GTK4。PyGObject。Cairo。
沒有雲端服務。沒有帳號。沒有某個巨大到會躲在背景裡的 Electron 視窗。只是個在你桌面上晃來晃去的小生物。
早期版本主要在嘗試把這個基本幻覺做出來。Mochi 可以待機、眨眼、走動、睡覺、在你點他時反應、注意到你在打字,偶爾對桌面正在發生的事做出回應。
說真的,就連把這些功能穩定做出來,都讓我學到比預期多得多的桌面開發知識。因為當你的可愛果凍可以走路、睡覺、被抱起、對輸入做反應、顯示 UI,還能獨立觸發動畫時,你其實不小心做出了一個狀態管理問題。
一個意外可愛的狀態管理問題。
但 v0.3 讓我重新思考 Mochi 到底是什麼。


當我開始思考進度機制時,最直覺的方向就是某種虛擬寵物系統。
飢餓。健康。每日連續登入。你不在的時候數值慢慢掉下去。
而我基本上討厭這一切。
我不希望自己在經歷了好幾天的艱難時光後打開筆電,結果桌面寵物像這樣盯著我:
媽媽。你拋棄我了。😭
軟體已經向我們要求夠多了。Mochi 應該是讓桌面感覺更溫暖一點,而不是變成另一個要求維護的通知。
所以 v0.3 的設計原則變成:
這個決定最後幾乎塑造了整個版本。
v0.3 引入了持久化的羈絆進度。
這裡重要的字是「持久化」。Mochi 開始慢慢記住你和他建立起來的關係,而不是每次程式啟動都把情感歸零。
互動可以推進羈絆,而達到新等級後,我就有地方可以在之後掛上越來越有表現力的行為。
不是更強的數值。不是「+5 Mochi 傷害」。
而是表現。不同的反應。不同的小瞬間。更多個性。
這對於這個專案正在變成的樣子來說,感覺合適得多。
而且是的,有升級動畫。當然有。這就是我的優先順序。

這大概是那種主要因為「看 Mochi 吃東西讓我很開心」而存在的功能。而我完全沒問題。
餵食是一個小型互動,而不是某種持續消耗的飢餓機制的基礎。這是很重要的差別。
我希望你會想跟 Mochi 互動,是因為它可愛、你也想這麼做,而不是因為某個進度條被拿來對付你。
這聽起來像是我在非常誇張地思考怎麼餵一坨綠色像素果凍。或許確實是。但像這樣的小設計決策,會徹底改變軟體陪伴你的感受。

這已經變成這個專案裡我最喜歡的部分之一。Mochi 一直在累積反應,而且很多。
我沒有把這些動畫當成彼此獨立、隨機的 GIF,而是開始打造一個真正的目錄與狀態系統,讓 Mochi 能夠一致地使用它們。
難的不是畫出動畫。難的是回答這些問題:
到這裡,這隻可愛的桌面寵物就悄悄變成了一個真正的軟體架構問題。
Mochi 現在有明確的行為/狀態所有權,因此高優先級的互動可以中斷低優先級的環境行為,而不會有一堆計時器在那裡互相搶著控制 sprite。
這句話非常嚴肅,儘管主角大概只有一顆口香糖大小。

這大概是我長期最有興趣的方向。Mochi 可以對廣泛的桌面活動做出反應。如果我在終端機、編輯器、瀏覽器、媒體程式或其他可辨識的情境中待了一段時間,Mochi 就能以不同方式行動。
但我一直刻意嚴守隱私界線。
Mochi 不需要知道我正在輸入什麼。他不需要每個視窗標題。他不需要檔名。他不需要我桌面的逐字紀錄。
相對地,系統會嘗試把活動縮減成很小的語意訊號。比較像是:
terminal active
typing happening
media playing
user returned
而不是:
這是 Mika 目前正在做的所有事情
我認為這種區別非常重要。桌面夥伴應該能讓人感覺到它有在察覺環境,但不能變成桌面監控。
這個原則我會維持下去。

這大概是把 Mochi 推離「桌面玩具」最遠的一個功能。
它叫做「和 Mochi 一起專注」。你可以開始一段專注時段,選擇專注與休息時間,設定輪數,啟用溫和鼓勵,甚至還能使用下雨聲景。
當你工作時,Mochi 也會陪你一起工作。專注時間會累積羈絆。休息時間不會。而且——這點我刻意設計成這樣——Mochi 不會評斷你在休息時做了什麼。
我不想再做另一個瘋狂最佳化的生產力系統,整天對效率大吼大叫。這個想法溫和得多:
我工作一小段時間。Mochi 也在這裡。
就這樣。奇怪的是,我反而更喜歡這樣。
v0.3 最大的教訓是:現在要在 Mochi 裡加另一個功能已經不特別難了。難的是讓每個功能能共存。
而且因為 Mochi 是在 Linux 上實際作為桌面表層執行,我還得在意這些東西:
Wayland。XWayland。GTK 的生命週期行為。視窗定位。多螢幕。負座標螢幕。輸入抓取。GLib 計時器。關閉時清理。
這些都是我一開始畫出一坨綠色果凍時,完全沒想過自己會去考慮的東西。
這大概也是我最喜歡這個專案的原因。Mochi 一直在逼我學習那些原本不會碰到的系統。

像這種東西很容易讓人忍不住想把活動量拉滿。更多反應。更多彈出視窗。更多對話。更多通知。更多東西。
我正在努力克制這件事。
一個好的環境型夥伴要知道什麼時候該閉嘴。有時 Mochi 會注意到某件事並做出反應。有時不會。有時他就只是坐在那裡。
那份安靜也是個性的一部分。
目標不是:
看看我的桌面寵物有多少功能。
而是:
咦,感覺這個小東西真的住在這裡。
這才是我想追的標準。
v0.3 最後變成的架構性一步,比我原本預期的大得多。
羈絆系統讓 Mochi 有了記憶。互動系統讓那份羈絆有了意義。持續擴充的表情庫讓他有更多方式表達。情境感知則把他連接到桌面。而「和 Mochi 一起專注」則是我第一次嘗試在不把他變成另一個生產力儀表板的前提下,讓這位夥伴真的有用。
我還有很多想探索的方向:
你知道的。軟體開發。
但我真的很喜歡現在的方向。
Mochi 一開始是:如果我桌面上有個小傢伙會怎樣?
v0.3 則開始回答更有趣的問題:到底什麼才會讓我真的在意他住在那裡?
🌱
原文出處:https://dev.to/mikachu/i-built-a-green-blob-that-lives-on-my-desktop-and-now-it-has-feelings-4pjd