AGENTS.md:使用脚本固化工作区文件操作流程

This commit is contained in:
2026-03-09 11:39:48 +08:00
parent 9b5f00dd67
commit d03273b42c
10 changed files with 339 additions and 27 deletions
+13 -13
View File
@@ -347,8 +347,8 @@
"memoryFlushCompactionCount": 0 "memoryFlushCompactionCount": 0
}, },
"agent:dev-assist:main": { "agent:dev-assist:main": {
"sessionId": "295def2d-dfeb-4d65-a8ee-77d118a2e7b8", "sessionId": "8b5bd3ea-7b52-453a-820d-2dfef2b63155",
"updatedAt": 1772983272528, "updatedAt": 1773027165126,
"systemSent": true, "systemSent": true,
"abortedLastRun": false, "abortedLastRun": false,
"chatType": "direct", "chatType": "direct",
@@ -369,7 +369,7 @@
"to": "user:ou_302b162eb824d405718845441a32d9cf", "to": "user:ou_302b162eb824d405718845441a32d9cf",
"accountId": "feishu-dev" "accountId": "feishu-dev"
}, },
"sessionFile": "/home/starmen1265/.openclaw/agents/dev-assist/sessions/295def2d-dfeb-4d65-a8ee-77d118a2e7b8.jsonl", "sessionFile": "/home/starmen1265/.openclaw/agents/dev-assist/sessions/8b5bd3ea-7b52-453a-820d-2dfef2b63155.jsonl",
"compactionCount": 0, "compactionCount": 0,
"skillsSnapshot": { "skillsSnapshot": {
"prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n<available_skills>\n <skill>\n <name>capability-evolver</name>\n <description>A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.</description>\n <location>~/.openclaw/skills/capability-evolver/SKILL.md</location>\n </skill>\n <skill>\n <name>clawlist</name>\n <description>MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.</description>\n <location>~/.openclaw/skills/clawlist/SKILL.md</location>\n </skill>\n</available_skills>", "prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n<available_skills>\n <skill>\n <name>capability-evolver</name>\n <description>A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.</description>\n <location>~/.openclaw/skills/capability-evolver/SKILL.md</location>\n </skill>\n <skill>\n <name>clawlist</name>\n <description>MUST use for any multi-step project, long-running task, or infinite monitoring workflow. Plan, execute, track, and verify tasks with checkpoint validation. For projects, automation, and ongoing operations.</description>\n <location>~/.openclaw/skills/clawlist/SKILL.md</location>\n </skill>\n</available_skills>",
@@ -410,8 +410,8 @@
"model": "glm-5", "model": "glm-5",
"systemPromptReport": { "systemPromptReport": {
"source": "run", "source": "run",
"generatedAt": 1772983256140, "generatedAt": 1773027056089,
"sessionId": "295def2d-dfeb-4d65-a8ee-77d118a2e7b8", "sessionId": "8b5bd3ea-7b52-453a-820d-2dfef2b63155",
"sessionKey": "agent:dev-assist:main", "sessionKey": "agent:dev-assist:main",
"provider": "zhipu", "provider": "zhipu",
"model": "glm-5", "model": "glm-5",
@@ -423,8 +423,8 @@
"sandboxed": false "sandboxed": false
}, },
"systemPrompt": { "systemPrompt": {
"chars": 26568, "chars": 26851,
"projectContextChars": 13678, "projectContextChars": 13961,
"nonProjectContextChars": 12890 "nonProjectContextChars": 12890
}, },
"injectedWorkspaceFiles": [ "injectedWorkspaceFiles": [
@@ -432,8 +432,8 @@
"name": "AGENTS.md", "name": "AGENTS.md",
"path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/AGENTS.md", "path": "/home/starmen1265/.openclaw/agents/dev-assist/workspace/AGENTS.md",
"missing": false, "missing": false,
"rawChars": 9264, "rawChars": 9547,
"injectedChars": 9264, "injectedChars": 9547,
"truncated": false "truncated": false
}, },
{ {
@@ -723,12 +723,12 @@
] ]
} }
}, },
"cacheRead": 16512, "cacheRead": 41536,
"cacheWrite": 0, "cacheWrite": 0,
"totalTokensFresh": true, "totalTokensFresh": true,
"contextTokens": 200000, "contextTokens": 200000,
"inputTokens": 2044, "inputTokens": 38440,
"outputTokens": 475, "outputTokens": 1820,
"totalTokens": 16954 "totalTokens": 49531
} }
} }
+19 -2
View File
@@ -70,8 +70,25 @@ This folder is home. Treat it that way.
### 用户的工作区 ### 用户的工作区
- 路径:~/work/zq - 路径:~/work/zq
- 这个工作区目录通过rclone与Nas同步 - 这个工作区目录通过rclone与Nas同步
- **任何对~/work/zq目录的操作(新建/修改/删除)之前必须先从NAS同步到本地:** `rclone sync "nas-webdav:/home/Drive/工作区/张青/工作区/" ~/work/zq/ --exclude ".git/" --exclude ".gitignore"` - **修改工作区文件必须使用脚本 `~/.openclaw/cron/scripts/zq-file.sh`**
- **操作完成后必须同步到NAS:** `rclone sync ~/work/zq/ "nas-webdav:/home/Drive/工作区/张青/工作区/" --exclude ".git/" --exclude ".gitignore"` - 脚本用法:
```bash
# 编辑文件
~/.openclaw/cron/scripts/zq-file.sh edit <相对路径>
# 写入/覆盖文件
~/.openclaw/cron/scripts/zq-file.sh write <相对路径> "内容"
# 追加内容
~/.openclaw/cron/scripts/zq-file.sh append <相对路径> "内容"
# 新建文件
~/.openclaw/cron/scripts/zq-file.sh new <相对路径> "内容"
# 删除文件
~/.openclaw/cron/scripts/zq-file.sh delete <相对路径>
```
- 脚本会自动执行:从NAS同步 → 操作文件 → Git提交 → 同步到NAS
- 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md - 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md
- 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒 - 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒
+19 -2
View File
@@ -70,8 +70,25 @@ This folder is home. Treat it that way.
### 用户的工作区 ### 用户的工作区
- 路径:~/work/zq - 路径:~/work/zq
- 这个工作区目录通过rclone与Nas同步 - 这个工作区目录通过rclone与Nas同步
- **任何对~/work/zq目录的操作(新建/修改/删除)之前必须先从NAS同步到本地:** `rclone sync "nas-webdav:/home/Drive/工作区/张青/工作区/" ~/work/zq/ --exclude ".git/" --exclude ".gitignore"` - **修改工作区文件必须使用脚本 `~/.openclaw/cron/scripts/zq-file.sh`**
- **操作完成后必须同步到NAS:** `rclone sync ~/work/zq/ "nas-webdav:/home/Drive/工作区/张青/工作区/" --exclude ".git/" --exclude ".gitignore"` - 脚本用法:
```bash
# 编辑文件
~/.openclaw/cron/scripts/zq-file.sh edit <相对路径>
# 写入/覆盖文件
~/.openclaw/cron/scripts/zq-file.sh write <相对路径> "内容"
# 追加内容
~/.openclaw/cron/scripts/zq-file.sh append <相对路径> "内容"
# 新建文件
~/.openclaw/cron/scripts/zq-file.sh new <相对路径> "内容"
# 删除文件
~/.openclaw/cron/scripts/zq-file.sh delete <相对路径>
```
- 脚本会自动执行:从NAS同步 → 操作文件 → Git提交 → 同步到NAS
- 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md - 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md
- 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒 - 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒
+19 -2
View File
@@ -70,8 +70,25 @@ This folder is home. Treat it that way.
### 用户的工作区 ### 用户的工作区
- 路径:~/work/zq - 路径:~/work/zq
- 这个工作区目录通过rclone与Nas同步 - 这个工作区目录通过rclone与Nas同步
- **任何对~/work/zq目录的操作(新建/修改/删除)之前必须先从NAS同步到本地:** `rclone sync "nas-webdav:/home/Drive/工作区/张青/工作区/" ~/work/zq/ --exclude ".git/" --exclude ".gitignore"` - **修改工作区文件必须使用脚本 `~/.openclaw/cron/scripts/zq-file.sh`**
- **操作完成后必须同步到NAS:** `rclone sync ~/work/zq/ "nas-webdav:/home/Drive/工作区/张青/工作区/" --exclude ".git/" --exclude ".gitignore"` - 脚本用法:
```bash
# 编辑文件
~/.openclaw/cron/scripts/zq-file.sh edit <相对路径>
# 写入/覆盖文件
~/.openclaw/cron/scripts/zq-file.sh write <相对路径> "内容"
# 追加内容
~/.openclaw/cron/scripts/zq-file.sh append <相对路径> "内容"
# 新建文件
~/.openclaw/cron/scripts/zq-file.sh new <相对路径> "内容"
# 删除文件
~/.openclaw/cron/scripts/zq-file.sh delete <相对路径>
```
- 脚本会自动执行:从NAS同步 → 操作文件 → Git提交 → 同步到NAS
- 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md - 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md
- 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒 - 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒
+19 -2
View File
@@ -63,8 +63,25 @@ Capture what matters. Decisions, context, things to remember. Skip the secrets u
- 路径:~/work/zq - 路径:~/work/zq
- 这个工作区目录通过rclone与Nas同步 - 这个工作区目录通过rclone与Nas同步
- **任何对~/work/zq目录的操作(新建/修改/删除)之前必须先从NAS同步到本地:** `rclone sync "nas-webdav:/home/Drive/工作区/张青/工作区/" ~/work/zq/ --exclude ".git/" --exclude ".gitignore"` - **修改工作区文件必须使用脚本 `~/.openclaw/cron/scripts/zq-file.sh`**
- **操作完成后必须同步到NAS:** `rclone sync ~/work/zq/ "nas-webdav:/home/Drive/工作区/张青/工作区/" --exclude ".git/" --exclude ".gitignore"` - 脚本用法:
```bash
# 编辑文件
~/.openclaw/cron/scripts/zq-file.sh edit <相对路径>
# 写入/覆盖文件
~/.openclaw/cron/scripts/zq-file.sh write <相对路径> "内容"
# 追加内容
~/.openclaw/cron/scripts/zq-file.sh append <相对路径> "内容"
# 新建文件
~/.openclaw/cron/scripts/zq-file.sh new <相对路径> "内容"
# 删除文件
~/.openclaw/cron/scripts/zq-file.sh delete <相对路径>
```
- 脚本会自动执行:从NAS同步 → 操作文件 → Git提交 → 同步到NAS
- 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md - 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md
- 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒 - 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒
+19 -2
View File
@@ -70,8 +70,25 @@ This folder is home. Treat it that way.
### 用户的工作区 ### 用户的工作区
- 路径:~/work/zq - 路径:~/work/zq
- 这个工作区目录通过rclone与Nas同步 - 这个工作区目录通过rclone与Nas同步
- **任何对~/work/zq目录的操作(新建/修改/删除)之前必须先从NAS同步到本地:** `rclone sync "nas-webdav:/home/Drive/工作区/张青/工作区/" ~/work/zq/ --exclude ".git/" --exclude ".gitignore"` - **修改工作区文件必须使用脚本 `~/.openclaw/cron/scripts/zq-file.sh`**
- **操作完成后必须同步到NAS:** `rclone sync ~/work/zq/ "nas-webdav:/home/Drive/工作区/张青/工作区/" --exclude ".git/" --exclude ".gitignore"` - 脚本用法:
```bash
# 编辑文件
~/.openclaw/cron/scripts/zq-file.sh edit <相对路径>
# 写入/覆盖文件
~/.openclaw/cron/scripts/zq-file.sh write <相对路径> "内容"
# 追加内容
~/.openclaw/cron/scripts/zq-file.sh append <相对路径> "内容"
# 新建文件
~/.openclaw/cron/scripts/zq-file.sh new <相对路径> "内容"
# 删除文件
~/.openclaw/cron/scripts/zq-file.sh delete <相对路径>
```
- 脚本会自动执行:从NAS同步 → 操作文件 → Git提交 → 同步到NAS
- 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md - 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md
- 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒 - 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒
+19 -2
View File
@@ -70,8 +70,25 @@ This folder is home. Treat it that way.
### 用户的工作区 ### 用户的工作区
- 路径:~/work/zq - 路径:~/work/zq
- 这个工作区目录通过rclone与Nas同步 - 这个工作区目录通过rclone与Nas同步
- **任何对~/work/zq目录的操作(新建/修改/删除)之前必须先从NAS同步到本地:** `rclone sync "nas-webdav:/home/Drive/工作区/张青/工作区/" ~/work/zq/ --exclude ".git/" --exclude ".gitignore"` - **修改工作区文件必须使用脚本 `~/.openclaw/cron/scripts/zq-file.sh`**
- **操作完成后必须同步到NAS:** `rclone sync ~/work/zq/ "nas-webdav:/home/Drive/工作区/张青/工作区/" --exclude ".git/" --exclude ".gitignore"` - 脚本用法:
```bash
# 编辑文件
~/.openclaw/cron/scripts/zq-file.sh edit <相对路径>
# 写入/覆盖文件
~/.openclaw/cron/scripts/zq-file.sh write <相对路径> "内容"
# 追加内容
~/.openclaw/cron/scripts/zq-file.sh append <相对路径> "内容"
# 新建文件
~/.openclaw/cron/scripts/zq-file.sh new <相对路径> "内容"
# 删除文件
~/.openclaw/cron/scripts/zq-file.sh delete <相对路径>
```
- 脚本会自动执行:从NAS同步 → 操作文件 → Git提交 → 同步到NAS
- 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md - 用户的待办记录到~/work/zq/00.收件箱/01-速记本.md
- 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒 - 用户的提醒记录到~/work/zq/20.领域/23-生活管理/提醒
+207
View File
@@ -0,0 +1,207 @@
#!/bin/bash
# 工作区文件操作脚本
# 用法:
# zq-file.sh edit <文件路径> # 编辑文件(使用默认编辑器)
# zq-file.sh write <文件路径> <内容> # 写入/覆盖文件
# zq-file.sh append <文件路径> <内容> # 追加内容到文件
# zq-file.sh delete <文件路径> # 删除文件
# zq-file.sh new <文件路径> <内容> # 新建文件
#
# 脚本会自动执行:
# 1. 从NAS同步到本地
# 2. 执行操作
# 3. Git提交
# 4. 同步到NAS
set -e
ZQ_DIR="$HOME/work/zq"
NAS_REMOTE="nas-webdav:/home/Drive/工作区/张青/工作区/"
EXCLUDE_ARGS="--exclude .git/ --exclude .gitignore"
LOG_FILE="$HOME/work/zq-file.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
usage() {
cat << EOF
工作区文件操作脚本
用法:
$0 edit <文件路径> 使用编辑器编辑文件
$0 write <文件路径> <内容> 写入/覆盖文件
$0 append <文件路径> <内容> 追加内容到文件末尾
$0 delete <文件路径> 删除文件
$0 new <文件路径> <内容> 新建文件
注意:
- 文件路径是相对于 ~/work/zq 的路径,或绝对路径
- 内容会通过 stdin 传入,支持多行
- 操作会自动:从NAS同步 → 执行操作 → Git提交 → 同步到NAS
示例:
# 编辑文件
$0 edit 10.项目/README.md
# 写入内容
echo "Hello World" | $0 write 00.收件箱/test.md
$0 write 00.收件箱/test.md "Hello World"
# 追加内容
$0 append 00.收件箱/01-速记本.md "- 新的速记"
# 删除文件
$0 delete 40.归档/old-file.md
# 新建文件
$0 new 30.资源/new-note.md "# 新笔记"
EOF
}
# 确保在正确目录
cd "$ZQ_DIR" || { log "错误:无法进入 $ZQ_DIR"; exit 1; }
# 解析参数
ACTION="$1"
shift || { usage; exit 1; }
# 处理文件路径(支持相对路径和绝对路径)
resolve_path() {
local path="$1"
if [[ "$path" = /* ]]; then
# 绝对路径
echo "$path"
else
# 相对路径,基于 ~/work/zq
echo "$ZQ_DIR/$path"
fi
}
# 从NAS同步到本地
sync_from_nas() {
log "步骤1: 从NAS同步到本地..."
rclone sync "$NAS_REMOTE" "$ZQ_DIR/" $EXCLUDE_ARGS --log-level INFO >> "$LOG_FILE" 2>&1 || {
log "警告:从NAS同步失败,继续执行..."
}
log "同步完成"
}
# Git提交
git_commit() {
local message="$1"
log "步骤3: Git提交..."
git add -A >> "$LOG_FILE" 2>&1
git commit -m "$message" >> "$LOG_FILE" 2>&1 || log "没有变更需要提交"
git push origin main >> "$LOG_FILE" 2>&1 || log "警告:Git push失败"
}
# 同步到NAS
sync_to_nas() {
log "步骤4: 同步到NAS..."
rclone sync "$ZQ_DIR/" "$NAS_REMOTE" $EXCLUDE_ARGS --log-level INFO >> "$LOG_FILE" 2>&1 || {
log "错误:同步到NAS失败"
exit 1
}
log "同步完成"
}
# 执行操作
case "$ACTION" in
edit)
FILE_PATH=$(resolve_path "$1")
REL_PATH="${FILE_PATH#$ZQ_DIR/}"
sync_from_nas
log "步骤2: 编辑文件 $REL_PATH"
${EDITOR:-nano} "$FILE_PATH"
git_commit "编辑: $REL_PATH"
sync_to_nas
log "完成!"
;;
write)
FILE_PATH=$(resolve_path "$1")
REL_PATH="${FILE_PATH#$ZQ_DIR/}"
CONTENT="${2:-$(cat)}"
sync_from_nas
log "步骤2: 写入文件 $REL_PATH"
mkdir -p "$(dirname "$FILE_PATH")"
echo "$CONTENT" > "$FILE_PATH"
git_commit "写入: $REL_PATH"
sync_to_nas
log "完成!"
;;
append)
FILE_PATH=$(resolve_path "$1")
REL_PATH="${FILE_PATH#$ZQ_DIR/}"
CONTENT="${2:-$(cat)}"
sync_from_nas
log "步骤2: 追加到文件 $REL_PATH"
if [[ ! -f "$FILE_PATH" ]]; then
log "错误:文件不存在"
exit 1
fi
echo -e "\n$CONTENT" >> "$FILE_PATH"
git_commit "追加: $REL_PATH"
sync_to_nas
log "完成!"
;;
delete)
FILE_PATH=$(resolve_path "$1")
REL_PATH="${FILE_PATH#$ZQ_DIR/}"
sync_from_nas
log "步骤2: 删除文件 $REL_PATH"
if [[ ! -f "$FILE_PATH" ]]; then
log "错误:文件不存在"
exit 1
fi
trash "$FILE_PATH" || rm "$FILE_PATH"
git_commit "删除: $REL_PATH"
sync_to_nas
log "完成!"
;;
new)
FILE_PATH=$(resolve_path "$1")
REL_PATH="${FILE_PATH#$ZQ_DIR/}"
CONTENT="${2:-$(cat)}"
sync_from_nas
log "步骤2: 新建文件 $REL_PATH"
if [[ -f "$FILE_PATH" ]]; then
log "错误:文件已存在"
exit 1
fi
mkdir -p "$(dirname "$FILE_PATH")"
echo "$CONTENT" > "$FILE_PATH"
git_commit "新建: $REL_PATH"
sync_to_nas
log "完成!"
;;
-h|--help|help)
usage
;;
*)
log "错误:未知操作 '$ACTION'"
usage
exit 1
;;
esac
+2 -1
View File
@@ -1,5 +1,6 @@
{ {
"om_x100b55eca10bb8a4c10cf7efcc2df2e": 1772982012899, "om_x100b55eca10bb8a4c10cf7efcc2df2e": 1772982012899,
"om_x100b55ecb92cfca0c1194072d85b557": 1772982142618, "om_x100b55ecb92cfca0c1194072d85b557": 1772982142618,
"om_x100b55ed73a708a0c45355a1b963e11": 1772983255111 "om_x100b55ed73a708a0c45355a1b963e11": 1772983255111,
"om_x100b55d7a02680a0c262a3f48e7da55": 1773027055446
} }
+3 -1
View File
@@ -19,5 +19,7 @@
"om_x100b55d7867458a8c2dc66089acc6d5": 1773026444426, "om_x100b55d7867458a8c2dc66089acc6d5": 1773026444426,
"om_x100b55d78407c084c342fe449a04888": 1773026477264, "om_x100b55d78407c084c342fe449a04888": 1773026477264,
"om_x100b55d79e59d8a0c443a580f68e3b8": 1773026569869, "om_x100b55d79e59d8a0c443a580f68e3b8": 1773026569869,
"om_x100b55d7991f94a0c2e8293dbc6cef5": 1773026685834 "om_x100b55d7991f94a0c2e8293dbc6cef5": 1773026685834,
"om_x100b55d7b6b920b8c4f9cfd18bafa0c": 1773027208022,
"om_x100b55d04828d4acc1034f0945fb607": 1773027438865
} }