internal/context/builder.go 实现 system prompt 的组装逻辑,对标 TypeScript src/utils/queryContext.ts 和 src/context.ts。
BuildSystemPrompt()
入口函数,返回 SystemPromptParts:
type SystemPromptParts struct {
SystemPrompt string // 组装后的完整 system prompt
UserContext map[string]string // 每轮注入:claudeMd, currentDate
SystemContext map[string]string // 每轮注入:gitStatus
}CLAUDE.md 加载(4 级优先级)
从低优先级到高优先级依次加载,后加载的内容在 context 中出现更晚(模型更关注):
| 优先级 | 来源 | 路径 |
|---|---|---|
| 1(最低) | Managed memory | /etc/claude-code/CLAUDE.md |
| 2 | User memory | ~/.claude/CLAUDE.md |
| 3 | Project memory | <projectDir>/CLAUDE.md、.claude/CLAUDE.md、.claude/rules/*.md(从根目录到 cwd 依次) |
| 4(最高) | Local memory | <projectDir>/CLAUDE.local.md(从根目录到 cwd 依次) |
多个文件内容用 \n\n---\n\n 分隔拼接。
默认 System Prompt 结构
当没有自定义 prompt 时,buildDefaultPrompt() 按如下章节组装:
1. 介绍段(you are an interactive agent...)
2. # System(输出格式、tool 执行规则、hook 提示等)
3. # Doing tasks(任务处理原则,含 PRODUCE_DIR 规则)
4. # Environment(cwd、platform、shell、sessionID、时间)
5. # Session-specific guidance(当有 Skill tool 时注入 skill 使用指引)
动态注入字段
以下内容在每轮请求时动态生成:
| 字段 | 内容 | 注入方式 |
|---|---|---|
currentDate | 今日日期 | UserContext → system-reminder |
claudeMd | 合并后的 CLAUDE.md | UserContext → system-reminder |
gitStatus | git 状态快照 | SystemContext → system-reminder |
Git 状态包含:当前分支、主分支名、git user、working tree status(最多 2000 字符)、最近 5 条 commit。
PRODUCE_DIR
环境变量 PRODUCE_DIR 指定输出目录,会注入到 Doing tasks 章节:
“When generating output files or artifacts, save them to the Output directory unless explicitly specified.”
相关页面
- query-engine — BuildSystemPrompt 调用时机
- skills — skill 指引注入(getSkillGuidanceSection)
- overview — CLAUDE.md 多级加载机制