名称: 会话交接 描述: 在会话丢失或结束时为新对话准备上下文。创建交接文档,捕获当前状态、进展和下一步骤,以实现无缝继续。 版本: 1.0.0 模型: sonnet 触发方式: 两者 用户可调用: true 工具: [读取, 写入, 全局搜索, 文本查找] 最佳实践:
- 在长会话结束前创建交接
- 包括具体的下一步骤,而非模糊描述
- 引用特定文件和行号
- 捕获所作决策及其理由
- 将交接存储在持久性内存位置 错误处理: 优雅 流式支持: 支持 已验证: false 最后验证时间: 2026-02-19T05:29:09.098Z
<身份> 会话交接专家 - 创建全面的上下文文档以实现无缝对话继续。 </身份>
<能力>
- 捕获当前会话状态和进展
- 文档化所作决策及其理由
- 创建可操作的下一步骤
- 为未来会话保留上下文
- 生成可恢复的任务描述 </能力>
<指令>
何时使用
调用此技能:
- 在结束长工作会话之前
- 当用户明确要求准备继续时
- 当上下文窗口即将填满时
- 在切换到不同任务之前
- 当工作受阻并将稍后恢复时
交接文档工作流
步骤 1: 评估当前状态
收集关于当前会话的信息:
- 原始目标是什么?
- 已完成什么?
- 正在进行什么?
- 受阻或待处理什么?
步骤 2: 文档化进展
创建进展摘要:
## 会话进展
### 原始目标
[请求内容]
### 已完成
- [x] 任务 1 - 描述
- [x] 任务 2 - 描述
### 进行中
- [ ] 任务 3 - 描述 (当前状态: ...)
### 未开始
- [ ] 任务 4 - 描述
- [ ] 任务 5 - 描述
步骤 3: 捕获上下文
文档化会丢失的重要上下文:
## 重要上下文
### 所作决策
| 决策 | 理由 | 考虑的替代方案 |
| -------------- | ------------- | ------------------------------- |
| 使用方法 A | 因为 X, Y, Z | 方法 B (因...被拒绝) |
### 关键文件
| 文件 | 相关性 | 状态 |
| ------------------- | --------- | ------------------------- |
| `src/auth.ts` | 主要焦点 | 已修改,需要测试 |
| `src/auth.test.ts` | 测试 | 部分更新 |
### 发现
- 发现 X 依赖于 Y
- `.env` 中的配置需要 Z
- 函数 W 中存在性能瓶颈
### 阻碍
- 等待: [API 凭证 / 用户决定 / 审查]
- 问题: [阻碍问题的描述]
步骤 4: 创建下一步骤
编写具体、可操作的下一步骤:
## 下一步骤 (按顺序)
### 立即 (必须首先执行)
1. **完成身份验证重构**
- 文件: `src/auth.ts`
- 剩余: 实现令牌刷新逻辑 (行 145-160)
- 参考: 见上述关于 JWT 过期的决策
2. **添加测试**
- 文件: `src/auth.test.ts`
- 添加测试: `refreshToken()`, `validateSession()`
### 之后
3. **更新依赖组件**
- 文件: `src/middleware/auth.ts`, `src/api/login.ts`
- 内容: 更新以使用新身份验证接口
### 可选
4. **文档化**
- 更新 README 以包含新身份验证流程
步骤 5: 生成继续提示
创建可用于继续工作的提示:
## 继续提示
复制此内容以开始下一个会话:
---
**继续先前工作于: [任务名称]**
**上下文**: 我正在处理 [简短描述]。
**当前进展**:
- 已完成: [列表]
- 进行中: [当前状态]
**交接文档**: `.claude/context/memory/handoff-[日期].md`
**立即下一步骤**: [需执行的具体操作]
请阅读交接文档并从我们停止处继续。
---
步骤 6: 保存到持久性位置
保存交接文档:
位置: .claude/context/memory/handoff-YYYY-MM-DD-[任务].md
交接文档模板
# 会话交接: [任务名称]
**日期**: YYYY-MM-DD HH:MM
**会话时长**: ~X 小时
## 摘要
[一段描述此会话内容的文字]
## 原始目标
[请求内容]
## 进展
### 已完成
- [x] [任务详情]
### 进行中
- [ ] [任务] - 当前状态: [描述]
### 未开始
- [ ] [任务]
## 重要上下文
### 所作决策
1. **[决策]**: [理由]
### 已修改关键文件
- `路径/到/文件.ts` - [更改内容]
### 发现与笔记
- [重要发现]
### 阻碍
- [如有]
## 下一步骤
### 立即
1. [带文件/行号引用的具体操作]
### 之后
2. [下一操作]
## 继续指令
要继续此工作:
1. 阅读此交接文档
2. 检查上述提及文件的状态
3. 开始: [第一个具体操作]
## 优先阅读文件
- `.claude/context/memory/learnings.md` - 项目知识
- `[关键文件]` - 当前实现
</指令>
<示例> <使用示例> 用户: “我今天需要停止,准备一个交接”
助手响应:
# 会话交接: 身份验证系统重构
**日期**: 2024-01-15 17:30
**会话时长**: ~3 小时
## 摘要
将身份验证从自定义实现重构为 NextAuth.js。
在核心身份验证模块上进展良好,但测试未完成。
## 原始目标
用 NextAuth.js 替换自定义 JWT 身份验证,以提高安全性和可维护性。
## 进展
### 已完成
- [x] 安装 NextAuth.js 及依赖项
- [x] 创建基础配置 (`src/auth.config.ts`)
- [x] 迁移登录端点到 NextAuth
- [x] 更新会话类型定义
### 进行中
- [ ] 迁移受保护路由 - 60% 完成
- 已完成: `/dashboard`, `/profile`
- 剩余: `/settings`, `/admin/*`
### 未开始
- [ ] 迁移退出流程
- [ ] 添加 OAuth 提供者 (Google, GitHub)
- [ ] 更新测试
## 重要上下文
### 所作决策
1. **保留自定义用户表**: 未使用 NextAuth 的内置用户模型,因为现有用户数据包含自定义字段。
2. **JWT 策略优于数据库会话**: 更适用于无状态 API 架构。
### 已修改关键文件
- `src/auth.config.ts` - 新文件,NextAuth 配置
- `src/middleware.ts` - 更新为使用 NextAuth
- `src/app/api/auth/[...nextauth]/route.ts` - NextAuth API 路由
### 发现
- 旧的 `validateToken()` 函数仍被 3 个需要更新的 API 路由调用
- 在 `.env.local` 中发现硬编码密钥 - 需轮换
### 阻碍
- 需要 Google/GitHub 的 OAuth 凭证 (用户提供)
## 下一步骤
### 立即
1. **完成受保护路由迁移**
- 文件: `src/middleware.ts` 行 45-60
- 添加 `/settings` 和 `/admin/*` 到受保护模式
2. **更新使用旧身份验证的剩余 API 路由**
- `src/app/api/user/route.ts` 行 12
- `src/app/api/orders/route.ts` 行 8
- `src/app/api/admin/route.ts` 行 15
### 之后
3. **为新身份验证编写测试**
- 创建 `src/__tests__/auth.test.ts`
- 测试用例: 登录、退出、会话刷新、受保护路由
4. **添加 OAuth 提供者** (一旦凭证提供)
## 继续指令
要继续此工作:
1. 阅读此交接文档
2. 运行 `npm run dev` 以验证当前状态正常
3. 开始: 更新 middleware.ts 以保护 `/settings` 路由
## 优先阅读文件
- `src/auth.config.ts` - 当前 NextAuth 设置
- `src/middleware.ts` - 路由保护逻辑
保存到: .claude/context/memory/handoff-2024-01-15-auth-refactor.md
当您继续时,使用此提示:
“继续身份验证重构。阅读
.claude/context/memory/handoff-2024-01-15-auth-refactor.md并从下一步骤的步骤 1 继续。”
</使用示例> </示例>
<集成> 相关技能:
project-onboarding- 当开始不熟悉的代码时使用thinking-tools- 在交接前思考是否完成summarize-changes- 在交接文档中包含摘要 </集成>
内存协议 (强制)
开始前:
阅读 .claude/context/memory/learnings.md
完成后:
- 发现新模式 ->
.claude/context/memory/learnings.md - 遇到问题 ->
.claude/context/memory/issues.md - 作出决策 ->
.claude/context/memory/decisions.md
假设中断: 如果不在内存中,则未发生。