一个指令,让AI 自动生成你的周复盘
相关代码:5.todo/weeks/tools/update-growth.py(成长档案自动更新脚本,全文见正文「让档案自动生长」一节)
相关视频: 008-项目管理
cover:AI 周复盘全是正确的废话?| 「obsidian+AI 一键完成周复盘」 title: 一个指令,让 AI 自动生成”只对你成立”的周复盘
简介(Description)
你大概率试过用 AI 做周复盘:先回忆、再整理成清单、最后丢给 AI 总结——结果发现”既然都整理好了,自己就能总结,要 AI 干嘛?”
问题在于分工反了:最累的”回忆 + 整理”你自己扛了,最轻松的”总结”才给 AI。
这期把流程整个反过来:给 Obsidian 仓库挂一个每小时自动 commit 的 git,让笔记、todo、git log 三者构成一条证据链;再把”个人长期目标 + 性格特征 + 上周复盘”写进 prompt,让复盘”只对你一个人成立”。最后收口成一条
/周复盘指令——AI 自动翻完你这一周的所有记录,生成基于真实行为轨迹的复盘。
章节时间戳
00:00 为什么你的 AI 复盘总是没用
00:38 复盘质量 = 资料 × 提示词
00:55 资料+git
02:16 三个数据源 = 一条证据链
02:50 定制自己的prompt
05:07 一键复盘
05:47 流程梳理
07:19 演示
09:26 结尾
关键词 / 标签(Keywords / Tags)
周复盘, AI周复盘, 自动复盘, 复盘系统, Obsidian, Claude Code, Codex,
AI效率, 自动化, git自动commit, 笔记管理, 个人知识管理, PKM,
prompt工程, 时间管理, 自我管理, 个人成长, 数字花园
一个指令,自动生成你的周复盘
这篇教程能帮你得到什么
一套搭一次、用很多年的自动复盘系统:你正常记笔记,系统在后台默默存证,每周一句话
/周复盘,AI 自动翻完你这一周的所有记录,生成一份真正基于你行为轨迹、只对你一个人成立的复盘。全程你不用列清单、不用回忆、不用喂资料。
一、先想清楚:为什么你的 AI 复盘总是没用
你大概率试过用 AI 做周复盘,但流程往往是这样的:
- 先回忆——周一干了啥,周二干了啥……
- 再整理成清单
- 最后把清单丢给 AI,让它总结
列到一半你就会发现一个尴尬的事实:
假象
既然我都已经整理成这样了,我自己就能总结,还要 AI 干嘛?
问题出在分工反了:你把”回忆”和”整理”这两件最累的事自己扛了,只把最轻松的”总结”丢给 AI。
这篇教程要把流程整个反过来——让 AI 自己去翻你这一周的所有记录,自动生成复盘。你什么都不用列。
记住这条核心公式,后面所有步骤都围绕它展开:
核心公式
复盘质量 = 资料 × 提示词
- 资料决定 AI”知道你做了什么”
- 提示词决定 AI”能不能说到你心里去”
下面分两部分各个击破。
二、资料:让 AI 自己去读,而不是你来喂
核心问题只有一个:怎么在你完全不费力的前提下,让 AI 拿到这一周最全的数据?
基础数据源是 Obsidian——用它追踪长期项目和每日任务(参见上一篇008-项目管理)。在此之上,只需多做一步:
记录笔记随时间的变化
给 Obsidian 仓库挂一个 git,让它每小时自动 commit。 说白了,就是把笔记文件夹当成代码仓库来管,让它在后台自动记录”你每次改了什么、改了哪些文件”。
步骤 1:初始化 git
在仓库根目录执行:
git init步骤 2:挂一个自动 commit 的定时脚本
目标:每小时检测一次有没有文件变动,有变动就自动 commit,commit 信息里自动带上日期和文件数。后台默默跑,你无感。
下面给两套方案,**按你的场景选择:
方案一:launchd(推荐 Mac 笔记本用户)
适用场景:iCloud vault + 笔记本,白天随时会合盖。cron 容易漏跑,而 launchd 在唤醒后会补跑,更可靠。
① 创建 plist 文件
~/Library/LaunchAgents/com.jz.auto-git-all-in.plist:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.jz.auto-git-all-in</string> <key>ProgramArguments</key> <array> <string>/bin/bash</string> <string>/Users/jz/auto-git-all-in.sh</string> </array> <key>StartInterval</key> <integer>3600</integer> <key>RunAtLoad</key> <true/> </dict> </plist>② 常用命令:
# 注册并启动 launchctl load ~/Library/LaunchAgents/com.jz.auto-git-all-in.plist # 停止并注销 launchctl unload ~/Library/LaunchAgents/com.jz.auto-git-all-in.plist # 查看状态 launchctl list | grep auto-git-all-in # **立即触发一次**(不等定时)
launchctl start com.jz.auto-git-all-in.plist
iCloud 目录踩坑提醒
如果仓库在 iCloud 目录,launchd 启动的
/bin/bash进程没有「完全磁盘访问权限」,读不了 iCloud 文件夹,会导致 git 失败。修复办法:打开
系统设置 → 隐私与安全性 → 完全磁盘访问权限,点+,按Cmd+Shift+G输入/bin/bash,添加并打开开关。注意:给
/bin/bash全盘权限范围偏大,多人共用的电脑最好把权限范围收窄。
方案二:常驻脚本(台式机 / 服务器,长期开机)
长期开机的机器用这套更简单。把下面的内容存成
/Users/jz/auto-git-all-in.sh:#!/bin/bash export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" REPO="/Users/jz/Library/Mobile Documents/iCloud~md~obsidian/Documents/all-in" LOG="$HOME/auto-git-all-in.log" while true; do echo "$(date '+%Y-%m-%d %H:%M:%S') 开始检测" >> "$LOG" cd "$HOME" 2>/dev/null || cd /tmp rm -f "$REPO/.git/index.lock" git -C "$REPO" add . >> "$LOG" 2>&1 if git -C "$REPO" diff --staged --quiet -- .; then echo "$(date '+%Y-%m-%d %H:%M:%S') 无变更,跳过" >> "$LOG" else CHANGED=$(git -C "$REPO" diff --staged --name-only | wc -l | tr -d ' ') FILES=$(git -C "$REPO" diff --staged --name-only | sed 's|.*/||' | tr '\n' ' ' | sed 's/ $//') git -C "$REPO" commit -m "todo auto: $(date '+%Y-%m-%d') [${CHANGED}] ${FILES}" >> "$LOG" 2>&1 echo "$(date '+%Y-%m-%d %H:%M:%S') commit 完成(${CHANGED} 个文件)" >> "$LOG" fi sleep 3600 # 每小时执行一次 done
这一步做完,你就有了三个数据源,构成一条完整的证据链:
| 数据源 | 它能证明什么 |
|---|---|
| todo 文件 | 你每天计划做什么、完成了什么 |
| git log | 你实际动过哪些文件, 精确到天 |
| git diff —stat | 哪个方向投入了多少改动,有数据为证 |
复盘真正该挖的地方
todo 是你”以为”自己做了什么,git 是你”真正”做了什么。两者之间的差距,恰恰是复盘最该深挖的地方。
而这一切 AI 自己去读就行,你一个字都不用喂。
这一部分到此结束
配置一次,之后再也不用管。从今天起,你的每一次记录都在被默默存证。
三、提示词:让复盘”只对你一个人成立”
通用 prompt 做出来的复盘,最大的毛病是:它对谁说的话都一样。
听起来都对,但全是”正确的废话”——因为它根本不认识你。
真正有用的复盘,一定建立在”理解这个人”之上。所以要把三类信息写进 prompt:
① 个人长期目标
给 AI 一条主轴,它才能判断:你这周做的事,到底在靠近目标,还是在原地打转。
示例:自由(金钱 / 时间 / 地点 / 关系)× 成长 × 个人 IP × 系统构建 × 可复利。
② 性格特征
按你的性格写 prompt,复盘才能戳中痛点。不知道怎么描述自己?用 MBTI 或长期稳定的行为习惯当锚点。
这样 AI 不再泛泛而谈,而是能精准指出:你真正卡在哪里。
③ 让 prompt 随时间生长
每次复盘结束,往 prompt 里追加一条:
本次新发现的模式:____
每月检查一次盲区清单:删掉已经真正改变的,加入新识别的。
活文档
到最后,你的 prompt 不再是一段固定文字,而是一份活文档——它记录的不只是你的目标,而是你这个人的演化。用得越久,越懂你。
让档案自动生长:update-growth.py
手动往档案里追加太容易忘,所以这一步交给脚本自动做:复盘生成时,AI 会在周文件末尾留一个 ---UPDATE--- 块(写本周的「模式」和「新增盲区」),脚本读它,把内容自动搬进成长档案——「模式日志」和「盲区清单」都最新在顶部。
它什么时候跑?
不用你手动跑。
/周复盘指令的最后一步(见下「四、收口」第 6 步)会自动调用它,复盘存完档案就更新了。
update-growth.py脚本(路径换成你自己的 vault):
#!/usr/bin/env python3
"""
从最新一份周复盘文件提取 ---UPDATE--- 块,追加到成长档案。
用法:python3 update-growth.py [可选:指定周文件路径]
"""
import re
import sys
from pathlib import Path
from datetime import date
VAULT = Path("/Users/jz/Library/Mobile Documents/iCloud~md~obsidian/Documents/all-in")
WEEKS_DIR = VAULT / "5.todo/weeks"
GROWTH_FILE = VAULT / "5.todo/prompt/周复盘prompt-成长.md"
PATTERN_HEADER = "## 模式日志"
BLIND_HEADER = "## 我的盲区清单"
def find_latest_week_file():
files = sorted(f for f in WEEKS_DIR.glob("*.md") if f.name != "tools")
if not files:
sys.exit("错误:5.todo/weeks/ 中没有找到 .md 文件")
return files[-1]
def extract_update_block(content):
m = re.search(r"---UPDATE---\n(.*?)\n---END UPDATE---", content, re.DOTALL)
if not m:
return None
data = {}
for line in m.group(1).strip().splitlines():
if ": " in line:
key, val = line.split(": ", 1)
data[key.strip()] = val.strip()
return data
def insert_after_header(content, header, entry):
"""在指定 ## 标题行之后、下一个 ## 标题之前插入 entry。"""
header_pos = content.find(f"\n{header}")
if header_pos == -1:
return content, False
line_end = content.find("\n", header_pos + 1)
if line_end == -1:
return content + entry, True
return content[: line_end + 1] + entry + content[line_end + 1 :], True
def main():
if len(sys.argv) > 1:
week_file = Path(sys.argv[1])
else:
week_file = find_latest_week_file()
print(f"读取:{week_file.name}")
content = week_file.read_text(encoding="utf-8")
data = extract_update_block(content)
if not data:
print("未找到 ---UPDATE--- 块,跳过。确认复盘文件末尾有该块。")
return
week = data.get("周", "?")
pattern = data.get("模式", "?")
new_blind = data.get("盲区新增", "无")
growth = GROWTH_FILE.read_text(encoding="utf-8")
# 追加模式日志(最新在顶部)
log_entry = f"\n### {week} ({date.today()})\n{pattern}\n"
growth, ok = insert_after_header(growth, PATTERN_HEADER, log_entry)
print(f"✓ 模式日志已追加:{week}" if ok else f"✗ 未找到 `{PATTERN_HEADER}` 节")
# 追加新盲区(最新在顶部)
if new_blind and new_blind != "无":
blind_entry = f"\n- {new_blind}\n"
growth, ok = insert_after_header(growth, BLIND_HEADER, blind_entry)
print(f"✓ 盲区已新增:{new_blind}" if ok else f"✗ 未找到 `{BLIND_HEADER}` 节")
GROWTH_FILE.write_text(growth, encoding="utf-8")
print("✓ 成长档案已更新")
if __name__ == "__main__":
main()要点
脚本本身不”思考”——它只搬运 AI 在
---UPDATE---块里写好的结论。所以判断写进档案的「模式/盲区」由 AI 在复盘时生成,脚本只负责落地,分工清晰、不会乱改你的档案。
进阶:承接上周复盘
还有一个容易被忽略、但很有用的设定——把每周复盘串联起来。做法是让 AI 在这周复盘时,先去读上周那份,并追问:
- 上周点出的最重要的问题,是真的解决了,还是被你回避了?
- 这周,有没有同样的问题又冒出来?
为什么这一步值钱
单看一周,你只能看到事件;连起来看十几周,AI 才能看到模式。而模式,才是复盘真正重要的东西。
提示词示例
这是我目前在用的提示词,抛砖引玉——改成适合你自己的效果会更好
四、收口:把这一切串成一个指令
前面铺垫的所有东西,现在收口成一条命令。根据你用的工具选择。
Claude 用户
在仓库的 .claude/commands/ 目录下创建 周复盘.md:
读取以下路径 prompt 中的评估框架、输出结构和风格要求:
/Users/jz/Library/Mobile Documents/iCloud~md~obsidian/Documents/all-in/5.todo/prompt/周复盘prompt.md
执行上下文收集(按顺序):
**1. 确定本周起始日**
- 列出 `5.todo/weeks/` 下所有 .md 文件,取文件名排序最大的一个
- 读取该文件 frontmatter 中的 `date:` 字段作为起始日(含)
- 找不到则默认:今天往前 7 天
**2. 读取每日记录(主叙事来源)**
- 读取 `5.todo/date/` 中从起始日到今天的所有日记文件
- vault 根路径:`/Users/jz/Library/Mobile Documents/iCloud~md~obsidian/Documents/all-in`
**3. 获取 git 时间线**
git -C "/Users/jz/Library/Mobile Documents/iCloud~md~obsidian/Documents/all-in" \
log --name-only --since=" [起始日期] " --format="%ad %s" --date=short
**4. 获取行为证据(按目录聚合)**
git -C "/Users/jz/Library/Mobile Documents/iCloud~md~obsidian/Documents/all-in" \
diff --stat HEAD~30 HEAD -- .
**5. 生成并保存**
- 按 prompt 的框架生成完整周复盘
- 在文件末尾追加 ---UPDATE--- 块(格式见稳定框架末尾,供第 6 步脚本读取)
- 保存到:`5.todo/weeks/YYYY-WXX.md`(ISO 周数,如 2026-W21)
- frontmatter 中写入 `date: [起始日期]`
- 不要询问确认,直接执行并保存
**6. 更新成长档案**
- 复盘保存后,运行脚本把本次「模式 / 新增盲区」自动追加进成长档案:
- python3 "/Users/jz/Library/Mobile Documents/iCloud~md~obsidian/Documents/all-in/5.todo/weeks/tools/update-growth.py"之后只要在 Claude 里输入:
/周复盘
它就会自动读 todo、跑 git、生成复盘、存进对应的周文件。全程一句话。
Codex 用户
在仓库根目录创建 AGENTS.md:
# Vault Agent Instructions
## 周复盘
当消息中包含"周复盘"或"周总结"时:
1. 先读取 prompt 文件:`5.todo/prompt/周复盘prompt.md`,按其中的评估框架、输出结构和风格要求
2. 确定起始日:列出 `5.todo/weeks/` 下所有 .md,取文件名最大的一个,读其 frontmatter `date:` 字段;找不到则默认今天往前 7 天
3. 读取 `5.todo/date/` 中从起始日到今天的所有日记文件(主叙事来源)
4. 运行:`git log --name-only --since="[起始日期]" --format="%ad %s" --date=short`
5. 运行:`git diff --stat HEAD~30 HEAD -- .`
6. 按 prompt 生成复盘,在文件末尾追加 ---UPDATE--- 块,保存到 `5.todo/weeks/YYYY-WXX.md`,frontmatter 写入 `date: [起始日期]`
7. 运行 `python3 "/Users/jz/Library/Mobile Documents/iCloud~md~obsidian/Documents/all-in/5.todo/weeks/tools/update-growth.py"`,把本次「模式 / 盲区」追加进成长档案之后只要消息里提到”周复盘”,它就自动跑完整套流程。
五、流程梳理

六、结尾:系统搭一次,复利很多年
Quote
系统只需要搭一次,复盘会自己每周运行
坚持复盘
你会拥有一份横跨十几周、甚至几年的行为轨迹。
到那时,AI 看到的,已经不只是“你做了什么”。
而是:
- 你总会在哪一步停下
- 你真正的精力高峰在什么时候
- 什么事情会反复消耗你
- 哪些行为,正在长期复利
- 你口中的目标,和真实行为之间到底差了多远
慢慢地—— AI 会比你自己,更早发现你的模式。
其实很多人缺的不是努力。
而是一个能长期、客观观察自己的系统。