<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI 编程 on Kalend's Blog</title><link>https://blog.kalend.top/categories/ai-%E7%BC%96%E7%A8%8B/</link><description>Recent content in AI 编程 on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Sun, 12 Jul 2026 08:30:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/categories/ai-%E7%BC%96%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>Codex CLI 上手：OpenAI 的沙箱安全编程方案</title><link>https://blog.kalend.top/2026/07/12/2026-07-12-codex-cli-sandbox.html/</link><pubDate>Sun, 12 Jul 2026 08:30:00 +0800</pubDate><guid>https://blog.kalend.top/2026/07/12/2026-07-12-codex-cli-sandbox.html/</guid><description>&lt;p&gt;AI 编程 Agent 能执行任意命令，这意味着它也能删库、泄露密钥、安装后门。&lt;strong&gt;信任问题不解决，自主编程就是空谈。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OpenAI 的 Codex CLI 选择了一条不同的路：不靠&amp;quot;请你信任我&amp;quot;，而是用沙箱把 Agent 关进笼子里。97,000+ Star、Rust 重写、Apache-2.0 开源——这是目前安全设计最完善的终端编程 Agent。&lt;/p&gt;
&lt;h2 id="为什么需要安全编程"&gt;为什么需要&amp;quot;安全编程&amp;quot;
&lt;/h2&gt;&lt;p&gt;AI 编程工具有个天然的取舍：&lt;strong&gt;给的自由越多，风险越大。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Agent 需要执行 shell 命令才能干活——装依赖、跑测试、提交代码。但 shell 命令是无限制的：&lt;code&gt;rm -rf /&lt;/code&gt; 也是合法命令。你给 Agent 一个任务，它可能顺手执行了你没想到的操作。&lt;/p&gt;
&lt;p&gt;已经出过事了。2026 年多个 AI 编程工具被曝出安全问题：沙箱逃逸、权限提升、未授权网络访问。企业用户不敢用，因为一次意外就可能影响生产环境。&lt;/p&gt;
&lt;p&gt;Codex CLI 的答案是：&lt;strong&gt;默认不信任 Agent，用系统级隔离强制约束行为。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="codex-cli-是什么"&gt;Codex CLI 是什么
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;项目&lt;/th&gt;
					&lt;th&gt;值&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;GitHub&lt;/td&gt;
					&lt;td&gt;github.com/openai/codex&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Stars&lt;/td&gt;
					&lt;td&gt;97,204&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;语言&lt;/td&gt;
					&lt;td&gt;Rust（从 TypeScript 重写）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;许可证&lt;/td&gt;
					&lt;td&gt;Apache-2.0&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;开发商&lt;/td&gt;
					&lt;td&gt;OpenAI&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;支持模型&lt;/td&gt;
					&lt;td&gt;GPT-5 系列、codex-1 专用模型&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Codex CLI 是 OpenAI 开源的终端编程智能体。三种形态：CLI 终端、VS Code 插件、Codex Cloud 云端。核心特点是&lt;strong&gt;把安全沙箱做成了系统级能力&lt;/strong&gt;，而不是靠 prompt 约束。&lt;/p&gt;
&lt;p&gt;Rust 重写不只是为了性能。Rust 的内存安全特性让沙箱实现本身更难被绕过——没有 use-after-free、没有 buffer overflow，攻击面从语言层就被收窄了。&lt;/p&gt;
&lt;h2 id="五层安全防线"&gt;五层安全防线
&lt;/h2&gt;&lt;p&gt;这是 Codex CLI 的核心卖点，也是它与其他工具拉开差距的地方。&lt;/p&gt;
&lt;h3 id="第一层三级沙箱模式"&gt;第一层：三级沙箱模式
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;read-only 只读，不能写文件、不能执行命令
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 降低约束
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;workspace-write 可写项目目录，可执行本地命令（默认）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ 降低约束
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;danger-full-access 无限制访问（需要显式声明 danger）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;默认是 workspace-write&lt;/strong&gt;——Agent 只能修改当前项目目录的文件，不能动系统文件、不能改其他项目。想突破这个边界？必须显式声明 &lt;code&gt;danger-full-access&lt;/code&gt;，名字本身就提醒你这是危险操作。&lt;/p&gt;
&lt;h3 id="第二层审批控制"&gt;第二层：审批控制
&lt;/h3&gt;&lt;p&gt;沙箱管&amp;quot;能做什么&amp;quot;，审批管&amp;quot;什么时候需要问人&amp;quot;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;策略&lt;/th&gt;
					&lt;th&gt;行为&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;untrusted&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;非信任命令都要问&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;on-request&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;沙箱内自由操作，越界时才问（推荐）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;never&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;完全自动，不问任何人&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最佳实践：&lt;code&gt;--sandbox workspace-write --ask-for-approval on-request&lt;/code&gt;。Agent 在项目目录里自由干活，一旦要访问目录外的资源、使用网络、执行敏感命令，就停下来等你确认。&lt;/p&gt;
&lt;h3 id="第三层可写目录白名单"&gt;第三层：可写目录白名单
&lt;/h3&gt;&lt;p&gt;如果 Agent 需要写多个目录（比如同时改前端和后端），不用开 full-access，用 &lt;code&gt;writable_roots&lt;/code&gt; 白名单：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# config.toml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;sandbox_workspace_write&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;writable_roots&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;/home/user/frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;/home/user/backend&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;精确控制哪些目录可写，其余一律只读。&lt;strong&gt;最小权限原则的工程实现。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="第四层平台原生隔离"&gt;第四层：平台原生隔离
&lt;/h3&gt;&lt;p&gt;Codex 不是用 Docker 容器做隔离，而是用操作系统原生的安全机制：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;平台&lt;/th&gt;
					&lt;th&gt;隔离机制&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;macOS&lt;/td&gt;
					&lt;td&gt;Seatbelt 框架（系统级沙箱）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Linux&lt;/td&gt;
					&lt;td&gt;bubblewrap（用户命名空间隔离）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Windows&lt;/td&gt;
					&lt;td&gt;双用户架构（CodexSandboxOffline/Online）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;WSL2&lt;/td&gt;
					&lt;td&gt;复用 Linux 的 bubblewrap 方案&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Windows 的实现比较巧妙：创建两个本地用户，&lt;code&gt;CodexSandboxOffline&lt;/code&gt;（防火墙阻断出站网络）和 &lt;code&gt;CodexSandboxOnline&lt;/code&gt;（允许网络），密码随机生成后用 DPAPI 加密存储。Agent 运行在受限用户下，天然无法访问你的个人文件。&lt;/p&gt;
&lt;h3 id="第五层自动审核"&gt;第五层：自动审核
&lt;/h3&gt;&lt;p&gt;设置 &lt;code&gt;approvals_reviewer = &amp;quot;auto_review&amp;quot;&lt;/code&gt; 后，审批请求不是弹给你，而是交给另一个 AI Agent 审核。&lt;strong&gt;Agent 审 Agent&lt;/strong&gt;——审核者有权拒绝越界操作，形成双重校验。&lt;/p&gt;
&lt;h2 id="安装与上手"&gt;安装与上手
&lt;/h2&gt;&lt;h3 id="macos--linux"&gt;macOS / Linux
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://chatgpt.com/codex/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Linux 需要先装 bubblewrap：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Ubuntu/Debian&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install bubblewrap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Fedora&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dnf install bubblewrap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="windows"&gt;Windows
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;powershell&lt;/span&gt; &lt;span class="n"&gt;-ExecutionPolicy&lt;/span&gt; &lt;span class="n"&gt;ByPass&lt;/span&gt; &lt;span class="n"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;irm https://chatgpt.com/codex/install.ps1 | iex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="认证"&gt;认证
&lt;/h3&gt;&lt;p&gt;两种方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT 账号&lt;/strong&gt;：运行 &lt;code&gt;codex&lt;/code&gt; 后选 &amp;ldquo;Sign in with ChatGPT&amp;rdquo;，Plus/Pro/Business 套餐包含 Codex 额度&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Key&lt;/strong&gt;：设置 &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; 环境变量&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="agentsmd"&gt;AGENTS.md
&lt;/h3&gt;&lt;p&gt;在项目根目录放一个 &lt;code&gt;AGENTS.md&lt;/code&gt;，告诉 Agent 项目上下文：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# 项目说明
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;这是一个 Next.js 15 项目，使用 TypeScript + Tailwind CSS。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# 规则
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 测试用 vitest，不要用 jest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 提交信息用 conventional commits 格式
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; 不要修改 .env 文件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Codex 启动时会自动读取这个文件，相当于给 Agent 一份项目手册。&lt;/p&gt;
&lt;h2 id="实战演示"&gt;实战演示
&lt;/h2&gt;&lt;h3 id="场景-1安全模式下重构代码"&gt;场景 1：安全模式下重构代码
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex --sandbox workspace-write --ask-for-approval on-request
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在这个模式下，Agent 可以自由读写项目文件、运行测试。但当它尝试 &lt;code&gt;npm install&lt;/code&gt; 一个新包（需要网络）时，会弹出审批提示。你确认后才继续。&lt;/p&gt;
&lt;h3 id="场景-2cicd-管道中的静默模式"&gt;场景 2：CI/CD 管道中的静默模式
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; --sandbox workspace-write --ask-for-approval never &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;运行所有测试，如果有失败的修复它们，然后提交&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;exec&lt;/code&gt; 是一次性执行模式，跑完自动退出。配合 &lt;code&gt;--ask-for-approval never&lt;/code&gt; 适合自动化管道——但沙箱仍然生效，Agent 不能突破项目目录。&lt;/p&gt;
&lt;h3 id="场景-3goal-自主执行"&gt;场景 3：/goal 自主执行
&lt;/h3&gt;&lt;p&gt;在交互模式下输入 &lt;code&gt;/goal&lt;/code&gt;，Agent 进入自主循环：规划 → 执行 → 验证 → 继续，直到目标完成。沙箱和审批策略全程生效。&lt;/p&gt;
&lt;h2 id="与-claude-codeopencode-对比"&gt;与 Claude Code、OpenCode 对比
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;Codex CLI&lt;/th&gt;
					&lt;th&gt;Claude Code&lt;/th&gt;
					&lt;th&gt;OpenCode&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;开发商&lt;/td&gt;
					&lt;td&gt;OpenAI&lt;/td&gt;
					&lt;td&gt;Anthropic&lt;/td&gt;
					&lt;td&gt;社区&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;语言&lt;/td&gt;
					&lt;td&gt;Rust&lt;/td&gt;
					&lt;td&gt;TypeScript&lt;/td&gt;
					&lt;td&gt;Go&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;安全设计&lt;/td&gt;
					&lt;td&gt;五层沙箱 + 平台原生隔离&lt;/td&gt;
					&lt;td&gt;沙箱 + 权限控制&lt;/td&gt;
					&lt;td&gt;BYOK，无内置沙箱&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;沙箱机制&lt;/td&gt;
					&lt;td&gt;bubblewrap/Seatbelt/Windows Sandbox&lt;/td&gt;
					&lt;td&gt;类似但实现不同&lt;/td&gt;
					&lt;td&gt;无&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;审批控制&lt;/td&gt;
					&lt;td&gt;三级策略 + 自动审核&lt;/td&gt;
					&lt;td&gt;有&lt;/td&gt;
					&lt;td&gt;基础&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;可写目录白名单&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;writable_roots&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;有&lt;/td&gt;
					&lt;td&gt;无&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;模型&lt;/td&gt;
					&lt;td&gt;GPT-5 系列 + codex-1&lt;/td&gt;
					&lt;td&gt;Claude 4 系列&lt;/td&gt;
					&lt;td&gt;75+ 模型&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MCP 支持&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
					&lt;td&gt;✅&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;安全设计维度，Codex CLI 领先一个身位。&lt;/strong&gt; 它的沙箱不是应用层的权限检查，而是操作系统级的强制隔离——Agent 想逃逸，得先攻破 bubblewrap 或 Seatbelt。&lt;/p&gt;
&lt;p&gt;Claude Code 也有沙箱，设计思路类似，但实现深度不同。OpenCode 走的是 BYOK（Bring Your Own Key）路线，安全完全交给用户自己负责。&lt;/p&gt;
&lt;h2 id="谁该用-codex-cli"&gt;谁该用 Codex CLI
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;首选场景：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;企业/金融/医疗等安全敏感行业&lt;/strong&gt;：沙箱隔离是刚需，不是锦上添花&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenAI 生态用户&lt;/strong&gt;：已经用 GPT-5 系列，Codex CLI 是最自然的编程 Agent 选择&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;团队协作&lt;/strong&gt;：自动审核功能让多人共用 Agent 时有统一的安全策略&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CI/CD 集成&lt;/strong&gt;：静默模式 + 沙箱 = 安全的自动化编程&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;不太适合的场景：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要频繁切换多个 LLM 模型的用户（Codex 主要服务 OpenAI 模型）&lt;/li&gt;
&lt;li&gt;超长上下文任务（Claude 的长上下文更稳定）&lt;/li&gt;
&lt;li&gt;预算敏感的纯 API 用户（Codex-1 专用模型按 token 计费）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="结论"&gt;结论
&lt;/h2&gt;&lt;p&gt;AI 编程 Agent 的竞争正在从&amp;quot;谁能写更好的代码&amp;quot;转向&amp;quot;谁更值得信任&amp;quot;。Codex CLI 的五层安全防线不是营销话术，而是工程落地：操作系统级沙箱、最小权限白名单、Agent 审 Agent 的自动审核。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;沙箱不是限制，是 Agent 自主运行的前提。&lt;/strong&gt; 你得先确定它不会越界，才敢放手。Codex CLI 目前是安全机制最完善的终端编程 Agent。&lt;/p&gt;</description></item><item><title>MiMo Code 实测：会"做梦"能"进化"的开源 AI 编程助手，9 天怒砍 9.9k star</title><link>https://blog.kalend.top/2026/06/20/2026-06-20-mimo-code-review.html/</link><pubDate>Sat, 20 Jun 2026 09:00:00 +0800</pubDate><guid>https://blog.kalend.top/2026/06/20/2026-06-20-mimo-code-review.html/</guid><description>&lt;p&gt;MiMo Code 实测：会&amp;quot;做梦&amp;quot;能&amp;quot;进化&amp;quot;的开源 AI 编程助手，9 天怒砍 9.9k star&lt;/p&gt;
&lt;p&gt;小米开源了一款终端 AI 编程 Agent，叫 MiMo Code。&lt;/p&gt;
&lt;p&gt;打开 GitHub，数字挺扎眼：9.9k star、917 fork、414 个 issue、96 个 PR——最新 commit 停在 8 小时前。这是一个 9 天前才开源的项目，活跃度却像跑了半年。&lt;/p&gt;
&lt;p&gt;我花了一个周末把它装上，跑了几个真实任务，想搞清楚一个问题：市面上的 AI 编程助手已经够多了，Claude Code、Cursor、Copilot、OpenCode……小米这时候入局，凭什么？&lt;/p&gt;
&lt;p&gt;答案藏在 README 里一句话——&amp;ldquo;模型与 Agent 共进化&amp;rdquo;。翻译成人话：这个工具不只会写代码，它还会记住你的项目、自己整理记忆、自己把重复经验变成技能。官方管前者叫 Dream（做梦），后者叫 Distill（蒸馏）。&lt;/p&gt;
&lt;p&gt;还有一个数据让我在意：官方做了双盲 A/B 测试，200+ 步的复杂任务，MiMo Code 的胜率超过 65%。200 步意味着什么？意味着这不是&amp;quot;写个函数&amp;quot;级别的任务，而是&amp;quot;从需求到交付&amp;quot;的完整工程链条——这种长程任务恰恰是大多数 AI 编程工具容易翻车的地方。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;AI 会自己做梦&amp;rdquo;——这个钩子足够让我把周末搭进去。下面是我实测下来的真实感受。&lt;/p&gt;
&lt;h2 id="5-分钟装好一行命令零配置开跑"&gt;5 分钟装好：一行命令，零配置开跑
&lt;/h2&gt;&lt;p&gt;先说安装。MiMo Code 的门槛低到我有点意外：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 方式一：一行命令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://mimo.xiaomi.com/install &lt;span class="p"&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 方式二：npm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g @mimo-ai/cli
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 装完直接启动&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mimo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;首次启动会引导你配置模型通道。这里有个我认为最关键的亮点——MiMo Auto：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MiMo Auto&lt;/strong&gt;：限时免费，匿名通道，零配置，&lt;strong&gt;不需要任何 API Key&lt;/strong&gt;，开箱即用，支持百万 token 上下文&lt;/li&gt;
&lt;li&gt;小米 MiMo 平台：OAuth 登录，用官方账号体系&lt;/li&gt;
&lt;li&gt;从 Claude Code 导入：一键迁移你已有的认证&lt;/li&gt;
&lt;li&gt;自定义 Provider：任意 OpenAI 兼容 API 都能接&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我手上没有现成的 API Key 余额，选了 MiMo Auto，点完确认就能用了。对比一下：用 Claude Code 你得先备好 Anthropic 的 Key，用 OpenCode 你得自己接 provider——MiMo Code 把&amp;quot;先能用起来&amp;quot;这一步压到了最低。&lt;/p&gt;
&lt;p&gt;如果你已经在用 Claude Code，迁移几乎是零成本：选&amp;quot;从 Claude Code 导入&amp;quot;，它自动读取你本地已有的认证配置。这个细节对老用户很友好。&lt;/p&gt;
&lt;p&gt;装完敲 &lt;code&gt;mimo&lt;/code&gt;，终端弹出 TUI 界面。我第一感觉是：长得像 Claude Code，但底部多了一排我没见过的命令——&lt;code&gt;/dream&lt;/code&gt;、&lt;code&gt;/distill&lt;/code&gt;、&lt;code&gt;/goal&lt;/code&gt;。这些就是后面要讲的重点。&lt;/p&gt;
&lt;h2 id="build--plan--compose三种模式tab-一键切换"&gt;build / plan / compose：三种模式，Tab 一键切换
&lt;/h2&gt;&lt;p&gt;MiMo Code 有三种 Agent 模式，按 Tab 切换：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;模式&lt;/th&gt;
					&lt;th&gt;定位&lt;/th&gt;
					&lt;th&gt;权限&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;build&lt;/td&gt;
					&lt;td&gt;默认模式，完整开发&lt;/td&gt;
					&lt;td&gt;全工具权限，能读写文件、跑命令&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;plan&lt;/td&gt;
					&lt;td&gt;只读分析、代码探索、方案设计&lt;/td&gt;
					&lt;td&gt;只读，不改你的代码&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;compose&lt;/td&gt;
					&lt;td&gt;specs 驱动 + skill 驱动的结构化工作流&lt;/td&gt;
					&lt;td&gt;编排模式&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;什么时候用哪个？我的习惯是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;拿到一个陌生代码库，先切 plan 模式让它&amp;quot;只看不动&amp;quot;，帮我理清架构、定位 bug 在哪。只读模式有个好处：它不会手抖把你的文件改了，适合探索阶段。&lt;/li&gt;
&lt;li&gt;真正动手改代码，切回 build，全权限放开。&lt;/li&gt;
&lt;li&gt;compose 模式适合&amp;quot;有明确规范、要走完整流程&amp;quot;的项目开发——内置技能覆盖 planning → execution → code review → TDD → debugging → verification → merging 全生命周期。如果你团队有 specs 驱动的习惯，这个模式很对味。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;子代理由系统按需创建，主代理觉得某个子任务可以并行，就会 spawn 一个子代理去干，干完汇报回来。这部分和 Claude Code 的思路类似，不算 MiMo 独有。&lt;/p&gt;
&lt;h2 id="四层记忆系统它凭什么记住你的项目"&gt;四层记忆系统：它凭什么&amp;quot;记住&amp;quot;你的项目
&lt;/h2&gt;&lt;p&gt;现在进入 MiMo Code 真正不一样的地方。&lt;/p&gt;
&lt;p&gt;我之前用 Claude Code 有个痛点：每次开新会话，AI 都是&amp;quot;失忆&amp;quot;的。上次我让它遵守的代码规范、上次讨论过的架构决策，它全不记得，我得重新解释一遍。CLAUDE.md 能缓解一部分，但它是静态文件，AI 不会主动更新它。&lt;/p&gt;
&lt;p&gt;MiMo Code 搞了一套四层持久记忆，全部基于 SQLite FTS5 全文检索：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;项目记忆 MEMORY.md&lt;/strong&gt; — 持久的项目知识、编码规则、架构决策。这是&amp;quot;长期记忆&amp;quot;，AI 会主动往里写。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;会话检查点 checkpoint.md&lt;/strong&gt; — 由一个叫 checkpoint-writer 的子代理自动维护，定期给当前工作状态拍快照。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;临时笔记 notes.md&lt;/strong&gt; — 代理的草稿区，临时想法、待办丢这里。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;任务进度 tasks/&amp;lt;id&amp;gt;/progress.md&lt;/strong&gt; — 每个任务一份日志，记录这一路干了什么。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;关键在于&amp;quot;自动注入&amp;quot;。下次你打开同一个项目，启动新会话，MiMo Code 会自动把记忆层的内容注入到上下文里——AI 不需要你重新解释项目背景，它&amp;quot;记得&amp;quot;。&lt;/p&gt;
&lt;p&gt;我实测的感受：这个机制对&amp;quot;长期维护一个项目&amp;quot;的场景价值很大。想象你一个项目断断续续改了两周，中间隔了几天没碰。用别的工具，回来第一件事是重新喂背景；用 MiMo Code，它自己把记忆加载回来了，直接说&amp;quot;继续上次那个 TODO&amp;quot;就行。&lt;/p&gt;
&lt;p&gt;这是和 Claude Code、Cursor 拉开差距的核心设计，也是后面&amp;quot;自进化&amp;quot;能成立的地基。&lt;/p&gt;
&lt;h2 id="goal-mode--智能上下文管理让-ai-自己跑到达标为止"&gt;Goal Mode + 智能上下文管理：让 AI 自己跑到达标为止
&lt;/h2&gt;&lt;p&gt;两个机制，解决的是&amp;quot;长程任务&amp;quot;的痛点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Goal Mode&lt;/strong&gt;——用 &lt;code&gt;/goal&lt;/code&gt; 命令给会话设一个停止条件。比如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/goal 所有测试通过且无 lint 错误
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;设好之后，AI 会自己一轮一轮地跑，直到条件满足才停。这里有个反直觉的设计：当 AI 觉得&amp;quot;我做完了&amp;quot;想停下来时，一个&lt;strong&gt;独立的 judge 模型&lt;/strong&gt;会评估对话，判断条件是不是真的满足了。为什么要独立 judge？防止 AI&amp;quot;乐观提前停止&amp;quot;——这是自主 Agent 的常见毛病，模型自己跑着跑着觉得差不多了就收工，实际还差一截。加一层独立判断，等于给&amp;quot;自我宣称完成&amp;quot;上了一道闸。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;智能上下文管理&lt;/strong&gt;解决的是另一个问题：长任务跑到一半，上下文窗口快满了，怎么办？&lt;/p&gt;
&lt;p&gt;MiMo Code 的做法是三步：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;自动检查点&lt;/strong&gt;：根据模型的上下文窗口大小，自动决定什么时候保存状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上下文重建&lt;/strong&gt;：当上下文接近上限，它从最新的检查点 + 项目记忆 + 任务进度 + 保留的近期消息，重新拼一个上下文出来，让代理继续当前任务而不是从头开始。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;预算注入&lt;/strong&gt;：用 token 预算控制检查点、记忆、笔记的注入量，按重要性排序，保证最关键的信息先进来。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我跑了一个比较长的重构任务，中间明显感觉到上下文重建发生了一次——界面闪了一下，AI 没有断片，接着之前的工作继续干。这种&amp;quot;长任务不断片&amp;quot;的体验，是我之前在别的工具上没感受到的。&lt;/p&gt;
&lt;h2 id="dream--distill它会自己做梦还会把经验变成技能"&gt;Dream &amp;amp; Distill：它会自己做梦，还会把经验变成技能
&lt;/h2&gt;&lt;p&gt;这是整篇文章我想重点讲的部分，也是 MiMo Code 最有故事性的设计。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;/dream&lt;/code&gt; —— 让 AI&amp;quot;做梦整理记忆&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/dream
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;执行后，MiMo Code 会扫描近期的会话痕迹，把其中有价值的知识提取出来，写进项目记忆 MEMORY.md，同时清除过时或失效的条目。建议大约每周做一次 Dream。&lt;/p&gt;
&lt;p&gt;为什么要叫&amp;quot;做梦&amp;quot;？人的大脑在睡眠时会整理白天的记忆——强化重要的、丢弃无用的。MiMo Code 借的就是这个隐喻：AI 在你不干活的时候，自己回头把这段时间的对话梳理一遍，提炼成持久知识。&lt;/p&gt;
&lt;p&gt;我第一次跑 /dream 之后翻了翻 MEMORY.md，发现它把我之前口头强调过的几条项目规范（命名约定、错误处理方式）自动归纳进去了。下次开新会话，这些规范不用我再说。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;/distill&lt;/code&gt; —— 把重复经验&amp;quot;蒸馏&amp;quot;成技能&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/distill
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这个命令会分析你近期的工作，找出重复出现的手动工作流——比如你每次写新接口都走同一套&amp;quot;建文件→加路由→写测试→补文档&amp;quot;的流程——然后把这些高置信度的候选模式，打包成可复用的技能、子代理或命令。建议间隔更长一些，大约每月做一次 Distill。&lt;/p&gt;
&lt;p&gt;Dream 是整理记忆，Distill 是固化能力。合在一起，这就是官方说的&amp;quot;自进化&amp;quot;：AI 不是被动等你喂指令，它在持续学习你的工作方式，把经验沉淀成自己的技能库。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这个设计的意义在哪？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我用过的其他 AI 编程工具，本质都是&amp;quot;一次性对话&amp;quot;——你问它答，会话结束一切清零。哪怕有记忆功能，也是被动的：你得手动维护 CLAUDE.md，手动告诉它记住什么。&lt;/p&gt;
&lt;p&gt;MiMo Code 把这个循环变成了主动的、自动的：它自己整理记忆（Dream），自己沉淀技能（Distill），周期性地&amp;quot;升级&amp;quot;自己对项目的理解。时间越长，它和你的项目贴合度越高。这才是&amp;quot;模型与 Agent 共进化&amp;quot;这句话的真正含义——不是模型权重在变，是 Agent 对你工作方式的理解在持续累积。&lt;/p&gt;
&lt;p&gt;这是我目前见到的、把&amp;quot;Agent 自主性&amp;quot;推得最远的设计之一。&lt;/p&gt;
&lt;h2 id="实战复盘用它从零做了一个小项目"&gt;实战复盘：用它从零做了一个小项目
&lt;/h2&gt;&lt;p&gt;光说不练假把式。我用 MiMo Code 做了一个真实的小项目——一个 Python 写的 Markdown 链接检查器，扫描指定目录下所有 .md 文件里的链接，发请求验证死链，输出报告。&lt;/p&gt;
&lt;p&gt;项目不大，但足够让我摸清记忆、检查点、Goal 这几个机制在真实任务里的手感。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一步：建项目，让它记住规范。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;进项目目录启动 MiMo Code，切到 build 模式，我把需求描述给它：要一个 CLI 工具，输入目录路径，递归扫描 .md，提取所有 Markdown 链接，并发请求验证，支持超时和重试，输出 JSON 报告。&lt;/p&gt;
&lt;p&gt;第一轮对话里，我强调了几条规范：用 argparse 不用 click、日志走 logging 模块、并发用 asyncio。聊完一轮，我注意到它把这些写进了 MEMORY.md 的项目约定里——不是我让它写的，是它自己判断这些是&amp;quot;持久规则&amp;quot;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二步：让它自己跑完整流程。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我没有一步步指挥，而是设了个 Goal：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/goal 实现完整的链接检查器，所有测试通过，CLI 能正常跑通
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;设完之后它就开始自己干活了：建项目结构、写主逻辑、加并发控制、写测试。中间它 spawn 了一个子代理专门跑测试，主代理继续写文档。我盯着看，偶尔它问我确认（比如&amp;quot;超时默认值设 10 秒可以吗&amp;quot;），我回一句它继续。&lt;/p&gt;
&lt;p&gt;整个开发过程穿插了两次让我印象深的机制触发。&lt;/p&gt;
&lt;p&gt;第一次是上下文重建。任务跑到一半（大概写完了核心扫描逻辑和并发控制，正在补测试），上下文窗口快满了。这时 MiMo Code 触发了重建——我能看到 checkpoint.md 被更新，任务进度 progress.md 记了&amp;quot;核心逻辑完成，测试覆盖扫描和并发模块，下一步补文档和错误处理&amp;quot;。重建后它没断片，接着补测试和文档。如果没有这套记忆机制，长任务跑到这里要么报上下文超限，要么从头喂背景。&lt;/p&gt;
&lt;p&gt;第二次是 checkpoint-writer 子代理的工作。我注意到它会定期&amp;quot;拍快照&amp;quot;——把当前的文件结构、已完成的函数、待办事项结构化地写进 checkpoint.md。这东西平时不显眼，但在上下文重建那一刻，它就是续命的锚点。等于 AI 在长任务里给自己留了 breadcrumb（面包屑），迷路了能顺着找回来。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三步：验证，看它自己整理了什么。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;跑完后我翻了翻它生成的记忆文件。MEMORY.md 里多了这个项目的架构说明（&amp;ldquo;主模块 linkchecker，asyncio 并发，argparse 入口&amp;rdquo;）；checkpoint.md 记了最后的工作状态；tasks 目录下有完整的进度日志。&lt;/p&gt;
&lt;p&gt;这套东西的价值在下一次会话才真正显现——第二天我回来想加个&amp;quot;忽略特定域名&amp;quot;的功能，启动新会话，它自动加载了记忆，我直接说&amp;quot;加个 &amp;ndash;ignore 参数&amp;quot;，它秒懂项目背景，不用我重新解释。这个连贯感，是纯对话式工具给不了的。&lt;/p&gt;
&lt;p&gt;最后我用 /dream 跑了一轮，它把这次项目里形成的&amp;quot;asyncio 并发请求要加信号量限流&amp;quot;这条经验，从临时笔记提炼进了 MEMORY.md 的通用经验区。下次做别的项目，这条还在。&lt;/p&gt;
&lt;p&gt;整个项目从零到能跑，AI 主导执行，我主要负责提需求和验收。记忆系统让&amp;quot;跨会话连续性&amp;quot;这件事第一次变得不那么费劲。&lt;/p&gt;
&lt;h2 id="和-claude-codeopencode-比谁更适合你"&gt;和 Claude Code、OpenCode 比，谁更适合你
&lt;/h2&gt;&lt;p&gt;最后说选型——但我不会做排行榜，因为工具是挑场景的。&lt;/p&gt;
&lt;p&gt;先厘清一个事实：&lt;strong&gt;MiMo Code 是 OpenCode 的 fork&lt;/strong&gt;。它保留了 OpenCode 的全部核心能力——多 provider 支持、TUI 界面、LSP 集成、MCP 服务器、插件系统——然后在上面叠了六层东西：持久记忆、智能上下文管理、子代理编排、Goal 驱动的自主循环、Compose 工作流、Dream/Distill 自我改进。&lt;/p&gt;
&lt;p&gt;所以选型逻辑很清晰：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;：闭源旗舰，模型能力强，但贵，且记忆是短板。适合预算充足、单次高质量任务为主的场景。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cursor&lt;/strong&gt;：IDE 形态，订阅制，强在编辑器内交互。适合喜欢在 IDE 里干活、离不开图形界面的开发者。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenCode&lt;/strong&gt;：开源基础盘，能力强但要自备 API Key，记忆和自进化得自己搞。适合想完全掌控、愿意折腾底层的用户。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MiMo Code&lt;/strong&gt;：开源 + MiMo Auto 免费通道（零配置）+ 四层记忆 + Dream/Distill 自进化。适合长期维护项目、想要&amp;quot;越用越懂我&amp;quot;的开发者。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我的判断：如果你最看重&amp;quot;AI 和项目共同成长&amp;quot;这件事，目前 MiMo Code 是唯一把这条路走到这个程度的选择。Claude Code 强在单点能力，MiMo Code 强在长期累积。两者不冲突，搭配用也行。&lt;/p&gt;
&lt;p&gt;几个要注意的点，避免你踩坑：MIT 协议但有&amp;quot;使用限制&amp;quot;附加条款，商用前看一眼；语音输入需要装 sox 且 MiMo 登录；Max Mode（并行 best-of-N 推理）是 experimental，得在配置里手动开 &lt;code&gt;experimental.maxMode&lt;/code&gt;；作为 9 天前的新项目，414 个 issue 说明稳定性还在打磨——别拿它跑生产环境的关键任务，先用在日常项目和原型开发上。&lt;/p&gt;
&lt;p&gt;小米这次开源 MiMo Code，我觉得最值得关注的不是又一个 AI 编程工具，而是它把&amp;quot;Agent 自进化&amp;quot;这个概念做成了可用的产品功能。AI 会做梦、会蒸馏经验、会越用越懂你的项目——如果这条路走通，它改变的可能不只是&amp;quot;写代码效率&amp;quot;，而是&amp;quot;人和 AI 协作的长期关系&amp;quot;。&lt;/p&gt;
&lt;p&gt;9 天 9.9k star，不是没有理由的。建议你自己装一个试试，跑两周，感受一下&amp;quot;越用越懂&amp;quot;是什么手感。&lt;/p&gt;</description></item></channel></rss>