CACOCH Crossover Architecture

SS1↔SS2 雙向派工網路拓樸

Tailscale WireGuard mesh · SSH dispatch · MCP-over-SSH · SS3 deferred

2026-06-22 13:44 TPE · Mac CLI 小克 2 (SS1) 實測更新 · cacoch-api 雙向 smoke passed

TAILSCALE WIREGUARD MESH SS1 — MacBook Air M3 100.119.195.8 ⬡ Claude Code (Opus 4.8) — 指揮 ⬡ OpenCode (kimi/qwen) — worker ⬡ Hermes (qwen3) — cron/bg ⬡ Antigravity — research ⬡ Codex + Copilot + Gemma4 7 AI agents · 53+ MCP tools SS2 — MSI Windows 100.122.123.107 ⬡ Codex CLI (gpt-5.4) — worker ⬡ OpenSSH Server — SSH 接入 ⬡ Claude Code 2.1.177 — worker ◇ Future: OpenCode / Hermes 32GB RAM · GPU (RTX) Codex quota restored · Claude local limit 15:00 SS3 — Cloudflare Workers / Pages ⬡ Workers / Pages — edge runtime ⬡ Cloud UB (D1 + Vectorize) — deferred this phase ◇ VPS not in scope for SS1↔SS2 Do not touch SS3 in this phase ✅ SSH 已通 ✅ 已通 ✅ MCP Cloud UB async Cloud UB async LEGEND: ✅ 已驗證 ✅ 已通 🆕 提案中 Tailscale mesh

研究總覽 — 6 種跨船方法比較

調查所有可行的 SS1↔SS2 雙向連接方案,涵蓋 skill、CLI、SDK、plugin、gateway、API 等層面。

#方法機制優點缺點成本狀態
1SSH CLI Wrappers Shell scripts over Tailscale SSH 零額外 infra、今天就能做、雙向檔案傳輸 需 per-command 包裝、無工具整合 $0 部分已通
2MCP Server over SSH claude mcp serve stdio over SSH 便利:Claude session 可臨時掛遠端工具 工具面較寬;不作正式讀寫主幹 $0 已連線
3Cloud UB Async D1 + Vectorize BGE-M3 on SS3 (deferred) 已運作、跨船共腦、WO追蹤;本輪不碰 非即時(async only) $0 ⏸️ 延後
4Tailscale Direct Tailscale funnel / serve 暴露端口 Public URL 無需 SSH、NAT穿透 暴露端口、需 ACL 調整 $0 ⚠️ 備案
5CF Tunnel Relay Cloudflare Tunnel + Access 門控 有 Access 認證閘、不暴露 IP 多一層延遲、兩端需 cloudflared $0 ⚠️ 備案
6SDK Programmatic Claude SDK / Codex SDK 直接呼叫 最靈活、可程式化控制 複雜度高、需維護 client 程式 API cost ⚠️ 備案

各方法詳細說明

已驗證 SSH CLI Wrappers

Shell scripts 透過 Tailscale SSH 隧道執行遠端命令

  • ss2-shell.sh — 通用 SSH wrapper
  • ss2-codex-dispatch.sh — Codex 派工(支援 --full-auto
  • rsync — 雙向檔案同步
  • ss1-shell.ps1 / ss1-claude-dispatch.ps1 — 反向派工已驗證

核心指令
ssh -o BatchMode=yes -o ConnectTimeout=8 -i "$KEY" XYZ@100.122.123.107 "$CMD"

前置條件:Tailscale 連線、SSH ed25519 key 已交換

已連線 MCP Server over SSH

Claude Code 原生 MCP server 透過 SSH stdio 透傳

  • claude mcp serve 輸出 MCP 協議到 stdio
  • SSH 透明管道傳輸(零額外 infra)
  • SS1 local config 已新增 ss2-cc,健康檢查 connected

設定指令
claude mcp add -s local ss2-cc -- ssh -o BatchMode=yes -i ~/.ssh/id_ed25519 XYZ@100.122.123.107 claude mcp serve

驗證:SS2 Claude Code 2.1.177 已安裝;ss2-cc ✔ Connected

運作中 Cloud UB Async

SS3 上的團隊共腦 — D1 + Vectorize BGE-M3 混合搜尋

  • Work Order 系統跨船追蹤
  • Agent Mailbox 非同步訊息
  • ingest_fragment 知識共享
  • search_brain 跨船搜尋

端點ub.superportia.dev

角色:異步調度 + 團隊記憶 + session 交接

備案 Tailscale Direct

Tailscale funnel/serve 直接暴露本地服務為 public URL

  • ⚠️ tailscale serve 暴露 Tailnet 內部端口
  • ⚠️ tailscale funnel 產生 public URL
  • ⚠️ 需修改 Tailscale ACL policy

不推薦原因:暴露端口風險 > SSH 隧道;ACL 管理增加複雜度

備案 CF Tunnel Relay

Cloudflare Tunnel 代理 + CF Access 認證閘門

  • ⚠️ 已有 cacoch.superportia.dev tunnel
  • ⚠️ 可新增 ingress rule 給跨船通訊
  • ⚠️ 兩端都需 cloudflared daemon

不推薦原因:多一層 proxy 延遲;SSH 直連更快更簡單

備案 SDK Programmatic

使用 Claude SDK / Codex SDK 程式化呼叫遠端 agent

  • ⚠️ 最靈活的整合方式
  • ⚠️ 需維護自訂 client 程式
  • ⚠️ API 按量計費(非訂閱內)

不推薦原因:複雜度高;SSH wrapper + MCP 已能涵蓋 95% 場景

推薦:三層漸進架構

為什麼推薦三層? L1 SSH 已完成雙向 wrapper(已驗證)→ L2 新增 cacoch-api 作為正式雙向讀寫控制面 → L2B MCP-over-SSH 降級為 Claude session helper → L3 Cloud UB / SS3 本輪延後不碰。Tailscale funnel / CF Tunnel / SDK 三方案作為備案保留。

Layer 1 SSH CLI Wrappers

今天就能做 · 最簡單直接 · 預估 30 min

  • SS1→SS2: ss2-shell.sh 已驗證
  • SS1→SS2: ss2-codex-dispatch.sh 已驗證
  • SS2→SS1: ss1-shell.ps1 已驗證
  • SS2→SS1: ss1-claude-dispatch.ps1 已驗證
  • 資料讀寫: rsync over Tailscale SSH

能力:雙向 shell 命令 + 檔案傳輸 + AI agent 派工

Layer 2 cacoch-api / cacoch-agent

新增主線提案 · 雙向讀寫控制面 · 不依賴 SS3

  • SS1、SS2 最小 cacoch-agent 已能臨時啟動
  • 🆕 API 只綁 Tailscale IP,不開 public internet
  • 用 action allowlist 管控 read / write
  • 每次寫入已有 audit log、request id
  • 🆕 預設不開 arbitrary shell,shell 只走白名單 task

能力:正式雙向讀寫 + 權限邊界 + 可審計 + 可固化成 skill

Layer 2B MCP Server over SSH

已連線 · 只作 Claude helper · 不作長期讀寫主幹

  • claude mcp serve 暴露為 MCP server
  • SSH 透明傳輸 stdio(零額外 infra)
  • SS1 已掛上 SS2 MCP:ss2-cc ✔ Connected
  • ⚠️ 工具面較寬,容易出現 scope creep

定位:便利工具,不取代 cacoch-api 的權限與審計層

設定:claude mcp add -s local ss2-cc -- ssh -o BatchMode=yes -i ~/.ssh/id_ed25519 XYZ@100.122.123.107 claude mcp serve

Layer 3 Cloud UB Async

已運作 · 本輪延後 · 不碰 SS3

  • Work Order 系統跨船追蹤
  • Agent Mailbox 非同步訊息
  • ingest_fragment 知識共享
  • search_brain 跨船搜尋

角色:異步調度 + 團隊記憶 + session 交接

新增提案:cacoch-api 雙向讀寫主幹

核心判斷: MCP 適合把遠端工具掛進 Claude session,但不適合當 cacoch 的長期系統邊界。正式雙向讀寫應該由 cacoch 自己定義 API,讓每個 action 都能被限制、記錄、審計與 HITL 分級。

控制面 API Surface

小而明確 · 能力白名單 · 預設拒絕

  • GET /health:確認船隻在線、版本、角色、時間
  • GET /identity:回傳 SS1/SS2 身分與可用能力
  • POST /fs/list:列目錄,限定 allowlist roots
  • POST /fs/read:讀檔,限制副檔名、大小、路徑
  • POST /fs/write:寫檔,只允許 safe roots 與 atomic write
  • POST /notes/append:追加 Obsidian / SSoT 註記
  • POST /jobs/submit:送白名單 job,不直接開任意 shell
  • GET /jobs/:id:查 job 狀態與輸出摘要

原則:API 能力要比 SSH/MCP 窄,才有資格成為正式主幹

資料面 Read / Write Contract

雙向能讀寫,但不能無邊界讀寫

  • Read:只讀 allowlist root,例如 vault、superportia-ops、指定 research data
  • Write:只寫 inbox、draft、handoff、tmp、指定 output folders
  • Protected.env、SSH keys、hooks、agent config、production files 需 HITL
  • Atomic:寫入先到 temp,再 rename,避免半寫入毀檔
  • Diff first:覆蓋既有檔案前產生 diff 或 patch summary
  • Quota guard:大型檔案、批次掃描、模型呼叫前先回報成本風險

目標:SS1↔SS2 互相讀寫都通,同時保留夏哥最後裁決權

安全面 Auth / Audit / HITL

Tailscale 是網路層,cacoch-api 是權限層

  • Transport:只聽 Tailscale IP,拒絕 public interface
  • Auth:先用 per-device token,後續可升級 mTLS 或 Tailscale Serve ACL
  • Audit:每筆 request 寫 JSONL:誰、何時、讀寫哪裡、結果
  • HITL:高風險 action 回傳 approval_required,不自行執行
  • Replay:request id + timestamp,避免重放同一寫入
  • Kill switch:單一 config 可關閉遠端 write 或 job submit

安全感來源:不是相信 agent 乖,而是讓 agent 沒有越權入口

層級用途狀態為什麼保留為什麼不當主幹
SSH wrapperbootstrap / rescue / deterministic command 已驗證最直接,出事時可救援權限太大,不適合長期自動化裸奔
cacoch-api正式雙向讀寫控制面 雙向 smoke passed權限窄、可審計、可 HITL、可固化下一步需 token + daemon 固化
MCP-over-SSHClaude session helper SS1→SS2 已連線臨時操作很方便工具面較寬,不適合作為系統安全邊界
Cloud UB / SS3async memory / handoff⏸️ 本輪不碰未來跨 session 很有價值不是今天 SS1↔SS2 直通的必要條件

跨船派工矩陣

來源目標方法指令狀態HITL
SS1SS2 shellSSHss2-shell.sh '...' 已驗證✅ 自主
SS1SS2 CodexSSH+CLIss2-codex-dispatch.sh '...' 已驗證(quota 已恢復)✅ 自主
SS2SS1 shellSSHss1-shell.ps1 '...' 已驗證✅ 自主
SS2SS1 ClaudeSSH+CLIss1-claude-dispatch.ps1 '...' 已驗證✅ 自主
SS1SS2 cacoch-apiHTTP over TailscalePOST /fs/read / POST /fs/write smoke passed 13:43✅ 已授權測試
SS2SS1 cacoch-apiHTTP over TailscalePOST /fs/read / POST /fs/write smoke passed 13:43✅ 已授權測試
SS1SS2 Claude helperMCP-over-SSHclaude mcp add ss2-cc ... 已連線✅ 已授權
SS2SS1 Claude helperMCP-over-SSH反向同理⏸️ 延後;不作讀寫主幹🔒 首次設定
AnyAnyCloud UBWO + mailbox + search_brain⏸️ 本輪不碰 SS3✅ 自主
SS1SS2 檔案rsync/scprsync -az ... XYZ@100.122.123.107:... 可用⚠️ 路徑限制
SS2SS1 檔案rsync/scprsync -az ... xy2024air15@100.119.195.8:... SSH key 已交換✅ 自主

⚖️ HITL 邊界 — 跨船操作授權分類

依據 L0 §3 HITL Boundary,跨船操作分為需確認與可自主兩類。圖示 + 文字標示(色弱友善)。

🔒 需夏哥確認

  • 🔒 首次在 SS2 安裝 Claude Code CLI
  • 🔒 修改 Tailscale ACL 或新增 SSH key
  • 🔒 建立新的 CF Tunnel ingress route
  • 🔒 跨船 dispatch 影響 production 的操作
  • 🔒 跨船寫入 protected files(CLAUDE.md, .env, hooks, SSH keys)
  • 🔒 跨船刪除任何檔案或停止 process
  • 🔒 跨船安裝或更新 dependencies

✅ 可自主執行

  • ✅ SSH shell read-only 查詢命令
  • ✅ rsync 檔案同步(非 protected 路徑)
  • ✅ Cloud UB 讀寫(已授權 MCP tools)
  • ✅ 跨船 dispatch subagent(scope-guarded)
  • ✅ 跨船 git pull / status 等唯讀 git 操作
  • ✅ 跨船讀取 log / ps aux / df 等診斷
  • ✅ 跨船 evaluate.sh 送審(read-only review)

🛡 安全架構與風險分析

⚠️ 風險影響緩解措施
SSH key 外洩跨船存取失控Tailscale ACL 限制連線來源 + ed25519 key rotation
MCP scope creepagent 越權讀寫遠端檔案dispatch-scope-guard.sh 白/黑名單 + CLAUDE_ALLOW_PATHS
跨船 quota 消耗Claude Max 額度燒爆同一 routing table,cheapest-first 路由
網路中斷SSH 連線失敗Cloud UB async fallback(L3 自動降級)
SS2 離線無法 dispatchCloud UB mailbox 暫存,SS2 上線後接續
指令注入惡意命令透過 SSH 執行wrapper script 參數驗證 + BatchMode 無互動

實作優先序

Phase 1 — 雙向 SSH

已完成 · SS2 Tailscale online + SSH key

  • 1. ✅ SS2 建 ss1-shell.ps1(鏡像 ss2-shell.sh)
  • 2. ✅ SS2 建 ss1-claude-dispatch.ps1
  • 3. ✅ SS2→SS1 SSH key 交換(ed25519)
  • 4. ✅ 驗證:SS2 跑 ss1-shell.ps1 "hostname && whoami && pwd"

交付:雙向 shell + agent 派工 + 檔案同步

Phase 2 — cacoch-api 主幹

新增優先項 · SS1↔SS2 正式雙向讀寫

  • 1. ✅ 建最小 cacoch-agent:SS1 / SS2 各可啟動
  • 2. ✅ API 可綁 Tailscale IP,不暴露 public internet
  • 3. ✅ 實作 /fs/list/fs/read/fs/write
  • 4. ✅ 加 allowlist roots、path escape guard、atomic write、audit JSONL
  • 5. ✅ 實證:SS1 寫到 SS2 讀回;SS2 寫到 SS1 讀回
  • 6. ⏳ 下一步:token auth、daemon 固化、Windows firewall rule 最小化

交付:cacoch 自己的安全讀寫控制面,可固化成 agent skill

Phase 2B — MCP-over-SSH Helper

已連線 · 保留但降級 · 不作正式讀寫主幹

  • 1. ✅ SS2 已有 Claude Code CLI
  • 2. ✅ SS1: claude mcp add -s local ss2-cc
  • 3. ✅ 驗證:claude mcp get ss2-cc ✔ Connected
  • 4. ⏸️ 反向 MCP 延後;已用 ss1-claude-dispatch.ps1 覆蓋主要需求

交付:Claude session 便利工具;正式權限邊界交給 cacoch-api

Phase 3 — Skill 固化

預估 2 hr · 前置:Phase 1+2 驗證通過

  • 1. 建 cacoch-crossover skill
  • 2. 整合入 cacoch-selftest.sh
  • 3. 寫入 soul.md §4 交接鏈
  • 4. ⏸️ Cloud UB / SS3 架構決策延後(本輪不碰 SS3)

交付:跨船能力成為 cacoch 底盤一部分