1. 功能纵览
首先,我们来全面了解这款工具的核心能力。它实际上是一个专用于远程监控的自动化助手,主要紧盯 Claude Code 的工作状态。当你将 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:自动:后台进程会检测并删除文件 `` **正确执行示例:** ``Bash: touch .human_required && sleep 1 [等待完成] "需要人工确认:即将执行 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 "? A vailable 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 "? A vailable 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" 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 a vailable?)" 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/.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. 停止监控
当不再需要监控时,在本地 macOS 终端执行以下命令即可停止所有监控进程:
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. 状态相关的强制规则:
- 每隔 10 轮对话:读取
State/current.md,确认当前位置 - 每完成主要步骤:更新
State/current.md,记录进度 - 用户说"继续":先读取
State/current.md,再继续工作 - 开始新步骤前:查看
State/pitfalls.md,避免重蹈覆辙 - 解决问题后:记录到
State/pitfalls.md,形成经验 - 修改代码前:先深入理解目标文件,确保改动正确
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. 状态重置规则
触发场景:
- 任务需求发生重大变化
- 切换到新任务/项目
- 用户明确要求重新开始
- 用户执行
/clear或exit
工作流程:
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: https://docs.anthropic.com/claude/docs/claude-code
- terminal-notifier: https://github.com/julienXX/terminal-notifier
