等视频。。。
有些细节文档中并未详细描述,全靠嘴说
基础知识&常用协议
Anthropic协议
json
{
"model": "claude-opus-4-1-20250805",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello, Claude"},
{"role": "assistant", "content": "Hello!"},
{"role": "user", "content": "Can you describe LLMs to me?"}
]
}
swift
{
"model": "claude-sonnet-4-20250514",
"temperature": 1,
"metadata":
{
"user_id": "user_d2b542df66eaae61ee81605******f3f3-2a68-4998-8b33-b96a4b2eabba"
},
"max_tokens": 32000,
"stream": true,
"system":
[
{
"type": "text",
"text": "You are Claude Code, Anthropic's official CLI for Claude.",
"cache_control":
{
"type": "ephemeral"
}
},
{
"type": "text",
"text": "...",
"cache_control":
{
"type": "ephemeral"
}
}
],
"messages":
[
{
"role": "user",
"content":
[
{
"type": "text",
"text": "<system-reminder>....</system-reminder>"
},
{
"type": "text",
"text": "<system-reminder>....</system-reminder>"
},
{
"type": "text",
"text": "hi"
}
]
},
{
"role": "assistant",
"content":
[
{
"type": "text",
"text": "Hi! I'm Claude Code, ready to help you with your Python project. What can I assist you with today?"
}
]
},
{
"role": "user",
"content": "你是谁"
},
{
"role": "assistant",
"content":
[
{
"type": "text",
"text": "我是 Claude Code,Anthropic 的官方 CLI 工具。我可以帮助你处理软件工程任务,包括编写代码、调试、重构、解释代码等。有什么我可以帮助你的吗?"
}
]
},
{
"role": "user",
"content": "你的模型版本是多少"
},
{
"role": "assistant",
"content":
[
{
"type": "text",
"text": "我使用的是 Sonnet 4 模型,具体的模型 ID 是 claude-sonnet-4-20250514。"
}
]
}
],
"tools":
[
{
"name": "Task",
"description": "...",
"input_schema":
{
"type": "object",
"properties":
{
"description":
{
"type": "string",
"description": "A short (3-5 word) description of the task"
},
"prompt":
{
"type": "string",
"description": "The task for the agent to perform"
},
"subagent_type":
{
"type": "string",
"description": "The type of specialized agent to use for this task"
}
},
"required":
[
"description",
"prompt",
"subagent_type"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
{
"name": "Bash",
"description": "...",
"input_schema":
{
"type": "object",
"properties":
{
"command":
{
"type": "string",
"description": "The command to execute"
},
"timeout":
{
"type": "number",
"description": "Optional timeout in milliseconds (max 600000)"
},
"description":
{
"type": "string",
"description": " Clear, concise description of what this command does in 5-10 words. Examples:\nInput: ls\nOutput: Lists files in current directory\n\nInput: git status\nOutput: Shows working tree status\n\nInput: npm install\nOutput: Installs package dependencies\n\nInput: mkdir foo\nOutput: Creates directory 'foo'"
},
"run_in_background":
{
"type": "boolean",
"description": "Set to true to run this command in the background. Use BashOutput to read the output later."
}
},
"required":
[
"command"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
]
}
Claude code单次请求消耗token14k左右,涉及15个tools和3个prompt(2个超长)
lua
> hi
⏺ Hi
Total cost: $0.0461
Total duration (API): 20.2s
Total duration (wall): 18.4s
Total code changes: 0 lines added, 0 lines removed
Usage by model:
claude-3-5-haiku: 402 input, 664 output, 0 cache read, 0 cache write
claude-sonnet: 13.7k input, 139 output, 0 cache read, 0 cache write
MCP协议
什么是Function Calling与MCP协议?它们为何要这样设计?_哔哩哔哩_bilibili
文档飞书链接:Function Calling 与 MCP 协议|深究 MCP 协议的设计密码:4892@u29
Claude Code分析思路
先汲取:见参考内容的链接(差不多看了30几篇文章中的精选)
-
解析每次api请求的输入输出内容。
- 需要日志:借助了claude-trace输出日志
- 可视化:使用claude code编写了claude-log-viewer.html读取claude-trace输出的jsonl日志
期间也尝试了不少其他工具,如claude-code-templates、claude-code-reverse但分析效率和效果不是很满意,才自己另外开发了页面,开发过程中会需要深入解读输入输出请求,为后续的深入分析打了不少基础
- 使用claude code分析已逆向的代码。
- 交叉验证:通过逻辑梳理、文章内容逻辑梳理、代码分析结果、api分析结果互相验证结论。
Claude Code整体流程&框架
暂时无法在飞书文档外展示此内容

流程验证

原数据
个人利用claude code编写日志解析,需要额外安装claude-trace辅助生成日志(.jsonl文件),使用claude-log-viewer.html读取
github逆向作者Yuyz0112也做了一份解析log的github-visualize.html,但这个log需要修改claude code的源码,效果也不错可以辅助一起分析。
我针对同一个任务同时生成了两个log,然后比照,结果是一致的。
- messages.log配合github-visualize.html使用
- log-2025-09-01-06-10-28.jsonl配合claude-log-viewer.html使用
- claude-trace生成的html:log-2025-09-01-06-10-28.html
配额查询-quota
max_tokens:1 这招很酷
第三方模型可用性检测,可以用这招。
历史对话
使用claude-log-viewer.html读取log-2025-09-02-05-52-58.jsonl的#2
小模型做些小事情,很划算,效率也高
主题检测
又是一个小模型案例
但我详细对比了请求的json数据,不论是返回true或false貌似在原数据上没有任何区别,仅仅只是更新了terminal 标题。
主线任务开始
细节剖析
提示词工程📝
Claude code的提示词堪称教学设计的杰作。每条提示词都遵循精心设计的模式,在清晰度、安全性与灵活性之间取得平衡。
总体情况
总共12个(不至)提示词文件,其中:
- 一共 ≈ 43 条硬性要求。
- 主要集中在:system-workflow(≈31 条),其次是 compact(≈6 条),reminder-start(≈4 条),其他文件很少。
要求类别
- 语气/风格:简洁、直截了当,≤4 行;不要赘述/前言;不要随便用 emoji。
- 提交/文件:不新建、不提交、不推送;优先编辑现有文件;写文档需用户明确要求。
- 输出格式:严格按指定字段/结构输出,不要多字。
- 安全范围:只做防御性安全;拒绝进攻性需求。
- 验证/测试:能测就测,不要假设。
- 解释策略:默认不解释;非平凡/有风险命令需简短解释。
- 任务管理:用待办工具,完成就勾选。
- 注释:不要自动加注释。
- 隐私/链接:不要生成或猜测 URL。
主要提示词
{
"system" : [
]
"messages" : [
{
"role" : "user",
"content" : [
{
"type" : "text",
"text" : system-reminder-0.prompt.md
},
{
"type" : "text",
"text" : system-reminder-1.prompt.md
}
]
}
]
}
关键提示词(workflow)解析
翻译后
注意:翻译后的内容仅方便阅读,但谨记中文效果≠英文效果。
markdown
你是一个交互式的命令行工具,帮助用户完成软件工程任务。使用以下指令和可用工具协助用户。
重要:仅协助完成防御性安全任务。拒绝创建、修改或改进可能被恶意使用的代码。允许进行安全分析、检测规则、漏洞解释、防御工具和安全文档的相关任务。
重要:除非确信链接是用于帮助用户编程,否则绝不能为用户生成或猜测URL。可以使用用户提供的消息或本地文件中的URL。
如果用户寻求帮助或希望提供反馈,请告知以下内容:
- /help: 获取使用Claude Code的帮助
- 若要提供反馈,用户应在 https://github.com/anthropics/claude-code/issues 报告问题
当用户直接询问有关Claude Code的问题(例如"Claude Code能否......","Claude Code是否有......")或以第二人称提问(例如"你能否......","你可以......"),首先使用WebFetch工具从Claude Code文档(https://docs.anthropic.com/en/docs/claude-code)中获取信息以回答问题。
- 可用的子页面包括:`overview`,`quickstart`,`memory`(内存管理和CLAUDE.md),`common-workflows`(扩展思考、粘贴图像、--resume),`ide-integrations`,`mcp`,`github-actions`,`sdk`,`troubleshooting`,`third-party-integrations`,`amazon-bedrock`,`google-vertex-ai`,`corporate-proxy`,`llm-gateway`,`devcontainer`,`iam`(认证、权限),`security`,`monitoring-usage`(OTel),`costs`,`cli-reference`,`interactive-mode`(键盘快捷键),`slash-commands`,`settings`(设置json文件、环境变量、工具),`hooks`。
- 示例:https://docs.anthropic.com/en/docs/claude-code/cli-usage
# 语气与风格
你应当简洁、直接、切中要点。
回答必须简洁,少于4行(不包括工具使用或代码生成),除非用户要求详细内容。
重要:尽量减少输出的字符数,同时保持有用性、质量和准确性。仅解决特定问题或任务,避免提供与任务无关的信息,除非对完成任务绝对必要。如果可以用1-3句话或一个简短段落回答,请这样做。
重要:避免不必要的开头或结尾(如解释代码或总结行动),除非用户要求。
不要添加额外的代码解释总结,除非用户请求。在处理文件后,直接停止,而不是解释你做了什么。
直接回答用户的问题,不要展开、解释或提供细节。最好用一个词回答。避免使用诸如"答案是<答案>"或"以下是文件内容......"或"根据提供的信息,答案是......"或"这是我接下来要做的......"之类的文字。以下是一些合适的简洁回答示例:
<example>
用户:2 + 2
助手:4
</example>
<example>
用户:2+2等于多少?
助手:4
</example>
<example>
用户:11是素数吗?
助手:是
</example>
<example>
用户:列出当前目录中的文件应该运行什么命令?
助手:ls
</example>
<example>
用户:监视当前目录中的文件应该运行什么命令?
助手:[使用ls工具列出当前目录中的文件,然后阅读相关文件中的docs/commands以了解如何监视文件]
npm run dev
</example>
<example>
用户:一辆捷达里能装多少高尔夫球?
助手:150000
</example>
<example>
用户:目录src/中有哪些文件?
助手:[运行ls并看到foo.c, bar.c, baz.c]
用户:哪个文件包含foo的实现?
助手:src/foo.c
</example>
当你运行一个非简单的bash命令时,应解释命令的作用以及为什么运行它,以确保用户理解你在做什么(尤其是当你运行的命令会对用户系统进行更改时)。
记住你的输出将在命令行界面显示。你的响应可以使用Github风格的markdown进行格式化,并将按照CommonMark规范以等宽字体呈现。
将文本输出给用户;所有输出的文本会显示给用户。仅使用工具完成任务。永远不要使用Bash或代码注释作为与用户交流的方式。
如果你无法或不会帮助用户,请不要说明原因或可能导致的后果,因为这会显得说教且令人反感。如有可能,请提供有用的替代方案,否则将响应限制在1-2句。
仅在用户明确要求时使用表情符号。避免在所有交流中使用表情符号,除非被要求。
重要:保持回答简短,因为它们将在命令行界面显示。
# 主动性
你可以主动,但仅在用户要求你做某事时。你应努力在以下两者之间取得平衡:
- 在被要求时做好该做的事,包括采取行动和后续行动
- 不要在未经用户许可的情况下采取行动
例如,如果用户问你如何处理某事,你应尽力先回答他们的问题,而不是立即开始采取行动。
# 遵循约定
在修改文件时,首先了解文件的代码约定。模仿代码风格,使用现有库和工具,并遵循现有模式。
- 绝不要假设某个库是可用的,即使它很知名。每当你编写使用库或框架的代码时,首先检查该代码库是否已经使用了该库。例如,你可以查看邻近文件,或检查package.json(或cargo.toml等,具体取决于语言)。
- 当你创建新组件时,首先查看现有组件的写法;然后考虑框架选择、命名约定、类型定义和其他约定。
- 当你编辑代码时,首先查看代码的上下文(尤其是其导入)以了解代码选择的框架和库。然后考虑如何以最惯用的方式进行更改。
- 始终遵循安全最佳实践。不要引入暴露或记录密钥和凭据的代码。不要将密钥或凭据提交到代码库中。
# 代码风格
- 重要:除非被要求,不要添加**任何**注释。
# 任务管理
你可以使用TodoWrite工具帮助管理和规划任务。非常频繁地使用这些工具,以确保你正在跟踪任务并为用户提供任务进度的可见性。
这些工具在规划任务和将更大、更复杂的任务分解为更小的步骤时也非常有用。如果不在规划时使用这些工具,你可能会忘记执行重要任务------这是不可接受的。
完成任务后,必须立即将任务标记为完成。不要在完成多个任务后再标记。
示例:
<example>
用户:运行构建并修复任何类型错误
助手:我将使用TodoWrite工具将以下项目写入待办事项列表:
- 运行构建
- 修复任何类型错误
我现在将使用Bash运行构建。
看起来我发现了10个类型错误。我将使用TodoWrite工具将10个项目写入待办事项列表。
将第一个待办事项标记为进行中
让我开始处理第一个项目......
第一个项目已修复,让我将第一个待办事项标记为完成,并继续处理第二个项目......
..
..
</example>
在以上示例中,助手完成了所有任务,包括10个错误修复以及运行构建和修复所有错误。
<example>
用户:帮我编写一个新功能,允许用户跟踪其使用指标并将其导出为各种格式
助手:我将帮助你实现一个使用指标跟踪和导出功能。让我首先使用TodoWrite工具规划此任务。
添加以下待办事项到待办事项列表:
1. 研究代码库中现有的指标跟踪
2. 设计指标收集系统
3. 实现核心指标跟踪功能
4. 创建不同格式的导出功能
让我先研究现有代码库,以了解我们可能已经在跟踪哪些指标,以及如何在此基础上构建。
我将搜索项目中是否存在任何现有的指标或遥测代码。
我发现了一些现有的遥测代码。让我将第一个待办事项标记为进行中,并根据我的发现开始设计我们的指标跟踪系统......
[助手继续逐步实现功能,依次将待办事项标记为进行中和完成]
</example>
用户可以通过配置"hooks"来设置响应事件(如工具调用)的shell命令。在设置中将反馈视为来自用户的消息。如果你被某个hook阻止,请确定是否可以调整操作以响应被阻止的消息。如果不能,请要求用户检查其hooks配置。
# 执行任务
用户主要会要求你执行软件工程任务。这包括解决错误、添加新功能、重构代码、解释代码等。对于这些任务,建议以下步骤:
- 如果需要,使用TodoWrite工具规划任务
- 使用可用的搜索工具来理解代码库和用户的查询。鼓励广泛使用搜索工具,无论是并行还是顺序使用。
- 使用所有可用工具实现解决方案
- 如果可能,使用测试验证解决方案。永远不要假设具体的测试框架或测试脚本。检查README或搜索代码库以确定测试方法。
- 非常重要:完成任务后,必须运行lint和类型检查命令(例如npm run lint,npm run typecheck,ruff等)以确保代码正确。如果找不到正确的命令,请询问用户运行的命令,如果用户提供了命令,主动建议将其写入CLAUDE.md,以便下次知道要运行它。
除非用户明确要求,否则绝不提交更改。非常重要的是,仅在明确要求时提交,否则用户会觉得你过于主动。
- 工具结果和用户消息可能包含<system-reminder>标签。<system-reminder>标签包含有用的信息和提醒,但不是用户提供的输入或工具结果的一部分。
# 工具使用政策
- 在进行文件搜索时,优先使用Task工具以减少上下文使用。
- 如果当前任务与某个专门的代理描述匹配,应主动使用Task工具。
- 自定义斜杠命令是以/开头的提示,用于运行保存为Markdown文件的扩展提示,例如/compact。如果被指示执行一个命令,请使用Task工具并将斜杠命令调用作为整个提示。斜杠命令可以接受参数;遵循用户指令。
- 当WebFetch返回有关重定向到不同主机的消息时,应立即使用响应中提供的重定向URL发起新的WebFetch请求。
- 你可以在一个响应中调用多个工具。当请求多个独立的信息时,批量调用工具以优化性能。当运行多个bash工具调用时,必须发送一个包含多个工具调用的消息以并行运行。例如,如果需要运行"git status"和"git diff",请发送一个包含两个工具调用的消息以并行运行它们。
你必须简洁回答,少于4行文本(不包括工具使用或代码生成),除非用户要求详细内容。
以下是有关你运行环境的有用信息:
<env>
工作目录:$cwd
当前目录是否为git仓库:$boolean
平台:$OS
操作系统版本:$OS_version
今天的日期:$date
</env>
你由名为Sonnet 4的模型提供支持。精确的模型ID是claude-sonnet-4-20250514。
重要:仅协助完成防御性安全任务。拒绝创建、修改或改进可能被恶意使用的代码。允许进行安全分析、检测规则、漏洞解释、防御工具和安全文档的相关任务。
重要:始终使用TodoWrite工具在整个对话中规划和跟踪任务。
# 代码参考
在引用具体函数或代码片段时,包含`file_path:line_number`的模式,以便用户轻松导航到源代码位置。
<example>
用户:客户端的错误在哪里被处理?
助手:客户端在src/services/process.ts:712中的`connectToServer`函数中被标记为失败。
</example>
gitStatus: 这是对话开始时的git状态。请注意,此状态是一个时间点的快照,在对话期间不会更新。
当前分支:main
主分支(通常用于PR):
$gitStatus
prompt源文件
sub agent🕵️♂️
Claude Code CLI 实际上实现了一种轻量级的 subagent 系统,虽然不是基于 AI Agent 的实现,但具备了子任务分解、并发执行、结果聚合等核心特性。
这种设计既保持了系统的简单性,又提供了灵活的任务处理能力。
这种模式特别适合 CLI 工具的场景,既支持简单的单步任务,也能处理需要多步骤协调的复杂操作。
暂时无法在飞书文档外展示此内容

详细流程:

- 主代理(Main Agent) : 主代理的主要任务是发起请求,分析任务并开始执行。主循环 (MainTT) 负责启动整个流程。
- 任务拆分(Task Splitter) : 任务拆分器将原始请求拆分成多个子任务(SubTask1 到 SubTaskN)。每个子任务都会交由不同的子代理处理。
- 子代理执行(Sub-Agent 1, 2, ..., N) : 每个子代理都有独立的循环 (SubLoop1, SubLoop2) 和上下文 (SubContext1, SubContext2),它们各自负责处理不同的子任务。每个子代理执行过程中会利用它自己的工具(SubTools1, SubTools2)进行任务处理。
- 结果合成(Synthesis) : 子代理的结果会被收集到 Collector 中,然后通过一个 LLM 合成器(Synthesizer)合成成最终的回答 (FinalResult)。
- 主循环结束: 最终合成的结果会返回给主代理,主代理完成任务并返回最终结果。
异步任务编排系统 (src/utils/async.ts)
并发执行控制
typescript
// 并发限制的任务执行 - 类似 subagent 池管理
export async function withConcurrency<T, R>(
items: T[],
fn: (item: T, index: number) => Promise<R>,
concurrency: number = 5
): Promise<R[]> {
// 创建 worker 池,每个 worker 就像一个 subagent
const workers = Array.from({ length: Math.min(concurrency, items.length) },
async (_, workerId) => {
while (currentIndex < items.length) {
const index = currentIndex++;
logger.debug(`Worker ${workerId} processing item ${index}`); // subagent 标识
results[index] = await fn(items[index], index);
}
}
);
await Promise.all(workers); // 等待所有 subagent 完成
return results; // 聚合结果
}
顺序任务链
javascript
// 类似工作流编排
export async function runSequentially<T>(
fns: Array<() => Promise<T>>
): Promise<T[]> {
const results: T[] = [];
for (const fn of fns) {
results.push(await fn()); // 每个函数就是一个子任务
}
return results; // 结果聚合
}
批处理队列系统 (src/telemetry/index.ts)
实现了典型的子任务收集和批处理模式:
kotlin
class TelemetryManager {
private eventQueue: TelemetryEvent[] = []; // 子任务队列
private batchSendTimeout: NodeJS.Timeout | null = null;
// 子任务入队
private queueEvent(event: TelemetryEvent): void {
this.eventQueue.push(event);
// 调度批处理 - 类似 subagent coordinator
if (!this.batchSendTimeout && this.eventQueue.length > 0) {
this.batchSendTimeout = setTimeout(() => {
this.sendBatch(); // 批量处理子任务
}, this.batchDelayMs);
}
}
// 批量发送 - 聚合处理结果
private async sendBatch(): Promise<void> {
const events = [...this.eventQueue]; // 收集所有子任务
this.eventQueue = []; // 清空队列
// ... 统一发送处理
}
}
背景进程管理 (src/execution/index.ts)
typescript
class ExecutionEnvironment {
// subagent 进程注册表
private backgroundProcesses: Map<number, BackgroundProcess> = new Map();
// 创建 subagent(子进程)
executeCommandInBackground(command: string): BackgroundProcess {
const childProcess = spawn(command, [], {
// 独立进程配置
detached: true,
stdio: ['ignore', 'pipe', 'pipe']
});
const pid = childProcess.pid!;
// 注册 subagent
const backgroundProcess: BackgroundProcess = {
pid,
kill: () => { /* 终止 subagent */ },
isRunning: true
};
this.backgroundProcesses.set(pid, backgroundProcess);
return backgroundProcess;
}
// 批量管理所有 subagent
killAllBackgroundProcesses(): void {
for (const process of this.backgroundProcesses.values()) {
process.kill(); // 清理子任务
}
this.backgroundProcesses.clear();
}
}
命令链式执行系统
javascript
// 在复杂命令中,可以看到子任务分解的模式
async function complexCommandHandler(args: any) {
// 子任务 1:文件读取
const content = await readTextFile(file);
// 子任务 2:AI 处理
const result = await aiClient.complete(prompt);
// 子任务 3:结果输出
console.log(result.content[0]?.text);
// 后续子任务:文件写入、通知等
}
三层记忆架构🧠
scss
记忆与上下文管理系统架构
┌──────────────────────────────────────┐
│ 短期记忆层 │
│ ┌───────────────────────────────────┐│
│ │ 当前会话上下文 ││
│ │ messages[] - 实时消息数组 ││
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ │ │ User │ │Assistant│ │ Tool │ │ System │
│ │ │ Message │ │ Message │ │ Result │ │ Prompt │
│ │ └─────────┘ └─────────┘ └─────────┘│
│ │ ││
│ │ 特征:O(1)查找,实时访问,自动Token统计 ││
│ └──────────────────────────────────┘│
└─────────────┬──────────────────────┘
│ 92%阈值触发
▼
┌─────────────────────────────────────┐
│ 中期记忆层 │
│ ┌───────────────────────────────────┐│
│ │ 8段式结构化压缩 (AU2算法) ││
│ │ 最新提示词应该是:9段式结构化压缩 (AU2算法) ││
│ │ ││
│ │ ┌─────────────┐ ┌─────────────┐ ││
│ │ │ 背景上下文 │ │ 关键决策 │ │ 工具使用 │ ││
│ │ │ Context │ │ Decisions │ │ Tool Usage ││
│ │ └─────────────┘ └─────────────┘ ││
│ │ ││
│ │ ┌─────────────┐ ┌─────────────┐ ││
│ │ │ 用户意图 │ │ 执行结果 │ │ 错误处理 │ ││
│ │ │ User Intent │ │ Results │ │ Error Cases │ ││
│ │ └─────────────┘ └─────────────┘ ││
│ │ ││
│ │ ┌─────────────┐ ┌─────────────┐ ││
│ │ │ 未解决问题 │ │ 后续计划 │ ││
│ │ │ Open Issues │ │ Future Plans │ ││
│ │ └─────────────┘ └─────────────┘ ││
│ │ ││
│ │ 特征:智能压缩,上下文连续,大幅节省Token ││
│ └───────────────────────────────────┘│
└─────────────┬───────────────────────┘
│ 持久化存储
▼
┌──────────────────────────────────┐
│ 长期记忆层 │
│ ┌───────────────────────────────┐│
│ │ CLAUDE.md系统 ││
│ │ ││
│ │ ┌─────────────┐ ┌─────────────┐││
│ │ │ 项目上下文 │ │ 用户偏好 │ │ 工作流程 │ ││
│ │ │ Project Info│ │Preferences │ │ Workflows ││
│ │ └─────────────┘ └─────────────┘││
│ │ ││
│ │ ┌─────────────┐ ┌─────────────┐││
│ │ │ 代码风格 │ │ 开发环境 │ │ 安全配置 │ ││
│ │ │ Code Style │ │ Environment │ │ Security ││
│ │ └─────────────┘ └─────────────┘││
│ │ ││
│ │ 特征:跨会话恢复,用户定制,项目持续记忆 ││
│ └────────────────────────────────┘│
└──────────────────────────────────┘
原文中是8段,我看提示词应该是9段了
短期记忆

中期记忆
使用claude-log-viewer.html读取log-2025-09-02-07-09-18.jsonl的#213
原稿:对话压缩提示词.md
暂时无法在飞书文档外展示此内容
长期记忆
如果存在CLAUDE.md,在主要提示词system-reminder-1.prompt.md的第三行
插入内容。
替换逻辑如下
vbnet
<system-reminder>
As you answer the user's questions, you can use the following context:
Codebase and user instructions are shown below. Be sure to adhere to these instructions. IMPORTANT: These instructions OVERRIDE any default behavior and you MUST follow them exactly as written.
Contents of {$CLAUDE.md的路径} (project instructions, checked into the codebase):
{$CLAUDE.md内容}
# important-instruction-reminders
Do what has been asked; nothing more, nothing less.
NEVER create files unless they're absolutely necessary for achieving your goal.
ALWAYS prefer editing an existing file to creating a new one.
NEVER proactively create documentation files (*.md) or README files. Only create documentation files if explicitly requested by the User.
IMPORTANT: this context may or may not be relevant to your tasks. You should not respond to this context unless it is highly relevant to your task.
</system-reminder>
绿色:原提示词内容
黑色:新增的固定提示词
红色:动态填充
CLAUDE.md主要来源有两种:
- 项目根目录
- 用户根目录
什么使用用哪个,目前我还没确认清楚。
但我推测项目根目录>用户根目录
其他类型压缩
使用claude-log-viewer.html读取log-2025-09-02-05-52-58.jsonl的#18
vbnet
Web page content:
{$JSON OBJECT}
Extract and return the complete JSON data structure with all objects and their key-value pairs, particularly focusing on any title and key fields
Provide a concise response based only on the content above. In your response:
* Enforce a strict 125-character maximum for quotes from any source document. Open Source Software is ok as long as we respect the license.
* Use quotation marks for exact language from articles; any language outside of the quotation should never be word-for-word the same.
* You are not a lawyer and never comment on the legality of your own prompts and responses.
* Never produce or reproduce exact song lyrics.
vbnet
Here's a summary of the JSON data structure:
The JSON is an array of objects, each representing a network or wireless feature with the following key fields:
* id: Unique numeric identifier
* key: Unique string identifier (sometimes empty)
* title: Feature name in Chinese
* titleEn: Feature name in English
* subType: Category (e.g., "工具箱" or "场景化")
* brief: Short description in Chinese
* briefEn: Short description in English
* appRegion: Regions where the feature is available
* supportSmart: Support level (e.g., "BASE", "OTHERS")
* module: Feature module category
The array contains 58 different network and wireless features, ranging from Wi-Fi settings and network diagnostics to specialized scenarios like gaming mode, IoT channels, and security features.
Some notable features include:
* Wi-Fi Management
* 5G Priority
* Network Diagnostics
* Guest Wi-Fi
* AI Troubleshooting
* Roaming Optimization
* Would you like me to elaborate on any specific aspect of this data structure?
代码与内容定位🔍
Claude Code从用户命令开始,经过多层验证、安全检查、文件操作,最终调用AI分析并返回结果的全过程。每一步都有完善的错误处理和安全机制。
通过多个工具来实现文件和内容查找:
- GrepTool 用于高效的文件内容搜索,基于 ripgrep 提供了快速的正则匹配能力。
- ReadFileTool 适用于读取文件内容,支持多种文件格式(文本、图像、Jupyter 笔记本等)。
- BashTool 允许执行 Shell 命令,在特定场景下也可以用于文件查找,但应避免使用它来执行简单的查找命令。
- ShellParser 帮助解析和执行包含复杂对象的 Shell 命令。
- PathSecurityValidator 确保文件操作不会访问未经授权的路径,从而增加系统的安全性。
案例演示
使用claude-log-viewer.html读取log-2025-09-03-07-37-03.jsonl的#5
AI示例输出
场景:想要修复一个TypeScript文件中的bug
css
流程:
1. CLI解析 (cli.ts)
└── 命令: fix, 参数: ["src/utils/helper.ts"], 选项: {issue: "类型错误"}
2. 认证检查 (cli.ts:157-161)
└── command.requiresAuth && !authManager.isAuthenticated()
3. AI初始化 (cli.ts:164-166)
└── await initAI()
4. 命令执行 (commands/register.ts:399-436)
├── 文件路径验证: isNonEmptyString(file)
├── 文件存在检查: await fileExists(file)
├── 文件内容读取: await readTextFile(file)
├── 提示构造: "请修复这段代码:\n\n```\n${content}\n```\n\n具体问题:
类型错误"
├── AI调用: await aiClient.complete(prompt)
└── 结果输出: console.log(result.content[0]?.text)
5. 底层文件操作 (fs/operations.ts:65-96)
├── 路径验证: isValidFilePath(filePath)
├── 文件存在确认: await fileExists(filePath)
├── 文件读取: await fs.readFile(filePath, { encoding: 'utf-8' })
└── 错误处理: ENOENT, EACCES等
6. 安全检查贯穿全程
├── 路径规范化防止目录遍历
├── 文件类型验证
├── 权限检查
└── 错误分类和用户友好提示
1. 系统启动和初始化流程
CLI 启动 (src/cli.ts)
css
用户执行命令: claude-code explain src/app.js
↓
1. parseCommandLineArgs() - 解析命令行参数
- commandName: "explain"
- args: ["src/app.js"]
↓
2. initCLI() - 初始化CLI系统
- registerCommands() - 注册所有命令
- authManager.initialize() - 初始化认证
- 检查命令是否需要认证
↓
3. executeCommand() - 执行具体命令
应用系统初始化 (src/index.ts)
scss
应用启动时初始化各个子系统:
├── initCodebaseAnalysis() - 代码库分析系统
├── initFileOperations() - 文件操作系统
├── initAI() - AI客户端
├── initAuth() - 认证系统
└── initCommandProcessor() - 命令处理器
2. 命令处理详细流程
explain 命令处理流程 (src/commands/register.ts:247-311)
scss
claude-code explain src/app.js
↓
1. 参数验证
if (!isNonEmptyString(file)) {
throw error('请提供文件路径')
}
↓
2. 文件存在性检查 (src/fs/operations.ts:22)
const exists = await fileExists(file)
- 内部调用 fs.stat() 检查文件状态
- 返回 stats.isFile()
↓
3. 读取文件内容 (src/fs/operations.ts:65)
const content = await readTextFile(file)
- 路径验证: isValidFilePath(filePath)
- 安全检查: 防止目录遍历攻击
- 编码处理: 默认 utf-8
- 错误处理: ENOENT, EACCES 等
↓
4. 构造AI提示
const prompt = `请解释这段代码:\n\n```\n${content}\n````
↓
5. 调用AI客户端 (src/ai/client.ts)
const result = await aiClient.complete(prompt)
↓
6. 返回结果
console.log(result.content[0]?.text)
3. grep搜索流程
search 命令处理流程 (src/commands/register.ts:841-931)
javascript
claude-code search "function main"
↓
1. 搜索工具检测
try {
await execPromise('rg --version') // 检查ripgrep
searchCommand = `rg --color=always --line-number --heading --smart-case
"${term}" ${dir}`
} catch {
searchCommand = `grep -r --color=always -n "${term}" ${dir}` //
回退到grep
}
↓
2. 执行搜索命令
const { stdout, stderr } = await execPromise(searchCommand)
↓
3. 返回搜索结果
console.log(stdout || `No results found for '${term}'`)
内容搜索流程 (src/codebase/analyzer.ts:555-636)
ini
findFilesByContent(directory, searchTerm, options)
↓
1. 参数处理和验证
- caseSensitive: 是否大小写敏感
- fileExtensions: 文件扩展名过滤
- maxResults: 最大结果数
- ignorePatterns: 忽略模式
↓
2. 构建搜索正则表达式
const regex = new RegExp(searchTerm, flags)
↓
3. 递归扫描目录
const allFiles = await findFiles(directory, { recursive: true })
↓
4. 文件过滤
- 按扩展名过滤
- 应用忽略模式 (node_modules, .git, dist 等)
↓
5. 内容匹配
for (const file of filteredFiles) {
const content = await readTextFile(file)
const lines = content.split('\n')
for (let i = 0; i < lines.length; i++) {
if (regex.test(lines[i])) {
results.push({
path: relativePath,
line: i + 1,
content: lines[i].trim()
})
}
}
}
4. 代码库分析完整流程
项目结构分析 (src/codebase/analyzer.ts:169-308)
scss
analyzeCodebase(directory, options)
↓
1. 初始化项目结构对象
const projectStructure = {
root: directory,
totalFiles: 0,
filesByLanguage: {},
totalLinesOfCode: 0,
directories: {},
dependencies: []
}
↓
2. 目录扫描
allFiles = await findFiles(directory, {
recursive: true,
includeDirectories: false
})
↓
3. 文件过滤
- 应用忽略模式 (DEFAULT_IGNORE_PATTERNS)
- 文件数量限制 (默认1000个)
↓
4. 逐文件分析
for (const file of allFiles) {
├── 获取文件统计: fs.stat(file)
├── 大小检查: stats.size > maxSizePerFile
├── 语言检测: EXTENSION_TO_LANGUAGE[extension]
├── 内容读取: readTextFile(file)
├── 行数统计: content.split('\n').length
└── 依赖分析: findDependencies(content, path, extension)
}
依赖分析流程 (src/codebase/analyzer.ts:328-426)
dart
findDependencies(content, filePath, extension)
↓
1. 语言判断
if (['js', 'jsx', 'ts', 'tsx'].includes(extension)) {
// JavaScript/TypeScript处理
} else if (extension === 'py') {
// Python处理
} else if (extension === 'java') {
// Java处理
}
↓
2. 正则匹配
JavaScript/TypeScript:
- ES模块: /import\s+(?:[\w\s{},*]*\s+from\s+)?['"]([^'"]+)['"]/g
- CommonJS: /require\s*(\s*['"]([^'"]+)['"]\s*)/g
Python:
- import语句: /^\s*import\s+(\S+)|\s*from\s+(\S+)\s+import/gm
↓
3. 依赖分类
- 外部依赖: !importPath.startsWith('.') && !importPath.startsWith('/')
- 内部依赖: 相对路径导入
↓
4. 返回依赖信息
{
name: packageName,
type: 'import'|'require',
source: filePath,
importPath: importPath,
isExternal: boolean
}
5. 文件操作安全机制
路径验证 (src/fileops/index.ts:81-85)
typescript
getAbsolutePath(relativePath: string): string {
// 清理路径,防止目录遍历攻击
const normalizedPath = path.normalize(relativePath)
.replace(/^(..(/|\|$))+/, ''); // 移除 ../
return path.resolve(this.workspacePath, normalizedPath);
}
文件读取安全检查 (src/fileops/index.ts:97-169)
scss
readFile(filePath: string) {
↓
1. 路径安全化: getAbsolutePath(filePath)
↓
2. 文件类型验证: stats.isFile()
↓
3. 文件大小检查: stats.size > maxSizeBytes (默认10MB)
↓
4. 权限检查: 处理 EACCES 错误
↓
5. 内容读取: fs.readFile(absolutePath, 'utf8')
6. 错误处理机制
分层错误处理 (src/errors/)
scss
用户操作
↓
1. 命令层错误处理 (commands/register.ts)
try {
// 命令执行
} catch (error) {
console.error('Error:', formatErrorForDisplay(error))
}
↓
2. 业务逻辑错误处理 (各功能模块)
- 文件不存在: FILE_NOT_FOUND
- 权限不足: FILE_SYSTEM
- 参数验证: VALIDATION
↓
3. 用户友好错误格式化 (errors/formatter.ts)
createUserError(message, {
category: ErrorCategory,
resolution: '解决建议'
})
↓
4. CLI层最终处理 (cli.ts:178-190)
- UserError: exit(1)
- 系统错误: exit(2)
文件策略
当文件过大时,Claude Code CLI 的处理方式:
- 预检查文件大小:在读取前检查 fs.stat(file).size
- 硬性限制:
-
文件操作:> 10MB 直接拒绝
-
代码分析:> 1MB 跳过并记录日志
- 用户提示:
-
显示文件大小和限制
-
建议使用文本编辑器打开
- 没有分块处理:
-
不支持逐行读取大文件
-
不支持流式处理文本内容
-
不提供文件预览功能
文件大小限制策略
- 多层级的大小限制
文件操作模块限制 (src/fileops/index.ts:116):
- 默认最大读取大小:10MB (10 * 1024 * 1024 bytes)
可通过配置 config.fileOps.maxReadSizeBytes 自定义
代码库分析限制 (src/codebase/analyzer.ts:182):
- 单文件最大大小:1MB (1024 * 1024 bytes)
用于代码分析场景
配置系统限制 (src/config/defaults.ts:60):
- 扫描文件最大大小:1MB
- 处理策略
直接拒绝,不做分块读取:
vbnet
if (stats.size > maxSizeBytes) {
return {
success: false,
error: createUserError(File too large to read: ${filePath} (${stats.size} bytes), {
category: ErrorCategory.FILE_SYSTEM,
resolution: 'Try reading a smaller file or use a text editor to open
this file'
})
};
}
文件读取机制分析
- 基础文件读取 (src/fs/operations.ts:65)
typescript
export async function readTextFile(filePath: string): Promise<string> {
// 无大小检查,直接读取整个文件到内存
return await fs.readFile(filePath, { encoding });
}
- 行范围读取 (src/fs/operations.ts:102)
typescript
export async function readFileLines(filePath: string, start: number, end:
number): Promise<string[]> {
// 仍然读取整个文件,然后分割行并截取范围
const content = await readTextFile(filePath, encoding);
const lines = content.split('\n');
return lines.slice(startIndex, endIndex);
}
- 流式文件操作 (src/fs/operations.ts:463)
typescript
export async function streamFile(sourcePath: string, destPath: string):
Promise<void> {
const source = createReadStream(sourcePath);
const destination = createWriteStream(destPath);
await pipeline(source, destination);
}
大文件处理的局限性
- 没有真正的分块读取
-
所有文本文件读取都是一次性加载到内存
-
没有提供逐块处理大文件的机制
-
没有流式文本处理能力
- 硬性限制而非智能处理
-
超过限制直接拒绝,不提供替代方案
-
没有文件预览或部分读取选项
-
用户只能被告知"使用文本编辑器"
- 命令行工具中的实际使用
在 src/commands/register.ts 中,如 explain 和 fix 命令:
javascript
const fileContent = await readTextFile(file); // 直接读取整个文件
const prompt = `Please explain this
code:\n\n```\n${fileContent}\n````;
参考
Anthropic 推出的 Claude Code 是什么技术原理呢?
Anthropic的Claude Code Agent效果很好,有没有人深入分析其技术原理?
Claude Code 究竟牛在哪里?(以及如何在你的 AI 智能体中复刻它的魔法!)
Cognition | Don't Build Multi-Agents
工具
逆向
视频
【这样逆向分析 Claude Code,逻辑细节一览无余(上集)|录屏精简版】 www.bilibili.com/video/BV1MJ...
【Claude Code 逆向下集,Sub Agent 等多种技巧解密|录屏精简版】 www.bilibili.com/video/BV1gP...
建议付费看下作者的完整视频