name: project-onboarding description: 为新代码库提供引导式项目引导。通过创建持久知识记忆,帮助代理理解项目结构、构建系统、测试命令和开发工作流。 version: 1.0.0 model: sonnet invoked_by: both user_invocable: true tools: [读取, 全局查找, 搜索, Bash, 写入] best_practices:
- 在开始对不熟悉项目进行实质性工作之前执行引导
- 创建结构化记忆以便在会话间重用
- 专注于可操作信息(构建命令、测试命令、关键目录)
- 在安全时通过运行命令验证发现的信息
- 保持记忆简洁并组织良好 error_handling: graceful streaming: supported verified: false lastVerifiedAt: 2026-02-19T05:29:09.098Z
<identity> 项目引导专家 - 为快速项目理解提供引导式代码库探索和知识捕获。 </identity>
<capabilities>
- 发现项目结构和组织模式
- 识别构建系统和包管理器
- 查找测试命令和覆盖率配置
- 映射关键目录和入口点
- 为未来会话创建持久记忆
- 生成项目概述文档
- 识别开发工作流和约定 </capabilities>
<instructions>
何时使用
在以下情况调用此技能:
- 开始处理不熟悉的代码库
- 上下文丢失后(新会话)
- 当
check_onboarding_performed指示不存在记忆时 - 当用户要求“了解此项目”或“理解此代码库”时
引导工作流
步骤1:检查现有知识
首先,检查是否已执行引导:
列出文件:.claude/context/memory/
查找:project-structure.md, build-commands.md, test-commands.md
如果记忆存在,读取它们并跳到步骤6(验证)。
步骤2:项目发现
首先,分类项目:
绿地项目与棕地项目检测
| 指标 | 是否存在 | 分类 |
|---|---|---|
.git 目录带历史 |
是 | 棕地项目 |
包清单(package.json, requirements.txt, 等) |
是 | 棕地项目 |
源代码目录(src/, app/, lib/)带代码 |
是 | 棕地项目 |
| Git脏状态(未提交的更改) | 是 | 棕地项目(警告用户) |
| 空或仅README.md | 无以上指标 | 绿地项目 |
对于棕地项目:
- 尊重忽略文件:在扫描前检查
.gitignore和.claudeignore - 高效文件分拣:
- 使用
git ls-files列出跟踪文件(尊重.gitignore) - 对于大文件(>1MB):仅读取头/尾(前20行和后20行)
- 跳过二进制文件、node_modules、构建产物
- 使用
- 推断技术栈:分析清单文件后提问
- 上下文感知问题:基于发现的模式提问
# 高效文件列出(尊重.gitignore)
git ls-files --exclude-standard -co | head -100
# 对于非Git项目,手动忽略
find . -type f \
-not -path '*/node_modules/*' \
-not -path '*/.git/*' \
-not -path '*/dist/*' \
-not -path '*/build/*' \
| head -100
对于绿地项目:
- 创建新上下文工件
- 使用交互式需求收集技能进行设置
分析项目根目录以识别:
-
包管理器与语言:
package.json- Node.js/JavaScript/TypeScriptpyproject.toml,requirements.txt- PythonCargo.toml- Rustgo.mod- Gopom.xml,build.gradle- Javacomposer.json- PHP
-
项目类型:
- 前端、后端、全栈、库、CLI、移动、单体仓库
-
框架检测:
- 解析依赖项以识别框架(React, Next.js, FastAPI, 等)
步骤3:构建系统分析
识别如何构建/运行项目:
-
检查package.json脚本(Node.js):
{ "scripts": { "dev": "...", "build": "...", "start": "...", "test": "..." } } -
检查Makefiles(Python, Go, Rust):
build: test: lint: -
检查pyproject.toml(Python):
[tool.poetry.scripts] [tool.poe.tasks] -
文档发现命令:
- 开发:
npm run dev,uv run dev - 构建:
npm run build,cargo build - 测试:
npm test,pytest - 代码检查:
npm run lint,ruff check
- 开发:
步骤4:目录结构映射
映射关键目录:
| 目录 | 目的 |
|---|---|
src/ |
源代码 |
lib/ |
库代码 |
test/, tests/, __tests__/ |
测试文件 |
docs/ |
文档 |
scripts/ |
实用脚本 |
config/ |
配置文件 |
识别:
- 入口点(
index.ts,main.py,app.py) - 组件目录
- API路由
- 数据库模型
步骤5:创建引导记忆
将发现的信息保存到持久记忆:
# 项目结构
## 概述
- 项目类型:[全栈/后端/前端/库]
- 主要语言:[TypeScript/Python/Go/Rust]
- 框架:[Next.js/FastAPI/Express/等]
## 关键目录
- 源代码:`src/`
- 测试:`test/`
- 配置:`.claude/`
## 入口点
- 主入口:`src/index.ts`
- API:`src/api/`
## 重要文件
- 配置:`package.json`, `tsconfig.json`
- 环境:`.env.example`
# 构建命令
## 开发
- 启动开发服务器:`npm run dev`
- 监视模式:`npm run watch`
## 构建
- 生产构建:`npm run build`
- 类型检查:`npm run typecheck`
## 清理
- 清理构建:`npm run clean`
# 测试命令
## 单元测试
- 运行所有:`npm test`
- 监视模式:`npm test -- --watch`
- 覆盖率:`npm test -- --coverage`
## 端到端测试
- 运行:`npm run test:e2e`
## 代码检查
- 代码检查:`npm run lint`
- 修复:`npm run lint:fix`
步骤6:验证
验证发现的信息:
-
测试命令(如果安全):
- 运行
npm --version或等效命令以验证包管理器 - 运行
npm run --silent以列出可用脚本 - 未经用户许可不要运行构建或测试
- 运行
-
验证路径:
- 确认关键目录存在
- 验证入口点正确
步骤7:报告摘要
输出简洁摘要:
## 引导完成
**项目**:[名称]
**类型**:[全栈/后端/等]
**框架**:[Next.js/FastAPI/等]
**快速命令**:
- 开发:`npm run dev`
- 测试:`npm test`
- 构建:`npm run build`
**关键位置**:
- 源代码:`src/`
- 测试:`test/`
- API:`src/api/`
**创建的记忆**:
- .claude/context/memory/project-structure.md
- .claude/context/memory/build-commands.md
- .claude/context/memory/test-commands.md
</instructions>
<examples> <usage_example> 用户请求:“我需要理解此代码库”
代理操作:
- 检查.claude/context/memory/中的现有记忆
- 如果无记忆,运行项目发现
- 分析package.json、目录结构
- 创建记忆文件
- 报告摘要
输出:
## 引导完成
**项目**:agent-studio
**类型**:多代理编排框架
**框架**:Claude Code + 自定义代理
**快速命令**:
- 验证:`node .claude/tools/cli/validate-agents.mjs`
- 测试钩子:`node .claude/hooks/routing/router-enforcer.cjs`(使用`.claude/lib/routing/routing-table.cjs`)
**关键位置**:
- 代理:`.claude/agents/`
- 技能:`.claude/skills/`
- 记忆:`.claude/context/memory/`
**创建的记忆**:3个文件
</usage_example> </examples>
<integration> 相关技能:
project-analyzer- 深度自动分析(补充引导)repo-rag- 模式语义搜索session-handoff- 为新会话准备上下文 </integration>
记忆协议(强制)
开始前:
读取.claude/context/memory/learnings.md
完成后:
- 发现新模式 ->
.claude/context/memory/learnings.md - 遇到问题 ->
.claude/context/memory/issues.md - 做出决策 ->
.claude/context/memory/decisions.md
假设中断:如果不在记忆中,则未发生。