本系統以 Claude Code CLI 為核心執行環境,直接部署於
JP VPS 的 /home/ubuntu 用戶空間,不使用獨立容器包裝 Claude
Code 本身。
用戶 / 觸發者
|
v
JP VPS (主機名稱已遮蔽)
|
+-- /home/ubuntu/.claude/ ← Claude Code 執行環境
| +-- agents/ ← 39 位 Agent 定義
| +-- skills/ ← 核心 skill 定義(brand-research, marketing, research 等)
| +-- hooks/ ← 品質閘門與 lifecycle 事件 hook
| +-- logs/ ← 執行日誌(月份 JSONL)
| +-- library/ ← 知識庫與參考資料
|
+-- /home/ubuntu/.claude/projects/ ← 專案工作目錄
+-- ceo-high-level-insights/ ← 本專案
| 項目 | 值 |
|---|---|
| 主機名 | [主機名稱已遮蔽] |
| 位置 | 日本 Tokyo |
| Tailscale IP | [Tailscale IP 已遮蔽] |
| 公網 IP | [公網 IP 已遮蔽] |
| OS | Ubuntu 24.04.4 LTS (aarch64 ARM64) |
| CPU | 4 核心 |
| RAM | 23 GB(目前使用約 30%) |
| Disk | 193 GB(目前使用約 39%,74 GB) |
| Swap | 4 GB(目前使用約 65%,2.6 GB;建議關注) |
ubuntu 用戶執行| 依賴 | 版本 | 用途 | 若失效的影響 |
|---|---|---|---|
| Claude Code CLI | 2.1.71 | 主執行環境 | 全部 AI 工作流停止 |
| Anthropic API | — | 模型呼叫 | 全部 AI 工作流停止 |
| Node.js | 22.22.1 | Claude Code 執行時期 | CLI 無法啟動 |
| git | 系統版 | 版控、事實來源 | 無法 commit / 追溯變更 |
| jq | 系統版 | Hook 日誌解析 | Runtime event log 靜默失敗(exit 0,不影響主流程) |
| python3 | 系統版 | Hook transcript 解析 | Skill / mode 欄位缺失,但事件本身仍記錄 |
| Plugin | 用途 | 啟用方式 |
|---|---|---|
context7 (@upstash/context7-mcp) |
文件查詢 / 技術參考 | npx 按需啟動 |
| claude-mem | 跨 session 觀察索引注入 | SessionStart hook 自動觸發 |
MCP plugin 透過 npx 動態拉取;若 npm registry
不可用,context7 會失效,但不影響 Claude Code 本身運行。claude-mem
失效只影響 SessionStart 的觀察索引注入,不影響 skill 執行。
| 服務 | 性質 | 備用方案 |
|---|---|---|
| Anthropic API | 必要,無備援 | 等待 Anthropic 恢復;關注 https://status.anthropic.com |
| NAS 備份裝置 [IP 已遮蔽] | restic 備份目標 | Google Drive 雲端同步為第二層 |
| Tailscale | 內網連線 | SSH 公網 IP [已遮蔽] 作為緊急備用 |
/ops 是內建的維運 skill,可在 Claude Code
互動中直接呼叫:
| 指令 | 功能 | 注意事項 |
|---|---|---|
/ops status |
顯示磁碟、記憶體、容器狀態 | 快速健康檢查,無副作用 |
/ops cleanup |
Journal 清理 + Docker 空間報告 | 會刪除舊 journal;確認無活躍故障調查再執行 |
/ops logs <容器名> |
查看容器最近 50 行日誌 | 常用:n8n, traefik, pangolin |
/ops update |
apt update && apt upgrade |
可能觸發 Docker daemon 重啟,見 7.3.3 |
Claude Code lifecycle hooks 位於 ~/.claude/hooks/:
| Hook 時機 | 腳本 | 功能 |
|---|---|---|
| SessionStart | — | 校正 ~/CLAUDE.md symlink;注入 claude-mem 觀察索引 |
| PostToolUse | runtime-event-log.sh |
記錄 skill 執行、subagent 事件到月份 JSONL |
| SubagentStop | runtime-event-log.sh |
記錄 subagent 結果(completed / blocked) |
| ConfigChange | runtime-event-log.sh |
記錄設定變更事件 |
runtime-event-log.sh
寫入路徑:~/.claude/logs/YYYY-MM.jsonl
重要設計:
jq 不存在,腳本
exit 0(靜默跳過),不中斷主流程~/.claude/logs/.runtime-meta-cache/),避免重複
parse 大型 JSONL| 日誌類型 | 路徑 | 策略 |
|---|---|---|
| Claude Code runtime events | ~/.claude/logs/YYYY-MM.jsonl |
按月自動換檔;舊檔不自動刪除,需手動清理 |
| System journal | journald |
已限制 100MB:sudo journalctl --vacuum-size=100M |
| Docker 容器日誌 | Docker 預設 | 未設定 max-size;若容器長期高頻輸出,建議補充 log driver 限制 |
維運週期建議:
~/.claude/logs/ 未超過 50MB
閾值(du -sh ~/.claude/logs/)三組核心 skill 的 token 消耗倍數(以基準線 1x 計算):
| Skill | 倍數 | 說明 |
|---|---|---|
| research | 2.2x | 標準研究流程;單階段 agent dispatch |
| brand-research | 2.3x | 品牌研究;結構略複雜,多一組 context 解析 |
| marketing | 4.6x | 行銷文案;最貴,因多階段 agent dispatch |
marketing 4.6x
的含義:同樣一次用戶呼叫,/marketing
在內部會觸發多個 subagent(如 strategy agent、copywriter agent),每個
subagent 均產生獨立 API 往返。若需控制成本,首要考慮精簡 marketing skill
的 agent dispatch 階段數(歸入 roadmap 路線 B)。
brand-research 2.3x 的含義:相對 research 的 2.2x 僅多 0.1x,主要因品牌分析增加了結構化 context 解析步驟。成本合理,優先級較低。
claude-mem SessionStart 注入約 25 筆觀察索引,是每次
session 的固定起始開銷JP VPS 為 Oracle Cloud Always Free Tier(ARM64 VM)。目前無直接 VPS 費用,但需注意:
主要監控工具:~/.claude/logs/YYYY-MM.jsonl
每筆記錄包含以下欄位:
{
"date": "2026-03-10",
"timestamp": "2026-03-10T14:00:00Z",
"type": "subagent-stop", // 事件類型
"session_id": "...",
"skill": "brand-research", // 觸發的 skill
"mode": "full", // 執行模式
"agent": "BrandResearchAgent", // subagent 名稱
"model": "claude-sonnet-4-6", // 實際使用模型
"result": "completed", // completed / blocked / null
"blocked_reason": null // rate_limit / auth / unknown
}
查詢方式(需 jq):
# 今日所有 skill 執行
jq 'select(.date == "2026-03-10")' ~/.claude/logs/2026-03.jsonl
# 找出所有 blocked 事件
jq 'select(.result == "blocked")' ~/.claude/logs/2026-03.jsonl
# 統計各 skill 使用次數
jq -r '.skill // "null"' ~/.claude/logs/2026-03.jsonl | sort | uniq -c | sort -rn
# rate_limit 事件
jq 'select(.blocked_reason == "rate_limit")' ~/.claude/logs/2026-03.jsonl目前 roadmap 5.1 為進行中(🔄)狀態:
InstructionsLoaded /
SubagentStart / SubagentStop /
ConfigChange 的噪音比例、缺欄位比例、查詢可用性| 指標 | 正常範圍 | 異常處置 |
|---|---|---|
~/.claude/logs/ 大小 |
< 50MB | 檢查是否有失控的 lifecycle 或 eval 寫入 |
| plugin-excluded CLAUDE.md 數量 | ≤ 20 | 確認是否為目錄層級擴張 |
| blocked_reason = rate_limit 事件 | 偶發 | 若單日 > 5 次,需調整呼叫頻率或確認 API 配額 |
以下為 JP VPS 上現有的監控工具(與 AI 工作流分離):
| 工具 | URL | 用途 |
|---|---|---|
| Backup Status | http://[TAILSCALE-IP]:9898 | restic 備份狀態(每小時更新) |
| Homarr | http://[TAILSCALE-IP]:7575 | 服務儀表板(容器狀態概覽) |
| Portainer | https://[TAILSCALE-IP]:9443 | Docker 容器管理 |
以上服務均僅限 Tailscale 私網存取。
目前沒有自動告警機制覆蓋以下場景,需人工定期檢查:
~/.claude/logs/ 超過大小閾值(無自動通知)若未來需補齊,建議優先透過 n8n 建立簡單 HTTP 健康檢查 + Telegram / Discord 通知,複用現有 n8n 工作流程基礎設施。
所有 ~/.claude/ 目錄(含
skills、agents、hooks、logs、library、projects)均包含在 JP 的 restic
備份範圍內:
備份路徑:/home/ubuntu(含 .claude/ 子目錄)
備份目標:sftp://[NAS-HOST]:/backup/[VPS-NAME]
排程:每日 20:00(user)+ 04:00(root 代跑)
保留策略:每日 7 份 / 每週 4 份 / 每月 6 份
此外,~/.claude/projects/ 下的各專案本身是 git
repo,透過 git push 可保有獨立遠端備份(目前是否有 remote
需確認)。
以下設定檔均受 git 版控或 restic 備份保護:
| 檔案/目錄 | 保護方式 |
|---|---|
~/.claude/skills/*/SKILL.md |
git(~/.claude/ 為 tracked repo) |
~/.claude/agents/REGISTRY.md |
git |
~/.claude/hooks/*.sh |
git |
~/.claude/docs/*.md |
git |
~/CLAUDE.md(symlink
source:~/.claude/workspace.md) |
git |
| Claude Code CLI 本身 | restic 備份 /home/ubuntu |
| Node.js 環境 | 需重新安裝(非備份範圍) |
情境 A:單檔/設定誤刪
# 從 git 還原
cd ~/.claude
git log --oneline -10
git checkout <commit-hash> -- skills/brand-research/SKILL.md情境 B:VPS 全毀,需重建
~/.restic-password)export RESTIC_REPOSITORY="sftp:[USER]@[NAS-IP]:/backup/[VPS-NAME]"
sudo restic restore latest --target / --password-file ~/.restic-passwordsudo /home/ubuntu/bin/restore-backup.sh --target-root / --force-volumes~/CLAUDE.md 指向
~/.claude/workspace.mdclaude --version);若版本不對,重新安裝cd /home/ubuntu && docker compose up -d| 指標 | 估計值 | 說明 |
|---|---|---|
| RPO(資料遺失上限) | 最多 8 小時 | 兩次備份排程間距(04:00 + 20:00) |
| RTO(服務恢復時間) | 2-4 小時 | 取決於新主機準備時間 |
| 設定檔 RPO | 以 git commit 為單位 | 只要有 push,可精準還原 |
目前架構為單用戶(ubuntu)單機設計。若需支援多人同時使用:
主要障礙:
~/.claude/ 是用戶層設定,多人共用會互相覆蓋 CLAUDE.md
與 memory建議方案(依成本排序):
~/.claude/ 目錄;透過 Ansible 統一同步
skills/agents 定義/opt/claude-shared/,各用戶帳號透過 symlink 引用;log
集中到共享目錄目前 ~/.claude/projects/
下有多個專案並行,設計上是安全的(各專案獨立目錄,互不干擾)。需注意:
~/.claude/logs/YYYY-MM.jsonl
是所有專案共用的單一月份日誌,大量並行執行時可能有寫入競爭(目前
>> append 為 shell 層級,非 atomic write)建議:若需大量並行,考慮在日誌寫入前加鎖,或改為按專案分開 log 目錄。
Anthropic API 限制依方案而異。目前無自動 rate limit 監控,blocked
事件僅透過 runtime-event-log.sh 被動記錄。
預防措施:
blocked_reason = rate_limit 事件 > 5
次,應暫停批次作業並確認帳號配額未來可改進:在 skill 層加入指數退避重試(exponential backoff),或在 n8n 工作流排程器中加入 rate limit 預算控制。
# 系統健康快速檢查
df -h / && free -h && docker ps --format "table {{.Names}}\t{{.Status}}"
# Claude Code runtime log 查看(今月)
cat ~/.claude/logs/$(date +%Y-%m).jsonl | jq -r '[.date, .type, .skill, .result] | @tsv'
# 檢查 blocked 事件
jq 'select(.result == "blocked")' ~/.claude/logs/$(date +%Y-%m).jsonl
# logs 大小檢查(閾值 50MB)
du -sh ~/.claude/logs/
# 備份狀態檢查
~/bin/backup.sh --preflight
# Ansible 全機健康確認
cd ~/infra && ansible all -m ping
# Docker socket consumer refresh(每週日系統更新後需確認)
~/bin/refresh-docker-socket-consumers.sh本章節依據
~/VPS-ALL.md(2026-03-08)、~/.claude/docs/roadmap.md(2026-03-09)、~/.claude/hooks/runtime-event-log.sh、~/.claude/skills/ops/SKILL.md
及 ~/.claude/docs/memory.md 撰寫。