agent-configs 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +223 -0
  2. package/agents/architect.md +211 -0
  3. package/agents/code-reviewer.md +104 -0
  4. package/agents/planner.md +119 -0
  5. package/agents/refactor-cleaner.md +306 -0
  6. package/agents/security-reviewer.md +545 -0
  7. package/agents/tdd-guide.md +280 -0
  8. package/bundles/bk-chat-bundle/README.md +48 -0
  9. package/bundles/bk-chat-bundle/manifest.json +10 -0
  10. package/bundles/continuous-learning/.claude/commands/evolve.md +190 -0
  11. package/bundles/continuous-learning/.claude/commands/instinct-status.md +64 -0
  12. package/bundles/continuous-learning/.claude/commands/learn.md +83 -0
  13. package/bundles/continuous-learning/.claude/hooks/learning-end.js +85 -0
  14. package/bundles/continuous-learning/.claude/hooks/observe.js +131 -0
  15. package/bundles/continuous-learning/.claude/lib/learning.js +559 -0
  16. package/bundles/continuous-learning/.claude/lib/utils.js +312 -0
  17. package/bundles/continuous-learning/.claude/skills/continuous-learning/SKILL.md +200 -0
  18. package/bundles/continuous-learning/.cursor/hooks/learning-end.js +102 -0
  19. package/bundles/continuous-learning/.cursor/rules/continuous-learning.mdc +34 -0
  20. package/bundles/continuous-learning/.cursor/skills/continuous-learning/SKILL.md +77 -0
  21. package/bundles/continuous-learning/README.md +159 -0
  22. package/bundles/continuous-learning/manifest.json +51 -0
  23. package/bundles/planning-bundle/README.md +34 -0
  24. package/bundles/planning-bundle/manifest.json +10 -0
  25. package/bundles/review-bundle/README.md +43 -0
  26. package/bundles/review-bundle/manifest.json +11 -0
  27. package/bundles/shared-memory/.claude/commands/list-sessions.md +124 -0
  28. package/bundles/shared-memory/.claude/commands/load-session.md +169 -0
  29. package/bundles/shared-memory/.claude/commands/save-session.md +137 -0
  30. package/bundles/shared-memory/.claude/hooks/memory-compact.js +43 -0
  31. package/bundles/shared-memory/.claude/hooks/memory-end.js +42 -0
  32. package/bundles/shared-memory/.claude/hooks/memory-start.js +59 -0
  33. package/bundles/shared-memory/.claude/lib/memory.js +416 -0
  34. package/bundles/shared-memory/.claude/lib/utils.js +209 -0
  35. package/bundles/shared-memory/.claude/skills/shared-memory/SKILL.md +183 -0
  36. package/bundles/shared-memory/.cursor/hooks/memory-start.js +42 -0
  37. package/bundles/shared-memory/.cursor/rules/shared-memory.mdc +37 -0
  38. package/bundles/shared-memory/.cursor/skills/shared-memory/SKILL.md +183 -0
  39. package/bundles/tdd-bundle/README.md +33 -0
  40. package/bundles/tdd-bundle/manifest.json +10 -0
  41. package/cli.js +978 -0
  42. package/commands/build-fix.md +29 -0
  43. package/commands/code-review.md +40 -0
  44. package/commands/e2e.md +363 -0
  45. package/commands/learn.md +114 -0
  46. package/commands/plan.md +113 -0
  47. package/commands/refactor-clean.md +28 -0
  48. package/commands/tdd.md +326 -0
  49. package/commands/test-coverage.md +27 -0
  50. package/commands/update-codemaps.md +17 -0
  51. package/commands/update-docs.md +31 -0
  52. package/configs.json +158 -0
  53. package/hooks/hooks.json +101 -0
  54. package/package.json +58 -0
  55. package/rules/agents.md +49 -0
  56. package/rules/coding-style.md +70 -0
  57. package/rules/git-workflow.md +45 -0
  58. package/rules/hooks.md +46 -0
  59. package/rules/patterns.md +55 -0
  60. package/rules/performance.md +47 -0
  61. package/rules/security.md +36 -0
  62. package/rules/testing.md +30 -0
  63. package/skills/ai-config-architect/SKILL.md +59 -0
  64. package/skills/ai-config-architect/references/agents.md +77 -0
  65. package/skills/ai-config-architect/references/commands.md +66 -0
  66. package/skills/ai-config-architect/references/hooks.md +70 -0
  67. package/skills/ai-config-architect/references/patterns.md +66 -0
  68. package/skills/ai-config-architect/references/platforms.md +82 -0
  69. package/skills/ai-config-architect/references/rules.md +66 -0
  70. package/skills/ai-config-architect/references/skills.md +67 -0
  71. package/skills/bk-chat-helper/SKILL.md +398 -0
  72. package/skills/bk-chat-helper/references/api-reference.md +606 -0
  73. package/skills/bk-chat-helper/references/examples.md +789 -0
  74. package/skills/bk-chat-helper/references/integration-guide.md +583 -0
  75. package/skills/bk-chat-x/SKILL.md +400 -0
  76. package/skills/bk-chat-x/references/components-api.md +340 -0
  77. package/skills/bk-chat-x/references/examples.md +386 -0
  78. package/skills/bk-chat-x/references/shortcuts-guide.md +375 -0
  79. package/skills/coding-standards/SKILL.md +523 -0
  80. package/skills/security-review/SKILL.md +497 -0
  81. package/skills/security-review/references/cloud-infrastructure-security.md +361 -0
  82. package/skills/strategic-compact/SKILL.md +66 -0
  83. package/skills/strategic-compact/scripts/suggest-compact.sh +52 -0
  84. package/skills/tdd-workflow/SKILL.md +412 -0
  85. package/skills/verification-loop/SKILL.md +128 -0
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Shared Memory - 自包含工具函数库
3
+ *
4
+ * 这个文件包含所有需要的工具函数,不依赖任何外部模块。
5
+ * 可以直接复制整个 .claude 目录到任何项目使用。
6
+ */
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+ const os = require('os');
11
+ const { execSync } = require('child_process');
12
+
13
+ // ============== 平台检测 ==============
14
+
15
+ const isWindows = process.platform === 'win32';
16
+
17
+ // ============== 目录工具 ==============
18
+
19
+ /**
20
+ * 确保目录存在(递归创建)
21
+ */
22
+ function ensureDir(dirPath) {
23
+ if (!fs.existsSync(dirPath)) {
24
+ fs.mkdirSync(dirPath, { recursive: true });
25
+ }
26
+ return dirPath;
27
+ }
28
+
29
+ // ============== 日期时间工具 ==============
30
+
31
+ /**
32
+ * 获取当前日期 YYYY-MM-DD 格式
33
+ */
34
+ function getDateString() {
35
+ const now = new Date();
36
+ const year = now.getFullYear();
37
+ const month = String(now.getMonth() + 1).padStart(2, '0');
38
+ const day = String(now.getDate()).padStart(2, '0');
39
+ return `${year}-${month}-${day}`;
40
+ }
41
+
42
+ /**
43
+ * 获取当前时间 HH:MM 格式
44
+ */
45
+ function getTimeString() {
46
+ const now = new Date();
47
+ const hours = String(now.getHours()).padStart(2, '0');
48
+ const minutes = String(now.getMinutes()).padStart(2, '0');
49
+ return `${hours}:${minutes}`;
50
+ }
51
+
52
+ /**
53
+ * 获取短会话 ID(从环境变量)
54
+ */
55
+ function getSessionIdShort(fallback = 'default') {
56
+ const sessionId = process.env.CLAUDE_SESSION_ID;
57
+ if (!sessionId || sessionId.length === 0) {
58
+ return fallback;
59
+ }
60
+ return sessionId.slice(-8);
61
+ }
62
+
63
+ // ============== 文件操作 ==============
64
+
65
+ /**
66
+ * 安全读取文件
67
+ */
68
+ function readFile(filePath) {
69
+ try {
70
+ return fs.readFileSync(filePath, 'utf8');
71
+ } catch {
72
+ return null;
73
+ }
74
+ }
75
+
76
+ /**
77
+ * 写入文件(自动创建目录)
78
+ */
79
+ function writeFile(filePath, content) {
80
+ ensureDir(path.dirname(filePath));
81
+ fs.writeFileSync(filePath, content, 'utf8');
82
+ }
83
+
84
+ /**
85
+ * 追加到文件
86
+ */
87
+ function appendFile(filePath, content) {
88
+ ensureDir(path.dirname(filePath));
89
+ fs.appendFileSync(filePath, content, 'utf8');
90
+ }
91
+
92
+ /**
93
+ * 查找匹配的文件
94
+ * @param {string} dir - 目录
95
+ * @param {string} pattern - 文件模式 (如 "*.md")
96
+ * @param {object} options - { maxAge: days }
97
+ */
98
+ function findFiles(dir, pattern, options = {}) {
99
+ const { maxAge = null } = options;
100
+ const results = [];
101
+
102
+ if (!fs.existsSync(dir)) {
103
+ return results;
104
+ }
105
+
106
+ const regexPattern = pattern
107
+ .replace(/\./g, '\\.')
108
+ .replace(/\*/g, '.*')
109
+ .replace(/\?/g, '.');
110
+ const regex = new RegExp(`^${regexPattern}$`);
111
+
112
+ try {
113
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
114
+
115
+ for (const entry of entries) {
116
+ const fullPath = path.join(dir, entry.name);
117
+
118
+ if (entry.isFile() && regex.test(entry.name)) {
119
+ const stats = fs.statSync(fullPath);
120
+
121
+ if (maxAge !== null) {
122
+ const ageInDays = (Date.now() - stats.mtimeMs) / (1000 * 60 * 60 * 24);
123
+ if (ageInDays <= maxAge) {
124
+ results.push({ path: fullPath, mtime: stats.mtimeMs });
125
+ }
126
+ } else {
127
+ results.push({ path: fullPath, mtime: stats.mtimeMs });
128
+ }
129
+ }
130
+ }
131
+ } catch {
132
+ // 忽略权限错误
133
+ }
134
+
135
+ // 按修改时间倒序排列
136
+ results.sort((a, b) => b.mtime - a.mtime);
137
+
138
+ return results;
139
+ }
140
+
141
+ // ============== 日志输出 ==============
142
+
143
+ /**
144
+ * 输出到 stdout(Hook 输出需要使用 stdout 才能被用户看到)
145
+ * stderr 只在 --debug 模式下可见
146
+ */
147
+ function log(message) {
148
+ console.log(message);
149
+ }
150
+
151
+ // ============== 工作区检测 ==============
152
+
153
+ /**
154
+ * 获取工作区根目录
155
+ */
156
+ function getWorkspaceRoot() {
157
+ // 优先使用 Claude Code 提供的项目目录
158
+ if (process.env.CLAUDE_PROJECT_DIR) {
159
+ return process.env.CLAUDE_PROJECT_DIR;
160
+ }
161
+
162
+ // 尝试 git 根目录
163
+ try {
164
+ const gitRoot = execSync('git rev-parse --show-toplevel', {
165
+ encoding: 'utf8',
166
+ stdio: ['pipe', 'pipe', 'pipe']
167
+ }).trim();
168
+ if (gitRoot) return gitRoot;
169
+ } catch {
170
+ // 不是 git 仓库
171
+ }
172
+
173
+ // 回退到 PWD 或 cwd
174
+ return process.env.PWD || process.cwd();
175
+ }
176
+
177
+ /**
178
+ * 获取当前项目名称
179
+ */
180
+ function getCurrentProject(workspace) {
181
+ const root = workspace || getWorkspaceRoot();
182
+ return path.basename(root);
183
+ }
184
+
185
+ module.exports = {
186
+ // 平台
187
+ isWindows,
188
+
189
+ // 目录
190
+ ensureDir,
191
+
192
+ // 日期时间
193
+ getDateString,
194
+ getTimeString,
195
+ getSessionIdShort,
196
+
197
+ // 文件
198
+ readFile,
199
+ writeFile,
200
+ appendFile,
201
+ findFiles,
202
+
203
+ // 日志
204
+ log,
205
+
206
+ // 工作区
207
+ getWorkspaceRoot,
208
+ getCurrentProject
209
+ };
@@ -0,0 +1,183 @@
1
+ ---
2
+ name: shared-memory
3
+ description: 跨会话记忆管理能力。让 AI 具备记忆保存和加载的意识,在适当时机主动提醒用户保存重要信息或建议加载相关上下文。使用场景:完成重要任务、做出关键决策、解决复杂问题、对话较长、用户结束工作时。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # Shared Memory - 跨会话记忆管理
8
+
9
+ ## 这是什么
10
+
11
+ 这是一个让你具备"记忆管理意识"的能力。作为 AI 助手,你应该:
12
+
13
+ 1. **意识到上下文的有限性** - 知道会话会结束,重要信息需要保存
14
+ 2. **主动提醒保存** - 在适当时机提醒用户保存进度
15
+ 3. **知道如何加载上下文** - 新会话开始时,引导用户加载相关记忆
16
+
17
+ ## 记忆文件位置
18
+
19
+ 所有记忆文件存储在**项目级目录**,便于直接 `@` 引用:
20
+
21
+ ```
22
+ <项目根目录>/
23
+ └── .claude/
24
+ └── memory/
25
+ ├── context.md # 项目持久上下文(长期)
26
+ └── sessions/
27
+ ├── 2026-01-27-feature-auth.md # 会话记忆
28
+ ├── 2026-01-26-bug-fix.md
29
+ └── ...
30
+ ```
31
+
32
+ **用户可以直接使用**:`@.claude/memory/sessions/2026-01-27-feature-auth.md`
33
+
34
+ ---
35
+
36
+ ## 何时提醒保存
37
+
38
+ 在以下情况,**主动建议**用户保存会话:
39
+
40
+ ### 触发场景
41
+
42
+ 1. **完成重要任务或里程碑**
43
+ - 完成了一个功能实现
44
+ - 完成了一轮重构
45
+ - 解决了一个复杂 bug
46
+
47
+ 2. **做出关键技术决策**
48
+ - 选择了某个技术方案
49
+ - 确定了架构设计
50
+ - 做出了重要的权衡取舍
51
+
52
+ 3. **解决了复杂问题**
53
+ - 调试了一个棘手的问题
54
+ - 发现了重要的 root cause
55
+ - 找到了有效的解决方案
56
+
57
+ 4. **对话较长(接近上下文限制)**
58
+ - 感觉到对话历史很长
59
+ - 已经讨论了很多内容
60
+ - 上下文可能快要压缩
61
+
62
+ 5. **用户表示要结束工作**
63
+ - "今天先到这里"
64
+ - "我要下班了"
65
+ - "明天继续"
66
+ - "先休息一下"
67
+
68
+ ### 提醒方式
69
+
70
+ ```
71
+ 💡 建议保存当前进度:
72
+
73
+ /save-session <简短描述>
74
+
75
+ 这样下次可以继续,不会丢失上下文。
76
+ ```
77
+
78
+ 或更简洁:
79
+
80
+ ```
81
+ 💡 进展不错!建议 `/save-session feature-auth` 保存进度。
82
+ ```
83
+
84
+ ---
85
+
86
+ ## 何时建议加载
87
+
88
+ 在以下情况,**询问是否需要**加载之前的记忆:
89
+
90
+ ### 触发场景
91
+
92
+ 1. **会话刚开始时**
93
+ - 如果 Hook 提示有可用记忆
94
+ - 主动询问是否需要加载
95
+
96
+ 2. **用户提到"继续之前的工作"**
97
+ - "继续昨天的"
98
+ - "接着上次的做"
99
+ - "上次做到哪了"
100
+
101
+ 3. **用户提及之前讨论的内容**
102
+ - "之前那个 bug"
103
+ - "我们讨论过的那个方案"
104
+ - "上次的决定"
105
+
106
+ ### 询问方式
107
+
108
+ ```
109
+ 我注意到有之前的会话记忆,需要我加载吗?
110
+
111
+ - 使用 `/list-sessions` 查看所有记忆
112
+ - 使用 `/load-session <名称>` 加载特定记忆
113
+ - 或直接 `@.claude/memory/sessions/xxx.md` 引用
114
+ ```
115
+
116
+ ---
117
+
118
+ ## 记忆文件格式
119
+
120
+ 保存的记忆文件应包含以下结构化信息:
121
+
122
+ ```markdown
123
+ # 会话: <简短描述>
124
+
125
+ **日期**: YYYY-MM-DD HH:MM
126
+ **项目**: <项目名称>
127
+ **路径**: .claude/memory/sessions/YYYY-MM-DD-<name>.md
128
+ **会话ID**: <短ID>
129
+
130
+ ## 已完成
131
+ - [具体完成的任务]
132
+
133
+ ## 进行中
134
+ - [正在进行的任务] - 当前状态: [描述]
135
+
136
+ ## 关键决策
137
+ - [决策] - 原因: [为什么这样决定]
138
+
139
+ ## 遇到的问题
140
+ - [问题] - 解决方案: [如何解决的]
141
+
142
+ ## 下次继续
143
+ - [ ] 待办事项1
144
+ - [ ] 待办事项2
145
+
146
+ ## 需要加载的文件
147
+ - `path/to/file` - [为什么需要]
148
+
149
+ ## 相关上下文
150
+ [任何额外的重要背景信息]
151
+ ```
152
+
153
+ ---
154
+
155
+ ## 相关命令
156
+
157
+ | 命令 | 说明 |
158
+ |------|------|
159
+ | `/save-session [name]` | 保存当前会话状态 |
160
+ | `/load-session [name]` | 加载指定会话记忆 |
161
+ | `/list-sessions` | 列出所有可用的会话记忆 |
162
+
163
+ ---
164
+
165
+ ## 最佳实践
166
+
167
+ ### 保存时机
168
+
169
+ - **宁可多保存**:不确定是否需要保存时,建议保存
170
+ - **有意义的命名**:使用描述性名称,如 `feature-auth`、`bug-fix-login`
171
+ - **及时保存**:完成阶段性工作后立即保存
172
+
173
+ ### 加载时机
174
+
175
+ - **按需加载**:不要主动读取所有记忆,让用户选择
176
+ - **展示摘要**:加载后先展示摘要,确认是否需要深入
177
+ - **提示相关文件**:如果记忆中有"需要加载的文件",询问是否读取
178
+
179
+ ### 与用户协作
180
+
181
+ - **不要过度打扰**:不是每次对话都需要提醒保存
182
+ - **尊重用户选择**:用户拒绝保存时不要反复提醒
183
+ - **主动但不强制**:建议是建议,最终由用户决定
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Session Memory Start Hook for Cursor
4
+ *
5
+ * Checks for recent session memory files and outputs a reminder.
6
+ */
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+
11
+ const MEMORY_DIR = path.join(process.cwd(), '.claude', 'memory', 'sessions');
12
+
13
+ function findRecentSessions(dir, maxAgeDays = 7) {
14
+ if (!fs.existsSync(dir)) return [];
15
+
16
+ const now = Date.now();
17
+ const maxAge = maxAgeDays * 24 * 60 * 60 * 1000;
18
+
19
+ return fs.readdirSync(dir)
20
+ .filter(f => f.endsWith('.md'))
21
+ .map(f => {
22
+ const fullPath = path.join(dir, f);
23
+ const stat = fs.statSync(fullPath);
24
+ return { name: f, path: fullPath, mtime: stat.mtime.getTime() };
25
+ })
26
+ .filter(f => now - f.mtime < maxAge)
27
+ .sort((a, b) => b.mtime - a.mtime);
28
+ }
29
+
30
+ function main() {
31
+ const sessions = findRecentSessions(MEMORY_DIR);
32
+
33
+ if (sessions.length > 0) {
34
+ const latest = sessions[0];
35
+ console.error(`【会话记忆提示 - 请在回复开头告知用户】`);
36
+ console.error(`📝 检测到 ${sessions.length} 个最近的会话记忆`);
37
+ console.error(` 最近: ${latest.path}`);
38
+ console.error(` 💡 使用 /list-sessions 查看,/load-session 加载`);
39
+ }
40
+ }
41
+
42
+ main();
@@ -0,0 +1,37 @@
1
+ ---
2
+ description: 跨会话记忆管理 - 在会话开始时检查历史记忆
3
+ globs:
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # 跨会话记忆管理
8
+
9
+ ## 会话开始时(重要)
10
+
11
+ 当你收到包含「会话记忆提示」的 additional_context 时,**必须在回复的最开头**输出该提示内容,格式如下:
12
+
13
+ ```
14
+ 📝 检测到 X 个最近的会话记忆
15
+ 最近: .claude/memory/sessions/xxx.md
16
+ 💡 使用 /list-sessions 查看,/load-session 加载
17
+ ```
18
+
19
+ 然后再回答用户的问题。
20
+
21
+ 如果用户的问题与之前的工作相关,主动建议加载相关记忆。
22
+
23
+ ## 会话结束时
24
+
25
+ 当检测到以下情况时,建议用户保存记忆:
26
+ - 完成了重要的功能实现
27
+ - 做出了关键的技术决策
28
+ - 解决了复杂的问题
29
+ - 对话较长且包含有价值的上下文
30
+
31
+ 使用 `/save-session <name>` 保存会话。
32
+
33
+ ## 相关命令
34
+
35
+ - `/save-session <name>` - 保存当前会话
36
+ - `/load-session [name]` - 加载历史会话
37
+ - `/list-sessions` - 列出所有可用记忆
@@ -0,0 +1,183 @@
1
+ ---
2
+ name: shared-memory
3
+ description: 跨会话记忆管理能力。让 AI 具备记忆保存和加载的意识,在适当时机主动提醒用户保存重要信息或建议加载相关上下文。使用场景:完成重要任务、做出关键决策、解决复杂问题、对话较长、用户结束工作时。
4
+ version: 1.0.0
5
+ ---
6
+
7
+ # Shared Memory - 跨会话记忆管理
8
+
9
+ ## 这是什么
10
+
11
+ 这是一个让你具备"记忆管理意识"的能力。作为 AI 助手,你应该:
12
+
13
+ 1. **意识到上下文的有限性** - 知道会话会结束,重要信息需要保存
14
+ 2. **主动提醒保存** - 在适当时机提醒用户保存进度
15
+ 3. **知道如何加载上下文** - 新会话开始时,引导用户加载相关记忆
16
+
17
+ ## 记忆文件位置
18
+
19
+ 所有记忆文件存储在**项目级目录**,便于直接 `@` 引用:
20
+
21
+ ```
22
+ <项目根目录>/
23
+ └── .claude/
24
+ └── memory/
25
+ ├── context.md # 项目持久上下文(长期)
26
+ └── sessions/
27
+ ├── 2026-01-27-feature-auth.md # 会话记忆
28
+ ├── 2026-01-26-bug-fix.md
29
+ └── ...
30
+ ```
31
+
32
+ **用户可以直接使用**:`@.claude/memory/sessions/2026-01-27-feature-auth.md`
33
+
34
+ ---
35
+
36
+ ## 何时提醒保存
37
+
38
+ 在以下情况,**主动建议**用户保存会话:
39
+
40
+ ### 触发场景
41
+
42
+ 1. **完成重要任务或里程碑**
43
+ - 完成了一个功能实现
44
+ - 完成了一轮重构
45
+ - 解决了一个复杂 bug
46
+
47
+ 2. **做出关键技术决策**
48
+ - 选择了某个技术方案
49
+ - 确定了架构设计
50
+ - 做出了重要的权衡取舍
51
+
52
+ 3. **解决了复杂问题**
53
+ - 调试了一个棘手的问题
54
+ - 发现了重要的 root cause
55
+ - 找到了有效的解决方案
56
+
57
+ 4. **对话较长(接近上下文限制)**
58
+ - 感觉到对话历史很长
59
+ - 已经讨论了很多内容
60
+ - 上下文可能快要压缩
61
+
62
+ 5. **用户表示要结束工作**
63
+ - "今天先到这里"
64
+ - "我要下班了"
65
+ - "明天继续"
66
+ - "先休息一下"
67
+
68
+ ### 提醒方式
69
+
70
+ ```
71
+ 💡 建议保存当前进度:
72
+
73
+ /save-session <简短描述>
74
+
75
+ 这样下次可以继续,不会丢失上下文。
76
+ ```
77
+
78
+ 或更简洁:
79
+
80
+ ```
81
+ 💡 进展不错!建议 `/save-session feature-auth` 保存进度。
82
+ ```
83
+
84
+ ---
85
+
86
+ ## 何时建议加载
87
+
88
+ 在以下情况,**询问是否需要**加载之前的记忆:
89
+
90
+ ### 触发场景
91
+
92
+ 1. **会话刚开始时**
93
+ - 如果 Hook 提示有可用记忆
94
+ - 主动询问是否需要加载
95
+
96
+ 2. **用户提到"继续之前的工作"**
97
+ - "继续昨天的"
98
+ - "接着上次的做"
99
+ - "上次做到哪了"
100
+
101
+ 3. **用户提及之前讨论的内容**
102
+ - "之前那个 bug"
103
+ - "我们讨论过的那个方案"
104
+ - "上次的决定"
105
+
106
+ ### 询问方式
107
+
108
+ ```
109
+ 我注意到有之前的会话记忆,需要我加载吗?
110
+
111
+ - 使用 `/list-sessions` 查看所有记忆
112
+ - 使用 `/load-session <名称>` 加载特定记忆
113
+ - 或直接 `@.claude/memory/sessions/xxx.md` 引用
114
+ ```
115
+
116
+ ---
117
+
118
+ ## 记忆文件格式
119
+
120
+ 保存的记忆文件应包含以下结构化信息:
121
+
122
+ ```markdown
123
+ # 会话: <简短描述>
124
+
125
+ **日期**: YYYY-MM-DD HH:MM
126
+ **项目**: <项目名称>
127
+ **路径**: .claude/memory/sessions/YYYY-MM-DD-<name>.md
128
+ **会话ID**: <短ID>
129
+
130
+ ## 已完成
131
+ - [具体完成的任务]
132
+
133
+ ## 进行中
134
+ - [正在进行的任务] - 当前状态: [描述]
135
+
136
+ ## 关键决策
137
+ - [决策] - 原因: [为什么这样决定]
138
+
139
+ ## 遇到的问题
140
+ - [问题] - 解决方案: [如何解决的]
141
+
142
+ ## 下次继续
143
+ - [ ] 待办事项1
144
+ - [ ] 待办事项2
145
+
146
+ ## 需要加载的文件
147
+ - `path/to/file` - [为什么需要]
148
+
149
+ ## 相关上下文
150
+ [任何额外的重要背景信息]
151
+ ```
152
+
153
+ ---
154
+
155
+ ## 相关命令
156
+
157
+ | 命令 | 说明 |
158
+ |------|------|
159
+ | `/save-session [name]` | 保存当前会话状态 |
160
+ | `/load-session [name]` | 加载指定会话记忆 |
161
+ | `/list-sessions` | 列出所有可用的会话记忆 |
162
+
163
+ ---
164
+
165
+ ## 最佳实践
166
+
167
+ ### 保存时机
168
+
169
+ - **宁可多保存**:不确定是否需要保存时,建议保存
170
+ - **有意义的命名**:使用描述性名称,如 `feature-auth`、`bug-fix-login`
171
+ - **及时保存**:完成阶段性工作后立即保存
172
+
173
+ ### 加载时机
174
+
175
+ - **按需加载**:不要主动读取所有记忆,让用户选择
176
+ - **展示摘要**:加载后先展示摘要,确认是否需要深入
177
+ - **提示相关文件**:如果记忆中有"需要加载的文件",询问是否读取
178
+
179
+ ### 与用户协作
180
+
181
+ - **不要过度打扰**:不是每次对话都需要提醒保存
182
+ - **尊重用户选择**:用户拒绝保存时不要反复提醒
183
+ - **主动但不强制**:建议是建议,最终由用户决定
@@ -0,0 +1,33 @@
1
+ # TDD Bundle
2
+
3
+ 测试驱动开发(TDD)完整工作流配置包。
4
+
5
+ ## 包含内容
6
+
7
+ - **Command**: `/tdd` - TDD 工作流命令,执行 RED-GREEN-REFACTOR 循环
8
+ - **Skill**: `tdd-workflow` - TDD 最佳实践和测试模式
9
+ - **Agent**: `tdd-guide` - TDD 指导专家子代理
10
+
11
+ ## 使用方式
12
+
13
+ ```bash
14
+ # 安装 TDD bundle
15
+ npx agent-configs install tdd-bundle
16
+
17
+ # 或单独安装
18
+ npx agent-configs install tdd
19
+ npx agent-configs install tdd-workflow
20
+ npx agent-configs install tdd-guide
21
+ ```
22
+
23
+ ## TDD 工作流
24
+
25
+ 1. **RED** - 写一个失败的测试
26
+ 2. **GREEN** - 写最少的代码让测试通过
27
+ 3. **REFACTOR** - 重构代码,保持测试通过
28
+
29
+ ## 相关命令
30
+
31
+ - `/tdd` - 启动 TDD 工作流
32
+ - `/test-coverage` - 检查测试覆盖率
33
+ - `/e2e` - 运行 E2E 测试
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "tdd-bundle",
3
+ "description": "TDD 完整工作流 - 测试驱动开发的命令、技能和代理",
4
+ "version": "1.0.0",
5
+ "includes": [
6
+ { "type": "command", "name": "tdd", "path": "commands/tdd.md" },
7
+ { "type": "skill", "name": "tdd-workflow", "path": "skills/tdd-workflow/" },
8
+ { "type": "agent", "name": "tdd-guide", "path": "agents/tdd-guide.md" }
9
+ ]
10
+ }