Communitygithub.com

atishaytuli07/versioning-ai-work

为 AI 生成的每一次改动分配版本号(如 v1.2.3),永久保留所有版本直到用户删除,并支持版本对比或回退而不丢失工作。每当您在多次对话中为用户创建或编辑文件(设计、网页、应用、文档、代码)时,即使对方从未提及版本概念,也应使用此技能;当用户要求保存版本、查看历史、对比、撤销、恢复、回滚或“回到上一个”状态时,也应使用。

versioning-ai-work 是什么?

此技能为 AI Agent 与用户协作过程中产生的每一次文件变更自动创建编号版本(例如 v1.2.3),并永久保留这些版本,直到用户主动删除。它解决了反复迭代时“好版本被覆盖”的核心痛点——无论是 AI 重写、撤消过度还是对话漂移,用户都能随时查看、对比并恢复到任意历史状态。支持文件模式(适用于 Claude Code、Cursor、Codex、Windsurf、Copilot、Gemini CLI、Replit Agent 等可执行命令的平台)、GitHub Action 工作流模式(用于 app builder 类项目)以及纯聊天模式(无命令执行能力)。核心规则为:每次用户请求生成一个版本;回退操作本身也作为一个新版本保存,且回退绝不删除旧版本;版本号由脚本自动管理,用户无需猜测。此外还提供自动保存钩子(防止遗忘保存)、上下文传递(handoff)以及完整的版本查看、导出、备份/导入功能。

兼容平台✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓Windsurf
npx skills add https://github.com/atishaytuli07/ai-version-history/tree/HEAD/skills/versioning-ai-work

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

AI 工作版本管理

用户与 AI 迭代时常常丢失好版本:一次重新生成就覆盖了,一次撤销就过头了,或者对话偏离了方向。本技能将每一次改动都变成一个编号版本,该版本会一直保留直到用户主动删除,这样用户可以查看、对比并恢复任何历史状态。

三条规则

  1. 每次改动都生成一个版本。 一个用户请求中改变文件的操作为一个版本,在该轮对话结束时、您在回复之前保存。按请求保存(而非按每次文件编辑保存)能让历史保持可读性。
  2. 回退绝不删除版本。 只有脚本写入 .ai-versions/。切勿编辑、移动或删除其中的任何内容,即使被要求清理也请拒绝。请引导用户使用 backup。
  3. 回退本身也是一个新版本。 使用脚本恢复;绝不要凭记忆重建旧工作。恢复操作会保存为一个新版本,因此也可以被撤销。

脚本负责选择每个版本号。切勿猜测版本号;报告脚本打印出的数字即可。

按项目选择模式

  • 您可以运行命令并编辑文件(Claude Code, Cursor, Codex, Windsurf, Copilot, Gemini CLI, Replit Agent, claude.ai 含代码执行):使用下方的文件模式。
  • 项目包含 .github/workflows/ai-versions.yml:它使用 GitHub 版本层。不要运行 init。相反,每次改动时覆盖 .ai-versions/pending.json,需要回退时写入 .ai-versions/restore.json。两者均在 assets/rules/github-layer-rules.md 中描述。
  • 您无法运行命令(纯聊天):遵循 references/chat-mode.md。
  • 用户在 Lovable、Bolt 或 v0(Bolt 和 v0 处于测试阶段:尚未进行实时测试)或 Figma Make 中构建,并询问如何在该环境中进行版本管理:请阅读 references/app-builders.md。

文件模式

脚本位于本技能文件夹(即存放此 SKILL.md 的文件夹)内的 scripts/aiv.py。请使用完整路径调用它,并通过 --root 指定项目:

python3 "<本技能文件夹>/scripts/aiv.py" --root "<项目文件夹>" <命令>
# Windows: 将 python3 替换为 py

init 之后,每个项目也拥有自己的副本,因此从项目文件夹执行 python3 .ai-versions/aiv.py <命令> 效果相同。下文中的 aiv 表示两种形式均可。如果未安装 Python,请告知用户需要安装(python.org),并在安装完成前使用聊天模式。

初始化

在您首次编辑一个尚未包含 .ai-versions/ 的项目之前,请运行 init。它会将当前文件保存为 v1.0.0,这样用户始终可以回到您改动之前的状态。

如果该文件夹包含的项目之外还有其他内容(如沙盒、主文件夹、下载文件夹),请限定范围:init --only poster.html assets/。如果文件夹包含超过 5,000 个文件,init 将拒绝执行,因为这通常意味着选择了错误的文件夹。

每次改动后

aiv save --bump minor --summary "添加了包含三个方案的定价区域" \
  --reason "新区域;布局和样式不变" --prompt "添加包含三个方案的定价"
--bump向用户展示为适用场景
patch小调整功能不变,细微调整:文字、颜色、间距、尺寸、小修复
minor新功能新内容,方向不变:一个区域、页面、组件、功能
major大变更方向改变:重新设计、新布局、新样式系统、移除功能

一次请求包含多项改动时,取最高级别。在两个级别间不确定时,取较低级别并在 --reason 中说明。边界情况(文档、重构、内容更新)见 references/bump-levels.md。

--summary 应面向用户而非开发者:“放大了主图”,而不是“更新 Hero.tsx”。将用户的请求缩短为一行,放入 --prompt。

然后在您的回复末尾加上一行,例如:已保存 v1.3.0(新功能):添加了包含三个方案的定价区域。

如果 save 发现当前文件与某个旧版本完全一致,它会将该次保存记录为“回退到该版本”。请告知用户发生了什么。

用户提出请求时

用户说运行然后
"显示版本", "历史"list显示简短的表格。如需可视化时间线,运行 view 并分享它生成的 HTML 文件。
"v1.3.0 中有什么变化"diff v1.3.0^ v1.3.0用通俗语言解释。vX^ 表示 vX 之前的版本。
"比较 v1.2 和 v2.0"diff v1.2.0 v2.0.0 --stat,然后不加 --stat 以获取详细信息说明发生了什么变化、哪些地方变好了、哪些地方变差了。如果可以渲染作品(HTML、图片),请并排展示两者。
"回到 v1.2.0", "撤销那个"restore v1.2.0,或 restore prev 用于撤消然后执行下面的步骤。
"只恢复旧版头部", "保留新文本但用回旧设计"restore v1.2.0 --path <文件>仅更改这些文件;该恢复保存为“小调整”。
"从 v1.2.0 尝试另一个方向"restore v1.2.0然后进行新的改动并照常保存。
"当前版本是什么", "有未保存的内容吗"status
"给我 v1.2.0 的文件"export v1.2.0 --out v1.2.0.zip
"在另一个聊天或工具中继续这个"backup --out history.zip在新位置执行:import history.zip。

当用户模糊地描述版本时(“那个蓝色的”、“重新设计之前”),运行 list 并匹配摘要内容。如果有两个版本都符合,请询问用户。

回退之后

完整恢复会将所有项目文件恢复到之前的状态,包括用户可能不认为是工作组成部分的文件(如笔记或数据)。告知用户哪些文件发生了变化(脚本会列出它们)。如果它先保存了未保存的工作,请告知是哪个版本保存了该工作,并提供恢复特定文件的选项:restore <那个版本> --path <文件>。当请求明确只针对项目的一部分(如“旧的颜色”)时,从一开始就使用 --path。

运行 handoff <您恢复的版本>,并将其输出视为进行下一次改动前的当前事实。它只会列出导致该版本的决策,并命名被放弃的决策,这样从废弃方向产生的指令就不会悄悄混回来。如果对话很长,建议用户在一个新聊天中继续,并将 handoff 文本交给用户粘贴过去。

防止遗忘保存的安全网

在 Claude Code 或 Cursor 中,对每个项目提供一次此建议:install-hooks claude-code 或 install-hooks cursor。它会添加一个钩子,在您结束时将任何您忘记保存的改动保存为“小调整”。仅在用户同意后安装,因为它会写入他们的工具设置。

版本交流方式

使用用户的词语:小调整、新功能、大变更、已回退。提及版本号,而不是提交记录、.ai-versions/ 中的文件或哈希值。工具特定的说明(claude.ai, Replit, Windows)见 references/tools.md。

当用户回退时,提醒他们一次:只有文件会恢复回来;数据库行记录和其他实时数据将保持原样。

全部命令

命令功能
init [--only PATH...]开始记录历史并保存 v1.0.0
save --bump B --summary S [--reason R] [--prompt P]将当前文件保存为新版本
status当前版本及未保存的更改
list [--all] [--json]列出版本,最新的在前
show V显示一个版本的详细信息及变更文件
diff [A] [B] [--stat] [--path P...]无参数:未保存的更改。一个参数:A 到最新。两个参数:A 到 B
restore V [--path P...] [--note N]回退(所有文件或仅部分文件);先保存未保存的工作,然后将恢复本身保存为新版本
handoff [V]清理上下文,以便从 V 版本继续
view [--out FILE]所有版本的 HTML 时间线
export V --out DIR_or_ZIP导出某个版本的文件
backup --out FILE.zip / import FILE.zip移动整个历史记录
install-hooks claude-code|cursor自动保存 AI 遗忘的内容
setup-github [--with-pill]为 app builder 仓库添加 GitHub 层
doctor检查历史记录是否缺失

版本可以写成 v1.2.0、1.2.0、latest、prev 或 v1.2.0^。

相关技能