一系統總覽
這是 WT(王逸倫)的個人 AI 助手系統,運行在 Hetzner 雲端主機(46.225.179.123),24/7 在線。核心是 Claude Code(Opus 4.6),透過 Discord 與 WT 即時對話,同時管理多個自動化服務。
架構圖
┌─────────────────────────────────────────────────────┐
│ Hetzner Cloud │
│ 46.225.179.123 │
│ │
│ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ Claude Code │◄──►│ Discord Plugin (MCP) │ │
│ │ (tmux session)│ │ channel: 148476... │ │
│ │ Opus 4.6 │ └──────────────────────────┘ │
│ │ │ │
│ │ ┌──────────┐ │ ┌──────────────────────────┐ │
│ │ │ Hooks │ │ │ Cron Jobs (14 個) │ │
│ │ │ 11 個 │ │ │ 每 5 分~每天 │ │
│ │ └──────────┘ │ └──────────────────────────┘ │
│ │ │ │
│ │ ┌──────────┐ │ ┌──────────────────────────┐ │
│ │ │ Memory │ │ │ Services (3 個) │ │
│ │ │ Git Repo │ │ │ captain / transcribe │ │
│ │ └──────────┘ │ └──────────────────────────┘ │
│ └──────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ Cloudflare │ │ GitHub (4 repos) │ │
│ │ Pages (4站) │ │ adom-near/* │ │
│ └──────────────┘ └──────────────────────────┘ │
└─────────────────────────────────────────────────────┘
▲ ▲
│ HTTPS │ SSH/SFTP
▼ ▼
┌──────────────┐ ┌──────────────┐
│ WT 的手機 │ │ MacBook Pro │
│ (Discord) │ │ (本機 Claude │
│ (JPR 錄音) │ │ Code) │
└──────────────┘ └──────────────┘
二核心元件
2.1 Claude Code 主程序
運行方式
tmux session "claude"
模型
Claude Opus 4.6(1M context)
方案
5x Max Plan($100 USD/月)
插件
Discord、Claude Router、Codex
- 啟動時帶
--channels參數啟用 Discord 即時通訊 - 自動重啟:每 6 小時或記憶體低於 500MB 時由 cron 觸發
2.2 Discord 通訊層
- 頻道:
1484763667512823808 - 功能:即時對話、任務指派、進度回報、檔案傳輸
- Bot token 存於
/root/.claude/channels/discord/.env
2.3 記憶系統
- 儲存:Git repo(adom-near/claude-memory),markdown 檔案
- 同步:每 5 分鐘自動 git sync(sync-memory.sh)
- 跨 session:雲端和本機 Claude 共用同一個 repo
- TTL 機制:patrol.sh 定期掃描過期記憶(project 30天、feedback 90天、user 180天)
記憶庫結構
- user_profile.md / user_preferences.md — 使用者檔案
- feedback_*.md(13 個) — 行為規則
- project_*.md(24 個) — 專案記憶
- reference_*.md — 外部資源指引
- daily/*.md — 每日工作日誌
三Hooks 系統(11 個)
| Hook 名稱 | 觸發時機 | 功能 |
|---|---|---|
load_current_task.sh |
SessionStart | 載入當前任務上下文 |
memory-git-sync.sh pull |
SessionStart | 拉取最新記憶 + 生成差異摘要 |
backfill_empty_logs.sh |
SessionStart | 補建缺失的 daily log |
user_prompt_context.sh |
UserPromptSubmit | 注入當前時間(UTC+8) |
check_index_sync.sh |
PostToolUse(Write/Edit) | 檢查網站 index 是否同步 |
memory-git-sync.sh push |
PostToolUse(Write/Edit) | 推送記憶變更 |
daily_log_append.sh |
PostToolUse(Bash) | git commit 後自動 append 日誌 |
post_push_verify.sh |
PostToolUse(Bash) | git push 後自動驗證 Cloudflare 部署 |
pre_compact_checkpoint.sh |
PreCompact | Context 壓縮前保存斷點 |
memory-git-sync.sh push |
Stop | Session 結束時推送記憶 |
skill_dispatch.json |
參考用 | 技能自動觸發 dispatch 表 |
memory_impact_matrix.json |
參考用 | 任務→記憶影響對照表 |
四Cron 排程(14 個)
| 排程 | 腳本 | 功能 |
|---|---|---|
| 每小時 :00 | auto-restart-claude.sh |
檢查是否需重啟(>6h 或記憶體低) |
| 每 15 分鐘 | auto_transcribe.sh |
自動轉譯新錄音 |
| 每小時 :30 | refresh_claude_token.py |
OAuth token 刷新(flock 鎖) |
| 每 5 分鐘 | sync-memory.sh |
記憶 repo git 同步 |
| 每 30 分鐘 | patrol.sh |
主動巡檢(9 項檢查) |
| 每天 00:00 | auto-daily-log.sh |
自動建立新日誌 |
| 每天 23:00 | check_daily_log.sh |
檢查日誌完整性 |
| 每天 08,14,20 | verify-daily-log.sh |
驗證日誌內容 |
| 每天 03:00 | find ... -delete |
清理聽力工具暫存 |
| 每週一 09:00 | security-audit.sh |
安全稽核 |
| 每天 23:50 | dc-daily-summary.sh |
DC 對話每日摘要 |
| 每天 09:00 | generate-project-dashboard.sh |
更新專案狀態 Dashboard |
| 每小時 :35 | captain refresh_claude_token.py |
隊長 Claude token 刷新 |
| 每 5 分鐘 | captain-sync-memory.sh |
隊長記憶同步 |
五常駐 Services(3 個)
| 服務 | 用途 |
|---|---|
captain-ai-secretary.service |
隊長 AI 秘書 FastAPI 後端(LINE webhook → Whisper → Gemini → GCal) |
claude-code-captain.service |
隊長專用 Claude Code(Discord 連線) |
watch-recordings.service |
監視 incoming/recordings 目錄,新錄音自動觸發轉譯 |
六網站部署(4 站)
全部由 Cloudflare Pages 託管,git push 後自動部署。
| 站點 | URL | 用途 | 儲存庫 |
|---|---|---|---|
| 公開站 | research-reports-bbm.pages.dev |
可公開的研究報告 | adom-near/research-reports |
| 私人站 | wt-all-reports.pages.dev |
含客戶資料的完整報告 | adom-near/wt-all-reports |
| 隊長私人站 | captain-private-site.pages.dev |
隊長個人 dashboard | adom-near/captain-private-site |
| 隊長公開站 | captain-public-site.pages.dev |
隊長對外資源 | adom-near/captain-public-site |
七巡檢系統(patrol.sh,9 項檢查)
patrol.sh 每 30 分鐘執行一次,有異常時回報 DC,沒事就靜默。
- 新錄音未處理
- auto_transcribe lock 卡住
- task_queue pending 任務
- checkpoint 中斷任務
- claude-memory 未 commit 變更
- 最近錯誤 log
- DC 漏回覆偵測(Discord API 比對時間差)
- 記憶檔案 TTL 過期(每天 09:00 那一輪)
- 磁碟使用率
八資料流
8.1 語音轉譯流
iPhone JPR 錄音 → SFTP → /root/incoming/recordings/
→ watch-recordings.service 偵測
→ auto_transcribe.sh(每 15 分鐘)
→ faster-whisper 轉譯
→ Claude 分析摘要
→ 更新語音轉譯摘要頁
→ git push → Cloudflare 自動部署
→ DC 傳連結
8.2 報告產出流
WT 透過 DC 指派研究任務
→ Claude 搜尋/分析
→ 生成 HTML 頁面
→ git push → Cloudflare 部署
→ post-push-verify.sh 驗證
→ DC 傳連結
8.3 記憶同步流
Claude 寫入記憶檔案
→ PostToolUse hook 觸發 memory-git-sync.sh push
→ git commit + push
→ sync-memory.sh 每 5 分鐘雙向同步
→ 本機 Claude 啟動時 git pull 取得更新
8.4 自動重啟流
cron 每小時檢查 → 超過 6h 或記憶體低
→ 重啟前生成 daily log
→ /exit 優雅退出(等 30 秒)
→ tmux new-session 重啟
→ postcheck 確認 PID
→ DC 通知「🟢 auto-restart 成功」
→ SessionStart hooks 自動恢復(拉記憶、載任務、補日誌)
→ fetch DC 訊息補漏
九安全機制
存取控制
- 獨立 Linux user(ai-secretary / captain)
- 檔案權限 chmod 700
- Cloudflare Tunnel 提供 HTTPS
- 記憶 repo 私有(GitHub private)
維運安全
- OAuth token 自動刷新(flock 鎖防雙開)
- 每週安全稽核(security-audit.sh)
- Codex plugin 獨立權限沙盒
- Discord Bot 只能存取指定頻道
十成本
| 項目 | 月費 |
|---|---|
| Claude Max 5x | $100 USD |
| Hetzner CX22 | ~€5 EUR |
| Cloudflare Pages | 免費 |
| GitHub | 免費 |
| OpenAI API(生圖) | 按量($5 儲值很久) |
| 合計 | ~$108 USD/月 |