Clawdbot:正在革命性改变(和令人担忧的)半个互联网的开源AI助手

你电脑里的太空龙虾 想象一下,一个奥地利开发者创建了一个个人AI助手,给它起了个太空龙虾的名字,然后决定向公众开放。24小时内在GitHub上获得了9000个星标。48小时内,17000个。同时还有300多个开放的issue,其中几个是关键安全问题,甚至有人用它的名字创建了一个非官方加密货币。 欢迎来到Clawdbot的世界。 这到底是什么? Clawdbot是一个在你本地机器上运行的开源AI助手。与其他助手的区别在于:它不仅仅回答问题,它会做事情。 它可以连接到WhatsApp、Telegram、Discord、Slack和iMessage。可以读取你的邮件。访问你的日历。创建文件。执行代码。最有趣的是:它可以即时学习新技能。 创建者是Peter Steinberger,这是移动开发界的知名人物(创立了PSPDFKit并出售了公司)。最初只是一个个人项目:他的私人助手叫Clawd,有着太空龙虾的性格,帮他管理数字生活。 在2026年1月,他决定开放源代码。然后就有了现在的情况。 很酷的地方 Clawdbot的魅力在于它是一个真正的智能代理。它不是一个回答你问题然后静止不动的聊天机器人。它是一个可以: 编程循环任务 代表你执行操作 为自己创建新技能 最后一点是关键。如果你要求它做某件它不知道如何做的事情——“把这个视频转换成GIF”——它会编写必要的代码,将其安装为新的技能,然后执行任务。下次它就知道如何做了。 Hacker News上的一位用户说他用它来管理Facebook Messenger上的租房查询。Clawdbot过滤消息、安排看房时间,并正确完成了90%的任务。 另一位开发者让它调试代码中的bug。Clawdbot找到了问题,写了修复方案,并发送了一个最终被合并的pull request。 简单来说:就像有一个不睡觉、不抱怨、学得很快的实习生。 令人担忧的地方(确实应该担忧) 但这里来了重点。而且是真的很重要的重点。 300多个开放的issue 该项目在GitHub上有300多个开放的issue,其中许多是bug报告和安全漏洞。这不一定是坏事——热门项目总是有issue——但这反映了成熟度的状态。 没有沙箱 Clawdbot以与你用户相同的权限运行。没有虚拟机。没有容器。没有隔离。如果你给它访问权限,它就有真正的访问权限。 如HN线程中有人说的: “给一个有互联网连接且没有防护栏的进程root访问权限是…一个决定。” 硬编码的OAuth凭据 在存储库中发现了硬编码的OAuth凭据。维护者认为这是分布式开源软件的标准做法,但仍然引起关注。 提示注入 系统没有针对提示注入的强大机制。如果Clawdbot访问恶意网站,该网站的内容可能操纵其行为。没有将数据标记为"不可信"。 成本 一位用户报告说在2天内仅API调用就花费了300美元。Clawdbot使用大量上下文,这是要付费的。 炒作和噪音 该项目在前24小时内出现在6个YouTube视频中。有人创建了一个"官方"加密货币代币(剧透:这不是官方的,创建者已经否认),市值达到600万。 Medium上有文章将其誉为"革命性的"。Twitter上也有开发者说它基本上就是集成更多但安全性更低的Claude Code。 真相,一如既往,在某个中间点。 我的观点 Clawdbot因其代表的意义而有趣,而不是因为它现在的状态。 现在的状态:一个功能性但不成熟的原型,有重要的安全漏洞,需要技术知识才能负责任地使用。 代表的意义:AI智能代理的民主化。任何人都可以拥有一个做事情的助手,而不仅仅是说事情的助手的想法。 我推荐你今天安装它吗?我觉得不行。如果你的机器上有敏感数据就不行。如果你不理解你在执行什么就不行。 值得关注吗?绝对是。这个概念很强大。社区很活跃。如果他们能解决安全问题,这可能会很重要。 如何尝试(如果你敢的话) 如果在这一切之后你仍然好奇,项目在github.com/clawdbot/clawdbot,文档在docs.clawd.bot。 我的建议: 在虚拟机中做——永远不要在你的主机器上 阅读issue——特别是安全相关的 不要给它访问敏感内容——不要用真实邮件,不要用有重要数据的日历 监控API支出——从一开始就设置账单限制 总结 Clawdbot是那种让你思考不久的将来的项目类型。一个每个人都有一个管理其数字生活的个人AI代理的未来。 它也是那种提醒你这个未来伴随重要风险的项目类型。给AI访问你的邮件、日历、WhatsApp以及执行任意代码的能力是…很多。 问题不是这些助手是否会存在。它们已经存在了。问题是我们是否能够在不搬起石头砸自己脚的情况下使用它们。 目前,这只太空龙虾是一个迷人的实验。但我会让它待在虚拟水族箱里,直到它更成熟一些。 想看看具有更好沙箱的AI代理如何工作?这里我解释Claude Desktop和Claude Code的区别,以及为什么Anthropic决定在你的Mac中放入整个Ubuntu。

2026年1月26日 · Fernando

聊天机器人占用10GB虚拟机:Claude在你Mac上到底在干什么

10GB的意外发现 你在Mac上安装了Claude Desktop。一切正常,应用程序看起来很小。但有一天你查看磁盘空间,发现了这个: ~/Library/Application Support/Claude/vm_bundles/claudevm.bundle 10.8 GB。 什么?一个聊天机器人要占用十个G?这里面装的什么,《指环王》三部曲加长版? 不是。装的是Ubuntu。 Claude产品三巨头 在解释"是什么"之前,让我先解释"为什么"。Anthropic有三种方式让你访问Claude: 产品 运行位置 目标用户 claude.ai Anthropic服务器 所有人 Claude Desktop + Cowork 你Mac上的虚拟机 专业人士 Claude Code 直接在你的系统上 开发者 网页版是安全选择:一切都在Anthropic的云端进行,不会接触你的机器。但如果你想让Claude在你的电脑上做真正的事情——创建文档、执行代码、移动文件——你需要其他解决方案。 这就是Cowork和Claude Code的用武之地,两种完全不同的哲学。 Cowork:普通人的Claude Code Cowork是Anthropic在2026年1月12日发布的智能体名称。它的官方标语是: “Claude Code for the rest of your work”(为你其他工作准备的Claude Code) 虽然Claude Code是为生活在终端里的开发者设计的,但Cowork是为你不编程时设计的。想要整理合同的律师。需要从50个PDF中提取数据的分析师。想要把笔记转换成演示文稿的教师。 它能做什么 你授予它访问Mac上某个文件夹的权限 Claude在该文件夹内读取、编辑和创建文件 可以创建Office文档(Word、Excel、PowerPoint),无需你安装任何软件 如果需要,可以执行Python或JavaScript代码 可以并行启动多个"子智能体"处理繁重任务 实际例子 “嘿Claude,我在这个文件夹里有30张收据截图。给我做一个包含每张收据日期、概念和金额的电子表格。” Claude就会去做。读取图像,用OCR提取数据,创建Excel文件,然后放在那里给你。 有趣的事实 Cowork几乎完全由Claude Code在1.5周内构建完成。Claude在编写下一代Claude产品。《盗梦空间》但是少了迪卡普里奥多了tokens。 虚拟机:安全技巧 这就是精妙之处。当Cowork执行代码或操作文件时,它不是直接在你的Mac上做的。而是在一个完全隔离的Ubuntu虚拟机内完成。 为什么?因为让AI在你的系统上执行任意代码就像把你家钥匙给一个很聪明的陌生人。他们可能值得信任,但最好不要让他们接触刀具抽屉。 这10GB里有什么 组件 大小 用途 Ubuntu 24.04 ~3 GB 操作系统 Chromium + Playwright ~920 MB 用于爬虫和网页自动化 LibreOffice ~148 MB 创建Office文档 Node.js, Python, Java ~600 MB 执行代码 CJK字体 ~305 MB 中文/日文/韩文支持 Pandoc, LaTeX ~450 MB 文档转换 用通俗的话说:这是一个装在安全盒子里的完整办公环境。 ...

2026年1月25日 · Fernando

你的终端正在像挖比特币一样耗电

犯罪现场 萨拉戈萨,皮拉尔广场酒店的咖啡厅。一杯拿铁,望向大教堂的景色,还有我带着全新的MacBook Air M3,准备在会议前用Claude Code工作几个小时。 两小时后:电池剩余15%。红色警报。恐慌。 但是怎么可能?我只是在终端里写代码。没有视频,没有Zoom,没有任何能够合理解释如此高耗电量的应用。 我打开活动监视器,点击能耗选项卡,罪魁祸首就在那里:Ghostty,在过去12小时内累计消耗了3600。为了让你有个概念,Brave浏览器消耗了125。开着视频的Zoom消耗了99。Claude(桌面应用)消耗了46。 我的终端——一个显示文本的应用程序——消耗的电量比网页浏览器多30倍。 荒谬中的荒谬 停下来想想我刚才写的内容。 一个终端。一个VT100模拟器。一项1978年的技术。字面意思上是一个工作就是在屏幕上显示字母的应用程序,这是Commodore 64都能轻松完成的任务。 而在2026年,它需要GPU来运行。 用大白话说:我们正在使用本可以实时渲染《玩具总动员》的计算能力…来显示ls -la。 原版VT100终端消耗30W包括CRT显示器。我的MacBook Air,配备专为能效设计的最新芯片,显示一个git status比执行视频通话消耗的电量还要多。 这就像开法拉利去买面包。但更糟糕,因为如果你想开得快,法拉利至少还有意义。这里没有任何实际优势:文本看起来完全一样。 为什么终端需要GPU? Ghostty、Alacritty、Kitty等是新一代"GPU加速"终端的一部分。承诺:更流畅的渲染,大量输出时更好的性能,更清晰的字体。 现实:它们像没有明天一样耗电,显示的内容和Terminal.app使用CPU显示的完全相同。 问题不仅仅是渲染。当Claude Code运行时,会有持续的输出:旋转器、日志、工具结果。屏幕上出现的每个字符都会触发GPU渲染管道。Metal激活,着色器开始工作,帧被合成… 就为了显示一个旋转的点。 更糟糕的是,这些现代终端无法正确进入"App Nap"状态。macOS有一个暂停后台应用程序的系统,但如果终端正在显示动画旋转器,系统会认为它在做重要的事情并保持其活跃状态。 穷人解决方案:Terminal.app 最简单的解决方案也是最明显的:使用Terminal.app。 是的,就是macOS自带的终端。那个看起来自2005年以来没有变过的终端。那个没有GPU加速、连字或任何现代功能的终端。 1 2 # 打开Terminal.app并运行 claude 功能完全一样。Claude Code不知道也不关心你从哪个终端运行它。而且Terminal.app: 使用CPU渲染(在Apple Silicon上超级高效) 正确进入App Nap状态 消耗电池的一小部分 性感吗?不。有用吗?完美。 改进解决方案:带配置文件的iTerm2 如果你离不开现代终端,iTerm2有一个Ghostty没有的选项:你可以禁用GPU渲染。 步骤1:创建"电池"配置文件 打开iTerm2 Preferences → Profiles 复制当前配置文件(点击左下角的+按钮,然后选择Duplicate Profile) 将新配置文件命名为**“Battery”** 在Battery配置文件中:Terminal → 取消勾选**“GPU Rendering”** 步骤2:手动切换 当使用电池工作时,只需切换到配置文件: Profiles → Battery(在iTerm2菜单中) ...

2026年1月24日 · Fernando

Linear、Beads 和 Tasks:Claude Code 的三层内存系统

内存问题 Claude Code 有一个问题:它会忘记一切。关闭会话,打开新会话,就像和一个不认识你的人说话。你可以通过 CLAUDE.md 加载上下文,是的,但是那些进行到一半的任务怎么办?你发现但没有修复的 bug 怎么办?你为明天制定的计划怎么办? 有三个互补的解决方案:Linear(或你的产品工具)、Beads(基于 git 的插件)和 Tasks(集成在 Claude Code 中)。每一个都用于不同的时间范围。 Tasks:工作内存 Tasks 是 Claude Code 的内部系统,用于跟踪它现在正在做什么。当你向它请求复杂任务时,Claude 会自动创建一个任务列表。 按 Ctrl+T 查看: ┌─────────────────────────────────────────────────┐ │ Tasks │ ├─────────────────────────────────────────────────┤ │ ✓ 读取项目结构 │ │ ● 实现认证端点 │ │ ○ 编写测试 │ │ ○ 更新文档 │ └─────────────────────────────────────────────────┘ 特性 自动化:当工作有多个步骤时,Claude 会自动创建 压缩后持久:当上下文被压缩时仍然存在 通过 Ctrl+T 可见:快速切换视图 限制为 10 个:只显示前 10 个(请求"show me all tasks"查看更多) 会话间共享 默认情况下,Tasks 会随着会话结束而消失。但你可以让它们持久化: 1 CLAUDE_CODE_TASK_LIST_ID=qualitra claude 这会将任务保存在 ~/.claude/tasks/qualitra/ 中。下次用相同的 ID 启动时,你会恢复任务列表。 ...

2026年1月23日 · Fernando

Claude Code 中的子代理:在不失控制的情况下进行委派

无限上下文的问题 想象一下,你让 Claude 研究项目的身份验证是如何工作的。它开始读取文件。很多文件。突然你的上下文就被 50,000 个令牌的代码填满了,而这些代码你只需要查阅,而不是记住。 现在每个响应都变得更慢。也更贵。当你想做其他事情时,所有这些上下文仍然在那里,占用着思维空间。 解决方案:子代理。你启动一个专门的代理,它在自己的独立上下文中完成繁重的工作,给你返回一个摘要,然后消失。你的主对话保持清洁。 什么是子代理 子代理是 Claude 的一个独立实例,它: 拥有自己的上下文(不会污染你的对话) 可以拥有受限的工具(只读、只有 bash 等) 可以使用不同的模型(haiku 用于简单任务,opus 用于复杂任务) 可以在前台(阻塞)或后台(并行)执行 把它们想象成专门的实习生。你给他们分配任务,他们独立工作,完成后向你汇报。 你已经拥有的子代理 Claude Code 自带几个集成的子代理: 代理 模型 用途 工具 Explore Haiku 搜索和分析代码 只读 Plan 继承 规划期间的研究 只读 general-purpose 继承 复杂的多步骤任务 全部 Bash 继承 在独立上下文中执行命令 只有 Bash Claude Code Guide Haiku 关于 Claude Code 的问题 文档 最有用的是 Explore。当 Claude 需要在你的代码库中搜索内容时,它会启动一个 Explore,疯狂地读取文件,处理一切,然后只返回相关内容。 如何启动子代理 从 REPL(正常对话) 只需用自然语言请求: 使用子代理研究缓存系统是如何工作的 启动 Explore 代理找到所有 API 端点 在我继续工作的同时并行研究身份验证 Claude 理解这些请求,并在内部使用 Task 工具启动适当的子代理。 ...

2026年1月20日 · Fernando

为什么 git status 这么慢啊?

缓慢的觉醒 你已经在数据科学项目上工作了一段时间。有二十个 notebook,一些图片,还有那种三个月前看起来不错的典型文件夹结构。 你执行 git status 想看看改了什么,然后… 等待。继续等待。在等待的时候你开始怀疑是不是电脑卡死了还是在沉思什么。 剧透:它不是在沉思。它在痛苦。 问题有名有姓 Git 不慢。你的仓库慢。 当你执行 git status 时,git 需要做两件看起来简单但实际很复杂的事情: 扫描整个文件树 看看有什么变化 比较每个文件 与保存的版本 在普通仓库里这是瞬间完成的。但 Jupyter notebook 是伪装成文档的 JSON。而且不是普通的 JSON:是包含代码、输出、base64 编码图片、内核元数据,以及设计这个格式的人能想到的所有东西的 JSON。 一个带几张图表的"小" notebook 可能有几兆大小。乘以二十个 notebook,你就有了一个每次看它都在呻吟的仓库。 如果你还重命名了文件夹… git 会理解为"你删除了 50 个文件然后创建了 50 个新文件"。保证有趣。 解决方案 1:给你的仓库配个门卫 第一个解决方案优雅得让人恨不得早点知道。 叫做 FSMonitor,工作原理是:不让 git 每次都扫描整个仓库,而是操作系统告诉它哪些文件变了。 用人话说:就像在门口有个门卫告诉你"只有小王进来了",而不用每次都检查整个宾客名单。 激活方法: 1 2 git config core.fsmonitor true git config core.untrackedcache true 搞定。就这样。 激活后第一次执行 git status 还是会花同样(或更多)时间,因为要初始化缓存。但从第二次开始… 魔法。 ...

2026年1月19日 · Fernando

ChromaDB:如何使用向量数据库避免教学踩坑

问题:教授还没有教过的内容 我有一个包含47个课时的编程课程。每个课时都有notes(我解释概念的地方)和labs(学生练习的地方)。我有个问题:有时我在labs中使用了还没在notes中解释过的概念。 “好的,在这个练习中用map来转换列表。” 问题在哪?我要到三个课时之后才解释map是什么鬼东西。 这种情况比你想象的更常见。你脑子里装着所有材料,在不同地方跳来跳去,不知不觉就假设学生知道你还没告诉他们的东西。结果:挫败感、困惑,还有学生认为自己很笨,其实笨的是你。 手动解决方案是检查每个lab,记下使用了哪些概念,然后验证这些概念之前是否已经解释过。但我有47个课时,每个都有好几个notebook。算了吧。 解决方案:使用ChromaDB进行语义搜索 思路很简单: 从每个notebook中提取概念(教了什么,用了什么) 保存在一个理解语义而不仅仅是文本的数据库中 对于lab中使用的每个概念,验证它是否存在于之前的notes中 这里"理解语义"是关键。如果在notes中我说"高阶函数",在lab中使用"higher-order function",grep什么也找不到。但语义上它们是一样的。 这就是ChromaDB的用武之地:一个向量数据库,它将文本转换为嵌入向量并允许按相似性搜索。用人话说:你保存文本,然后可以问"有没有类似这个的东西?“它会返回最相似的结果。 5分钟了解ChromaDB ChromaDB就像SQLite但用于嵌入向量。一个文件(或文件夹),无需服务器,无需配置。安装,使用,开跑。 1 2 3 pip install chromadb # 或者如果你使用uv: uv add chromadb 基本概念 在普通数据库中你保存带列的行。在ChromaDB中你保存带嵌入向量的文档: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import chromadb # 创建客户端(持久化到磁盘) client = chromadb.PersistentClient(path="./mi_db") # 创建一个"集合"(类似表) collection = client.get_or_create_collection( name="conceptos", metadata={"hnsw:space": "cosine"} # 余弦距离 ) # 保存文档 collection.add( ids=["c1", "c2", "c3"], documents=["纯函数", "for循环", "递归"], metadatas=[ {"clase": "class_010", "tipo": "notes"}, {"clase": "class_015", "tipo": "notes"}, {"clase": "class_020", "tipo": "notes"}, ] ) 就这样。ChromaDB自动: ...

2026年1月18日 · Fernando

Bun:想要让 Node 退休的运行时(现在有资金来实现这个目标了)

没人预料到的新闻 上周,当你我还在安静地与 node_modules 搏斗时,Anthropic 丢出了一颗炸弹:他们收购了 Bun。 是的,Claude 背后的公司决定他们的未来要依靠一个用 Zig 编写的 JavaScript 运行时,这是一个想着"要是 Node,但是快"的家伙写的。Claude Code 刚刚达到 10 亿美元的收入,显然当你有多余的钱时,第一件事就是购买开发工具。 为什么?因为 Claude Code 疯狂执行 JavaScript,当你有数百万用户时,每一毫秒都很重要。通俗地说:如果你的业务依赖于快速执行代码,你就买最快的运行时。 但够了企业八卦。让我们来看你感兴趣的:什么是 Bun,为什么你应该关心。 什么是 Bun(对于我们这些来自 Node 的人) Bun 就像有人看着 Node 生态系统说:“要是我们做一个工具来替换这十五个工具会怎样?” 之前你有: node → 运行时 npm/pnpm/yarn → 包管理器 webpack/esbuild/vite → 打包器 jest/vitest → 测试运行器 ts-node/tsx → 执行 TypeScript 现在你有: bun → 以上所有功能 这是电动滑板车对比拖着拖车的汽车。更少的部件,更少可能出错的东西,奇怪的是还更快。 重要的数字 我不喜欢做基准测试,因为总是可以被操纵。但这些数字太残酷了,值得一提: 操作 Node + pnpm Bun 差异 install(中等项目) ~25s ~3s 快 8 倍 运行时启动 ~50ms ~5ms 快 10 倍 执行测试 基线 快 2-3 倍 明显 转译 TypeScript 需要工具 原生支持 ∞ 为什么这么快?因为它用 Zig 而不是 C++ 编写,因为 Jarred Sumner(创造者)是那种把优化代码当作兴趣爱好的程序员。这家伙在 Stripe 工作,决定世界上最重要的问题是 npm install 花费太长时间。 ...

2026年1月18日 · Fernando

Claude Code 中的 Skills:教老狗学新把戏

重复同样事情的问题 你有没有遇到过必须向某人解释同一件事二十遍的情况?现在想象一下,这个人是个机器人,而且每隔几个小时就会失去记忆。 “不,Claude,commit 必须先通过测试。” “Claude,我已经告诉过你要用 type: description 格式。” “别加表情符号,该死的!” 这就是我每天的工作,直到我发现了 Skills。简单来说:这些是你写一次,Claude 就会永远遵循的指令。就像训练狗一样,但不需要狗粮。 什么是 Skills 从 2.1.3 版本开始,Claude Code 将旧的 slash commands 与更强大的东西合并:Skills。这些是包含指令的 Markdown 文件,Claude 可以通过两种方式执行: 手动:当你输入 /my-skill 时 自动:当 Claude 检测到应该使用它时 第二点就是魔法所在。你不再需要记住调用命令。如果你有一个技能说"在用户完成任务且有未提交的更改时使用",Claude 会自动执行。 就像有一个管家知道何时收拾桌子而不需要你要求。 它们在哪里 ~/.claude/skills/ # 个人(所有项目) .claude/skills/ # 项目(与团队共享) ~/.claude/commands/ # 旧版,仍然有效 .claude/commands/ # 旧版,仍然有效 如果你只想自己使用技能,就把它放在你的主目录。如果你想让整个团队都有,就提交到仓库。就这么简单。 Skill 的结构 一个 skill 是一个带有 frontmatter YAML 和内容的 Markdown 文件: 1 2 3 4 5 6 7 8 --- name: my-skill description: 它做什么的简要描述 --- # 指令 Claude 在调用此技能时应该做什么。 这是最基本的。但 frontmatter 有更多值得了解的选项。 ...

2026年1月12日 · Fernando

Linear 和 Beads:如何避免你的 AI 患阿尔茨海默症

机器人的失忆症 想象一下,你雇佣了一个才华横溢的程序员。他能解决复杂问题,写出整洁的代码,理解你的架构。但他有一个小缺陷:每隔几个小时就会被抹掉记忆。重新从零开始。不记得自己在做什么,不记得你们一起做的决定,也不记得代码为什么是现在这样。 这正是 Claude Code 和其他 AI 代理发生的情况。 当上下文满了(如果你在真实项目中工作,它会很快满),系统就会进行"压缩"。通俗地说:总结对话并丢弃其他所有内容。问题在于这种总结会丢失细节、决策,特别是正在进行的任务状态。 解决方案?两个相互补充的工具:Linear 给你用,Beads 给你的 AI 用。 Linear:你的产品视图 Linear 是一个现代的问题管理器。如果你用过 Jira,想象一下它的反面:快速、简洁,不会让你想挖掉眼睛。 我用它做什么 产品待办事项:功能、bug、史诗。所有业务层面需要完成的事情 路线图:什么先做,什么后做 沟通:团队其他成员(如果有的话)可以看到状态 真实例子 QIN-500: 为应用添加暗黑模式 QIN-501: 优化图片加载 QIN-502: 集成支付网关 这些是产品任务。它们是"需要做什么"。不说明如何做。那是开发者的工作……或者你的 AI 代理的工作。 Beads:你 AI 的记忆 这里就轮到 Beads 登场了,由 Steve Yegge(Google 和 Amazon 著名咆哮文章的作者)创建。 Beads 是一个生活在你代码库内的问题跟踪器。但它不是给你用的,是给你的 AI 代理用的。它是 AI 的持久化内存。 它解决的问题 当我用 Claude Code 处理复杂任务时,会发生这样的情况: 阅读 Linear 中的问题 QIN-500 研究当前架构 创建一个 5 步的心理计划 开始实施… 💥 压缩 💥 “你好,我是 Claude。有什么可以帮你的吗?” 所有的上下文、计划、进度……蒸发了。就像电影《记忆碎片》,但没那么电影化,更让人沮丧。 解决方案 使用 Beads,在压缩之前,状态会持久化到代码库的 .beads/ 中: ...

2025年1月12日 · Fernando