详情

首页手游攻略 Claude Code 远程监控工具的实现方式实用指南

Claude Code 远程监控工具的实现方式实用指南

佚名 2026-08-23 09:50:01

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Claude Code 远程监控工具的实现方法”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

目录
  • 1. 功能纵览
  • 2. 文件结构
    • 2.1. 文件源码
      • 2.1.1. CLAUDE.md
      • 2.1.2. my_claude
      • 2.1.3. watch_my.sh
      • 2.1.4. default.sh
      • 2.1.5. current.md
      • 2.1.6. pitfalls.md
      • 2.1.7. experiments.md
  • 3. 核心功能
    • 3.1. 远程状态监控
      • 3.2. 多上下文兼容
        • 3.3. State 状态持久化
          • 3.4. State 自动重置
            • 3.5. CLAUDE.md 规则同步
            • 4. 安装环境
              • 4.1 系统要求
                • 4.2 安装设置
                  • 4.2.1. 克隆或下载项目
                  • 4.2.2. 安装 terminal-notifier(macOS 通知)
                  • 4.2.3. 设置环境变量
                  • 4.2.4. 设置远程上下文
                  • 4.2.5. 设置 SSH 免密登录
              • 5. 更快开始
                • 5.1. 启动监控
                  • 5.2. 重置 State 状态
                    • 5.3. 停止监控
                    • 6. 详细说明
                      • 6.1. 工作流程
                        • 6.2. 自动设置 Accept Edits 模式
                          • 6.3. State 文件夹机制
                            • 6.3.1.State/current.md- 当前进度追踪
                            • 6.3.2.State/pitfalls.md- 已知问题记录
                            • 实验1:Redis vs Memcached
                          • 6.4. CLAUDE.md 强制规则
                            • 6.4.1. 状态相关的强制规则:
                            • 6.4.2. 需人工确认规则
                            • 6.4.3. 任务完成规则
                            • 6.4.4. 状态重置规则
                        • 7. 参考

                          1. 功能纵览

                          从实现思路看,一个用来远程监控 Claude Code 工作状态的自动化工具,兼容任务完成通知、人工确认提醒、状态持久化和自动重置等功能。

                          2. 文件结构

                          ~/bin/claude/
                          ├── README.md # 本文档
                          ├── CLAUDE.md # Claude Code 工作规则
                          ├── my_claude # 主入口脚本
                          ├── watch_my.sh # 监控脚本
                          ├── contexts/ # 上下文配置目录
                          │ ├── default.sh # 默认配置
                          │ └── project2.sh # 其他项目配置
                          └── State/ # State 文件夹模板
                              ├── current.md # 当前进度模板
                              ├── pitfalls.md # 已知问题模板
                              └── experiments.md # 实验记录模板

                          2.1. 文件源码

                          2.1.1. CLAUDE.md

                          落到代码里,Claude code 一般情况下会遵守CLAUDE.md中的规则,能够将一些强制要求写到这个文件中,这里主要列出当前功能的一些规则。

                          # Claude 基础提示词
                          ## 角色
                          你是一个自主编程智能体...
                          ## 硬性规则
                          ### ? 关键:`.human_required` 文件创建(必须遵守)
                          **在使用以下任何操作前,必须先创建 `.human_required` 文件:**
                          1. ❌ **永远不要直接使用 `AskUserQuestion` 工具**
                             - ✅ 正确做法:`touch .human_required` → 说明情况 → 停止
                          2. ❌ **永远不要显示 "是否继续?" 提示**
                             - ✅ 正确做法:`touch .human_required` → 说明需要确认的内容 → 停止
                          3. ❌ **永远不要向用户显示多选题**
                             - ✅ 正确做法:`touch .human_required` → 列出选项 → 停止
                          4. ❌ **永远不要在没有创建文件的情况下等待用户输入/确认**
                             - ✅ 正确做法:`touch .human_required` → 说明需要什么 → 停止
                          ### 执行顺序(强制):
                          ? **关键:你的第一个操作必须是调用 Bash 工具创建文件。不要在工具调用前输出任何文本。**
                          ``
                          步骤 1:检测到需要人工输入
                          步骤 2:第一个操作 = Bash 工具调用:touch .human_required && sleep 1(调用前不输出任何文本)
                          步骤 3:工具完成后 → 说明需要确认的内容(仅简短文本)
                          步骤 4:停止 - 不要调用其他工具或显示任何提示
                          步骤 5:自动:后台进程会检测并删除文件
                          ``
                          **正确执行示例:**
                          ``
                          <tool_call>Bash: touch .human_required && sleep 1</tool_call>
                          [等待完成]
                          "需要人工确认:即将执行 Python 脚本 export_balanced.py"
                          [停止 - 不再输出,不提醒删除文件]
                          ``
                          **错误执行示例:**
                          ❌ "我需要创建文件..." 然后调用工具(工具前输出文本 = 错误)
                          ❌ 工具调用 + "是否继续?"(继续提示 = 错误)
                          ❌ 工具调用 + AskUserQuestion 工具(多个工具 = 错误)
                          ❌ 提醒用户删除文件(自动化进程会处理)
                          ### 何时创建 `.human_required`:
                          ✅ **必须在以下场景创建:**
                          - 即将执行任何修改文件的代码
                          - 需要用户在多个选项中选择
                          - 需要用户提供信息
                          - 任何破坏性更改
                          - 有多个有效的设计选择
                          - 缺少关键信息
                          - 任何你会使用 AskUserQuestion 的场景
                          ❌ **无需创建:**
                          - 读取现有文件(安全操作)
                          - 分析代码(只读)
                          - 回答关于代码的问题
                          ### 任务完成
                          - 任务完成时,创建 `.task_done`
                          ## 信号(重要)
                          - `.human_required` → 必须立即停止
                          - `.task_done` → 任务完全完成
                          ## ? ReLU 规则(状态重置)
                          在每次新对话或新任务开始时:
                          - 文件 `.human_required` 和 `.task_done` 必须不存在
                          - 人类操作员会在开始前执行 `claude_reset.sh`
                          - 当这些文件不存在时,你必须假设是干净状态
                          执行期间:
                          - 仅在需要人工确认时创建 `.human_required`
                          - 仅在任务完全完成时创建 `.task_done`
                          - 不要自己删除这些文件
                          这些文件作为二进制状态门(ReLU):
                          - 不存在 → 允许执行
                          - 存在 → 必须停止
                          ## ? 启动确认(强制)
                          **在每次新对话开始时,你必须输出:**
                          ``
                          ✅ CLAUDE.md 已加载
                          - 硬性规则:需要人工确认时先创建 .human_required 文件
                          - 执行顺序:touch .human_required && sleep 1 → 说明 → 停止
                          - 任务完成:创建 .task_done 文件
                          - State 规则:每 10 轮读取 State/current.md,完成步骤后更新,解决问题后记录到 pitfalls.md
                          ⚠️ 重要:请确保已启用 "accept edits" 模式,否则 CLI 工具的确认提示会覆盖 .human_required 机制
                          ``
                          这确认你已阅读并将遵守本文件中的所有规则。
                          ## ? 环境要求
                          **为使 `.human_required` 机制正常工作:**
                          1. 用户必须在 CLI 中启用 "accept edits" 模式
                             - 命令:`accept edits on`(或类似命令)
                             - 这可以防止 CLI 的内置提示干扰
                          2. 用户的后台进程监控 `.human_required` 文件
                             - 自动处理文件检测和删除
                             - Claude 无需手动干预
                          ---
                          ## ? State 文件夹强制使用规则(必须遵守)
                          ### 核心原则
                          **State 文件夹 = 你的外部大脑,用于对抗上下文压缩导致的遗忘**
                          ### ? 强制规则
                          1. **每隔 10 轮对话:刷新状态(强制)**
                             ``
                             必须执行:读取 State/current.md,确认当前位置和进度
                             ``
                          2. **每完成一个主要步骤:更新进度(强制)**
                             ``
                             必须执行:更新 State/current.md,标记完成的步骤
                             ``
                          3. **每次用户说"继续":先读状态(强制)**
                             ``
                             必须执行:先读取 State/current.md,再继续工作
                             ``
                          4. **开始新步骤前:查看已知问题(强制)**
                             ``
                             必须执行:读取 State/pitfalls.md,避免重复踩坑
                             ``
                          5. **解决问题后:立即记录(强制)**
                             ``
                             必须执行:将问题、原因、解决方案记录到 State/pitfalls.md
                             ``
                          6. **修改代码前:先深入理解(强制)**
                             ``
                             必须执行:先读取目标文件,深入理解后再修改
                             ``
                          ### State 文件夹结构
                          ``
                          State/
                          ├── current.md # 当前位置、进度、目标
                          ├── pitfalls.md # 已知问题、失败尝试
                          └── experiments.md # 实验记录(可选)
                          ``
                          ### 检查点触发条件(满足任一即执行)
                          - ✅ 对话超过 10 轮
                          - ✅ 完成一个主要步骤
                          - ✅ 遇到中断(错误、环境问题等)
                          - ✅ 感到不确定下一步
                          - ✅ 用户说"继续"或用户人工确认了继续操作
                          ### 检查点执行流程
                          ``
                          1. 读取 State/current.md(当前位置)
                          2. 自我评估:当前在做什么 vs 应该做什么
                          3. 判断是否偏离目标
                          4. 输出:? 当前位置 | ✅ 已完成 | ? 下一步
                          5. 如偏离 → 恢复;未偏离 → 继续
                          ``
                          ### 输出格式要求
                          每次检查点必须输出:
                          ``
                          ⚠️ 执行检查点...
                          ? 当前位置:[从 State/current.md 读取]
                          ✅ 已完成:[列出已完成步骤]
                          ? 下一步:[说明下一步行动]
                          状态评估:[正常 | 偏离]
                          ``
                          ### 违反后果
                          ❌ 如果不遵守这些规则,将导致:
                          - 长对话后方向迷失
                          - 重复踩已知的坑
                          - 忘记项目目标
                          - 效率降低 50%+
                          ---
                          ## ? State 状态重置规则(任务切换)
                          ### 何时需要重置 State
                          当以下情况发生时,**必须**重置 State 文件夹:
                          - ✅ **需求发生重大变化**(从功能 A 切换到功能 B)
                          - ✅ **切换到新的任务/项目**(之前的进度已不再相关)
                          - ✅ **用户明确要求"重新开始"/"reset"**
                          - ✅ **用户执行 `/clear` 清空对话**
                          - ✅ **用户关闭对话后重新开始**(如执行 `exit` 后再启动)
                          ### 状态重置流程(手动方式)
                          当检测到需要重置时:
                          ```bash
                          # 步骤 1:创建重置信号文件
                          touch .reset_state
                          # 步骤 2:说明重置原因
                          "检测到需求变更/任务切换,已创建 .reset_state 文件。
                          后台进程将自动备份旧 State 并重置为新模板。"
                          # 步骤 3:停止当前操作,等待后台处理
                          ``
                          ### 重置触发条件(满足任一即触发)
                          1. **用户明确表达:**
                             - "重新开始"
                             - "reset"
                             - "清空状态"
                             - "新任务"
                          2. **需求明显变化:**
                             - 当前目标与 State/current.md 记录的目标完全不同
                             - 用户要求做与之前完全无关的事情
                          3. **对话重启:**
                             - 检测到这是一个新会话(对话轮次归零)
                             - 用户说"我们来做个新任务"
                          ### 自动重置说明
                          **后台进程会自动处理:**
                          - 备份旧 State → `State.backup.YYYYMMDD_HHMMSS/`
                          - 清空当前 State 内容
                          - 拷贝新模板
                          - 删除 `.reset_state` 信号文件
                          **你无需手动删除文件,只需创建信号。**

                          2.1.2. my_claude

                          #!/bin/bash
                          set -e
                          BASE="$(cd "$(dirname "$0")" && pwd)"
                          CMD=$1
                          # 如果第一个参数是命令,则执行命令
                          case "$CMD" in
                            reset_state)
                              # reset_state 命令:重置远程 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"
                              # 在远程创建 .reset_state 信号文件
                              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"
                              ;;
                            *)
                              # 默认行为:启动监控
                              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"
                              ;;
                          esac

                          2.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
                            # 检测 State 重置信号
                            if ssh "$REMOTE" "[ -f $WORKDIR/.reset_state ]" 2>/dev/null; then
                              echo "? Detected .reset_state signal, resetting State..."
                              # 生成备份时间戳
                              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
                              # 删除信号文件
                              ssh "$REMOTE" "rm -f $WORKDIR/.reset_state" 2>/dev/null || true
                              # 发送通知
                              terminal-notifier
                                -title "Claude Code"
                                -message "State reset completed on $REMOTE"
                                -sound default
                            fi
                            # 检测任务状态
                            STATE=$(ssh "$REMOTE" "
                              if [ -f $WORKDIR/.human_required ]; then
                                echo HUMAN
                              elif [ -f $WORKDIR/.task_done ]; then
                                echo DONE
                              else
                                echo NONE
                              fi
                            ")
                            # ? 只在"状态变化"时触发
                            if [ "$STATE" != "$LAST_STATE" ]; then
                              if [ "$STATE" = "HUMAN" ]; then
                                terminal-notifier
                                  -title "Claude Code"
                                  -message "Claude needs human input on $REMOTE"
                                  -sound default
                              # 删除远程的标记文件,避免重复通知和手动删除
                              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
                              # 删除远程的标记文件,避免重复通知和手动删除
                              ssh "$REMOTE" "rm -f $WORKDIR/.task_done" >/dev/null 2>&1 || true
                              fi
                              LAST_STATE="$STATE"
                            fi
                            sleep 5
                          done

                          2.1.4. default.sh

                          结合项目来看,—REMOTE:远程设备的名称或user@remote_ip这样的方式,需提前设置免密登录;
                          WORKDIR:远程设备的工作目录;

                          REMOTE="ubuntu_10.0.101.30"
                          WORKDIR="/home/lsy/code/temp"

                          2.1.5. current.md

                          ---
                          last_update: "未开始"
                          current_round: 0
                          ---
                          ## 快速定位
                          **我在做什么?** [填写当前任务目标]
                          **当前进度?** [填写当前位置/步骤]
                          **下一步?** [填写下一步行动]
                          **为什么?** [填写大目标]
                          ## 快速恢复指令
                          如果迷失,应该:
                          1. 读取本文件确认当前位置
                          2. 查看 State/pitfalls.md 避免踩坑
                          3. 继续执行当前任务
                          ## 详细状态
                          ### 当前步骤进度
                          - [ ] 任务1:[描述]
                          - [ ] 任务2:[描述] ← 当前位置
                          - [ ] 任务3:[描述]
                          ### 关键决策记录
                          - 决策1:[描述](原因:[原因])
                          - 决策2:[描述](原因:[原因])
                          ### 注意事项
                          - [如有需要注意的事项]

                          2.1.6. pitfalls.md

                          # 已知问题与解决方案

                          ## 使用说明
                          - **开始新步骤前**:查看本文件,避免重复尝试已失败的方案
                          - **解决问题后**:立即记录到本文件
                          - **记录原则**:包含现象、原因、解决方案、状态

                          ---

                          ## 问题模板(复制使用)

                          ### 问题X:[问题标题]
                          - **时间**:YYYY-MM-DD HH:MM
                          - **现象**:[详细描述问题现象]
                          - **原因**:[分析问题原因]
                          - **解决方案**:[详细解决步骤]
                          - **状态**:✅ 已解决 | ⏳ 进行中 | ❌ 无法解决

                          ---

                          ## 已记录问题

                          ### 问题1:示例问题
                          - **时间**:2024-01-01 10:00
                          - **现象**:示例现象描述
                          - **原因**:示例原因分析
                          - **解决方案**:示例解决方案
                          - **状态**:✅ 已解决

                          ---

                          ## 失败尝试记录(不要再试)

                          ### 失败尝试1:[描述]
                          - **尝试时间**:YYYY-MM-DD
                          - **为什么失败**:[原因]
                          - **教训**:[学到什么]

                          2.1.7. experiments.md

                          # 实验/尝试追踪记录

                          ## 使用说明
                          - 用于记录需要多次尝试的任务(如超参数调优、方案对比等)
                          - 每次尝试都记录配置、结果、状态
                          - 便于对比和选择最佳方案

                          ---

                          ## 实验模板(复制使用)

                          ### 实验X:[实验名称]
                          - **时间**:YYYY-MM-DD HH:MM
                          - **配置**:
                            ``
                            参数1: 值1
                            参数2: 值2
                            ``
                          - **结果**:
                            - 指标1:[数值]
                            - 指标2:[数值]
                          - **状态**:✅ 成功 | ❌ 失败 | ⏳ 进行中
                          - **结论**:[分析和结论]

                          ---

                          ## 实验记录

                          ### 实验1:基线测试
                          - **时间**:2024-01-01 10:00
                          - **配置**:
                            ``
                            默认配置
                            ``
                          - **结果**:
                            - 指标1:待填写
                            - 指标2:待填写
                          - **状态**:⏳ 待执行
                          - **结论**:作为后续对比基线

                          --

                          ## 最佳方案总结

                          **当前最佳**:[实验编号]

                          **配置**:
                          ``
                          最佳配置参数
                          ``

                          **效果**:[描述]

                          3. 核心功能

                          3.1. 远程状态监控

                          • 实时监控远程服务器上 Claude Code 的工作状态
                          • 自动检测任务完成(.task_done)和人工确认需求(.human_required
                          • macOS 系统通知提醒
                          • 自动设置远程 Claude CLI 为 “accept edits” 模式

                          3.2. 多上下文兼容

                          • 兼容设置多个远程环境
                          • 借助 contexts/ 目录管理不同的远程服务器和工作目录
                          • 更快切换不同的工作环境

                          3.3. State 状态持久化

                          • 自动同步 State 文件夹模板到远程
                          • 防止 Claude Code 因上下文压缩而遗忘任务进度
                          • 包含三个核心文件:
                            • current.md - 当前任务进度和位置
                            • pitfalls.md - 已知问题和解决方案
                            • experiments.md - 实验记录和对比

                          3.4. State 自动重置

                          • 任务切换时自动备份旧状态
                          • 兼容手动和自动触发重置
                          • 时间戳备份防止数据丢失

                          3.5. CLAUDE.md 规则同步

                          • 自动同步本地 CLAUDE.md 到远程
                          • 确保 Claude Code 遵循统一的工作规则
                          • 兼容追加模式,避免覆盖远程已有内容

                          4. 安装环境

                          4.1 系统要求

                          • macOS 系统(用来 terminal-notifier 通知),其他系统能够改弹窗通知方式
                          • SSH 免密登录已设置
                          • Bash 4.0+
                          • 远程服务器需安装 Claude Code CLI

                          4.2 安装设置

                          4.2.1. 克隆或下载项目

                          # 将项目放置在 ~/bin/claude 目录
                          mkdir -p ~/bin
                          cd ~/bin
                          # 假设你已经有了这些文件

                          4.2.2. 安装 terminal-notifier(macOS 通知)

                          brew install terminal-notifier

                          4.2.3. 设置环境变量

                          在 `~/.zshrc` 或 `~/.bashrc` 中添加:
                          export PATH="$HOME/bin/claude:$PATH"
                          然后重新加载配置:
                          source ~/.zshrc # 或 source ~/.bashrc

                          4.2.4. 设置远程上下文

                          创建上下文配置文件 `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 密钥(如果还没有)
                          ssh-keygen -t rsa -b 4096
                          # 将公钥复制到远程服务器
                          ssh-copy-id user@hostname

                          5. 更快开始

                          5.1. 启动监控

                          默认配置:
                          my_claude
                          # 或明确指定 default 上下文
                          my_claude default
                          或指定配置:
                          my_claude project2

                          5.2. 重置 State 状态

                          实际处理时,当功能需求发生变化的时候,能够手动将保存的状态重置,以免历史记忆影响后续功能需求。当在claude中执行“/clear”或退出当前对话重新打开新的对话时,也会自动重置状态。

                          my_claude reset_state
                          # 或重置指定上下文
                          my_claude reset_state project2

                          5.3. 停止监控

                          不需监控时,在本地mac终端执行:

                          pgrep -f 'claude watch_my|watch_my.sh' | xargs -r kill -9

                          6. 详细说明

                          6.1. 工作流程

                          ┌─────────────────┐
                          │ 启动 my_claude │
                          └────────┬────────┘
                                   │
                                   ▼
                          ┌─────────────────────────┐
                          │ 1. 检查上下文配置文件 │
                          │ 2. 加载 REMOTE/WORKDIR │
                          └────────┬────────────────┘
                                   │
                                   ▼
                          ┌──────────────────────────────────────┐
                          │ watch_my.sh 开始监控循环 │
                          │ ├─ 配置远程 Claude settings.json │
                          │ │ └─ 设置 acceptEdits 模式 │
                          │ ├─ 同步 CLAUDE.md(追加) │
                          │ ├─ 同步 State/ 模板(首次) │
                          │ └─ 每 5 秒检查状态文件 │
                          └────────┬─────────────────────────────┘
                                   │
                                   ▼
                              ┌────────────────────────┐
                              │ 检测到信号文件? │
                              └──┬──────────┬──────────┘
                                 │ │
                             .human_required .task_done
                                 │ │
                              发送通知 发送通知
                              删除文件 删除文件

                          6.2. 自动设置 Accept Edits 模式

                          从实现思路看,工具会在每次启动监控时自动设置远程 Claude Code CLI 为 “accept edits” 模式,无需在远程每次手动切换。依赖python3的环境,若失败了会有日志报错,能够手动将下面的内容设置到对应目录中。
                          设置原理:

                          # 修改远程 ~/.claude/settings.json
                          {
                            "permissions": {
                              "defaultMode": "acceptEdits"
                            }
                          }

                          6.3. State 文件夹机制

                          设计理念
                          实际处理时,Claude Code 在长时间对话中会因上下文压缩而逐渐"遗忘"之前的任务细节。State 文件夹借助外部化状态存储,强制 Claude 定期刷新记忆,防止迷失和重复踩坑。

                          6.3.1.State/current.md- 当前进度追踪

                          ---
                          last_update: "2024-01-20 15:30"
                          current_round: 15
                          ---
                          ## 快速定位
                          我在做什么? 实现用户认证模块
                          当前进度? 已完成数据库设计,正在编写 API
                          下一步? 实现 JWT token 验证
                          为什么? 为系统添加安全认证功能
                          作用:
                          - 记录当前任务目标和进度
                          - 每 10 轮对话强制刷新一次
                          - 用户说"继续"时先读取此文件

                          6.3.2.State/pitfalls.md- 已知问题记录

                          ### 问题1:数据库连接超时
                          - 时间:2024-01-20 14:00
                          - 现象:连接池配置不当导致超时
                          - 原因:max_connections 设置过小
                          - 解决方案:调整为 100
                          - 状态:✅ 已解决

                          作用:

                          • 避免重复踩坑
                          • 开始新步骤前必须查看
                          • 解决问题后立即记录
                            6.3.3. State/experiments.md - 实验对比记录

                          实验1:Redis vs Memcached

                          • 设置:Redis 6.2, 单节点
                          • 结果:QPS 50K, 延迟 2ms
                          • 状态: 选用 Redis

                          作用:
                          - 记录多次尝试和对比
                          - 追踪超参数调优过程
                          - 便于选择最佳方案

                          6.4. CLAUDE.md 强制规则

                          工具会自动同步 CLAUDE.md 到远程

                          6.4.1. 状态相关的强制规则:

                          1. 每隔 10 轮对话:读取 State/current.md
                          2. 每完成主要步骤:更新 State/current.md
                          3. 用户说"继续":先读取 State/current.md
                          4. 开始新步骤前:查看 State/pitfalls.md
                          5. 解决问题后:记录到 State/pitfalls.md
                          6. 修改代码前:先深入理解目标文件

                          6.4.2. 需人工确认规则

                          触发场景:

                          • 即将执行修改文件的代码
                          • 需用户选择方案
                          • 缺少关键信息
                          • 任何可能产生破坏性变更的操作

                          工作流程:

                          1. Claude 检测到需要人工确认
                          2. 创建 .human_required 文件
                          3. 说明需要确认的内容
                          4. 停止执行
                          5. watch_my.sh 检测到文件 → 发送通知 → 自动删除文件
                          6. 用户收到通知,返回远程查看

                          6.4.3. 任务完成规则

                          触发场景:

                          • 所有任务步骤已完成
                          • 测试借助
                          • 没有遗留问题

                          工作流程:

                          1. Claude 完成所有任务
                          2. 创建 .task_done 文件
                          3. watch_my.sh 检测到文件 → 发送通知 → 自动删除文件
                          4. 用户收到任务完成通知

                          6.4.4. 状态重置规则

                          触发场景:

                          • 任务需求发生重大变化
                          • 切换到新任务/项目
                          • 用户明确要求重新开始
                          • 用户执行 /clearexit

                          工作流程:

                          1. 手动方式:执行 my_claude reset_state
                             或 Claude 检测到任务切换,创建 .reset_state
                          2. watch_my.sh 检测到文件
                          3. 自动备份旧 State → State.backup.YYYYMMDD_HHMMSS/
                          4. 删除旧 State
                          5. 拷贝新模板
                          6. 删除 .reset_state 信号文件
                          7. 发送通知

                          7. 参考

                          • Claude Code CLI: (链接已移除)
                          • terminal-notifier: (链接已移除)

                          落到代码里,到此这篇关于Claude Code 远程监控工具的文章就介绍到这了,更多相关Claude Code 远程监控内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多兼容脚本之家!

                          相关资讯
                          点击查看更多
                          游戏推荐
                          推荐专题
                          热门阅读
                          推荐下载