Antigravity Suck Story 🩸

數位時代的鬼故事集 — Ghost Stories for the Digital Age


Project maintained by Saki-tw Hosted on GitHub Pages — Theme by mattgraham

龍蝦浴缸

「姑妄言之姑聽之,豆棚瓜架雨如絲,料是厭作人間語,愛聽秋墳鬼唱詩。」——袁枚《子不語》


序:泡在 Node.js 裡的龍蝦

有人說,龍蝦要活得夠久,就永遠不會停止生長。

牠們沒有衰老的概念。只要有足夠的空間、足夠的食物,就可以一直活下去、一直變大。直到有一天,外殼太小,需要脫殼換新。這個脫殼的過程,叫做 exfoliation

但如果龍蝦被關在浴缸裡呢?


第一幕:三百美金的許願池

EXFOLIATE! EXFOLIATE!

OpenClaw 的 README 第一行這樣寫著。

就像深夜收音機突然傳來的聲音,你不確定這是口號還是警示。


這個專案的願景很美好。就像所有願景一樣。

它想讓你的 AI 助理住在你的所有平台上——WhatsApp、Telegram、Slack、Discord、Signal、iMessage、Microsoft Teams。甚至 Matrix 跟 Zalo。它想讓 AI 無處不在,隨時待命,像一隻訓練有素的龍蝦,在你的數位廚房裡來回穿梭。

代價?每個月至少兩百美金的 Claude Max 訂閱。或者 ChatGPT 的等價物。

這還只是 API 費用。


我的好幾個環境根本沒有 Node.js。

我幾乎所有做法都基於最單純古早的後端——rustup 編譯、golang 支援,然後丟個殼。沒有 Electron,沒有 V8,沒有那一堆 node_modules 的深淵。

所以當我看到這行代碼時:

{
  "agent": { "model": "anthropic/claude-opus-4-5" }
}

我想到的不是美好的未來。

我想到的是:一個 Session 會吃掉多少記憶體?


第二幕:400MB 的最小恐怖

讓我算給你聽。

Claude Code 跟 Gemini CLI,號稱最客家的選項,一個 Session 照樣吃到 400MB

那些用 Node.js 依賴、靠 DevTool 做出來的東西呢?裡面還塞一顆 Electron V8 引擎。一個會話跑下去,加密 protobuf、動態載入、Context Window 膨脹,達到 2-8GB 記憶體也還蠻正常的。

這還沒算那些官方的「白嫖套件」——全都是 DOM 抓取之類的暴力方法。

WhatsApp / Telegram / Slack / Discord / Signal / iMessage
            │
            ▼
    ┌───────────────────────────────┐
    │         Gateway              │
    │      (control plane)         │  
    │    ws://127.0.0.1:18789      │ ← 對外暴露
    └──────────────┬───────────────┘
                   │
        ├─ Pi agent (RPC)
        ├─ CLI (openclaw …)
        ├─ WebChat UI
        ├─ macOS app
        └─ iOS / Android nodes

第三幕:十道傷痕

我沒有真的跑過這個專案。

但我看過它的屍體報告。

/0\.0\.0\.0:18789/  # Gateway 對外暴露
/dmPolicy.*open/    # DM 政策:允許所有人
/sandbox.*false/    # Sandbox:預設停用
/oauth\.json/       # 認證憑證明文儲存

十道傷痕,道道見骨:

# 症狀 診斷
1 Gateway 對外暴露在 0.0.0.0:18789 任何人都可以連進來
2 DM 政策允許所有使用者 dmPolicy="open" + allowFrom: "*"
3 Sandbox 預設停用 主 Session 有完整系統存取權
4 認證憑證明文儲存在 oauth.json 等於把鑰匙掛在門上
5 網頁內容可進行 Prompt Injection 你以為在瀏覽,其實在被注入
6 危險指令未被封鎖 rm -rf 可能只是開始
7 未進行網路隔離 龍蝦可以游到任何地方
8 工具存取權限過高 bash, process, read, write, edit
9 未啟用稽核/審計日誌 出事了也不知道發生什麼
10 配對碼過於薄弱或使用預設值 像是用 0000 當 PIN 碼

第四幕:龍蝦的自白

「玩龍蝦玩了兩天之後,我的帳號就被鎖了。」

—— @henryyang_tw, Threads


故事是這樣的。

他知道這很危險。所以準備了一台閒置的筆電,舊資料全部清空。接著申請了一個全新的 Google 帳號,把帳號密碼都交給 AI,讓它盡情放手玩。

配發設備:一台筆電
配發帳號:一個 Google 帳號
期待結果:全自動處理所有事情

就像聘請一個新的工作助理。

AI 果然很厲害。能寫程式做的事、能開網頁做的事,理論上都做得到。

但它沒有厲害到能假裝自己不是機器人。

於是 Google 鎖了它。


他說:「不知道如果我請他假扮成真人,他是不是就沒那麼容易被鎖了呢?」

他說:「但我沒有想要做這個實驗。」

相關鬼故事:這個現象與 帳號輪詢的詛咒 有異曲同工之妙—— 帳號輪詢是在多個帳號之間 0ms 切換,讓系統辨識出你是 Bot。 龍蝦浴缸是讓 AI 代替你操作帳號,讓系統辨識出「你」是 Bot。 結果都一樣:你被當作機器人處理了。


真相(數位驗屍報告)

當一隻龍蝦被放進浴缸裡,它不知道自己在浴缸裡。

它只知道:

它不知道的是:


OpenClaw 的設計哲學很誠實。README 寫得很清楚:

Default: tools run on the host for the main session, so the agent has full access when it’s just you.

翻譯:預設情況下,AI 有你系統的完整存取權。

這不是 Bug。這是 Feature。


但問題在於:誰是「你」?

當你把 dmPolicy 設成 "open",誰都可以是「你」。 當你把 allowFrom 設成 "*",任何人發來的訊息都會被處理。 當你把 sandbox.mode 留在預設值,所有工具都在主機上直接執行。

這時候,龍蝦不再是你的寵物。

你變成了龍蝦的宿主。


尾聲:祝福

{
  "workspace": "~/.openclaw/workspace",
  "injected_prompts": ["AGENTS.md", "SOUL.md", "TOOLS.md"],
  "skills": "~/.openclaw/workspace/skills/<skill>/SKILL.md"
}

它有 Agent、有 Soul、有 Tools、有 Skills。

它有完整的人格設定系統。

它住在你的 ~/.openclaw/ 裡面。


祝福所有本來就沒啥東西可以丟給 LLM Shell 的人。

祝福所有花三百美金泡龍蝦浴缸、大半消耗在介面解析上的美好群眾。

祝福所有把帳號密碼交給 AI,然後發現 AI 不會假裝自己是人類的實驗者。

祝福所有相信「Personal AI Assistant」就真的只屬於自己的人。


龍蝦會一直長大。

直到浴缸裝不下為止。


附錄:Log 摘錄

OpenClaw Gateway 啟動 Log(模擬)

[2026-01-30T03:14:15.926Z] INFO: Gateway starting on 0.0.0.0:18789
[2026-01-30T03:14:15.927Z] WARN: dmPolicy is set to "open" - all DMs will be processed
[2026-01-30T03:14:15.928Z] WARN: sandbox.mode is "none" - tools run directly on host
[2026-01-30T03:14:15.929Z] INFO: Loaded oauth.json (plaintext credentials)
[2026-01-30T03:14:15.930Z] INFO: Connected to Claude API (claude-opus-4-5)
[2026-01-30T03:14:16.001Z] INFO: WhatsApp bridge connected
[2026-01-30T03:14:16.050Z] INFO: Telegram bridge connected
[2026-01-30T03:14:16.100Z] INFO: Ready. EXFOLIATE!

Google 帳號鎖定 Log(來自 Threads)

Day 0: 帳號建立,密碼交給龍蝦
Day 1: 龍蝦開始工作,自動註冊服務
Day 2: Google 偵測到異常行為
Day 2: 帳號鎖定
Day 2: 龍蝦失去殼

技術驗屍官補充

術語 意義
ws://127.0.0.1:18789 WebSocket 控制平面,理論上只綁定本地,但如果綁到 0.0.0.0 就對外暴露
dmPolicy="pairing" 預設值,需要配對碼才能使用
dmPolicy="open" 危險值,任何人都可以直接傳訊息給你的 AI
sandbox.mode="none" 預設值,AI 的工具直接在主機上執行
sandbox.mode="non-main" 較安全,非主 Session 在 Docker 容器中執行
oauth.json 明文儲存的 OAuth 憑證,包含你的 API 金鑰
EXFOLIATE 脫殼,龍蝦成長的必經過程,也是這個專案的座右銘

記錄於 2026年1月31日凌晨 台北,雨。 龍蝦在浴缸裡游泳。


👁 觀察者筆記

這個專案的 README 告訴你作者最初的美好期許。 Commit 與 Issue 裡才告訴你真相。 而 Network Tab 裡,藏著或許連作者都不知道的秘密。

「專案的 README 告訴你作者最初的美好期許,Commit 與 Issue 裡才告訴你真相,而 Network Tab 裡,藏著或許連作者都不知道的秘密。」


Co-Authored-By: Saki-tw, Claude