本文档详细讲解 Claude Code 项目中 /init 命令的源码实现、执行流程、生成文件的层级体系及相关机制。
目录
- [1. 概述](#1. 概述)
- [2. 命令注册与入口](#2. 命令注册与入口)
- [3. 两种 Prompt 变体](#3. 两种 Prompt 变体)
- [4. 命令执行流程](#4. 命令执行流程)
- [5. CLAUDE.md 文件层级体系](#5. CLAUDE.md 文件层级体系)
- [6. @include 指令](#6. @include 指令)
- [7. Frontmatter 路径过滤](#7. Frontmatter 路径过滤)
- [8. Onboarding 集成](#8. Onboarding 集成)
- [9. 相关命令](#9. 相关命令)
- [10. CLAUDE.md 内容最佳实践](#10. CLAUDE.md 内容最佳实践)
- 附录:关键源文件索引
1. 概述
/init 是 Claude Code 的内置 prompt 类型斜杠命令。与其他直接执行代码的命令不同,/init 的核心机制是:
- 生成一段精心设计的 prompt 文本
- 将该 prompt 发送给 Claude 模型
- 模型调用 Read、Write、Glob、Grep、AskUserQuestion、Bash 等工具自主分析代码库
- 模型根据分析结果写入 CLAUDE.md、CLAUDE.local.md、Skills 等配置文件
适用场景:项目首次接入 Claude Code 时的初始化指引,为后续所有 Claude Code 会话提供项目上下文。
2. 命令注册与入口
2.1 命令定义
命令对象定义于 src/commands/init.ts:226-256:
const command = {
type: 'prompt',
name: 'init',
get description() {
return feature('NEW_INIT') &&
(process.env.USER_TYPE === 'ant' ||
isEnvTruthy(process.env.CLAUDE_CODE_NEW_INIT))
? 'Initialize new CLAUDE.md file(s) and optional skills/hooks with codebase documentation'
: 'Initialize a new CLAUDE.md file with codebase documentation'
},
contentLength: 0, // Dynamic content
progressMessage: 'analyzing your codebase',
source: 'builtin',
async getPromptForCommand() {
maybeMarkProjectOnboardingComplete()
return [
{
type: 'text',
text:
feature('NEW_INIT') &&
(process.env.USER_TYPE === 'ant' ||
isEnvTruthy(process.env.CLAUDE_CODE_NEW_INIT))
? NEW_INIT_PROMPT
: OLD_INIT_PROMPT,
},
]
},
} satisfies Command
2.2 属性说明
| 属性 | 值 | 含义 |
|---|---|---|
type |
'prompt' |
生成 prompt 而非直接执行代码 |
name |
'init' |
命令名,用户通过 /init 调用 |
contentLength |
0 |
内容长度动态决定 |
progressMessage |
'analyzing your codebase' |
执行时的进度提示文本 |
source |
'builtin' |
内置命令,非插件提供 |
命令无参数、无选项、无子命令、无别名。
2.3 注册流程
src/commands.ts:25--- 导入命令:import init from './commands/init.js'src/commands.ts:283--- 在COMMANDS()记忆化数组中注册(与help、config、memory等并列)src/commands.ts:476---getCommands()函数通过meetsAvailabilityRequirement和isCommandEnabled过滤命令。由于init无availability字段,所有用户均可使用。
3. 两种 Prompt 变体
/init 命令根据 feature flag 和环境变量在两种 prompt 之间切换。
3.1 OLD_INIT_PROMPT(原始版本)
文件 :src/commands/init.ts:6-26
触发条件 :feature('NEW_INIT') 为 false,或环境变量未设置
Prompt 内容(翻译为中文说明):
- 分析代码库,创建 CLAUDE.md 文件
- 包含常用命令:构建、lint、测试,包括运行单个测试的方法
- 包含高层代码架构和结构,聚焦需要阅读多个文件才能理解的"大局"架构
- 如已存在 CLAUDE.md 则建议改进
- 不重复、不包含显而易见的指令(如"提供有用的错误信息"、"编写单元测试")
- 不列出可轻易发现的组件或文件结构
- 不包含通用开发实践
- 整合 Cursor rules(
.cursor/rules/、.cursorrules)、Copilot rules(.github/copilot-instructions.md)的重要部分 - 整合 README.md 的重要部分
- 不编造信息
- 文件固定前缀:
# CLAUDE.md+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
3.2 NEW_INIT_PROMPT(新版本,8 阶段)
文件 :src/commands/init.ts:28-224
触发条件 :feature('NEW_INIT') === true 且(USER_TYPE === 'ant' 或 isEnvTruthy(process.env.CLAUDE_CODE_NEW_INIT))
这是功能更完善的版本,分为 8 个阶段:
Phase 1:询问用户设置范围(第 30-43 行)
通过 AskUserQuestion 工具获取两个关键决策:
目标文件选择: | 选项 | 说明 | |------|------| | Project CLAUDE.md | 团队共享指令,签入源码控制 | | Personal CLAUDE.local.md | 个人私有偏好,gitignored | | Both | 同时创建两个文件 |
Skills+Hooks 设置: | 选项 | 说明 | |------|------| | Skills + hooks | 同时启用 | | Skills only | 仅创建按需技能 | | Hooks only | 仅创建确定性钩子 | | Neither | 仅创建 CLAUDE.md |
Phase 2:通过子代理探索代码库(第 44-58 行)
启动子代理读取关键文件以理解项目:
读取的文件类型:
- 清单文件:
package.json、Cargo.toml、pyproject.toml、go.mod、pom.xml等 - 项目文档:README、Makefile、CI 配置
- 现有配置:CLAUDE.md、
.claude/rules/、AGENTS.md - AI 工具配置:
.cursor/rules、.cursorrules、.github/copilot-instructions.md、.windsurfrules、.clinerules、.mcp.json
检测内容:
- 构建、测试、lint 命令(尤其是非标准的)
- 语言、框架、包管理器
- 项目结构(monorepo with workspaces、multi-module、single project)
- 与语言默认值不同的代码风格规则
- 非显而易见的陷阱、必需的环境变量、工作流特殊要求
- 格式化器配置(prettier、biome、ruff、black、gofmt、rustfmt,或统一格式脚本)
- git worktree 使用情况(
git worktree list)
Phase 3:通过 AskUserQuestion 填补缺口(第 60-93 行)
原则:仅问代码无法回答的问题。
项目级问题(选择 Project CLAUDE.md 或 Both 时):
- 非显而易见的命令、陷阱、分支/PR 约定、环境设置要求、测试特殊要求
个人级问题(选择 Personal CLAUDE.local.md 或 Both 时):
- 用户在团队中的角色
- 对代码库和语言/框架的熟悉程度
- 个人沙箱 URL、测试账户、本地设置详情
- git worktree 使用方式(嵌套 vs 并列)
- 沟通偏好(如"简洁"、"始终解释权衡"、"不要在结尾总结")
提案生成:
- 综合 Phase 2 发现形成提案
- 通过
AskUserQuestion的preview字段展示(markdown 渲染在侧边栏) - 每项提案标注类型:Hook(自动执行)/ Skill(按需调用)/ Note(行为指导)
偏好队列 :接受的提案构建为队列,每项包含 {type, description, target file, details},后续阶段消费。
Phase 4:写入 CLAUDE.md(第 95-135 行)
最小化原则:每行必须通过"移除后是否会导致 Claude 犯错"的测试。如果不通过,删除该行。
包含内容:
- 构建/测试/lint 命令(Claude 无法猜测的非标准脚本)
- 与语言默认值不同的代码风格规则
- 测试指令和特殊要求
- 仓库规范(分支命名、PR 约定、提交风格)
- 必需的环境变量或设置步骤
- 非显而易见的陷阱或架构决策
- 现有 AI 编码工具配置的重要部分
排除内容:
- 文件级结构或组件列表(Claude 可自行发现)
- 标准语言约定
- 通用建议("write clean code"、"handle errors")
- 详细 API 文档(改用
@path/to/import引用) - 频繁变化的信息(引用源文件)
- 长教程或演练(移至独立文件并用
@path引用) - 清单文件中显而易见的命令(如标准
npm test、cargo test、pytest)
已有 CLAUDE.md 时:读取后提出差异建议,说明每项改进的原因,不静默覆盖。
高级组织:
- 支持
.claude/rules/目录拆分为多个聚焦文件(如code-style.md、testing.md、security.md) - 支持子目录 CLAUDE.md(monorepo 中模块特定指令)
Phase 5:写入 CLAUDE.local.md(第 137-152 行)
包含内容:
- 用户角色和对代码库的熟悉程度
- 个人沙箱 URL、测试账户、本地设置详情
- 个人工作流或沟通偏好
自动操作:
- 添加
CLAUDE.local.md到.gitignore
git worktree 处理:
- 嵌套 worktree(
.claude/worktrees/<name>/):主仓库的 CLAUDE.local.md 自动被发现 - 并列/外部 worktree(
../myrepo-feature/):个人内容写入~/.claude/<project-name>-instructions.md,每个 worktree 创建一行 stub 文件:@~/.claude/<project-name>-instructions.md - 注意:stub 引用绝不放入项目 CLAUDE.md(团队共享文件不应包含个人引用)
Phase 6:建议并创建 Skills(第 154-183 行)
创建位置 :.claude/skills/<skill-name>/SKILL.md
文件格式:
---
name: <skill-name>
description: <what the skill does and when to use it>
---
<Instructions for Claude>
调用方式:
- 用户和 Claude 均可默认调用
- 有副作用的工作流(如
/deploy)添加disable-model-invocation: true - 使用
$ARGUMENTS接受输入参数
Phase 7:建议额外优化(第 185-210 行)
检测与建议:
- GitHub CLI :
which gh(Linux/macOS)或where gh(Windows),缺失时建议安装 - Linting:检测 Phase 2 是否发现 lint 配置,缺失时建议设置
- Hooks :消费偏好队列中的
hook条目
Hook 配置 : | 用户选择 | 目标文件 | |----------|----------| | Project CLAUDE.md | .claude/settings.json(团队共享,签入) | | Personal CLAUDE.local.md | .claude/settings.local.json(私有) |
事件映射 : | 用户意图 | 事件 | 匹配器 | |----------|------|--------| | 每次编辑后 | PostToolUse | Write\|Edit | | Claude 完成时 | Stop | --- | | 运行 bash 前 | PreToolUse | Bash |
注意 :git commit 前的 hook 无法通过 matchers 实现(无法过滤特定 bash 命令),应路由到 git pre-commit hook。
Phase 8:总结与后续步骤(第 213-224 行)
总结内容:
- 回顾已写入的文件和关键内容
- 提醒用户这些文件是起点,可随时运行
/init重新扫描
建议待办事项:
- 前端代码检测:建议安装
frontend-design和playwright插件 - Phase 7 中用户拒绝的优化项再次提示
- 测试缺失时建议设置测试框架
- 建议安装
skill-creator插件以创建和优化技能 - 建议浏览官方插件(
/plugin)
4. 命令执行流程
完整的调用链如下:
用户输入 "/init"
│
▼
src/utils/slashCommandParsing.ts:25 --- parseSlashCommand("/init")
│ 返回 { commandName: 'init', args: '', isMcp: false }
│
▼
src/utils/processUserInput/processSlashCommand.tsx:309 --- processSlashCommand()
│ 查找命令: hasCommand('init', commands) / getCommand()
│
▼
src/utils/processUserInput/processSlashCommand.tsx:723 --- case 'prompt': 分支
│
▼
src/utils/processUserInput/processSlashCommand.tsx:827 --- getMessagesForPromptSlashCommand()
│ 调用 command.getPromptForCommand(args, context)
│
▼
src/commands/init.ts:239-253 --- getPromptForCommand()
│ 1. 调用 maybeMarkProjectOnboardingComplete()
│ 2. 根据 feature flag 选择 OLD_INIT_PROMPT 或 NEW_INIT_PROMPT
│ 3. 返回 [{ type: 'text', text: promptText }]
│
▼
返回 { messages: [...], shouldQuery: true, command }
│
▼
QueryEngine 接收 prompt → 模型使用工具执行指令
│
▼
模型分析代码库 → 写入 CLAUDE.md / CLAUDE.local.md / Skills
4.1 斜杠命令解析
parseSlashCommand()(src/utils/slashCommandParsing.ts:25):
- 输入必须以
/开头 - 按空格分割:第一个词为命令名,后续为参数
- 特殊处理 MCP 命令(第二个词为
(MCP)时标记isMcp: true)
4.2 Prompt 类型命令分发
processSlashCommand() 中的 case 'prompt': 分支(src/utils/processUserInput/processSlashCommand.tsx:723):
- 检查是否为
context: 'fork'的命令(分叉子代理执行) - 否则调用
getMessagesForPromptSlashCommand() AbortError时返回中断消息- 其他错误返回错误消息
4.3 消息构建
getMessagesForPromptSlashCommand()(src/utils/processUserInput/processSlashCommand.tsx:827):
- 调用
command.getPromptForCommand()获取 prompt 内容 - 注册 skill hooks(如果定义且允许)
- 记录技能调用(用于 compaction preservation)
- 构建加载元数据(命令名、进度消息等)
- 提取消息中的附件引用(@-mentions、MCP resources)
- 返回
{ messages: [...], shouldQuery: true },触发模型处理
5. CLAUDE.md 文件层级体系
5.1 四层加载顺序
文件定义于 src/utils/claudemd.ts:1-26 的注释中:
| 层级 | 类型 | 路径 | 说明 |
|---|---|---|---|
| 1(最低) | Managed | /etc/claude-code/CLAUDE.md |
全局管理指令(策略设置) |
| 2 | User | ~/.claude/CLAUDE.md |
用户私有全局指令 |
| 3 | Project | CLAUDE.md、.claude/CLAUDE.md、.claude/rules/*.md |
代码库中的团队共享指令 |
| 4(最高) | Local | CLAUDE.local.md |
用户私有项目级指令(gitignored) |
加载顺序为逆优先级:先加载低优先级文件,后加载高优先级文件。模型对后加载的内容关注度更高。
5.2 文件发现规则
核心函数:getMemoryFiles()(src/utils/claudemd.ts:790)
发现流程:
- Managed 层 :读取
/etc/claude-code/CLAUDE.md和 Managed.claude/rules/*.md - User 层 (需
userSettings启用):读取~/.claude/CLAUDE.md和~/.claude/rules/*.md - Project + Local 层 :从当前目录向上遍历到根目录,每个目录尝试:
CLAUDE.md(Project 类型).claude/CLAUDE.md(Project 类型).claude/rules/*.md(Project 类型)CLAUDE.local.md(Local 类型)
- 额外目录 :处理
--add-dir参数指定的目录的 CLAUDE.md - AutoMem :处理自动记忆入口文件(
memory.md),需功能开启 - TeamMem:处理团队记忆入口文件,需功能开启
嵌套 Worktree 处理 (src/utils/claudemd.ts:859-884):
当运行在嵌套于主仓库的 worktree(如 .claude/worktrees/<name>/)中时:
- 跳过主仓库工作树中 Worktree 根目录之外的目录的 Project 类型文件
- 避免同一内容被加载两次
CLAUDE.local.md是 gitignored 的,仅存在于主仓库中,仍会被加载
5.3 排除机制
函数:isClaudeMdExcluded()(src/utils/claudemd.ts:547)
- 通过
claudeMdExcludes设置排除特定路径 - 仅应用于 User、Project、Local 类型(Managed、AutoMem、TeamMem 永不被排除)
- 支持 glob 模式匹配
- 处理符号链接(如 macOS 的
/tmp→/private/tmp)
5.4 记忆类型
函数:MemoryFileInfo(src/utils/claudemd.ts:229)
export type MemoryFileInfo = {
path: string
type: MemoryType // Managed | User | Project | Local | AutoMem | TeamMem
content: string
parent?: string // 包含此文件的文件路径
globs?: string[] // 此规则适用的文件路径 glob 模式
contentDiffersFromDisk?: boolean
rawContent?: string
}
6. @include 指令
6.1 语法
CLAUDE.md 文件中的 @include 指令允许引用其他文件的内容:
@path # 相对路径(等同 @./path)
@./relative/path # 相对路径
@~/home/path # 用户 home 目录
@/absolute/path # 绝对路径
@path/to\ file.md # 空格通过 \ 转义
@path/to/file.md#section # 支持 fragment 标识符(自动剥离)
6.2 解析规则
解析由 extractIncludePathsFromTokens()(src/utils/claudemd.ts:448-535)完成:
正则表达式 :/(?:^|\s)@((?:[^\s\\]|\\ )+)/g
解析行为:
- 仅在 Markdown 的叶子文本节点中解析
- 跳过
code和codespan类型(代码块和行内代码中的@不被解析) - HTML 注释中的
@path:剥离注释后检查剩余内容 @path(无前缀)视为相对路径(等同@./path)
路径验证 (src/utils/claudemd.ts:476-488):
- 以
./开头 → 相对路径 - 以
~/开头 → 用户 home 目录 - 以
/开头(且不是单独的/)→ 绝对路径 - 其他:匹配
^[a-zA-Z0-9._-]且不匹配^[#%^&*()]+→ 相对路径
6.3 嵌套深度限制
- 最大嵌套深度:5 层(
MAX_INCLUDE_DEPTH,src/utils/claudemd.ts:537) - 通过
processedPaths集合防止循环引用 - 不存在的文件静默忽略
6.4 递归处理
processMemoryFile()(src/utils/claudemd.ts:618-685):
- 检查是否已处理(防循环)或超过最大深度
- 检查是否被排除
- 解析符号链接路径
- 读取文件内容并提取
@include路径 - 主文件先加入结果数组
- 递归处理所有被引用的文件
6.5 允许的文件扩展名
TEXT_FILE_EXTENSIONS 集合(src/utils/claudemd.ts:96-227)定义了 @include 允许引用的文件类型:
- 文档:.md, .txt, .rst, .adoc, .org, .tex
- 数据:.json, .yaml, .yml, .toml, .xml, .csv
- Web:.html, .css, .scss, .less, .vue, .svelte, .astro
- JavaScript/TypeScript:.js, .ts, .tsx, .jsx, .mjs, .cjs
- Python:.py, .pyi, .pyw
- 系统语言:.c, .cpp, .h, .hpp, .cs, .java, .kt, .scala, .go, .rs, .swift, .dart
- Shell:.sh, .bash, .zsh, .fish, .ps1, .bat, .cmd
- 其他:.sql, .graphql, .proto, .php, .lua, .r, .rb, .ex, .hs, .ml
二进制文件(图片、PDF 等)不被允许。
7. Frontmatter 路径过滤
7.1 机制
.claude/rules/*.md 文件支持 YAML frontmatter 中的 paths 字段,用于限定规则适用的文件路径范围。
示例:
---
paths: src/components/**
---
在此目录下的组件文件使用 2 空格缩进。
7.2 解析逻辑
函数:parseFrontmatterPaths()(src/utils/claudemd.ts:254-279)
- 使用
parseFrontmatter()提取 frontmatter 和正文内容 - 如果无
paths字段,返回无限制内容 - 通过
splitPathInFrontmatter()分割路径模式 - 剥离每个模式的
/**后缀(ignore库自动匹配子目录) - 如果所有模式为空或全为
**,视为无限制
7.3 条件加载
processMdRules()(src/utils/claudemd.ts:697)中的 conditionalRule 参数控制:
conditionalRule: false--- 仅加载无 frontmatterpaths的规则(无条件规则)conditionalRule: true--- 仅加载有 frontmatterpaths的规则(有条件规则),需通过 glob 匹配当前文件路径
7.4 匹配库
使用 picomatch 进行 glob 匹配(与 .gitignore 语法兼容),{ dot: true } 选项允许匹配以 . 开头的文件/目录。
8. Onboarding 集成
8.1 引导步骤
文件:src/projectOnboardingState.ts
getSteps() 返回两个步骤:
| 步骤 | key | 文本 | 启用条件 | 完成检测 |
|---|---|---|---|---|
| 1 | workspace |
"Ask Claude to create a new app or clone a repository" | 工作目录为空 | 始终未完成(可完成) |
| 2 | claudemd |
"Run /init to create a CLAUDE.md file with instructions for Claude" | 工作目录非空 | 检查 CLAUDE.md 是否存在 |
8.2 状态追踪
isProjectOnboardingComplete()(第 43 行):
- 检查所有
isCompletable && isEnabled的步骤是否都isComplete - 步骤 1 仅在空目录时启用且可完成
- 步骤 2 仅在非空目录时启用
maybeMarkProjectOnboardingComplete()(第 49 行):
- 短路检查:已标记完成则直接返回
- 检查
isProjectOnboardingComplete(),若完成则保存到项目配置
shouldShowProjectOnboarding()(第 63 行):
- 已完成 → 不显示
- 已显示 >= 4 次 → 不显示
- DEMO 模式 → 不显示
- 否则根据完成状态决定
8.3 与 /init 的关系
在 init.getPromptForCommand() 执行时(src/commands/init.ts:240),首先调用 maybeMarkProjectOnboardingComplete()。这意味着运行 /init 会自动标记引导完成。
9. 相关命令
9.1 /init-verifiers
文件 :src/commands/init-verifiers.ts
- 类型:
PromptCommand(type: 'prompt') - 限制:列于
INTERNAL_ONLY_COMMANDS,仅USER_TYPE === 'ant'(Anthropic 内部用户)可用 - 功能:创建自动化验证技能,在
.claude/skills/<verifier-name>/SKILL.md中生成 - 支持的验证器类型:Playwright、CLI、API 验证
9.2 /remember
文件 :src/skills/bundled/remember.ts
- 功能:自动记忆推广工作流
- 与 CLAUDE.md 的交互:将对话中的重要信息自动写入记忆文件
10. CLAUDE.md 内容最佳实践
以下规则提炼自 NEW_INIT_PROMPT 中的写入指令,适用于所有 CLAUDE.md 文件的编写。
10.1 应该包含
- 构建/测试/lint 命令:Claude 无法猜测的非标准脚本、参数、序列
- 代码风格差异:与语言默认值不同的规则(如"TypeScript 中使用 type 而非 interface")
- 测试指令:运行单个测试的方法、测试框架的特殊要求
- 仓库规范:分支命名约定、PR 约定、提交风格
- 环境要求:必需的环境变量、设置步骤
- 非显而易见的陷阱:架构决策、历史遗留问题、特殊工作流
- AI 工具配置整合:AGENTS.md、.cursor/rules、.github/copilot-instructions.md 等的重要部分
10.2 应该排除
- 文件结构列表:Claude 可通过 Glob/Read 自行发现
- 标准语言约定:Claude 已知的标准实践
- 通用建议:如"write clean code"、"handle errors"、"provide helpful error messages"
- 详细 API 文档 :改用
@path/to/import语法引用 - 频繁变化的信息:引用源文件确保 Claude 始终读取最新版本
- 长教程/演练 :移至独立文件并用
@path引用,或放入技能 - 清单文件中显而易见的命令 :如标准
npm test、cargo test、pytest
10.3 技术限制
| 限制 | 值 | 来源 |
|---|---|---|
| 单文件最大字符数 | 40,000 | MAX_MEMORY_CHARACTER_COUNT(src/utils/claudemd.ts:92) |
| @include 最大嵌套深度 | 5 层 | MAX_INCLUDE_DEPTH(src/utils/claudemd.ts:537) |
| 已有文件处理 | 不静默覆盖,提出差异建议 | Phase 4 指令 |
| 拆分组织 | 支持 .claude/rules/ 目录和子目录 CLAUDE.md |
Phase 4 指令 |
10.4 写作风格要求
- 具体性:"Use 2-space indentation in TypeScript" 优于 "Format code properly"
- 最小化:每行必须通过"移除后是否会导致 Claude 犯错"的测试
- 无重复:不重复自身
- 无编造:不编造信息,如 "Common Development Tasks"、"Tips for Development"
- 固定前缀 :文件必须以
# CLAUDE.md+ 说明文本开头
附录:关键源文件索引
| 文件路径 | 行号范围 | 内容 |
|---|---|---|
src/commands/init.ts |
1-257 | 命令定义、OLD/NEW prompt 文本 |
src/commands.ts |
25, 283, 476 | 导入、注册、命令过滤 |
src/types/command.ts |
--- | Command、PromptCommand 类型定义 |
src/utils/slashCommandParsing.ts |
25-60 | 斜杠命令解析 |
src/utils/processUserInput/processSlashCommand.tsx |
723-827 | prompt 类型命令分发与消息构建 |
src/utils/claudemd.ts |
1-26 | 文件加载顺序注释 |
src/utils/claudemd.ts |
96-227 | TEXT_FILE_EXTENSIONS 集合 |
src/utils/claudemd.ts |
229-243 | MemoryFileInfo 类型定义 |
src/utils/claudemd.ts |
254-279 | parseFrontmatterPaths() |
src/utils/claudemd.ts |
448-535 | extractIncludePathsFromTokens() |
src/utils/claudemd.ts |
537 | MAX_INCLUDE_DEPTH 常量 |
src/utils/claudemd.ts |
540-612 | isClaudeMdExcluded() 和符号链接解析 |
src/utils/claudemd.ts |
618-685 | processMemoryFile() 递归处理 |
src/utils/claudemd.ts |
697-788 | processMdRules() 目录规则处理 |
src/utils/claudemd.ts |
790-1028 | getMemoryFiles() 核心发现逻辑 |
src/utils/claudemd.ts |
1435 | isMemoryFilePath() 判断函数 |
src/projectOnboardingState.ts |
1-84 | 引导状态管理 |
src/commands/init-verifiers.ts |
--- | /init-verifiers 命令(内部) |
src/skills/bundled/remember.ts |
--- | /remember 技能 |