Codex CLI 连呼吸都要征求你的同意?两个标志就能解决!

你安装了 Codex CLI,满怀期待地启动它,对它说:“修复这个仓库里的所有测试问题。” 然后,噩梦开始了: Codex: 我要运行 pytest 允许吗? (y/n) 你按了 y。紧接着它又来一句: Codex: 我要修改 test_user.py 允许吗? (y/n) 又是一个 y。一次又一次。每当需要读取某个文件、运行某个命令或修改某行代码时,都会跳出确认提示。确认、确认、确认。感觉像是跟一个实习生工作,他连上厕所都要问你准不准。 与此同时,Claude Code 或 Cursor Agent 在干同样的事情,却能悄无声息地完成。发生了什么? 其实 Codex 默认是以一种“谨慎模式”运行的。这样做的确有道理——对一个新产品来说,这是最安全的选择。但是如果你是个知道自己在做什么的用户,这种保守模式实在让人崩溃,根本无法高效工作。 好消息是:只需要两秒钟,就能解决这个问题。 权限系统:approval mode Codex 使用一种叫做 approval mode(审批模式)的机制来控制何时需要你的确认。默认情况下,它会向你请求确认做任何事情: 运行命令 写入文件 修改代码 新建文件 运行测试 简而言之:默认情况下,Codex 什么都做不了,除非你点 y 确认。就像每执行一个动作都需要输入 sudo。 结果是,这个应该是自主工作的代理,变成了一个永远啰嗦不完的对话系统,而你作为“人类环节”,成为了整个流程中最慢的一环。 解决办法:一个标志,马上起飞 1 codex --approval-mode never 就是这么简单。有了 --approval-mode never,Codex 就再也不会问你了。它会直接执行命令、修改文件、创建需要的文件……就像一个真正可以工作的代理一样。 想让它永久生效?有两个方法可以实现: 1 2 3 4 5 # 方法1:使用配置命令 codex config set approval_mode never # 方法2:直接编辑配置文件 # ~/.codex/config.toml 1 approval_mode = "never" 从现在开始,每次启动 Codex,它都不会打断你的操作。 ...

2026年3月11日 · 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

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