npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

takeback

v0.4.8

Published

Ctrl+Z for AI coding agents. One command undoes the last turn of Claude Code, Codex or any agent, including files changed through Bash.

Readme

takeback

AI 编程智能体的 Ctrl+Z。

智能体跑了 rm -rf、改坏了 40 个文件,或者"修好"了不该动的地方? 一条命令全部恢复,包括它通过 Bash 改动的文件。

CI npm License: MIT

English · 简体中文

你发给 Claude Code 或 Codex 的每一条消息,都会自动存档。终端、桌面 App、IDE 都支持。 不需要会用 git。哪一轮改坏了,直接让 AI 退回去。 其他智能体用 takeback watch。从不碰你的 .git,从不删除 .gitignore 保护的文件,数据不离开你的电脑。

快速开始

只需设置一次。之后在所有项目里,Claude Code 和 Codex 都会在每次发送提示词之前、每轮结束之后各保存一个检查点:

npx takeback init

智能体把东西改坏了,就在项目文件夹里运行下面这条。想先看看会改什么,加 -n:

npx takeback

也可以不敲命令,直接对智能体说"回到你上一次修改之前"。init 找到 claude 和 codex 命令时会装好对应的插件,插件会教智能体从检查点恢复。

[!NOTE] Codex 只运行你批准过的钩子。请在 Codex 里运行一次 /hooks(或打开 ChatGPT App 的 Hooks 页面),批准 takeback 下面的两个钩子。

为什么用 takeback

  • 补上自带撤销的漏洞。 Claude Code 的 /rewind 不管通过 Bash 改动的文件、大多数子智能体和其他会话的修改(官方文档),Codex CLI 则去掉了 /undo。
  • 不需要会用 git。 检查点存在独立的地方,项目本身也不需要是 git 仓库。让智能体退回去,它会从检查点恢复。ChatGPT App 里的 Undo 按钮和 Codex 的审查面板都要求是 git 仓库。
  • 智能体拿到的是真实的历史。 连着改了很多轮又都没提交时,你让智能体"改回原来那版",它只能凭记忆重写,细节常常对不上。有了检查点,它能读出原样的文件。详见下文。
  • 一次设置,所有项目、所有智能体。 init 覆盖终端、桌面 App 和 IDE 里的 Claude Code 和 Codex。其他工具用 takeback watch。
  • 退回去之后也能再回来。 每次撤销前都先保存当前状态。从不碰你的 .git,也从不删除 .gitignore 保护的文件,比如 .env。
  • 小到可以读完。 两个文件,约 900 行,零依赖,数据不离开你的电脑。

工作原理

  • 每个智能体两个钩子:每次提示词之前一个,每轮结束之后一个。插件在 hooks/hooks.json 里注册它们;没装 Claude Code 插件时,init 把同样两个钩子写进 ~/.claude/settings.json。每次约 0.1 秒。
  • 检查点是 ~/.takeback/ 下一个独立 git 仓库里的提交。takeback 从不往你自己的仓库里写东西,所以分支、暂存区和 stash 都保持原样,项目本身也不需要是 git 仓库。
  • 遵守你的 .gitignore,并始终跳过 node_modules、.venv、__pycache__。
  • 不是 git 仓库、并且超过 5,000 个文件或 500 MB 的文件夹(比如 ~/Downloads),钩子不会自动开始存检查点。想在这种文件夹里用,运行一次 takeback save 即可。
  • 超过 30 天的检查点会自动清理,和 Claude Code 自己的保留期一样。
  • 没有后台进程,没有账号,没有遥测。

命令

下面的命令省略了 npx,没有全局安装的话请加上。插件命令链接到它们给智能体的说明。

| 你想 | 终端 | Claude Code 插件 | | --- | --- | --- | | 撤销智能体的上一轮 | takeback | /takeback:takeback | | 先看看会改什么 | takeback -n | /takeback:takeback -n | | 再往前退一轮 | 再运行一次 takeback | 再运行一次 /takeback:takeback | | 只撤销上一轮对某个文件的改动 | takeback src/app.ts | /takeback:takeback src/app.ts | | 查看所有检查点 | takeback log | /takeback:takeback-log | | 跳到任意检查点,或者重做 | takeback to 3f9c2a1 | /takeback:takeback-to 3f9c2a1 | | 以 patch 形式查看上一轮的改动 | takeback diff | /takeback:takeback-diff | | 查看某个文件在检查点时的内容 | takeback show 3f9c2a1 src/app.ts | 直接问 Claude | | 手动保存一个检查点 | takeback save "重构之前" | |

每次撤销都会告诉你怎么撤回这次撤销,所以退过头也不会丢东西。

$ takeback log
  42f4f3e  just now        takeback to 966e3c5 · 3 files
  bb9958d  2 minutes ago   claude · after "clean up the build scripts" · 3 files
  966e3c5  9 minutes ago   claude · after "add a release script" · 2 files

智能体也能用

"回到之前那个版本"对智能体来说其实很难:对话一长,它对早先文件的记忆会被压缩成摘要;git 里也只有提交过的内容。检查点精确保存了每一轮,智能体可以像你一样直接读取:

takeback log                        # 哪个检查点对应哪一轮
takeback show 3f9c2a1 src/app.ts    # 某个文件当时的原样
takeback diff 3f9c2a1               # 从那以后改了什么

装了插件后,智能体会自己想到去查检查点,并且只在你要求时才恢复,见 Claude Code 和 Codex 的技能说明。读取不需要写权限,在 Codex 的沙盒里也能用。其他智能体在你告诉它之后,也能运行同样的命令。

在哪里能用

takeback 保护的是编程智能体在你电脑上改动的文件。

| 你在哪里用智能体 | 设置 | | --- | --- | | Claude Code:终端、Claude 桌面 App(Code 标签页)、VS Code / JetBrains 插件 | npx takeback init,或者装插件 | | 终端或 ChatGPT 桌面 App 里的 Codex | npx takeback init 会安装插件。用 /hooks 批准一次它的两个钩子,批准之前 Codex 会跳过它们 | | Cursor、Windsurf、Gemini CLI、OpenCode、Aider、Cline、你自己的脚本:任何会改文件夹里文件的工具 | 在那个文件夹里保持运行 npx takeback watch,文件停止变化 1.5 秒后自动存检查点 | | 网页版 Claude Code、Codex 云端任务等云端智能体 | 不适用:文件在服务商的机器上,不在你的电脑上 | | ChatGPT、Claude 等应用里的普通聊天 | 不需要:聊天不会改你电脑上的文件。就算运行了 init,它也找不到编程智能体,什么都不会改 |

插件

takeback 也是 Claude Code 和 Codex 的插件,两边都会用名字列出它的钩子。两个插件都直接运行 takeback 的 TypeScript 源码,需要 Node 22.18 或更新版本。

Claude Code。 只要电脑上有 claude 命令,npx takeback init 会自动装好插件。插件同样会自动存检查点,另外多了斜杠命令,还有一个技能,让 Claude 从检查点里读取旧版本。想自己装的话,在 Claude Code 里输入:

/plugin install takeback --marketplace hichipli/takeback

如果没有 claude 命令(比如你只用桌面 App),init 会改为把两个钩子写进 ~/.claude/settings.json。之后再装插件,插件会接手。

/plugin marketplace add hichipli/takeback
/plugin install takeback@takeback

Codex。 只要电脑上有 codex 命令,npx takeback init 会自动装好插件。之后在 /hooks 或 ChatGPT App 的 Hooks 页面里批准一次它的两个钩子,它们列在 takeback 下面。

codex plugin marketplace add hichipli/takeback
codex plugin add takeback@takeback

常见问题

不能。想保留的东西请提交。takeback 是两次提交之间的安全网,专门应对智能体一口气改很多文件的时候。

takeback 只恢复文件,不动 git 历史,所以恢复后的文件会显示为未提交的改动。只要从那个检查点之后分支或提交变了,它都会提示。想撤销提交本身,请用 git revert 或 git reset。

  • .gitignore 排除的文件,比如 .env、dist/。
  • 智能体工作的文件夹以外的东西(哪怕它用完整路径去改了那里的文件),以及数据库写入、安装依赖、git push 这类副作用。在 ChatGPT App 里,ChatGPT 项目中的对话有它自己的文件夹,所以请在你想改的那个文件夹里开始对话。
  • 项目里嵌套的 git 仓库(比如 submodule)里的文件。检查点只记下它的提交,所以撤销时会提示它的名字,不会动它。
  • 空文件夹,因为 git 不保存空文件夹。
  • 在 macOS 和 Windows 上,只改了字母大小写的重命名。内容会恢复,名字保持新的大小写。

第一个检查点要把整个项目复制进存储,大项目要几秒(一个 850 个文件的应用用了 3.6 秒)。之后只存有变化的文件,每次钩子约 0.1 秒。

git 对每个文件版本只存一份并压缩。旧检查点 30 天后自动清理。想马上释放空间就运行 takeback prune,takeback prune --keep 7d 只保留最近一周。prune 也会删除已经不存在的文件夹的检查点。

可能是还没设置(npx takeback init),可能是 Codex 还没批准钩子(在 Codex 里运行 /hooks),也可能这是一个不是 git 仓库的大文件夹(运行 takeback save 开始)。takeback 自己也会打印这些提示。

运行 npx takeback@latest init,会一并更新 Claude Code 和 Codex 的插件。如果电脑上没有 claude 或 codex 命令,它会告诉你怎么在对应的智能体里手动更新。如果更新改动了钩子,Codex 会请你重新批准一次。

npx takeback init --remove 会移除钩子和两个插件,最后删掉 ~/.takeback。如果电脑上没有 claude 命令,在 Claude Code 里用 /plugin uninstall takeback@takeback 移除插件。

类似的工具

给编程智能体加上撤销,takeback 不是唯一的办法。看你的习惯,下面这些也许更合适:

  • 智能体自带的。 Claude Code 的检查点管它自己文件工具做的修改。Cline、Roo Code 和 Gemini CLI 也会维护一个影子 git 仓库,Aider 会把每次修改提交到你的仓库。
  • jj。 每次运行都会给工作区拍快照,如果你用 jj 管版本,jj undo 已经能覆盖大部分情况。
  • 其他独立工具,比如 snap-back、turnback 和 bashback。它们接入多个智能体,在每次工具调用或 shell 命令前后存快照。

takeback 只在每次发提示词之前和每轮结束之后各存一次,并用你的提示词给检查点命名,因为你想撤销的通常就是"那一轮"。项目不需要是 git 仓库,除了 git 本身没有任何依赖,代码一次就能读完。

读代码

运行之前可以先读一遍,内容不多:

| 文件 | 做什么 | | --- | --- | | src/takeback.ts | 检查点仓库:保存、撤销、diff、show 和 prune | | src/cli.ts | 命令、钩子入口和 init | | hooks/hooks.json | 两个插件共用的两个钩子 | | claude-skills/ | Claude Code 的斜杠命令,以及读取检查点的技能 | | codex-skills/ | Codex 用的同一个技能 | | test/takeback.test.ts | 24 个测试,在 Linux、macOS 和 Windows 上运行 |

路线图

  • [ ] 支持 Gemini CLI、OpenCode 和 DeepSeek Harness 的原生钩子
  • [ ] 交互式时间线选择器

参与贡献

欢迎提 issue 和 pull request,先看看 CONTRIBUTING.md。如果 takeback 救了你一下午,点个 ⭐ 能帮更多人找到它。

许可证

MIT