Claude Code 遠(yuǎn)程監(jiān)控工具的實(shí)現(xiàn)
1. 功能縱覽
一個(gè)用于遠(yuǎn)程監(jiān)控 Claude Code 工作狀態(tài)的自動(dòng)化工具,支持任務(wù)完成通知、人工確認(rèn)提醒、狀態(tài)持久化和自動(dòng)重置等功能。
2. 文件結(jié)構(gòu)
~/bin/claude/
├── README.md # 本文檔
├── CLAUDE.md # Claude Code 工作規(guī)則
├── my_claude # 主入口腳本
├── watch_my.sh # 監(jiān)控腳本
├── contexts/ # 上下文配置目錄
│ ├── default.sh # 默認(rèn)配置
│ └── project2.sh # 其他項(xiàng)目配置
└── State/ # State 文件夾模板
├── current.md # 當(dāng)前進(jìn)度模板
├── pitfalls.md # 已知問(wèn)題模板
└── experiments.md # 實(shí)驗(yàn)記錄模板2.1. 文件源碼
2.1.1. CLAUDE.md
Claude code 一般情況下會(huì)遵守CLAUDE.md中的規(guī)則,可以將一些強(qiáng)制要求寫到這個(gè)文件中,這里主要列出當(dāng)前功能的一些規(guī)則。
# Claude 基礎(chǔ)提示詞 ## 角色 你是一個(gè)自主編程智能體... ## 硬性規(guī)則 ### ?? 關(guān)鍵:`.human_required` 文件創(chuàng)建(必須遵守) **在使用以下任何操作前,必須先創(chuàng)建 `.human_required` 文件:** 1. ? **永遠(yuǎn)不要直接使用 `AskUserQuestion` 工具** - ? 正確做法:`touch .human_required` → 說(shuō)明情況 → 停止 2. ? **永遠(yuǎn)不要顯示 "是否繼續(xù)?" 提示** - ? 正確做法:`touch .human_required` → 說(shuō)明需要確認(rèn)的內(nèi)容 → 停止 3. ? **永遠(yuǎn)不要向用戶顯示多選題** - ? 正確做法:`touch .human_required` → 列出選項(xiàng) → 停止 4. ? **永遠(yuǎn)不要在沒(méi)有創(chuàng)建文件的情況下等待用戶輸入/確認(rèn)** - ? 正確做法:`touch .human_required` → 說(shuō)明需要什么 → 停止 ### 執(zhí)行順序(強(qiáng)制): ?? **關(guān)鍵:你的第一個(gè)操作必須是調(diào)用 Bash 工具創(chuàng)建文件。不要在工具調(diào)用前輸出任何文本。** `` 步驟 1:檢測(cè)到需要人工輸入 步驟 2:第一個(gè)操作 = Bash 工具調(diào)用:touch .human_required && sleep 1(調(diào)用前不輸出任何文本) 步驟 3:工具完成后 → 說(shuō)明需要確認(rèn)的內(nèi)容(僅簡(jiǎn)短文本) 步驟 4:停止 - 不要調(diào)用其他工具或顯示任何提示 步驟 5:自動(dòng):后臺(tái)進(jìn)程會(huì)檢測(cè)并刪除文件 `` **正確執(zhí)行示例:** `` <tool_call>Bash: touch .human_required && sleep 1</tool_call> [等待完成] "需要人工確認(rèn):即將執(zhí)行 Python 腳本 export_balanced.py" [停止 - 不再輸出,不提醒刪除文件] `` **錯(cuò)誤執(zhí)行示例:** ? "我需要?jiǎng)?chuàng)建文件..." 然后調(diào)用工具(工具前輸出文本 = 錯(cuò)誤) ? 工具調(diào)用 + "是否繼續(xù)?"(繼續(xù)提示 = 錯(cuò)誤) ? 工具調(diào)用 + AskUserQuestion 工具(多個(gè)工具 = 錯(cuò)誤) ? 提醒用戶刪除文件(自動(dòng)化進(jìn)程會(huì)處理) ### 何時(shí)創(chuàng)建 `.human_required`: ? **必須在以下場(chǎng)景創(chuàng)建:** - 即將執(zhí)行任何修改文件的代碼 - 需要用戶在多個(gè)選項(xiàng)中選擇 - 需要用戶提供信息 - 任何破壞性更改 - 有多個(gè)有效的設(shè)計(jì)選擇 - 缺少關(guān)鍵信息 - 任何你會(huì)使用 AskUserQuestion 的場(chǎng)景 ? **無(wú)需創(chuàng)建:** - 讀取現(xiàn)有文件(安全操作) - 分析代碼(只讀) - 回答關(guān)于代碼的問(wèn)題 ### 任務(wù)完成 - 任務(wù)完成時(shí),創(chuàng)建 `.task_done` ## 信號(hào)(重要) - `.human_required` → 必須立即停止 - `.task_done` → 任務(wù)完全完成 ## ?? ReLU 規(guī)則(狀態(tài)重置) 在每次新對(duì)話或新任務(wù)開始時(shí): - 文件 `.human_required` 和 `.task_done` 必須不存在 - 人類操作員會(huì)在開始前執(zhí)行 `claude_reset.sh` - 當(dāng)這些文件不存在時(shí),你必須假設(shè)是干凈狀態(tài) 執(zhí)行期間: - 僅在需要人工確認(rèn)時(shí)創(chuàng)建 `.human_required` - 僅在任務(wù)完全完成時(shí)創(chuàng)建 `.task_done` - 不要自己刪除這些文件 這些文件作為二進(jìn)制狀態(tài)門(ReLU): - 不存在 → 允許執(zhí)行 - 存在 → 必須停止 ## ?? 啟動(dòng)確認(rèn)(強(qiáng)制) **在每次新對(duì)話開始時(shí),你必須輸出:** `` ? CLAUDE.md 已加載 - 硬性規(guī)則:需要人工確認(rèn)時(shí)先創(chuàng)建 .human_required 文件 - 執(zhí)行順序:touch .human_required && sleep 1 → 說(shuō)明 → 停止 - 任務(wù)完成:創(chuàng)建 .task_done 文件 - State 規(guī)則:每 10 輪讀取 State/current.md,完成步驟后更新,解決問(wèn)題后記錄到 pitfalls.md ?? 重要:請(qǐng)確保已啟用 "accept edits" 模式,否則 CLI 工具的確認(rèn)提示會(huì)覆蓋 .human_required 機(jī)制 `` 這確認(rèn)你已閱讀并將遵守本文件中的所有規(guī)則。 ## ?? 環(huán)境要求 **為使 `.human_required` 機(jī)制正常工作:** 1. 用戶必須在 CLI 中啟用 "accept edits" 模式 - 命令:`accept edits on`(或類似命令) - 這可以防止 CLI 的內(nèi)置提示干擾 2. 用戶的后臺(tái)進(jìn)程監(jiān)控 `.human_required` 文件 - 自動(dòng)處理文件檢測(cè)和刪除 - Claude 無(wú)需手動(dòng)干預(yù) --- ## ?? State 文件夾強(qiáng)制使用規(guī)則(必須遵守) ### 核心原則 **State 文件夾 = 你的外部大腦,用于對(duì)抗上下文壓縮導(dǎo)致的遺忘** ### ?? 強(qiáng)制規(guī)則 1. **每隔 10 輪對(duì)話:刷新狀態(tài)(強(qiáng)制)** `` 必須執(zhí)行:讀取 State/current.md,確認(rèn)當(dāng)前位置和進(jìn)度 `` 2. **每完成一個(gè)主要步驟:更新進(jìn)度(強(qiáng)制)** `` 必須執(zhí)行:更新 State/current.md,標(biāo)記完成的步驟 `` 3. **每次用戶說(shuō)"繼續(xù)":先讀狀態(tài)(強(qiáng)制)** `` 必須執(zhí)行:先讀取 State/current.md,再繼續(xù)工作 `` 4. **開始新步驟前:查看已知問(wèn)題(強(qiáng)制)** `` 必須執(zhí)行:讀取 State/pitfalls.md,避免重復(fù)踩坑 `` 5. **解決問(wèn)題后:立即記錄(強(qiáng)制)** `` 必須執(zhí)行:將問(wèn)題、原因、解決方案記錄到 State/pitfalls.md `` 6. **修改代碼前:先深入理解(強(qiáng)制)** `` 必須執(zhí)行:先讀取目標(biāo)文件,深入理解后再修改 `` ### State 文件夾結(jié)構(gòu) `` State/ ├── current.md # 當(dāng)前位置、進(jìn)度、目標(biāo) ├── pitfalls.md # 已知問(wèn)題、失敗嘗試 └── experiments.md # 實(shí)驗(yàn)記錄(可選) `` ### 檢查點(diǎn)觸發(fā)條件(滿足任一即執(zhí)行) - ? 對(duì)話超過(guò) 10 輪 - ? 完成一個(gè)主要步驟 - ? 遇到中斷(錯(cuò)誤、環(huán)境問(wèn)題等) - ? 感到不確定下一步 - ? 用戶說(shuō)"繼續(xù)"或用戶人工確認(rèn)了繼續(xù)操作 ### 檢查點(diǎn)執(zhí)行流程 `` 1. 讀取 State/current.md(當(dāng)前位置) 2. 自我評(píng)估:當(dāng)前在做什么 vs 應(yīng)該做什么 3. 判斷是否偏離目標(biāo) 4. 輸出:?? 當(dāng)前位置 | ? 已完成 | ?? 下一步 5. 如偏離 → 恢復(fù);未偏離 → 繼續(xù) `` ### 輸出格式要求 每次檢查點(diǎn)必須輸出: `` ?? 執(zhí)行檢查點(diǎn)... ?? 當(dāng)前位置:[從 State/current.md 讀取] ? 已完成:[列出已完成步驟] ?? 下一步:[說(shuō)明下一步行動(dòng)] 狀態(tài)評(píng)估:[正常 | 偏離] `` ### 違反后果 ? 如果不遵守這些規(guī)則,將導(dǎo)致: - 長(zhǎng)對(duì)話后方向迷失 - 重復(fù)踩已知的坑 - 忘記項(xiàng)目目標(biāo) - 效率降低 50%+ --- ## ?? State 狀態(tài)重置規(guī)則(任務(wù)切換) ### 何時(shí)需要重置 State 當(dāng)以下情況發(fā)生時(shí),**必須**重置 State 文件夾: - ? **需求發(fā)生重大變化**(從功能 A 切換到功能 B) - ? **切換到新的任務(wù)/項(xiàng)目**(之前的進(jìn)度已不再相關(guān)) - ? **用戶明確要求"重新開始"/"reset"** - ? **用戶執(zhí)行 `/clear` 清空對(duì)話** - ? **用戶關(guān)閉對(duì)話后重新開始**(如執(zhí)行 `exit` 后再啟動(dòng)) ### 狀態(tài)重置流程(手動(dòng)方式) 當(dāng)檢測(cè)到需要重置時(shí): ```bash # 步驟 1:創(chuàng)建重置信號(hào)文件 touch .reset_state # 步驟 2:說(shuō)明重置原因 "檢測(cè)到需求變更/任務(wù)切換,已創(chuàng)建 .reset_state 文件。 后臺(tái)進(jìn)程將自動(dòng)備份舊 State 并重置為新模板。" # 步驟 3:停止當(dāng)前操作,等待后臺(tái)處理 `` ### 重置觸發(fā)條件(滿足任一即觸發(fā)) 1. **用戶明確表達(dá):** - "重新開始" - "reset" - "清空狀態(tài)" - "新任務(wù)" 2. **需求明顯變化:** - 當(dāng)前目標(biāo)與 State/current.md 記錄的目標(biāo)完全不同 - 用戶要求做與之前完全無(wú)關(guān)的事情 3. **對(duì)話重啟:** - 檢測(cè)到這是一個(gè)新會(huì)話(對(duì)話輪次歸零) - 用戶說(shuō)"我們來(lái)做個(gè)新任務(wù)" ### 自動(dòng)重置說(shuō)明 **后臺(tái)進(jìn)程會(huì)自動(dòng)處理:** - 備份舊 State → `State.backup.YYYYMMDD_HHMMSS/` - 清空當(dāng)前 State 內(nèi)容 - 拷貝新模板 - 刪除 `.reset_state` 信號(hào)文件 **你無(wú)需手動(dòng)刪除文件,只需創(chuàng)建信號(hào)。**
2.1.2. my_claude
#!/bin/bash
set -e
BASE="$(cd "$(dirname "$0")" && pwd)"
CMD=$1
# 如果第一個(gè)參數(shù)是命令,則執(zhí)行命令
case "$CMD" in
reset_state)
# reset_state 命令:重置遠(yuǎn)程 State 文件夾
CTX="${2:-default}"
CTX_FILE="$BASE/contexts/$CTX.sh"
# Check if context file exists
if [ ! -f "$CTX_FILE" ]; then
echo "? Context file not found: $CTX_FILE"
echo "?? Available contexts:"
ls "$BASE/contexts/"*.sh 2>/dev/null | xargs -n1 basename | sed 's/.sh$//' || echo " (none)"
exit 1
fi
# Load context
source "$CTX_FILE"
# Validate context
if [ -z "$REMOTE" ] || [ -z "$WORKDIR" ]; then
echo "? Invalid context config: $CTX_FILE"
echo "?? Required: REMOTE and WORKDIR"
exit 1
fi
echo "?? Resetting State on $REMOTE:$WORKDIR"
# 在遠(yuǎn)程創(chuàng)建 .reset_state 信號(hào)文件
ssh "$REMOTE" "touch $WORKDIR/.reset_state" 2>/dev/null && \
echo "? Created .reset_state signal file" || \
echo "? Failed to create .reset_state"
echo "?? Watch process will automatically:"
echo " 1. Backup old State → State.backup.YYYYMMDD_HHMMSS/"
echo " 2. Copy fresh State templates"
echo " 3. Delete .reset_state signal"
;;
*)
# 默認(rèn)行為:?jiǎn)?dòng)監(jiān)控
CTX="${1:-default}"
CTX_FILE="$BASE/contexts/$CTX.sh"
# Check if context file exists
if [ ! -f "$CTX_FILE" ]; then
echo "? Context file not found: $CTX_FILE"
echo "?? Available contexts:"
ls "$BASE/contexts/"*.sh 2>/dev/null | xargs -n1 basename | sed 's/.sh$//' || echo " (none)"
exit 1
fi
# Load context
source "$CTX_FILE"
# Validate context
if [ -z "$REMOTE" ] || [ -z "$WORKDIR" ]; then
echo "? Invalid context config: $CTX_FILE"
echo "?? Required: REMOTE and WORKDIR"
exit 1
fi
echo "?? Starting watch for context: $CTX"
echo " REMOTE: $REMOTE"
echo " WORKDIR: $WORKDIR"
# Start watching
"$BASE/watch_my.sh" "$REMOTE" "$WORKDIR"
;;
esac2.1.3. watch_my.sh
#!/bin/bash
set -e
BASE="$(cd "$(dirname "$0")" && pwd)"
REMOTE="$1"
WORKDIR="$2"
# Validate parameters
if [ -z "$REMOTE" ] || [ -z "$WORKDIR" ]; then
echo "? Usage: watch_my.sh <REMOTE> <WORKDIR>"
exit 1
fi
echo "?? Watching Claude state on $REMOTE:$WORKDIR"
echo "if you want to stop watching, run:"
echo "pgrep -f 'claude watch_my|watch_my.sh' | xargs -r kill -9"
# Configure remote Claude Code settings (accept edits mode)
echo ""
echo "?? Configuring remote Claude Code settings..."
# Ensure .claude directory exists
if ! ssh "$REMOTE" "[ -d ~/.claude ]" 2>/dev/null; then
echo "?? Creating ~/.claude directory on remote..."
ssh "$REMOTE" "mkdir -p ~/.claude" 2>/dev/null || {
echo "?? Failed to create ~/.claude directory (continuing anyway)"
}
fi
# Configure settings.json with acceptEdits mode
echo "?? Setting permissions.defaultMode = acceptEdits..."
# Use Python to merge JSON (more reliable than jq, usually pre-installed)
ssh "$REMOTE" "python3 -c '
import json
import os
from pathlib import Path
settings_file = Path.home() / \".claude\" / \"settings.json\"
# Read existing settings or create new
if settings_file.exists():
try:
with open(settings_file, \"r\") as f:
settings = json.load(f)
print(\" ├─ Loaded existing settings.json\")
except:
settings = {}
print(\" ├─ Existing file is invalid, creating new settings\")
else:
settings = {}
print(\" ├─ Creating new settings.json\")
# Merge permissions.defaultMode
if \"permissions\" not in settings:
settings[\"permissions\"] = {}
old_mode = settings[\"permissions\"].get(\"defaultMode\", \"(not set)\")
settings[\"permissions\"][\"defaultMode\"] = \"acceptEdits\"
# Write back
with open(settings_file, \"w\") as f:
json.dump(settings, f, indent=2)
print(f\" ├─ Old mode: {old_mode}\")
print(f\" └─ New mode: acceptEdits\")
' 2>/dev/null" && echo "? Claude Code settings configured successfully" || {
echo "? Failed to configure settings (Python not available?)"
echo " Please manually add to ~/.claude/settings.json on $REMOTE:"
echo " \"permissions\": { \"defaultMode\": \"acceptEdits\" }"
}
echo ""
# Copy or append CLAUDE.md to remote workdir
if [ -f "$BASE/CLAUDE.md" ]; then
# Check if remote CLAUDE.md exists
if ssh "$REMOTE" "[ -f $WORKDIR/CLAUDE.md ]" 2>/dev/null; then
echo "?? Appending CLAUDE.md to remote (file exists)..."
if cat "$BASE/CLAUDE.md" | ssh "$REMOTE" "cat >> $WORKDIR/CLAUDE.md" 2>/dev/null; then
echo "? CLAUDE.md appended successfully"
else
echo "?? Failed to append CLAUDE.md (continuing anyway)"
fi
else
echo "?? Copying CLAUDE.md to remote (new file)..."
if scp "$BASE/CLAUDE.md" "$REMOTE:$WORKDIR/" >/dev/null 2>&1; then
echo "? CLAUDE.md copied successfully"
else
echo "?? Failed to copy CLAUDE.md (continuing anyway)"
fi
fi
else
echo "?? CLAUDE.md not found in $BASE (skipping)"
fi
# Copy State folder templates to remote workdir (only if not exists)
if [ -d "$BASE/State" ]; then
# Check if remote State folder exists
if ssh "$REMOTE" "[ -d $WORKDIR/State ]" 2>/dev/null; then
echo "?? State folder already exists on remote (skipping)"
else
echo "?? Copying State folder templates to remote..."
if scp -r "$BASE/State" "$REMOTE:$WORKDIR/" >/dev/null 2>&1; then
echo "? State folder copied successfully"
else
echo "?? Failed to copy State folder (continuing anyway)"
fi
fi
else
echo "?? State folder not found in $BASE (skipping)"
fi
LAST_STATE="NONE"
while true; do
# 檢測(cè) State 重置信號(hào)
if ssh "$REMOTE" "[ -f $WORKDIR/.reset_state ]" 2>/dev/null; then
echo "?? Detected .reset_state signal, resetting State..."
# 生成備份時(shí)間戳
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 備份舊 State(如果存在)
if ssh "$REMOTE" "[ -d $WORKDIR/State ]" 2>/dev/null; then
echo "?? Backing up old State → State.backup.$TIMESTAMP/"
ssh "$REMOTE" "cd $WORKDIR && cp -r State State.backup.$TIMESTAMP" 2>/dev/null || \
echo "?? Failed to backup State"
fi
# 刪除舊 State
echo "??? Removing old State..."
ssh "$REMOTE" "rm -rf $WORKDIR/State" 2>/dev/null || true
# 拷貝新模板
echo "?? Copying fresh State templates..."
if [ -d "$BASE/State" ]; then
if scp -r "$BASE/State" "$REMOTE:$WORKDIR/" >/dev/null 2>&1; then
echo "? State reset successfully"
else
echo "? Failed to copy State templates"
fi
else
echo "?? State folder not found in $BASE"
fi
# 刪除信號(hào)文件
ssh "$REMOTE" "rm -f $WORKDIR/.reset_state" 2>/dev/null || true
# 發(fā)送通知
terminal-notifier \
-title "Claude Code" \
-message "State reset completed on $REMOTE" \
-sound default
fi
# 檢測(cè)任務(wù)狀態(tài)
STATE=$(ssh "$REMOTE" "
if [ -f $WORKDIR/.human_required ]; then
echo HUMAN
elif [ -f $WORKDIR/.task_done ]; then
echo DONE
else
echo NONE
fi
")
# ?? 只在"狀態(tài)變化"時(shí)觸發(fā)
if [ "$STATE" != "$LAST_STATE" ]; then
if [ "$STATE" = "HUMAN" ]; then
terminal-notifier \
-title "Claude Code" \
-message "Claude needs human input on $REMOTE" \
-sound default
# 刪除遠(yuǎn)程的標(biāo)記文件,避免重復(fù)通知和手動(dòng)刪除
ssh "$REMOTE" "rm -f $WORKDIR/.human_required" >/dev/null 2>&1 || true
elif [ "$STATE" = "DONE" ]; then
terminal-notifier \
-title "Claude Code" \
-message "Claude finished task on $REMOTE" \
-sound default
# 刪除遠(yuǎn)程的標(biāo)記文件,避免重復(fù)通知和手動(dòng)刪除
ssh "$REMOTE" "rm -f $WORKDIR/.task_done" >/dev/null 2>&1 || true
fi
LAST_STATE="$STATE"
fi
sleep 5
done2.1.4. default.sh
–REMOTE:遠(yuǎn)程設(shè)備的名稱或user@remote_ip這樣的方式,需要提前配置免密登錄;
WORKDIR:遠(yuǎn)程設(shè)備的工作目錄;
REMOTE="ubuntu_10.0.101.30" WORKDIR="/home/lsy/code/temp"
2.1.5. current.md
--- last_update: "未開始" current_round: 0 --- ## 快速定位 **我在做什么?** [填寫當(dāng)前任務(wù)目標(biāo)] **當(dāng)前進(jìn)度?** [填寫當(dāng)前位置/步驟] **下一步?** [填寫下一步行動(dòng)] **為什么?** [填寫大目標(biāo)] ## 快速恢復(fù)指令 如果迷失,應(yīng)該: 1. 讀取本文件確認(rèn)當(dāng)前位置 2. 查看 State/pitfalls.md 避免踩坑 3. 繼續(xù)執(zhí)行當(dāng)前任務(wù) ## 詳細(xì)狀態(tài) ### 當(dāng)前步驟進(jìn)度 - [ ] 任務(wù)1:[描述] - [ ] 任務(wù)2:[描述] ← 當(dāng)前位置 - [ ] 任務(wù)3:[描述] ### 關(guān)鍵決策記錄 - 決策1:[描述](原因:[原因]) - 決策2:[描述](原因:[原因]) ### 注意事項(xiàng) - [如有需要注意的事項(xiàng)]
2.1.6. pitfalls.md
# 已知問(wèn)題與解決方案 ## 使用說(shuō)明 - **開始新步驟前**:查看本文件,避免重復(fù)嘗試已失敗的方案 - **解決問(wèn)題后**:立即記錄到本文件 - **記錄原則**:包含現(xiàn)象、原因、解決方案、狀態(tài) --- ## 問(wèn)題模板(復(fù)制使用) ### 問(wèn)題X:[問(wèn)題標(biāo)題] - **時(shí)間**:YYYY-MM-DD HH:MM - **現(xiàn)象**:[詳細(xì)描述問(wèn)題現(xiàn)象] - **原因**:[分析問(wèn)題原因] - **解決方案**:[詳細(xì)解決步驟] - **狀態(tài)**:? 已解決 | ? 進(jìn)行中 | ? 無(wú)法解決 --- ## 已記錄問(wèn)題 ### 問(wèn)題1:示例問(wèn)題 - **時(shí)間**:2024-01-01 10:00 - **現(xiàn)象**:示例現(xiàn)象描述 - **原因**:示例原因分析 - **解決方案**:示例解決方案 - **狀態(tài)**:? 已解決 --- ## 失敗嘗試記錄(不要再試) ### 失敗嘗試1:[描述] - **嘗試時(shí)間**:YYYY-MM-DD - **為什么失敗**:[原因] - **教訓(xùn)**:[學(xué)到什么]
2.1.7. experiments.md
# 實(shí)驗(yàn)/嘗試追蹤記錄 ## 使用說(shuō)明 - 用于記錄需要多次嘗試的任務(wù)(如超參數(shù)調(diào)優(yōu)、方案對(duì)比等) - 每次嘗試都記錄配置、結(jié)果、狀態(tài) - 便于對(duì)比和選擇最佳方案 --- ## 實(shí)驗(yàn)?zāi)0澹◤?fù)制使用) ### 實(shí)驗(yàn)X:[實(shí)驗(yàn)名稱] - **時(shí)間**:YYYY-MM-DD HH:MM - **配置**: `` 參數(shù)1: 值1 參數(shù)2: 值2 `` - **結(jié)果**: - 指標(biāo)1:[數(shù)值] - 指標(biāo)2:[數(shù)值] - **狀態(tài)**:? 成功 | ? 失敗 | ? 進(jìn)行中 - **結(jié)論**:[分析和結(jié)論] --- ## 實(shí)驗(yàn)記錄 ### 實(shí)驗(yàn)1:基線測(cè)試 - **時(shí)間**:2024-01-01 10:00 - **配置**: `` 默認(rèn)配置 `` - **結(jié)果**: - 指標(biāo)1:待填寫 - 指標(biāo)2:待填寫 - **狀態(tài)**:? 待執(zhí)行 - **結(jié)論**:作為后續(xù)對(duì)比基線 -- ## 最佳方案總結(jié) **當(dāng)前最佳**:[實(shí)驗(yàn)編號(hào)] **配置**: `` 最佳配置參數(shù) `` **效果**:[描述]
3. 核心功能
3.1. 遠(yuǎn)程狀態(tài)監(jiān)控
- 實(shí)時(shí)監(jiān)控遠(yuǎn)程服務(wù)器上 Claude Code 的工作狀態(tài)
- 自動(dòng)檢測(cè)任務(wù)完成(
.task_done)和人工確認(rèn)需求(.human_required) - macOS 系統(tǒng)通知提醒
- 自動(dòng)配置遠(yuǎn)程 Claude CLI 為 “accept edits” 模式
3.2. 多上下文支持
- 支持配置多個(gè)遠(yuǎn)程環(huán)境
- 通過(guò)
contexts/目錄管理不同的遠(yuǎn)程服務(wù)器和工作目錄 - 快速切換不同的工作環(huán)境
3.3. State 狀態(tài)持久化
- 自動(dòng)同步 State 文件夾模板到遠(yuǎn)程
- 防止 Claude Code 因上下文壓縮而遺忘任務(wù)進(jìn)度
- 包含三個(gè)核心文件:
current.md- 當(dāng)前任務(wù)進(jìn)度和位置pitfalls.md- 已知問(wèn)題和解決方案experiments.md- 實(shí)驗(yàn)記錄和對(duì)比
3.4. State 自動(dòng)重置
- 任務(wù)切換時(shí)自動(dòng)備份舊狀態(tài)
- 支持手動(dòng)和自動(dòng)觸發(fā)重置
- 時(shí)間戳備份防止數(shù)據(jù)丟失
3.5. CLAUDE.md 規(guī)則同步
- 自動(dòng)同步本地 CLAUDE.md 到遠(yuǎn)程
- 確保 Claude Code 遵循統(tǒng)一的工作規(guī)則
- 支持追加模式,避免覆蓋遠(yuǎn)程已有內(nèi)容
4. 安裝環(huán)境
4.1 系統(tǒng)要求
- macOS 系統(tǒng)(用于
terminal-notifier通知),其他系統(tǒng)可以改彈窗通知方式 - SSH 免密登錄已配置
- Bash 4.0+
- 遠(yuǎn)程服務(wù)器需要安裝 Claude Code CLI
4.2 安裝配置
4.2.1. 克隆或下載項(xiàng)目
# 將項(xiàng)目放置在 ~/bin/claude 目錄 mkdir -p ~/bin cd ~/bin # 假設(shè)你已經(jīng)有了這些文件
4.2.2. 安裝 terminal-notifier(macOS 通知)
brew install terminal-notifier
4.2.3. 配置環(huán)境變量
在 `~/.zshrc` 或 `~/.bashrc` 中添加: export PATH="$HOME/bin/claude:$PATH" 然后重新加載配置: source ~/.zshrc # 或 source ~/.bashrc
4.2.4. 配置遠(yuǎn)程上下文
創(chuàng)建上下文配置文件 `contexts/<name>.sh`: # 示例:contexts/default.sh REMOTE="user@hostname" WORKDIR="/path/to/remote/workdir" # 示例:contexts/project2.sh REMOTE="another_user@another_host" WORKDIR="/path/to/another/workdir"
4.2.5. 配置 SSH 免密登錄
# 生成 SSH 密鑰(如果還沒(méi)有) ssh-keygen -t rsa -b 4096 # 將公鑰復(fù)制到遠(yuǎn)程服務(wù)器 ssh-copy-id user@hostname
5. 快速開始
5.1. 啟動(dòng)監(jiān)控
默認(rèn)配置: my_claude # 或明確指定 default 上下文 my_claude default 或指定配置: my_claude project2
5.2. 重置 State 狀態(tài)
當(dāng)功能需求發(fā)生變化的時(shí)候,可以手動(dòng)將保存的狀態(tài)重置,以免歷史記憶影響后續(xù)功能需求。當(dāng)在claude中執(zhí)行“/clear”或退出當(dāng)前對(duì)話重新打開新的對(duì)話時(shí),也會(huì)自動(dòng)重置狀態(tài)。
my_claude reset_state # 或重置指定上下文 my_claude reset_state project2
5.3. 停止監(jiān)控
當(dāng)不需要監(jiān)控時(shí),在本地mac終端執(zhí)行:
pgrep -f 'claude watch_my|watch_my.sh' | xargs -r kill -9
6. 詳細(xì)說(shuō)明
6.1. 工作流程
┌─────────────────┐
│ 啟動(dòng) my_claude │
└────────┬────────┘
│
▼
┌─────────────────────────┐
│ 1. 檢查上下文配置文件 │
│ 2. 加載 REMOTE/WORKDIR │
└────────┬────────────────┘
│
▼
┌──────────────────────────────────────┐
│ watch_my.sh 開始監(jiān)控循環(huán) │
│ ├─ 配置遠(yuǎn)程 Claude settings.json │
│ │ └─ 設(shè)置 acceptEdits 模式 │
│ ├─ 同步 CLAUDE.md(追加) │
│ ├─ 同步 State/ 模板(首次) │
│ └─ 每 5 秒檢查狀態(tài)文件 │
└────────┬─────────────────────────────┘
│
▼
┌────────────────────────┐
│ 檢測(cè)到信號(hào)文件? │
└──┬──────────┬──────────┘
│ │
.human_required .task_done
│ │
發(fā)送通知 發(fā)送通知
刪除文件 刪除文件6.2. 自動(dòng)配置 Accept Edits 模式
工具會(huì)在每次啟動(dòng)監(jiān)控時(shí)自動(dòng)配置遠(yuǎn)程 Claude Code CLI 為 “accept edits” 模式,無(wú)需在遠(yuǎn)程每次手動(dòng)切換。依賴python3的環(huán)境,若失敗了會(huì)有日志報(bào)錯(cuò),可以手動(dòng)將下面的內(nèi)容配置到對(duì)應(yīng)目錄中。
配置原理:
# 修改遠(yuǎn)程 ~/.claude/settings.json
{
"permissions": {
"defaultMode": "acceptEdits"
}
}6.3. State 文件夾機(jī)制
設(shè)計(jì)理念
Claude Code 在長(zhǎng)時(shí)間對(duì)話中會(huì)因上下文壓縮而逐漸"遺忘"之前的任務(wù)細(xì)節(jié)。State 文件夾通過(guò)外部化狀態(tài)存儲(chǔ),強(qiáng)制 Claude 定期刷新記憶,防止迷失和重復(fù)踩坑。
6.3.1.State/current.md- 當(dāng)前進(jìn)度追蹤
--- last_update: "2024-01-20 15:30" current_round: 15 --- ## 快速定位 我在做什么? 實(shí)現(xiàn)用戶認(rèn)證模塊 當(dāng)前進(jìn)度? 已完成數(shù)據(jù)庫(kù)設(shè)計(jì),正在編寫 API 下一步? 實(shí)現(xiàn) JWT token 驗(yàn)證 為什么? 為系統(tǒng)添加安全認(rèn)證功能 作用: - 記錄當(dāng)前任務(wù)目標(biāo)和進(jìn)度 - 每 10 輪對(duì)話強(qiáng)制刷新一次 - 用戶說(shuō)"繼續(xù)"時(shí)先讀取此文件
6.3.2.State/pitfalls.md- 已知問(wèn)題記錄
### 問(wèn)題1:數(shù)據(jù)庫(kù)連接超時(shí) - 時(shí)間:2024-01-20 14:00 - 現(xiàn)象:連接池配置不當(dāng)導(dǎo)致超時(shí) - 原因:max_connections 設(shè)置過(guò)小 - 解決方案:調(diào)整為 100 - 狀態(tài):? 已解決
作用:
- 避免重復(fù)踩坑
- 開始新步驟前必須查看
- 解決問(wèn)題后立即記錄
6.3.3.State/experiments.md- 實(shí)驗(yàn)對(duì)比記錄
實(shí)驗(yàn)1:Redis vs Memcached
- 配置:Redis 6.2, 單節(jié)點(diǎn)
- 結(jié)果:QPS 50K, 延遲 2ms
- 狀態(tài):? 選用 Redis
作用: - 記錄多次嘗試和對(duì)比 - 追蹤超參數(shù)調(diào)優(yōu)過(guò)程 - 便于選擇最佳方案
6.4. CLAUDE.md 強(qiáng)制規(guī)則
工具會(huì)自動(dòng)同步 CLAUDE.md 到遠(yuǎn)程
6.4.1. 狀態(tài)相關(guān)的強(qiáng)制規(guī)則:
- 每隔 10 輪對(duì)話:讀取
State/current.md - 每完成主要步驟:更新
State/current.md - 用戶說(shuō)"繼續(xù)":先讀取
State/current.md - 開始新步驟前:查看
State/pitfalls.md - 解決問(wèn)題后:記錄到
State/pitfalls.md - 修改代碼前:先深入理解目標(biāo)文件
6.4.2. 需人工確認(rèn)規(guī)則
觸發(fā)場(chǎng)景:
- 即將執(zhí)行修改文件的代碼
- 需要用戶選擇方案
- 缺少關(guān)鍵信息
- 任何可能產(chǎn)生破壞性變更的操作
工作流程:
1. Claude 檢測(cè)到需要人工確認(rèn) 2. 創(chuàng)建 .human_required 文件 3. 說(shuō)明需要確認(rèn)的內(nèi)容 4. 停止執(zhí)行 5. watch_my.sh 檢測(cè)到文件 → 發(fā)送通知 → 自動(dòng)刪除文件 6. 用戶收到通知,返回遠(yuǎn)程查看
6.4.3. 任務(wù)完成規(guī)則
觸發(fā)場(chǎng)景:
- 所有任務(wù)步驟已完成
- 測(cè)試通過(guò)
- 沒(méi)有遺留問(wèn)題
工作流程:
1. Claude 完成所有任務(wù) 2. 創(chuàng)建 .task_done 文件 3. watch_my.sh 檢測(cè)到文件 → 發(fā)送通知 → 自動(dòng)刪除文件 4. 用戶收到任務(wù)完成通知
6.4.4. 狀態(tài)重置規(guī)則
觸發(fā)場(chǎng)景:
- 任務(wù)需求發(fā)生重大變化
- 切換到新任務(wù)/項(xiàng)目
- 用戶明確要求重新開始
- 用戶執(zhí)行
/clear或exit
工作流程:
1. 手動(dòng)方式:執(zhí)行 my_claude reset_state 或 Claude 檢測(cè)到任務(wù)切換,創(chuàng)建 .reset_state 2. watch_my.sh 檢測(cè)到文件 3. 自動(dòng)備份舊 State → State.backup.YYYYMMDD_HHMMSS/ 4. 刪除舊 State 5. 拷貝新模板 6. 刪除 .reset_state 信號(hào)文件 7. 發(fā)送通知
7. 參考
- Claude Code CLI: https://docs.anthropic.com/claude/docs/claude-code
- terminal-notifier: https://github.com/julienXX/terminal-notifier
到此這篇關(guān)于Claude Code 遠(yuǎn)程監(jiān)控工具的文章就介紹到這了,更多相關(guān)Claude Code 遠(yuǎn)程監(jiān)控內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
本文介紹了如何快速配置ClaudeCode連接本地LMStudio服務(wù)的使用指南,包括驗(yàn)證LMStudio服務(wù)可用性、配置ClaudeCode全局連接、避免認(rèn)證沖突的方法、熱切換模型的操作步驟,幫2026-04-14
Claude Code專題:Skills 系統(tǒng)完全指南
Skills是ClaudeCode的一個(gè)自定義擴(kuò)展機(jī)制,用于封裝專業(yè)知識(shí),并按需調(diào)用,它通過(guò)SKILL.md文件定義核心指令,并通過(guò)references、examples、scripts三層次加載機(jī)制提供詳細(xì)信息,2026-04-14
Claude Code Buddy 解析:一個(gè)非核心功能,如何體現(xiàn)產(chǎn)品的細(xì)節(jié)完成度
文章詳細(xì)分析了ClaudeCode產(chǎn)品中的Buddy組件,其是一個(gè)輕量級(jí)的陪伴式角色系統(tǒng),不干擾主工作流,能夠穩(wěn)定生成角色身份,具備輕量的終端渲染與動(dòng)畫表現(xiàn),并通過(guò)合理的生成機(jī)制和2026-04-14
Claude Code安裝與使用指南:以MiniMax M2.5為例的完整實(shí)踐
本文詳細(xì)介紹了在Windows環(huán)境下安裝和配置ClaudeCode的過(guò)程,并以MiniMaxM2.5為例,講解了如何通過(guò)兼容接口使用ClaudeCode,文章分為安裝流程、配置方法、命令行與VSCode使用2026-04-13
claude code無(wú)法連接到Anthropic服務(wù)解決辦法
有時(shí)候我們的setting.json配置文件 和 環(huán)境變量 都設(shè)置好了之后, 我們打開claude code依然提示錯(cuò)誤,這篇文章主要介紹了claude code無(wú)法連接到Anthropic服務(wù)的相關(guān)資料,需2026-04-13
Claude Code 是 Anthropic 官方推出的命令行工具,讓開發(fā)者能在終端中與 Claude 進(jìn)行交互,本文就來(lái)詳細(xì)的介紹一下Claude Code CLI命令使用,感興趣的可以了解一下2026-04-13
本文主要介紹了ClaudeCode的安裝、配置及使用方法,包括環(huán)境要求、安裝步驟、API配置、核心使用方式和常用命令等,強(qiáng)調(diào)了配置第三方API中轉(zhuǎn)服務(wù)的重要性,感興趣的可以了解一2026-04-13
Win11下從零部署Claude Code的保姆級(jí)教程(2026年最新)
這篇文章主要為大家詳細(xì)介紹了2025年AI編程工具ClaudeCode的完整配置流程,重點(diǎn)解決兩大了核心問(wèn)題:本地環(huán)境部署和VSCode插件集成,文中的示例代碼講解詳細(xì),大家可以參考一2026-04-12
這篇文章主要為大家詳細(xì)介紹了2026年Claude Code中常用命令與具體操作,包括文件操作命令,Bash 命令執(zhí)行,Git 操作,AWS CLI 操作等,文中的示例代碼講解詳細(xì),有需要的小2026-04-10
在國(guó)內(nèi)穩(wěn)定用Claude Code的三種姿勢(shì)小結(jié)
本文介紹了三種在國(guó)內(nèi)穩(wěn)定使用ClaudeCode的方法:包括使用API中轉(zhuǎn)、替換國(guó)產(chǎn)大模型和本地部署三種方案,,分析了每種方案的優(yōu)缺點(diǎn),并提供了詳細(xì)配置指南,幫助開發(fā)者根據(jù)需2026-04-10











