前言
Claude Code CLI 的 /clear 命令,表面上只是清空一下聊天记录,但实际上它是整个 Claude Code 会话管理中最重要、最核心的一个命令。有资深用户甚至直言:/clear——最重要的习惯,没有之一。
为什么这么说?因为 Claude Code 每次对话都依赖一个上下文窗口,这个窗口只有 200K(目前有1M,anyway反正上下文很宝贵很有限) token(约 15 万单词)。系统提示词、工具定义、MCP 架构、CLAUDE.md 等内容在你输入任何东西之前已经占用了 3 万到 4 万个 token。每条新消息、每次读文件、每条命令的输出都会往这个窗口里塞东西,越堆越满。当使用率飙升到 90% 的时候,Claude 就会从“智能助手”降级为“健忘实习生”,开始犯一些在干净窗口里绝不会犯的错误。
/clear 就是解决这个问题的终极武器——它不是简单地“清屏”,而是在 AI 的“大脑”里按下重启键,把累积的“认知垃圾”一次性清空,让 Claude 恢复清晰锐利的思考状态。
接下来,我将用一个有趣的故事讲清楚 /clear 的实现原理,再用时序图详细拆解整个调用过程,最后给出你真正需要掌握的最佳用法。
一、故事篇:一次穿越“AI大脑”的冒险之旅
1. 小李的烦恼
小李是一名前端开发,最近在用 Claude Code 写一个电商后台项目。第一天,他让 Claude 帮忙实现了一个用户登录模块——Claude 读了代码、分析了项目结构、写出了完整的登录组件。小李很满意,接着让 Claude 继续加一个商品管理功能。
Claude 开始变得“迟钝”——响应慢了,答案没以前准了。小李没在意,继续让它写购物车。结果 Claude 把登录的逻辑误用到了购物车上,甚至开始“胡言乱语”,编造出一些根本不存在的函数。
小李百思不得其解:“一开始明明很聪明的啊,怎么越用越笨了?”
2. 揭秘“AI 大脑”:上下文窗口
要理解发生了什么,我们需要先钻进 Claude 的“大脑”里看一看。
Claude 的短期记忆叫做上下文窗口。每次你发消息,Claude 看到的不仅仅是你的新消息——它还包含了从对话开始到现在所有的历史内容。这就像一个人同时举着几百页纸在思考,翻来覆去地找信息,越翻越慢。
现在,让我们想象自己缩小成一个“纳米维修工”,钻进 Claude 的脑子里一探究竟。Claude 的大脑主要由下面几个区域组成:
🧠 大脑分区图:Claude 的认知架构
┌─────────────────────────────────────────────────────────────────────┐
│ CLAUDE 的认知架构 │
├─────────────────────────────────────────────────────────────────────┤
│ 🧬 基础记忆区 (~2,600 tokens) │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ 系统提示词:Anthropic 注入的“宪法”——规定 Claude 的行为准则 │ │
│ └───────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ 🔧 工具箱 (~17,600 tokens) │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ 读文件、写文件、执行 Bash、搜索代码……Claude 能用的一切工具 │ │
│ └───────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ 🔌 外接插件区 (900~51,000 tokens) │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ MCP 服务器的工具定义——不用也会占地方! │ │
│ └───────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ 📋 长期记忆文件区 (~302 tokens) │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ CLAUDE.md ——项目的“灵魂”,CLAUDE.md 不会丢失! │ │
│ └───────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ 💬 对话记忆区 (逐渐膨胀……) │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ 你问的问题、Claude 的回答、它读的文件、执行命令的输出…… │ │
│ │ 全部堆积在这里!越堆越满,越满越乱! │ │
│ └───────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
Claude 的上下文窗口总共 200K token,但真正留给对话的只有大约 114K token。更糟糕的是,当使用率超过大约 147K token 时,AI 的推理质量就开始下滑——这就是著名的 “lost-in-the-middle”问题:信息越堆越多,Claude 会开始“忘记”中间部分的内容,只记得开头和结尾。这就是小李遇到的“越用越笨”的根本原因。
现在,我们继续跟着“纳米维修工”的视角,观察 Claude 的大脑在长时间使用后会变成什么样:
🧠 脏乱差的大脑(长时间未清理)
┌─────────────────────────────────────────────────────────────────────┐
│ 💬 对话记忆区——已爆满! │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ [00:00] 小李:"帮我写一个登录组件" │ │
│ │ [00:01] Claude 读文件:src/auth/login.tsx │ │
│ │ [00:02] Claude 写文件:components/LoginForm.tsx │ │
│ │ [00:03] 小李:"再写个商品管理" │ │
│ │ [00:04] Claude 读文件:src/api/products.ts │ │
│ │ [00:05] Claude 执行命令:npm run build (失败) │ │
│ │ [00:06] 错误输出:"Error: cannot find module 'auth'" │ │
│ │ [00:07] 小李:"哦那个我已经改了" │ │
│ │ [00:08] 小李:"写购物车" ← 新任务! │ │
│ │ ... │ │
│ │ [00:99] Claude:"我注意到你的登录模块是用 JWT 实现的..." │ │
│ │ ↑ 小李在写购物车,Claude 却还在提登录! │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ 😵 状态:认知混乱!健忘!幻觉频出! │
└─────────────────────────────────────────────────────────────────────┘
小李的 Claude 之所以“越用越笨”,就是因为大脑被旧任务的信息、失败的尝试、过时的假设堆满,新任务的指令被淹没在信息的汪洋大海中。
3. 神奇的魔法棒:/clear
就在小李快要崩溃的时候,他翻到了一条指令:/clear。犹豫了一秒后,他输入了 /clear。
🧠 清理后的清爽大脑
┌─────────────────────────────────────────────────────────────────────┐
│ 💬 对话记忆区——✨ 焕然一新 ✨ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ (空的!) │ │
│ │ │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ 📋 长期记忆区(CLAUDE.md)——完整保留! │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ "项目使用 Next.js 14 + TypeScript" │ │
│ │ "测试命令:bun test" │ │
│ │ "API 基础地址:https://api.example.com" │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ 🧠 状态:头脑清晰!反应迅速!随时准备接受新任务! │
└─────────────────────────────────────────────────────────────────────┘
小李再次输入:“帮我写购物车功能”。
这一次,Claude 的响应速度快了很多,代码质量也恢复了最初的水平。它没有再提登录模块,而是专注地分析购物车需要的文件,写出了干净、准确的代码。
那一刻,小李明白了: /clear 不是“清屏”,而是给 AI 的大脑做了一次彻底的“认知重启” ——清理掉所有累积的对话历史,但保留项目的核心记忆(CLAUDE.md 等配置文件)。
二、实现原理篇:/clear 到底做了什么?
2.1 会话持久化机制
在深入 /clear 的实现之前,先要理解 Claude Code 是如何存储对话的。
CLAUDE 的大脑存储系统
💾 硬盘存储(~/.claude/sessions/)
│
├── 📁 projects/
│ ├── 📁 /home/lai/my-project/ (按项目绝对路径存储)
│ │ ├── 📄 transcript_2026-04-01.jsonl (会话1)
│ │ ├── 📄 transcript_2026-04-02.jsonl (会话2)
│ │ └── 📄 ...
│ └── 📁 /home/lai/another-project/
│ └── ...
│
└── 📄 history.jsonl (全局历史汇总)
Claude Code 使用 JSONL 格式来存储对话——每一行是一个 JSON 对象,代表一条消息。这种方式支持高效的增量写入,不会因为追加一条消息就要重写整个文件。所有会话都会保存在 ~/.claude/projects/ 目录下,按项目路径分类存储。
2.2 /clear 的内存级操作
当你在交互界面中输入 /clear 时,背后发生的事情不是删除硬盘上的文件,而是在内存级别做了一次“软重启”:
// 伪代码:Claude Code /clear 命令的核心实现逻辑
class ConversationManager {
// 内存中的对话消息数组
private messages: Message[] = [];
private systemPrompt: string;
private claudeMdContent: string; // CLAUDE.md 内容
private toolDefinitions: Tool[]; // 工具定义
private projectContext: Context; // 项目上下文
/**
* /clear 命令的处理函数
* 效果:清空对话历史,但保留项目长期记忆
*/
async handleClearCommand(): Promise<void> {
// 1. 记录当前会话到持久化存储(可选,让用户可以选择保留)
// -- 但不清除硬盘上的历史文件
this.archiveCurrentSessionIfNeeded();
// 2. 清空内存中的对话消息数组——这是核心!
// 释放所有对话占用的 token 空间
this.messages = []; // ← 灵魂所在!
// 3. 重新加载系统提示词
this.loadSystemPrompt();
// 4. 重新注入 CLAUDE.md 内容——项目记忆不丢失
// Claude 会重新读取 ~/.claude/CLAUDE.md 和 ./CLAUDE.md
this.claudeMdContent = this.loadClaudeMdFiles();
// 5. 重新加载工具定义
this.loadToolDefinitions();
// 6. 重新加载项目上下文(工作目录、Git 状态等)
this.loadProjectContext();
// 7. 向用户显示清理完成的消息
this.displayConfirmation("✨ 对话历史已清空,CLAUDE.md 等配置已保留");
// 8. 等待用户的新输入——随时准备战斗
this.waitForUserInput();
}
// 注意:硬盘上的历史文件(~/.claude/projects/.../transcript_*.jsonl)
// 不会被 /clear 删除。它们保留了完整的历史记录,以便你后续用
// claude --resume 恢复查看[reference:13]。
}
上面的代码中,第 3 步的 this.messages = [] 是整个命令的核心——它清空了内存中累积的所有对话消息。从这一刻起,Claude 的“短期记忆”被彻底重置,相当于一个全新的会话开始了。
2.3 保留什么?不保留什么?
/clear 会“记住”的(保留):
| 保留项 | 说明 |
|---|---|
| CLAUDE.md 文件 | 项目级别的长期记忆,Claude 会重新读取 |
| 文件系统访问权限 | Claude 仍然可以读写项目文件 |
| 工具定义 | 读文件、写文件、执行命令等能力不变 |
| 工作目录 | 你当前的项目路径 |
| Git 状态 | 版本控制信息 |
/clear 会“忘记”的(清除):
| 清除项 | 说明 |
|---|---|
| 所有对话历史 | 你问过什么、Claude 回答过什么——全部清空 |
| 文件读取记录 | Claude 之前读过哪些文件 |
| 命令执行记录 | 之前运行过的命令及其输出 |
| 失败的尝试 | 那些死胡同里的错误信息和被废弃的方案 |
| 旧任务的上下文 | 之前任务的全部上下文信息 |
简单来说: /clear 清空的是“短期对话记忆”,保留的是“长期项目记忆” 。
三、时序图:/clear 的完整调用过程
下图展示了用户输入 /clear 后,Claude Code 内部各个模块之间的完整交互流程:
时序图中的关键环节解读:
- 解析与路由:用户在 CLI 界面输入
/clear后,界面解析器识别出这是一个内置斜杠命令,将其路由到CommandHandler。 - 清空内存消息数组:
ConversationManager.clearConversationHistory()执行核心操作——this.messages = []。这是最关键的步骤,释放了所有对话历史占用的内存空间。 - 重新加载记忆文件:Claude 会重新读取
CLAUDE.md文件(包括用户级和项目级的),确保项目的长期记忆得以保留并重新注入。 - 重新加载工具定义:读文件、写文件、执行命令等工具的配置被重新加载,确保工具功能不受影响。
- 重置上下文状态:将整个对话上下文恢复到“全新会话”的状态,等待用户输入新消息。
- 持久化不受影响:硬盘上的历史记录(
~/.claude/sessions/目录下的 JSONL 文件)不会被删除,用户仍可用claude --resume恢复之前的会话。
四、最佳用法篇:把 /clear 变成你的超级习惯
4.1 核心原则:什么时候用 /clear?
4.2 实战工作流:高手的“清理节奏”
┌─────────────────────────────────────────────────────────────────────┐
│ 高手的 /clear 工作流 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 任务 A (登录模块) 任务 B (购物车) 任务 C (测试) │
│ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ │
│ │ 启动会话 │ │ 启动会话 │ │ 启动会话 │ │
│ │ ↓ │ │ ↓ │ │ ↓ │ │
│ │ 实现登录 │ │ 实现购物车 │ │ 写测试 │ │
│ │ ↓ │ │ ↓ │ │ ↓ │ │
│ │ ✅ 完成 │ │ ✅ 完成 │ │ ✅ 完成 │ │
│ │ ↓ │ │ ↓ │ │ ↓ │ │
│ │ /clear │ ◄──────────────│ /clear │ │ /clear │ │
│ └─────────────┘ └─────────────┘ └───────────┘ │
│ │
│ 💡 核心洞察:每个独立任务结束后,立即 /clear! │
│ 别让上一个任务的“认知垃圾”污染下一个任务![reference:22] │
└─────────────────────────────────────────────────────────────────────┘
4.3 常用配套命令速查表
Claude Code 的会话管理不是只用 /clear 一把锤子,而是需要一整套工具箱协同工作:
4.4 一个容易被忽视的重要细节:任务完整性
这是资深用户心照不宣的黄金法则:
在完成一个完整任务之前,千万不要执行 /clear!
为什么?因为 /clear 会彻底抹掉 Claude 对当前任务的所有“记忆” ——它已经不记得这个任务的背景、已经写了哪些代码、为什么要这么写。如果你在一个任务做到一半时执行了 /clear,Claude 会“失忆”,你需要从头开始解释整个任务背景。
所以正确的节奏是:任务完整 → /clear → 下一个任务 → /clear → 再下一个,形成一个清晰的“任务-清理-任务”循环。
4.5 与 /compact 的区别:什么时候用哪个?
很多新手搞不清楚 /clear 和 /compact 的区别。简单来说:
| 对比维度 | /clear | /compact |
|---|---|---|
| 对话历史 | 完全清空 | 压缩为摘要,保留核心信息 |
| Token 释放 | 100%(对话部分全部释放) | 部分释放 |
| 是否丢失上下文 | 丢失所有对话细节 | 保留关键决策和上下文 |
| 适合场景 | 任务完全切换 | 同一任务内上下文过长 |
使用建议:超过 70% 用 /compact,超过 85% 用 /clear。
4.6 高级技巧:用启动参数直接开新会话
如果每次都要先打开 Claude Code 再输入 /clear 才能开始新任务,效率还可以更高。试试这个:
claude "帮我写出所有 TODO 注释,为每个创建 GitHub issue"
这条命令会用一个干净的上下文启动一个全新会话,没有任何历史对话的干扰。当你养成了“把 Claude Code 当作可以随时运行的命令”这个习惯后,效率提升会非常明显。
五、总结:/clear 的核心心智模型
把 Claude Code 想象成一个真正的开发者伙伴:
- 短期记忆(上下文窗口) = 他此刻的“思考焦点”。它有限、会过期、需要定期刷新。
- 长期记忆(CLAUDE.md) = 他对整个项目的“深刻理解”。项目规范、代码风格、架构决策——这些永远不会丢。
- /clear = 你对他说:“忘了刚才讨论的那些细节吧,我们重新聚焦到当前任务上来。”
高手和普通用户的分水岭,往往不在于谁写出了更复杂的提示词,而在于谁更懂得管理上下文。每一次 /clear,都是一次认知重启。每一次认知重启,都让 Claude 以最佳状态迎接下一个任务。
你手中的 /clear,就是 AI 世界的重启键。善用它。🧠✨