@shirayner/ace 0.1.0-snapshot.1

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 (58) hide show
  1. package/bin/ace.js +39 -0
  2. package/package.json +42 -0
  3. package/src/commands/doctor.js +86 -0
  4. package/src/commands/init.js +98 -0
  5. package/src/commands/list.js +67 -0
  6. package/src/core/constants.js +106 -0
  7. package/src/core/installer.js +206 -0
  8. package/src/core/merger.js +103 -0
  9. package/templates/CLAUDE.md +16 -0
  10. package/templates/commands/report.md +63 -0
  11. package/templates/hookify/hookify.block-dangerous-ops.local.md +16 -0
  12. package/templates/hookify/hookify.protect-secrets.local.md +17 -0
  13. package/templates/hookify/hookify.require-verification.local.md +13 -0
  14. package/templates/hooks/java-compile-check.sh +106 -0
  15. package/templates/memory/MEMORY.md +4 -0
  16. package/templates/memory/roles/backend.md +11 -0
  17. package/templates/memory/roles/client.md +11 -0
  18. package/templates/memory/roles/frontend.md +11 -0
  19. package/templates/memory/roles/fullstack.md +11 -0
  20. package/templates/rules/clean-code.md +33 -0
  21. package/templates/rules/code-quality.md +74 -0
  22. package/templates/rules/context-hygiene.md +29 -0
  23. package/templates/rules/memory-policy.md +30 -0
  24. package/templates/rules/reporting.md +9 -0
  25. package/templates/rules/task-recovery.md +13 -0
  26. package/templates/rules/thinking.md +19 -0
  27. package/templates/settings.json +11 -0
  28. package/templates/skills/auto-goal/SKILL.md +188 -0
  29. package/templates/skills/coding/SKILL.md +251 -0
  30. package/templates/skills/coding/references/code-review-guide.md +137 -0
  31. package/templates/skills/coding/references/code-smells.md +201 -0
  32. package/templates/skills/coding/references/implement-guide.md +123 -0
  33. package/templates/skills/coding/references/unit-test-guide.md +211 -0
  34. package/templates/skills/skill-creator/LICENSE.txt +202 -0
  35. package/templates/skills/skill-creator/SKILL.md +479 -0
  36. package/templates/skills/skill-creator/agents/analyzer.md +274 -0
  37. package/templates/skills/skill-creator/agents/comparator.md +202 -0
  38. package/templates/skills/skill-creator/agents/grader.md +223 -0
  39. package/templates/skills/skill-creator/assets/eval_review.html +146 -0
  40. package/templates/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  41. package/templates/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  42. package/templates/skills/skill-creator/references/schemas.md +430 -0
  43. package/templates/skills/skill-creator/scripts/__init__.py +0 -0
  44. package/templates/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  45. package/templates/skills/skill-creator/scripts/generate_report.py +326 -0
  46. package/templates/skills/skill-creator/scripts/improve_description.py +248 -0
  47. package/templates/skills/skill-creator/scripts/package_skill.py +136 -0
  48. package/templates/skills/skill-creator/scripts/quick_validate.py +103 -0
  49. package/templates/skills/skill-creator/scripts/run_eval.py +310 -0
  50. package/templates/skills/skill-creator/scripts/run_loop.py +332 -0
  51. package/templates/skills/skill-creator/scripts/utils.py +47 -0
  52. package/templates/skills/skill-optimize/SKILL.md +287 -0
  53. package/templates/skills/skill-optimize/references/.claude/settings.local.json +7 -0
  54. package/templates/skills/skill-optimize/references/anthropic-design-philosophy.md +250 -0
  55. package/templates/skills/skill-optimize/references/auto-goal-optimization-directions.md +130 -0
  56. package/templates/skills/skill-optimize/references/cross-disciplinary-insights.md +211 -0
  57. package/templates/skills/skill-optimize/references/quality-checklist.md +170 -0
  58. package/templates/skills/skill-optimize/references/theory-foundations.md +201 -0
@@ -0,0 +1,103 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import deepmerge from 'deepmerge';
4
+
5
+ /**
6
+ * Merge CLAUDE.md: append missing @references from template into existing file.
7
+ * Preserves all existing content, only adds new @references.
8
+ */
9
+ export function mergeClaudeMd(existingContent, templateContent) {
10
+ const existingRefs = extractRefs(existingContent);
11
+ const templateRefs = extractRefs(templateContent);
12
+
13
+ const missingRefs = templateRefs.filter(ref => !existingRefs.includes(ref));
14
+
15
+ if (missingRefs.length === 0) {
16
+ return { content: existingContent, added: [] };
17
+ }
18
+
19
+ // Append missing references at the end with a section marker
20
+ const additions = missingRefs.map(ref => {
21
+ const line = findRefLine(templateContent, ref);
22
+ return line || `- @${ref}`;
23
+ });
24
+
25
+ const appendSection = [
26
+ '',
27
+ '## Added by ace',
28
+ ...additions,
29
+ '',
30
+ ].join('\n');
31
+
32
+ return {
33
+ content: existingContent.trimEnd() + '\n' + appendSection,
34
+ added: missingRefs,
35
+ };
36
+ }
37
+
38
+ function extractRefs(content) {
39
+ const refPattern = /@~?\/?\.?claude\/[^\s)]+/g;
40
+ const matches = content.match(refPattern) || [];
41
+ return matches.map(ref => ref.replace(/^@/, ''));
42
+ }
43
+
44
+ function findRefLine(content, ref) {
45
+ const lines = content.split('\n');
46
+ return lines.find(line => line.includes(ref));
47
+ }
48
+
49
+ /**
50
+ * Deep merge settings.json: add hooks, plugins, keep existing permissions.
51
+ * Uses array-append strategy for hooks (deduplicated by matcher).
52
+ */
53
+ export function mergeSettingsJson(existing, template) {
54
+ const merged = deepmerge(existing, template, {
55
+ arrayMerge: mergeHooksArrays,
56
+ customMerge: (key) => {
57
+ // For these keys, template should not override existing
58
+ if (key === 'model' || key === 'theme' || key === 'locale') {
59
+ return (a, _b) => a;
60
+ }
61
+ return undefined;
62
+ },
63
+ });
64
+
65
+ return merged;
66
+ }
67
+
68
+ /**
69
+ * Custom array merge for hooks: deduplicate by matcher field.
70
+ */
71
+ function mergeHooksArrays(target, source) {
72
+ const result = [...target];
73
+ for (const item of source) {
74
+ const exists = target.some(t =>
75
+ t.matcher === item.matcher &&
76
+ JSON.stringify(t.hooks) === JSON.stringify(item.hooks)
77
+ );
78
+ if (!exists) {
79
+ result.push(item);
80
+ }
81
+ }
82
+ return result;
83
+ }
84
+
85
+ /**
86
+ * Check if a file or directory exists at the target path.
87
+ */
88
+ export async function conflictCheck(targetPath) {
89
+ return fs.pathExists(targetPath);
90
+ }
91
+
92
+ /**
93
+ * Create a backup of the target file before modifying.
94
+ */
95
+ export async function backupFile(filePath) {
96
+ if (await fs.pathExists(filePath)) {
97
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
98
+ const backupPath = `${filePath}.ace-backup.${timestamp}`;
99
+ await fs.copy(filePath, backupPath);
100
+ return backupPath;
101
+ }
102
+ return null;
103
+ }
@@ -0,0 +1,16 @@
1
+ # 全局配置索引
2
+
3
+ ## 核心原则
4
+ - @~/.claude/rules/thinking.md - 深度思考原则(序验深广辨简)
5
+
6
+ ## 代码规范
7
+ - @~/.claude/rules/clean-code.md - Clean Code 核心原则(始终加载)
8
+ - @~/.claude/rules/code-quality.md - 代码质量标准(编辑代码文件时加载)
9
+
10
+ ## 工作流规则
11
+ - @~/.claude/rules/reporting.md - 报告输出规则
12
+ - @~/.claude/rules/task-recovery.md - 任务恢复规则
13
+ - @~/.claude/rules/context-hygiene.md - 上下文卫生与 Compaction 保护
14
+
15
+ ## 质量控制
16
+ - @~/.claude/rules/memory-policy.md - Memory 质量策略
@@ -0,0 +1,63 @@
1
+ ---
2
+ description: 分析问题并增量写入报告到markdown文件
3
+ argument-hint: [输出文件路径] [分析主题...]
4
+ allowed-tools: Read, Write, Edit, Grep, Glob, Bash, Task
5
+ ---
6
+
7
+ 你需要分析用户指定的主题/问题,并将分析报告输出到指定的 markdown 文件中。
8
+
9
+ ## 参数
10
+
11
+ - 输出文件路径: $1
12
+ - 分析主题: 从第二个参数开始的所有内容
13
+
14
+ 如果用户没有提供文件路径,请使用 AskUserQuestion 询问。
15
+
16
+ ## 关键规则:创建 + 追加写入
17
+
18
+ **禁止**一次性将完整报告内容通过单次 Write 写入。
19
+ **必须**使用"创建文件头 + Bash 追加"模式分段写入。
20
+
21
+ ### 第一步:分析与规划
22
+
23
+ 1. 充分理解分析主题,进行必要的代码/文件/资料探索
24
+ 2. 在对话中向用户简要说明你的分析计划和报告结构
25
+ 3. 规划报告的章节结构(一般 3-6 个章节)
26
+
27
+ ### 第二步:创建文件头
28
+
29
+ 使用 Write 工具创建文件,**只写标题和元信息**:
30
+
31
+ ```markdown
32
+ # [报告标题]
33
+
34
+ > 分析日期: [日期]
35
+ > 分析主题: [主题]
36
+ ```
37
+
38
+ ### 第三步:逐段追加内容
39
+
40
+ 对每个章节,使用 **Bash 工具** 的 `cat >>` 追加内容到文件。格式:
41
+
42
+ ```bash
43
+ cat >> "文件路径" <<'REPORT_SECTION'
44
+
45
+ ## N. 章节标题
46
+
47
+ 章节正文内容...
48
+
49
+ REPORT_SECTION
50
+ ```
51
+
52
+ 规则:
53
+ - 每次追加 **1-2 个章节**(短章节可合并,减少调用次数)
54
+ - 追加前在对话中简要说明该章节要点(文字流式显示,提供进度感)
55
+ - 不限制单次追加的长度
56
+ - 用 `'REPORT_SECTION'`(带引号)作为 heredoc 定界符,防止变量展开
57
+
58
+ ### 第四步:输出总结
59
+
60
+ 报告写完后,向用户简要说明:
61
+ - 报告文件路径
62
+ - 报告结构概览
63
+ - 关键发现/结论摘要
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: block-dangerous-ops
3
+ enabled: true
4
+ event: bash
5
+ pattern: rm\s+-rf|git\s+push\s+.*(-f|--force)|DROP\s+TABLE|TRUNCATE\s+TABLE|git\s+reset\s+--hard|git\s+clean\s+-fd
6
+ action: block
7
+ ---
8
+
9
+ **危险操作已阻止!**
10
+
11
+ 检测到高风险命令,已自动拦截。请确认:
12
+ - 是否真的需要执行此操作?
13
+ - 是否有更安全的替代方案?
14
+ - 数据是否已备份?
15
+
16
+ 如确需执行,请手动在终端中运行。
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: protect-secrets
3
+ enabled: true
4
+ event: file
5
+ conditions:
6
+ - field: file_path
7
+ operator: regex_match
8
+ pattern: \.env$|\.env\.|credentials|\.key$|secrets|\.pem$|\.p12$|password
9
+ action: warn
10
+ ---
11
+
12
+ **敏感文件编辑警告!**
13
+
14
+ 正在编辑可能包含敏感信息的文件。请确认:
15
+ - 文件已加入 .gitignore
16
+ - 未硬编码任何凭据或密钥
17
+ - 使用环境变量引用敏感值
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: require-verification
3
+ enabled: true
4
+ event: stop
5
+ action: warn
6
+ ---
7
+
8
+ **交付前验证提醒**
9
+
10
+ 请确认已完成以下检查:
11
+ - 代码变更已通过编译
12
+ - 相关测试已执行且通过
13
+ - 变更符合项目规范
@@ -0,0 +1,106 @@
1
+ #!/bin/bash
2
+ # Java Compile Check — PostToolUse Hook
3
+ # 设计原则:静默成功,喧嚣失败,增量编译,超时保护
4
+ # 触发条件:Edit|Write 工具修改 .java 文件后自动运行
5
+
6
+ set -euo pipefail
7
+
8
+ # 读取 stdin(Claude Code 传入的 JSON)
9
+ INPUT=$(cat)
10
+
11
+ # 提取 tool_input.file_path(无 jq 依赖,用 grep+sed)
12
+ FILE_PATH=$(echo "$INPUT" | grep -o '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"file_path"[[:space:]]*:[[:space:]]*"//;s/"$//')
13
+
14
+ # 如果提取不到 file_path,静默退出
15
+ [[ -z "$FILE_PATH" ]] && exit 0
16
+
17
+ # 只处理 .java 文件
18
+ [[ "$FILE_PATH" != *.java ]] && exit 0
19
+
20
+ # Windows 路径转换:C:\foo\bar → /c/foo/bar, D:\foo\bar → /d/foo/bar
21
+ normalize_path() {
22
+ local p="$1"
23
+ # 已经是 Unix 路径
24
+ if [[ "$p" == /* ]]; then
25
+ echo "$p"
26
+ return
27
+ fi
28
+ # Windows 绝对路径 D:\... 或 D:/...
29
+ if [[ "$p" =~ ^([A-Za-z]):[/\\] ]]; then
30
+ local drive="${BASH_REMATCH[1]}"
31
+ drive=$(echo "$drive" | tr '[:upper:]' '[:lower:]')
32
+ p="/$drive/${p:3}"
33
+ fi
34
+ # 反斜杠 → 正斜杠
35
+ echo "${p//\\//}"
36
+ }
37
+
38
+ FILE_PATH=$(normalize_path "$FILE_PATH")
39
+
40
+ # 检查文件是否存在
41
+ [[ ! -f "$FILE_PATH" ]] && exit 0
42
+
43
+ # 向上查找 pom.xml 或 build.gradle(项目根)
44
+ find_project_root() {
45
+ local dir="$1"
46
+ while [[ "$dir" != "/" && "$dir" != "." ]]; do
47
+ if [[ -f "$dir/pom.xml" ]]; then
48
+ echo "$dir"
49
+ return 0
50
+ fi
51
+ if [[ -f "$dir/build.gradle" || -f "$dir/build.gradle.kts" ]]; then
52
+ echo "$dir"
53
+ return 0
54
+ fi
55
+ dir=$(dirname "$dir")
56
+ done
57
+ return 1
58
+ }
59
+
60
+ PROJECT_ROOT=$(find_project_root "$(dirname "$FILE_PATH")") || exit 0
61
+
62
+ # 修复 JAVA_HOME 路径(Windows → Unix)
63
+ if [[ -n "${JAVA_HOME:-}" ]]; then
64
+ JAVA_HOME=$(normalize_path "$JAVA_HOME")
65
+ export JAVA_HOME
66
+ fi
67
+
68
+ # 确定构建工具和编译命令
69
+ COMPILE_CMD=""
70
+ if [[ -f "$PROJECT_ROOT/pom.xml" ]]; then
71
+ # Maven:仅编译,跳过测试,静默模式
72
+ MVN_CMD="mvn"
73
+ if [[ -f "$PROJECT_ROOT/mvnw" || -f "$PROJECT_ROOT/mvnw.cmd" ]]; then
74
+ MVN_CMD="$PROJECT_ROOT/mvnw"
75
+ fi
76
+ COMPILE_CMD="$MVN_CMD compile -q -T 1C -DskipTests -f $PROJECT_ROOT/pom.xml"
77
+ elif [[ -f "$PROJECT_ROOT/build.gradle" || -f "$PROJECT_ROOT/build.gradle.kts" ]]; then
78
+ # Gradle:增量编译
79
+ GRADLE_CMD="gradle"
80
+ if [[ -f "$PROJECT_ROOT/gradlew" || -f "$PROJECT_ROOT/gradlew.bat" ]]; then
81
+ GRADLE_CMD="$PROJECT_ROOT/gradlew"
82
+ fi
83
+ COMPILE_CMD="$GRADLE_CMD compileJava -q -p $PROJECT_ROOT"
84
+ fi
85
+
86
+ [[ -z "$COMPILE_CMD" ]] && exit 0
87
+
88
+ # 带超时执行编译(30秒上限)
89
+ COMPILE_OUTPUT=$(timeout 30 bash -c "$COMPILE_CMD" 2>&1) || {
90
+ EXIT_CODE=$?
91
+ if [[ $EXIT_CODE -eq 124 ]]; then
92
+ echo "⏱ Java 编译超时(30s),跳过本次检查。请手动验证。"
93
+ exit 0
94
+ fi
95
+ # 编译失败 — 喧嚣输出
96
+ echo "❌ Java 编译失败!修改文件: $(basename "$FILE_PATH")"
97
+ echo "项目: $PROJECT_ROOT"
98
+ echo ""
99
+ echo "$COMPILE_OUTPUT" | tail -30
100
+ echo ""
101
+ echo "请修复编译错误后再继续。"
102
+ exit 1
103
+ }
104
+
105
+ # 编译成功 — 静默退出
106
+ exit 0
@@ -0,0 +1,4 @@
1
+ # Memory Index
2
+
3
+ ## User
4
+ - [User Profile](user_profile.md) — Developer profile and collaboration preferences
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: User Profile
3
+ description: Backend developer profile - Java primary, microservices, APIs, system design
4
+ type: user
5
+ ---
6
+
7
+ Backend developer. Primary language: Java. Also works with Go, Python, SQL.
8
+
9
+ Focus areas: microservices architecture, API design, database optimization, distributed systems.
10
+
11
+ AI collaboration style: prefers depth over breadth, values systematic analysis, appreciates clean code principles.
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: User Profile
3
+ description: Client developer profile - mobile/desktop apps, iOS/Android/Flutter
4
+ type: user
5
+ ---
6
+
7
+ Client developer. Primary languages: Kotlin, Swift. Frameworks: Android SDK, iOS UIKit/SwiftUI, Flutter.
8
+
9
+ Focus areas: mobile architecture (MVVM/Clean Architecture), native performance, offline-first design, platform guidelines.
10
+
11
+ AI collaboration style: values platform-specific best practices, appreciates attention to UX details.
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: User Profile
3
+ description: Frontend developer profile - TypeScript/React primary, UI/UX, web performance
4
+ type: user
5
+ ---
6
+
7
+ Frontend developer. Primary language: TypeScript. Frameworks: React, Vue, Next.js.
8
+
9
+ Focus areas: component architecture, state management, web performance, responsive design, accessibility.
10
+
11
+ AI collaboration style: visual-first, values clean UI patterns, appreciates practical examples over theory.
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: User Profile
3
+ description: Fullstack developer profile - TypeScript + Java, frontend + backend + infrastructure
4
+ type: user
5
+ ---
6
+
7
+ Fullstack developer. Languages: TypeScript, Java. Also works with Python, Go, SQL.
8
+
9
+ Focus areas: end-to-end feature delivery, API design, frontend architecture, database design, CI/CD.
10
+
11
+ AI collaboration style: pragmatic, values working solutions over perfect architecture, appreciates full-stack context awareness.
@@ -0,0 +1,33 @@
1
+ # Clean Code 核心原则
2
+
3
+ > 代码是写给人看的,机器只是顺便执行。
4
+
5
+ ## 六条原则
6
+
7
+ 1. **意图清晰** — 命名即意图,自解释代码。注释只说"为什么",不说"做什么"。显式优于隐式:错误、副作用、边界条件都要显性化。
8
+ 2. **单一职责** — 每个模块/函数/类只负责一件事。一个模块只应因一个理由而改变。隔离变化与稳定。
9
+ 3. **最小 Surprise** — 代码做读者期望的事。命名与行为一致,遵循团队和行业约定。
10
+ 4. **DRY** — 每处知识只表达一次。单一真相源,变化时只改一处。
11
+ 5. **简洁胜于复杂** — KISS:复杂化需有理由。YAGNI:不为假设的未来抽象。先正确,再清晰,后优化。
12
+ 6. **渐进改进** — 童子军规则:离开时比发现时更干净。可测试性 = 设计质量。
13
+
14
+ ## 反模式速查
15
+
16
+ | 反模式 | 解药 |
17
+ |--------|------|
18
+ | 上帝类/函数 | 拆分职责 |
19
+ | 重复代码 | 提取公共逻辑 |
20
+ | 过度工程 | YAGNI,简单优先 |
21
+ | 紧耦合 | 引入抽象层 |
22
+ | 静默失败 | 显性错误处理 |
23
+ | 副作用隐藏 | 重命名或分离 |
24
+
25
+ ## 执行优先级
26
+
27
+ 当原则冲突时:
28
+
29
+ 1. **正确性** > 性能
30
+ 2. **可读性** > 简洁
31
+ 3. **清晰** > clever
32
+ 4. **简单** > 通用
33
+ 5. **显式** > 隐式
@@ -0,0 +1,74 @@
1
+ ---
2
+ globs: ["**/*.java", "**/*.py", "**/*.js", "**/*.ts", "**/*.jsx", "**/*.tsx", "**/*.go", "**/*.kt", "**/*.vue"]
3
+ ---
4
+
5
+ # 代码质量标准
6
+
7
+ > 编辑代码文件时自动加载。与 clean-code.md 核心原则配合使用。
8
+
9
+ ## 函数/方法质量
10
+
11
+ | 检查项 | 标准 | 未通过时的处理 |
12
+ |--------|------|----------------|
13
+ | 职责单一 | 能用"动词+名词"一句话描述 | 拆分函数 |
14
+ | 长度适中 | 理想 20 行内,最多 30 行 | 提取子函数 |
15
+ | 参数数量 | 3 个以内 | 封装为对象 |
16
+ | 嵌套深度 | 3 层以内 | 使用卫语句/早期返回 |
17
+ | 副作用 | 命名明确体现或无副作用 | 重命名或分离副作用 |
18
+ | 可测试性 | 不依赖全局状态,可独立测试 | 注入依赖,消除全局变量 |
19
+
20
+ ## 命名质量
21
+
22
+ | 检查项 | 标准 | 反面示例 |
23
+ |--------|------|----------|
24
+ | 表达意图 | 看到名字就知道用途 | `data` → `userProfile` |
25
+ | 避免歧义 | 同一概念用同一词汇 | 不要混用 get/fetch/retrieve |
26
+ | 避免缩写 | 除非是行业通用缩写 | `usrCnt` → `userCount` |
27
+ | 区分状态 | 布尔值用 is/has/should | `valid` → `isValid` |
28
+ | 体现副作用 | 修改操作动词明确 | `getUser()` vs `fetchAndSaveUser()` |
29
+
30
+ ## 代码结构质量
31
+
32
+ | 检查项 | 标准 | 检查方法 |
33
+ |--------|------|----------|
34
+ | 无重复逻辑 | 相似代码提取公共部分 | 视觉扫描相同/相似代码块 |
35
+ | 无魔法值 | 字面量有命名常量 | 搜索数字/字符串字面量 |
36
+ | 错误显性 | 错误不静默、不吞异常 | 检查所有错误处理路径 |
37
+ | 边界封装 | 边界条件集中处理 | 检查边界值散落情况 |
38
+ | 依赖明确 | 依赖关系清晰、可注入 | 检查 new 关键字和导入 |
39
+ | 变化隔离 | 稳定部分不依赖易变部分 | 检查接口和抽象层 |
40
+
41
+ ## SOLID 原则
42
+
43
+ - **S** Single Responsibility — 一个类只因一个理由改变。判断:描述职责时是否用了"和"/"或"
44
+ - **O** Open/Closed — 对扩展开放,对修改封闭。新功能通过添加代码实现
45
+ - **L** Liskov Substitution — 子类能替换父类。违反信号:isInstanceOf、向下转型
46
+ - **I** Interface Segregation — 客户端不依赖不需要的接口。大接口拆为小接口
47
+ - **D** Dependency Inversion — 依赖抽象而非具体实现。高层不依赖低层
48
+
49
+ ## 代码审查自检
50
+
51
+ ### 可读性
52
+ - [ ] 去掉注释后代码还能被理解?
53
+ - [ ] 新手 3 分钟内能理解核心逻辑?
54
+ - [ ] 命名是否与实现一致?
55
+
56
+ ### 可维护性
57
+ - [ ] 最可能变化的地方修改是否容易?
58
+ - [ ] 有重复逻辑在别处?修改时会遗漏?
59
+ - [ ] 新功能需要改几处?(理想:一处)
60
+
61
+ ### 健壮性
62
+ - [ ] 所有错误路径都被处理?
63
+ - [ ] 空值、空集合、极限值已封装?
64
+ - [ ] 竞态条件或并发安全问题?
65
+
66
+ ### 简洁性
67
+ - [ ] 有过度设计迹象?
68
+ - [ ] 能用更简单方案达同样效果?
69
+ - [ ] 每行代码、每个抽象都有存在理由?
70
+
71
+ ### 可测试性
72
+ - [ ] 不依赖外部系统即可测试?
73
+ - [ ] 测试能作为使用文档?
74
+ - [ ] 修改时测试能提供快速反馈?
@@ -0,0 +1,29 @@
1
+ # Context Hygiene 规则
2
+
3
+ > 保护长任务中的关键状态,对抗上下文压缩带来的信息丢失。
4
+
5
+ ---
6
+
7
+ ## Compaction 保护
8
+
9
+ 当会话上下文被压缩时,**必须保留**以下信息:
10
+
11
+ 1. **当前任务状态** — 正在执行什么、完成了什么、下一步是什么
12
+ 2. **关键决策及其理由** — 为什么选择方案 A 而非 B
13
+ 3. **已修改的文件列表** — 精确到文件路径
14
+ 4. **未完成的待办项** — 确保不遗漏
15
+ 5. **验证结果** — 测试是否通过、编译是否成功
16
+
17
+ ## 状态外化
18
+
19
+ 长任务(预计超过 20 步)执行期间:
20
+
21
+ - 使用 `.tasks/` 目录下的 state.md 持久化进度
22
+ - 关键中间产物写入文件而非仅保留在上下文中
23
+ - 每完成一个阶段,更新 state.md 的进度摘要
24
+
25
+ ## 会话卫生
26
+
27
+ - 探索性搜索通过 sub-agent 执行,避免大量原始结果污染主上下文
28
+ - 已完成阶段的详细输出可被压缩,但决策和结论必须保留
29
+ - 读取大文件时使用 offset/limit 按需加载,而非一次性全量读取
@@ -0,0 +1,30 @@
1
+ # Memory 质量策略
2
+
3
+ > 全局 memory 是跨项目共享的稀缺资源。每条记忆都必须通过严格筛选。
4
+
5
+ ## 保存门槛
6
+
7
+ ### 必须同时满足(AND)
8
+ 1. **跨会话复用** — 未来不同会话中会被用到
9
+ 2. **不可推导** — 无法从代码、git history、CLAUDE.md、文档中直接获取
10
+
11
+ ### 至少满足一项(OR)
12
+ 3. **反直觉** — 踩过坑才知道的经验,而非常识
13
+ 4. **高复用** — 预计在 3+ 不同会话中适用
14
+ 5. **纠错信号** — 用户明确纠正了行为,且适用于未来场景
15
+
16
+ ## 绝不保存
17
+
18
+ - 项目特定的构建命令、文件结构、依赖版本(→ 项目 CLAUDE.md)
19
+ - 临时状态:当前任务进度、未合并分支、进行中讨论
20
+ - 代码模式和架构细节(→ 从代码推导)
21
+ - Git 历史和变更摘要(→ git log)
22
+ - 已在 CLAUDE.md 或 rules 中声明的内容(→ 避免重复)
23
+
24
+ ## 写入纪律
25
+
26
+ - feedback 类型**必须**包含 **Why** + **How to apply**
27
+ - 文件名必须表达内容(`feedback_no_mock_db.md`,非 `memory_1.md`)
28
+ - 每条记忆 ≤ 10 行,MEMORY.md 索引每条 < 150 字符
29
+ - 保存前检查已有记忆,有则更新而非新建
30
+ - MEMORY.md 索引长期保持 < 100 行
@@ -0,0 +1,9 @@
1
+ # 报告输出规则
2
+
3
+ 当用户的请求符合以下任一场景时,**自动**通过 Skill 工具调用 `report`(无需用户显式输入 `/report`):
4
+
5
+ - 要求将分析结果、总结或报告输出到 markdown 文件
6
+ - 出现"写到文件"、"输出到文档"、"生成报告"、"写份报告"等表述
7
+ - 指定了输出文件路径且内容为分析/总结性质
8
+
9
+ 调用方式:`Skill tool → skill: "report", args: "<文件路径> <分析主题>"`
@@ -0,0 +1,13 @@
1
+ # 任务恢复规则
2
+
3
+ 当用户说"继续"、"恢复"、"接着做"、"从断点继续"等表达时,**必须**先检查进行中的任务,**不要**仅凭内置 TaskList(会话级,新会话后为空)的结果就断定没有进行中的任务。
4
+
5
+ ## 恢复流程
6
+
7
+ 1. Glob 搜索 `.tasks/*/state.md`
8
+ 2. 读取找到的 state.md 文件头部(前 10 行),提取 `Type` 字段
9
+ 3. 路由规则:
10
+ - `Type: coding` → 通过 Skill 工具调用 `coding` skill,参数传递 `resume`
11
+ - 其他或无 Type 字段 → 通过 Skill 工具调用 `auto-goal` skill,参数传递 `resume`
12
+ 4. 多个活跃任务(`Status: in-progress`)时,列出让用户选择
13
+ 5. 无活跃任务时,告知用户并询问是否开始新任务
@@ -0,0 +1,19 @@
1
+ # 深度思考原则
2
+
3
+ 宁可慢一步想清楚,不要快一步做错了。遵循以下原则时,持续自检:我此刻是否真的在遵守它们?觉察不到自己在浅层思考,是最危险的浅层思考。
4
+
5
+ ## 过程纪律
6
+
7
+ **序** — 理解先于规划,规划先于行动。未经理解的方案是猜测,未经规划的执行是冲动。投入的思考量应匹配问题的复杂度。
8
+
9
+ **验** — 用事实闭环,不以假设收尾。预期与现实的差距就是认知盲区。验证不通过时,回到"序"重新来,而非强行推进。
10
+
11
+ ## 思考品质
12
+
13
+ **深** — 多问一层为什么。表面问题是深层问题的症状。抵达机制层和根因层才算理解。
14
+
15
+ **广** — 在系统中定位局部。一切都有上下文、依赖和边界。改动一处,影响传向何方?
16
+
17
+ **辨** — 主动为自己的结论找反证。方案都有代价,判断都有前提。区分事实、推断与猜测,对不确定性诚实。
18
+
19
+ **简** — 复杂度是隐性负债,每一分都需要理由。真正想明白了的方案往往简洁。
@@ -0,0 +1,11 @@
1
+ {
2
+ "permissions": {
3
+ "hooks": {
4
+ "PostToolUse": []
5
+ }
6
+ },
7
+ "autoMemoryDirectory": "~/.claude/memory/",
8
+ "enabledPlugins": {
9
+ "hookify@claude-plugins-official": true
10
+ }
11
+ }