claudeos-core 2.3.2 → 2.4.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.
- package/CHANGELOG.md +736 -74
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.de.md +321 -883
- package/README.es.md +322 -883
- package/README.fr.md +322 -883
- package/README.hi.md +322 -883
- package/README.ja.md +322 -883
- package/README.ko.md +322 -882
- package/README.md +321 -883
- package/README.ru.md +322 -885
- package/README.vi.md +322 -883
- package/README.zh-CN.md +321 -881
- package/SECURITY.md +51 -0
- package/bin/commands/init.js +192 -37
- package/content-validator/index.js +97 -4
- package/health-checker/index.js +44 -10
- package/package.json +92 -90
- package/pass-json-validator/index.js +58 -7
- package/pass-prompts/templates/angular/pass3.md +15 -14
- package/pass-prompts/templates/common/claude-md-scaffold.md +81 -0
- package/pass-prompts/templates/common/pass3-footer.md +104 -0
- package/pass-prompts/templates/java-spring/pass3.md +19 -18
- package/pass-prompts/templates/kotlin-spring/pass3.md +23 -22
- package/pass-prompts/templates/node-express/pass3.md +18 -17
- package/pass-prompts/templates/node-fastify/pass3.md +11 -10
- package/pass-prompts/templates/node-nestjs/pass3.md +11 -10
- package/pass-prompts/templates/node-nextjs/pass3.md +18 -17
- package/pass-prompts/templates/node-vite/pass3.md +11 -10
- package/pass-prompts/templates/python-django/pass3.md +18 -17
- package/pass-prompts/templates/python-fastapi/pass3.md +18 -17
- package/pass-prompts/templates/python-flask/pass3.md +9 -8
- package/pass-prompts/templates/vue-nuxt/pass3.md +9 -8
- package/plan-installer/domain-grouper.js +45 -5
- package/plan-installer/index.js +11 -1
- package/plan-installer/scanners/scan-java.js +98 -2
- package/plan-installer/stack-detector.js +44 -0
package/README.zh-CN.md
CHANGED
|
@@ -1,1014 +1,454 @@
|
|
|
1
1
|
# ClaudeOS-Core
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/claudeos-core)
|
|
4
|
+
[](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
|
|
5
|
+
[](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://www.npmjs.com/package/claudeos-core)
|
|
9
|
+
|
|
10
|
+
**从你的实际源代码自动生成 Claude Code 文档。** 一个 CLI 工具,先对项目进行静态分析,再运行 4-pass Claude 流水线生成 `.claude/rules/`、standards、skills 和 guides — 这样 Claude Code 遵循的就是**你项目的**约定,而不是通用约定。
|
|
4
11
|
|
|
5
12
|
```bash
|
|
6
13
|
npx claudeos-core init
|
|
7
14
|
```
|
|
8
15
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
[🇺🇸 English](./README.md) · [🇰🇷 한국어](./README.ko.md) · [🇯🇵 日本語](./README.ja.md) · [🇪🇸 Español](./README.es.md) · [🇻🇳 Tiếng Việt](./README.vi.md) · [🇮🇳 हिन्दी](./README.hi.md) · [🇷🇺 Русский](./README.ru.md) · [🇫🇷 Français](./README.fr.md) · [🇩🇪 Deutsch](./README.de.md)
|
|
16
|
+
[🇺🇸 English](README.md) · [🇰🇷 한국어](README.ko.md) · [🇯🇵 日本語](README.ja.md) · [🇪🇸 Español](README.es.md) · [🇻🇳 Tiếng Việt](README.vi.md) · [🇮🇳 हिन्दी](README.hi.md) · [🇷🇺 Русский](README.ru.md) · [🇫🇷 Français](README.fr.md) · [🇩🇪 Deutsch](README.de.md)
|
|
12
17
|
|
|
13
18
|
---
|
|
14
19
|
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
其他所有 Claude Code 工具都是这样工作的:
|
|
18
|
-
|
|
19
|
-
> **人类描述项目 → LLM 生成文档**
|
|
20
|
-
|
|
21
|
-
ClaudeOS-Core 是这样工作的:
|
|
22
|
-
|
|
23
|
-
> **代码分析你的源码 → 代码构建定制提示 → LLM 生成文档 → 代码验证输出**
|
|
24
|
-
|
|
25
|
-
这不是一个小差异。为什么这很重要:
|
|
26
|
-
|
|
27
|
-
### 核心问题:LLM 会猜测。代码不会。
|
|
20
|
+
## 这是什么?
|
|
28
21
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
22
|
+
你在用 Claude Code。它很聪明,但它不知道**你项目的约定**:
|
|
23
|
+
- 你的团队用 MyBatis,但 Claude 生成 JPA 代码。
|
|
24
|
+
- 你的封装是 `ApiResponse.ok()`,但 Claude 写 `ResponseEntity.success()`。
|
|
25
|
+
- 你的包是 `controller/order/`,但 Claude 创建 `order/controller/`。
|
|
32
26
|
|
|
33
|
-
|
|
27
|
+
于是你花了大量时间去修正每一个生成的文件。
|
|
34
28
|
|
|
35
|
-
-
|
|
36
|
-
- 扫描了你的目录结构并**确认**了带文件数的领域列表
|
|
37
|
-
- 将你的项目结构**分类**为 Java 5 种模式、Kotlin CQRS/BFF 或 Next.js App Router/FSD 之一
|
|
38
|
-
- 将领域**分割**为适合 Claude 上下文窗口的最优大小分组
|
|
39
|
-
- **组装**了一个注入了所有确认事实的技术栈专用提示
|
|
29
|
+
**ClaudeOS-Core 解决这个问题。** 它扫描你的实际源代码,推断出你的约定,然后把一整套规则写入 `.claude/rules/` — 这是 Claude Code 自动读取的目录。下次你说 *"给 orders 做一个 CRUD"*,Claude 第一次就会按你的约定来。
|
|
40
30
|
|
|
41
|
-
当 Claude 收到提示时,没有任何需要猜测的。技术栈已确认。领域已确认。结构模式已确认。Claude 的唯一工作是生成与这些**已确认的事实**相匹配的文档。
|
|
42
|
-
|
|
43
|
-
### 结果
|
|
44
|
-
|
|
45
|
-
其他工具生成"一般来说不错"的文档。
|
|
46
|
-
ClaudeOS-Core 生成的文档知道你的项目使用 `ApiResponse.ok()`(而不是 `ResponseEntity.success()`),知道你的 MyBatis XML 映射器位于 `src/main/resources/mybatis/mappers/`,知道你的包结构是 `com.company.module.{domain}.controller` — 因为它读取了你的实际代码。
|
|
47
|
-
|
|
48
|
-
### Before & After
|
|
49
|
-
|
|
50
|
-
**没有 ClaudeOS-Core** — 你请求 Claude Code 创建一个订单 CRUD:
|
|
51
31
|
```
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
❌ 将文件放在 order/controller/(你的项目使用 controller/order/)
|
|
55
|
-
❌ 生成英文注释(你的团队写中文注释)
|
|
56
|
-
→ 你花 20 分钟修复每个生成的文件
|
|
32
|
+
之前: 你 → Claude Code → "看上去还行" 的代码 → 手动修正
|
|
33
|
+
之后: 你 → Claude Code → 与项目匹配的代码 → 直接发布
|
|
57
34
|
```
|
|
58
35
|
|
|
59
|
-
**使用 ClaudeOS-Core** — `.claude/rules/` 已经包含了你确认的模式:
|
|
60
|
-
```
|
|
61
|
-
✅ 生成 MyBatis mapper + XML(从 build.gradle 检测)
|
|
62
|
-
✅ 使用 ApiResponse.ok()(从你的实际源码提取)
|
|
63
|
-
✅ 将文件放在 controller/order/(通过结构扫描确认 Pattern A)
|
|
64
|
-
✅ 中文注释(应用了 --lang zh-CN)
|
|
65
|
-
→ 生成的代码立即匹配你的项目约定
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
这种差异会累积。每天 10 个任务 × 节省 20 分钟 = **每天 3 小时以上**。
|
|
69
|
-
|
|
70
36
|
---
|
|
71
37
|
|
|
72
|
-
##
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
38
|
+
## 在真实项目上看效果
|
|
39
|
+
|
|
40
|
+
在 [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app) 上运行 — Java 11 · Spring Boot 2.6 · MyBatis · SQLite · 187 source files。结果:**75 generated files**,总耗时 **53 分钟**,所有 validator ✅。
|
|
41
|
+
|
|
42
|
+
<p align="center">
|
|
43
|
+
<img src="docs/assets/spring-boot-realworld-demo.gif" alt="ClaudeOS-Core init running on spring-boot-realworld-example-app — stack detection, 4-pass pipeline, validators, completion summary" width="769">
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
<details>
|
|
47
|
+
<summary><strong>📺 终端输出(文本版,便于搜索和复制)</strong></summary>
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
╔════════════════════════════════════════════════════╗
|
|
51
|
+
║ ClaudeOS-Core — Bootstrap (4-Pass) ║
|
|
52
|
+
╚════════════════════════════════════════════════════╝
|
|
53
|
+
Project root: spring-boot-realworld-example-app
|
|
54
|
+
Language: English (en)
|
|
55
|
+
|
|
56
|
+
[Phase 1] Detecting stack...
|
|
57
|
+
Language: java 11
|
|
58
|
+
Framework: spring-boot 2.6.3
|
|
59
|
+
Database: sqlite
|
|
60
|
+
ORM: mybatis
|
|
61
|
+
PackageMgr: gradle
|
|
62
|
+
|
|
63
|
+
[Phase 2] Scanning structure...
|
|
64
|
+
Backend: 2 domains
|
|
65
|
+
Total: 2 domains
|
|
66
|
+
Package: io.spring.infrastructure
|
|
67
|
+
|
|
68
|
+
[Phase 5] Active domains...
|
|
69
|
+
✅ 00.core ✅ 10.backend ⏭️ 20.frontend
|
|
70
|
+
✅ 30.security-db ✅ 40.infra
|
|
71
|
+
✅ 80.verification ✅ 90.optional
|
|
72
|
+
|
|
73
|
+
[4] Pass 1 — Deep analysis per domain group...
|
|
74
|
+
✅ pass1-1.json created (5m 34s)
|
|
75
|
+
[█████░░░░░░░░░░░░░░░] 25% (1/4)
|
|
76
|
+
|
|
77
|
+
[5] Pass 2 — Merging analysis results...
|
|
78
|
+
✅ pass2-merged.json created (4m 22s)
|
|
79
|
+
[██████████░░░░░░░░░░] 50% (2/4)
|
|
80
|
+
|
|
81
|
+
[6] Pass 3 — Generating all files...
|
|
82
|
+
🚀 Pass 3 split mode (3a → 3b → 3c → 3d-aux)
|
|
83
|
+
✅ 3a complete (2m 57s) — pass3a-facts.md (187-path allowlist)
|
|
84
|
+
✅ 3b complete (18m 49s) — CLAUDE.md + 19 standards + 20 rules
|
|
85
|
+
✅ 3c complete (12m 35s) — 13 skills + 9 guides
|
|
86
|
+
✅ 3d-aux complete (3m 18s) — database/ + mcp-guide/
|
|
87
|
+
🎉 Pass 3 split complete: 4/4 stages successful
|
|
88
|
+
[███████████████░░░░░] 75% (3/4)
|
|
89
|
+
|
|
90
|
+
[7] Pass 4 — Memory scaffolding...
|
|
91
|
+
📦 Pass 4 staged-rules: 6 rule files moved to .claude/rules/
|
|
92
|
+
✅ Pass 4 complete (5m)
|
|
93
|
+
📋 Gap-fill: all 12 expected files already present
|
|
94
|
+
[████████████████████] 100% (4/4)
|
|
95
|
+
|
|
96
|
+
╔═══════════════════════════════════════╗
|
|
97
|
+
║ ClaudeOS-Core — Health Checker ║
|
|
98
|
+
╚═══════════════════════════════════════╝
|
|
99
|
+
✅ plan-validator pass
|
|
100
|
+
✅ sync-checker pass
|
|
101
|
+
✅ content-validator pass
|
|
102
|
+
✅ pass-json-validator pass
|
|
103
|
+
✅ All systems operational
|
|
104
|
+
|
|
105
|
+
[Lint] ✅ CLAUDE.md structure valid (25 checks)
|
|
106
|
+
[Content] ✅ All content validation passed
|
|
107
|
+
Total: 0 advisories, 0 notes
|
|
108
|
+
|
|
109
|
+
╔════════════════════════════════════════════════════╗
|
|
110
|
+
║ ✅ ClaudeOS-Core — Complete ║
|
|
111
|
+
║ Files created: 75 ║
|
|
112
|
+
║ Domains analyzed: 1 group ║
|
|
113
|
+
║ L4 scaffolded: memory + rules ║
|
|
114
|
+
║ Output language: English ║
|
|
115
|
+
║ Total time: 53m 8s ║
|
|
116
|
+
╚════════════════════════════════════════════════════╝
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
</details>
|
|
120
|
+
|
|
121
|
+
<details>
|
|
122
|
+
<summary><strong>📄 生成的 <code>CLAUDE.md</code> 节选(实际输出)</strong></summary>
|
|
123
|
+
|
|
124
|
+
```markdown
|
|
125
|
+
## 4. Core Architecture
|
|
126
|
+
|
|
127
|
+
### Core Patterns
|
|
128
|
+
|
|
129
|
+
- **Hexagonal ports & adapters**: domain ports live in `io.spring.core.{aggregate}`
|
|
130
|
+
and are implemented by `io.spring.infrastructure.repository.MyBatis{Aggregate}Repository`.
|
|
131
|
+
The domain layer has zero MyBatis imports.
|
|
132
|
+
- **CQRS-lite read/write split (same DB)**: write side goes through repository ports
|
|
133
|
+
+ entities; read side is a separate `readservice` package whose `@Mapper`
|
|
134
|
+
interfaces return `*Data` DTOs directly (no entity hydration).
|
|
135
|
+
- **No aggregator/orchestrator layer**: multi-source orchestration happens inside
|
|
136
|
+
application services (e.g., `ArticleQueryService`); there is no `*Aggregator`
|
|
137
|
+
class in the codebase.
|
|
138
|
+
- **Application-supplied UUIDs**: entity constructors assign their own UUID; PK is
|
|
139
|
+
passed via `#{user.id}` on INSERT. The global
|
|
140
|
+
`mybatis.configuration.use-generated-keys=true` flag is dead config
|
|
141
|
+
(auto-increment is unused).
|
|
142
|
+
- **JWT HS512 authentication**: `io.spring.infrastructure.service.DefaultJwtService`
|
|
143
|
+
is the sole token subject in/out; `io.spring.api.security.JwtTokenFilter`
|
|
144
|
+
extracts the token at the servlet layer.
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
注意:上面所有的论断都基于实际源码 — 类名、包路径、配置键、dead-config 标记,都是 scanner 在 Claude 写文件之前先提取好的。
|
|
148
|
+
|
|
149
|
+
</details>
|
|
150
|
+
|
|
151
|
+
<details>
|
|
152
|
+
<summary><strong>🛡️ 一个被自动加载的真实 rule 文件 (<code>.claude/rules/10.backend/03.data-access-rules.md</code>)</strong></summary>
|
|
153
|
+
|
|
154
|
+
````markdown
|
|
98
155
|
---
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
| 技术栈 | 检测方式 | 分析深度 |
|
|
103
|
-
|---|---|---|
|
|
104
|
-
| **Java / Spring Boot** | `build.gradle`、`pom.xml`、5 种包模式 | 10 大类、59 小项 |
|
|
105
|
-
| **Kotlin / Spring Boot** | `build.gradle.kts`、kotlin 插件、`settings.gradle.kts`、CQRS/BFF 自动检测 | 12 大类、95 小项 |
|
|
106
|
-
| **Node.js / Express** | `package.json` | 9 大类、57 小项 |
|
|
107
|
-
| **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 大类、68 小项 |
|
|
108
|
-
| **Next.js / React** | `package.json`、`next.config.*`、FSD 支持 | 9 大类、55 小项 |
|
|
109
|
-
| **Vue / Nuxt** | `package.json`、`nuxt.config.*`、Composition API | 9 大类、58 小项 |
|
|
110
|
-
| **Python / Django** | `requirements.txt`、`pyproject.toml` | 10 大类、55 小项 |
|
|
111
|
-
| **Python / FastAPI** | `requirements.txt`、`pyproject.toml` | 10 大类、58 小项 |
|
|
112
|
-
| **Node.js / Fastify** | `package.json` | 10 大类、62 小项 |
|
|
113
|
-
| **Vite / React SPA** | `package.json`、`vite.config.*` | 9 大类、55 小项 |
|
|
114
|
-
| **Angular** | `package.json`、`angular.json` | 12 大类、78 小项 |
|
|
115
|
-
|
|
116
|
-
自动检测:语言和版本、框架和版本(包括作为 SPA 框架的 Vite)、ORM(MyBatis、JPA、Exposed、Prisma、TypeORM、SQLAlchemy 等)、数据库(PostgreSQL、MySQL、Oracle、MongoDB、SQLite)、包管理器(Gradle、Maven、npm、yarn、pnpm、pip、poetry)、架构(CQRS、BFF — 从模块名检测)、多模块结构(从 settings.gradle 检测)、单体仓库(Turborepo、pnpm-workspace、Lerna、npm/yarn workspaces)、**`.env.example` 运行时配置**(v2.2.0 — 从 Vite、Next.js、Nuxt、Angular、Node、Python 框架的 16 个以上约定变量名中提取 port/host/API-target)。
|
|
117
|
-
|
|
118
|
-
**你不需要指定任何内容。一切都会自动检测。**
|
|
119
|
-
|
|
120
|
-
### `.env`-driven 运行时配置 (v2.2.0)
|
|
121
|
-
|
|
122
|
-
v2.2.0 新增 `lib/env-parser.js`,使生成的 `CLAUDE.md` 反映项目实际声明的内容,而非框架默认值。
|
|
123
|
-
|
|
124
|
-
- **搜索顺序**:`.env.example`(canonical、已提交)→ `.env.local.example` → `.env.sample` → `.env.template` → `.env` → `.env.local` → `.env.development`。`.example` 变体优先,因为它是 developer-neutral 的 shape-of-truth,而非某个贡献者的本地覆盖。
|
|
125
|
-
- **识别的 port 变量约定**:`VITE_PORT` / `VITE_DEV_PORT` / `VITE_DESKTOP_PORT` / `NEXT_PUBLIC_PORT` / `NUXT_PORT` / `NG_PORT` / `APP_PORT` / `SERVER_PORT` / `HTTP_PORT` / `DEV_PORT` / `FLASK_RUN_PORT` / `UVICORN_PORT` / `DJANGO_PORT` / 通用 `PORT`。当两者同时存在时,framework-specific 名称优先于通用的 `PORT`。
|
|
126
|
-
- **Host 与 API target**:`VITE_DEV_HOST` / `VITE_API_TARGET` / `NEXT_PUBLIC_API_URL` / `NUXT_PUBLIC_API_BASE` / `BACKEND_URL` / `PROXY_TARGET` 等。
|
|
127
|
-
- **优先级**:Spring Boot `application.yml` 的 `server.port` 仍然优先(framework-native config),然后是 `.env` 中声明的 port,最后才是 framework 默认值(Vite 5173、Next.js 3000、Django 8000 等)作为兜底。
|
|
128
|
-
- **敏感变量 redaction**:匹配 `PASSWORD` / `SECRET` / `TOKEN` / `API_KEY` / `ACCESS_KEY` / `PRIVATE_KEY` / `CREDENTIAL` / `JWT_SECRET` / `CLIENT_SECRET` / `SESSION_SECRET` / `BEARER` / `SALT` 模式的变量值在进入任何下游生成器之前被替换为 `***REDACTED***`。对意外提交到 `.env.example` 的 secrets 的 defense-in-depth 保护。`DATABASE_URL` 因 stack-detector DB 识别 back-compat 而被显式白名单保留。
|
|
129
|
-
|
|
130
|
-
### Java 领域检测(5 种模式,带回退)
|
|
131
|
-
|
|
132
|
-
| 优先级 | 模式 | 结构 | 示例 |
|
|
133
|
-
|---|---|---|---|
|
|
134
|
-
| A | 层优先 | `controller/{domain}/` | `controller/user/UserController.java` |
|
|
135
|
-
| B | 领域优先 | `{domain}/controller/` | `user/controller/UserController.java` |
|
|
136
|
-
| D | 模块前缀 | `{module}/{domain}/controller/` | `front/member/controller/MemberController.java` |
|
|
137
|
-
| E | DDD/六角形 | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
|
|
138
|
-
| C | 扁平 | `controller/*.java` | `controller/UserController.java` → 从类名提取 `user` |
|
|
139
|
-
|
|
140
|
-
无 Controller 的纯 Service 领域也通过 `service/`、`dao/`、`aggregator/`、`facade/`、`usecase/`、`orchestrator/`、`mapper/`、`repository/` 目录进行检测。跳过:`common`、`config`、`util`、`core`、`front`、`admin`、`v1`、`v2` 等。
|
|
141
|
-
|
|
142
|
-
### Kotlin 多模块领域检测
|
|
143
|
-
|
|
144
|
-
适用于 Gradle 多模块结构的 Kotlin 项目(如 CQRS 单体仓库):
|
|
145
|
-
|
|
146
|
-
| 步骤 | 操作 | 示例 |
|
|
147
|
-
|---|---|---|
|
|
148
|
-
| 1 | 扫描 `settings.gradle.kts` 的 `include()` | 发现 14 个模块 |
|
|
149
|
-
| 2 | 从模块名检测模块类型 | `reservation-command-server` → type: `command` |
|
|
150
|
-
| 3 | 从模块名提取领域 | `reservation-command-server` → domain: `reservation` |
|
|
151
|
-
| 4 | 跨模块对同一领域分组 | `reservation-command-server` + `common-query-server` → 1 个领域 |
|
|
152
|
-
| 5 | 检测架构 | 有 `command` + `query` 模块 → CQRS |
|
|
153
|
-
|
|
154
|
-
支持的模块类型:`command`、`query`、`bff`、`integration`、`standalone`、`library`。共享库(`shared-lib`、`integration-lib`)被识别为特殊领域。
|
|
155
|
-
|
|
156
|
-
### 前端领域检测
|
|
157
|
-
|
|
158
|
-
- **App Router**:`app/{domain}/page.tsx`(Next.js)
|
|
159
|
-
- **Pages Router**:`pages/{domain}/index.tsx`
|
|
160
|
-
- **FSD (Feature-Sliced Design)**:`features/*/`、`widgets/*/`、`entities/*/`
|
|
161
|
-
- **RSC/Client 分离**:检测 `client.tsx` 模式,跟踪 Server/Client 组件分离
|
|
162
|
-
- **非标准嵌套路径**:检测 `src/*/` 路径下的页面、组件和 FSD 层(例如 `src/admin/pages/dashboard/`、`src/admin/components/form/`、`src/admin/features/billing/`)
|
|
163
|
-
- **平台/层级分割检测 (v2.0.0)**:识别 `src/{platform}/{subapp}/` 布局 — `{platform}` 可以是设备/目标关键字(`desktop`、`pc`、`web`、`mobile`、`mc`、`mo`、`sp`、`tablet`、`tab`、`pwa`、`tv`、`ctv`、`ott`、`watch`、`wear`)或访问层关键字(`admin`、`cms`、`backoffice`、`back-office`、`portal`)。为每个 `(platform, subapp)` 对发出一个名为 `{platform}-{subapp}` 的领域,提供每个领域的 routes/components/layouts/hooks 计数。可在 Angular、Next.js、React 和 Vue 上同时运行(多扩展 glob `{tsx,jsx,ts,js,vue}`)。每个 subapp 需要 ≥2 个源文件以避免噪声 1-file 领域。
|
|
164
|
-
- **单体仓库平台分割 (v2.0.0)**:平台扫描也匹配 `{apps,packages}/*/src/{platform}/{subapp}/`(带 `src/` 的 Turborepo/pnpm workspace)和 `{apps,packages}/{platform}/{subapp}/`(无 `src/` 包装的 workspaces)。
|
|
165
|
-
- **Fallback E — routes 文件 (v2.0.0)**:当主扫描器 + Fallback A–D 都返回 0 时,glob `**/routes/*.{tsx,jsx,ts,js,vue}` 并按 `routes` 的父目录名分组。捕获不匹配 Next.js `page.tsx` 或 FSD 布局的 React Router 文件路由项目(CRA/Vite + `react-router`)。通用父名(`src`、`app`、`pages`)被过滤掉。
|
|
166
|
-
- **Config 回退**:当不在 `package.json` 时,从配置文件检测 Next.js/Vite/Nuxt(单体仓库支持)
|
|
167
|
-
- **深层目录回退**:对于 React/CRA/Vite/Vue/RN 项目,在任何深度扫描 `**/components/*/`、`**/views/*/`、`**/screens/*/`、`**/containers/*/`、`**/pages/*/`、`**/routes/*/`、`**/modules/*/`、`**/domains/*/`
|
|
168
|
-
- **共享忽略列表 (v2.0.0)**:所有扫描器共享 `BUILD_IGNORE_DIRS`(`node_modules`、`build`、`dist`、`out`、`.next`、`.nuxt`、`.svelte-kit`、`.angular`、`.turbo`、`.cache`、`.parcel-cache`、`coverage`、`storybook-static`、`.vercel`、`.netlify`)和 `TEST_FILE_IGNORE`(spec/test/stories/e2e/cy + `__snapshots__`/`__tests__`),这样构建输出和测试夹具不会夸大按领域的文件计数。
|
|
169
|
-
|
|
170
|
-
### 扫描器覆盖 (v2.0.0)
|
|
171
|
-
|
|
172
|
-
在项目根目录放置可选的 `.claudeos-scan.json` 以扩展扫描器默认值,而无需编辑工具包。所有字段都是**加法的** — 用户条目扩展默认值,从不替换:
|
|
173
|
-
|
|
174
|
-
```json
|
|
175
|
-
{
|
|
176
|
-
"frontendScan": {
|
|
177
|
-
"platformKeywords": ["kiosk"],
|
|
178
|
-
"skipSubappNames": ["legacy"],
|
|
179
|
-
"minSubappFiles": 3
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
| 字段 | 默认值 | 用途 |
|
|
185
|
-
|---|---|---|
|
|
186
|
-
| `platformKeywords` | 上述内置列表 | 平台扫描用的额外 `{platform}` 关键字(例如 `kiosk`、`vr`、`embedded`) |
|
|
187
|
-
| `skipSubappNames` | 仅结构目录 | 从平台扫描领域生成中排除的额外 subapp 名称 |
|
|
188
|
-
| `minSubappFiles` | `2` | 覆盖 subapp 成为领域所需的最小文件数 |
|
|
189
|
-
|
|
190
|
-
文件缺失或 JSON 格式错误 → 静默回退到默认值(不崩溃)。典型用途:opt-in 内置列表因过于模糊而排除的简写(`adm`、`bo`),或为嘈杂的单体仓库提高 `minSubappFiles`。
|
|
191
|
-
|
|
156
|
+
paths:
|
|
157
|
+
- "**/*"
|
|
192
158
|
---
|
|
193
159
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
### 前提条件
|
|
160
|
+
# Data Access Rules
|
|
197
161
|
|
|
198
|
-
-
|
|
199
|
-
-
|
|
162
|
+
## XML-only SQL
|
|
163
|
+
- Every SQL statement lives in `src/main/resources/mapper/*.xml`.
|
|
164
|
+
NO `@Select` / `@Insert` / `@Update` / `@Delete` annotations on `@Mapper` methods.
|
|
165
|
+
- Each `@Mapper` interface has exactly one XML file at
|
|
166
|
+
`src/main/resources/mapper/{InterfaceName}.xml`.
|
|
167
|
+
- `<mapper namespace="...">` MUST be the fully qualified Java interface name.
|
|
168
|
+
The single existing exception is `TransferData.xml` (free-form `transfer.data`).
|
|
200
169
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
# 选项 A:npx(推荐 — 无需安装)
|
|
207
|
-
npx claudeos-core init
|
|
170
|
+
## Dynamic SQL
|
|
171
|
+
- `<if>` predicates MUST guard both null and empty:
|
|
172
|
+
`<if test="X != null and X != ''">`. Empty-only is the existing HIGH-severity bug pattern.
|
|
173
|
+
- Prefer `LIMIT n OFFSET m` over MySQL-style `LIMIT m, n`.
|
|
208
174
|
|
|
209
|
-
|
|
210
|
-
npm install -g claudeos-core
|
|
211
|
-
claudeos-core init
|
|
175
|
+
## Examples
|
|
212
176
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
# Linux/macOS(仅 Bash)
|
|
224
|
-
bash claudeos-core-tools/bootstrap.sh
|
|
177
|
+
✅ Correct:
|
|
178
|
+
```xml
|
|
179
|
+
<update id="update">
|
|
180
|
+
UPDATE articles
|
|
181
|
+
<set>
|
|
182
|
+
<if test="article.title != null and article.title != ''">title = #{article.title},</if>
|
|
183
|
+
updated_at = #{article.updatedAt}
|
|
184
|
+
</set>
|
|
185
|
+
WHERE id = #{article.id}
|
|
186
|
+
</update>
|
|
225
187
|
```
|
|
226
188
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
```
|
|
232
|
-
╔══════════════════════════════════════════════════╗
|
|
233
|
-
║ Select generated document language (required) ║
|
|
234
|
-
╚══════════════════════════════════════════════════╝
|
|
235
|
-
|
|
236
|
-
生成的文件(CLAUDE.md、Standards、Rules、
|
|
237
|
-
Skills、Guides)将以简体中文编写。
|
|
238
|
-
|
|
239
|
-
1. en — English
|
|
240
|
-
2. ko — 한국어 (Korean)
|
|
241
|
-
❯ 3. zh-CN — 简体中文 (Chinese Simplified)
|
|
242
|
-
4. ja — 日本語 (Japanese)
|
|
243
|
-
5. es — Español (Spanish)
|
|
244
|
-
6. vi — Tiếng Việt (Vietnamese)
|
|
245
|
-
7. hi — हिन्दी (Hindi)
|
|
246
|
-
8. ru — Русский (Russian)
|
|
247
|
-
9. fr — Français (French)
|
|
248
|
-
10. de — Deutsch (German)
|
|
249
|
-
|
|
250
|
-
↑↓ Move 1-0 Jump Enter Select ESC Cancel
|
|
189
|
+
❌ Incorrect:
|
|
190
|
+
```xml
|
|
191
|
+
<mapper namespace="article.mapper"> <!-- NO — namespace MUST be FQCN -->
|
|
251
192
|
```
|
|
193
|
+
````
|
|
252
194
|
|
|
253
|
-
|
|
195
|
+
`paths: ["**/*"]` glob 表示无论你在该项目里编辑哪个文件,Claude Code 都会自动加载这条 rule。✅/❌ 示例直接来自这个代码库的实际约定和已有的 bug 模式。
|
|
254
196
|
|
|
255
|
-
|
|
256
|
-
npx claudeos-core init --lang ko # Korean
|
|
257
|
-
npx claudeos-core init --lang ja # Japanese
|
|
258
|
-
npx claudeos-core init --lang en # English(默认)
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
> **注意:** 此设置仅更改生成文档文件的语言。代码分析(Pass 1–2)始终以英语运行;生成输出(Pass 3)以你选择的语言编写。生成文件中的代码示例保持其原始编程语言语法不变。
|
|
262
|
-
|
|
263
|
-
就这样。从 10 分钟(小型项目)到 2 小时(60+ 领域单体仓库)之后,所有文档都已生成并可以使用。CLI 显示带有百分比、经过时间和 ETA 的进度条,用于每个 Pass。关于按项目规模的详细耗时,请参阅[按项目规模自动扩展](#按项目规模自动扩展)。
|
|
264
|
-
|
|
265
|
-
### 手动分步安装
|
|
266
|
-
|
|
267
|
-
如果你希望完全控制每个阶段 — 或者自动化管道在任何步骤失败 — 你可以手动运行每个阶段。这也有助于理解 ClaudeOS-Core 的内部工作原理。
|
|
268
|
-
|
|
269
|
-
#### Step 1:克隆并安装依赖
|
|
270
|
-
|
|
271
|
-
```bash
|
|
272
|
-
cd /your/project/root
|
|
273
|
-
|
|
274
|
-
git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
|
|
275
|
-
cd claudeos-core-tools && npm install && cd ..
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
#### Step 2:创建目录结构
|
|
279
|
-
|
|
280
|
-
```bash
|
|
281
|
-
# Rules(v2.0.0:添加了 60.memory)
|
|
282
|
-
mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync,60.memory}
|
|
283
|
-
|
|
284
|
-
# Standards
|
|
285
|
-
mkdir -p claudeos-core/standard/{00.core,10.backend-api,20.frontend-ui,30.security-db,40.infra,50.verification,90.optional}
|
|
286
|
-
|
|
287
|
-
# Skills
|
|
288
|
-
mkdir -p claudeos-core/skills/{00.shared,10.backend-crud/scaffold-crud-feature,20.frontend-page/scaffold-page-feature,50.testing,90.experimental}
|
|
289
|
-
|
|
290
|
-
# Guide、Database、MCP、Generated、Memory(v2.0.0:添加了 memory;v2.1.0:移除了 plan)
|
|
291
|
-
mkdir -p claudeos-core/guide/{01.onboarding,02.usage,03.troubleshooting,04.architecture}
|
|
292
|
-
mkdir -p claudeos-core/{database,mcp-guide,generated,memory}
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
> **v2.1.0 注意:** `claudeos-core/plan/` 目录不再被创建。Master plan 生成已被移除,因为 master plan 是 Claude Code 在运行时从不读取的内部备份,而聚合它们会触发 `Prompt is too long` 失败。请使用 `git` 进行备份/恢复。
|
|
296
|
-
|
|
297
|
-
#### Step 3:运行 plan-installer(项目分析)
|
|
298
|
-
|
|
299
|
-
这会扫描你的项目、检测技术栈、查找领域、将其分成组,并生成提示。
|
|
300
|
-
|
|
301
|
-
```bash
|
|
302
|
-
node claudeos-core-tools/plan-installer/index.js
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
**输出(在 `claudeos-core/generated/` 中):**
|
|
306
|
-
- `project-analysis.json` — 检测到的技术栈、领域、前端信息
|
|
307
|
-
- `domain-groups.json` — Pass 1 的领域分组
|
|
308
|
-
- `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — 分析提示
|
|
309
|
-
- `pass2-prompt.md` — 合并提示
|
|
310
|
-
- `pass3-prompt.md` — 在顶部前置了 Phase 1 "Read Once, Extract Facts" 块(Rules A–E)的 Pass 3 提示模板。自动化管道会在运行时将 Pass 3 拆分为多个阶段;该模板会喂给每个阶段。
|
|
311
|
-
- `pass3-context.json` — Pass 3 提示优先采用的精简项目摘要(< 5 KB,在 Pass 2 之后构建)而非完整的 `pass2-merged.json`(v2.1.0)
|
|
312
|
-
- `pass4-prompt.md` — L4 内存脚手架提示(v2.0.0;对 `60.memory/` 规则写入也使用相同的 `staging-override.md`)
|
|
313
|
-
|
|
314
|
-
你可以在继续之前检查这些文件以验证检测准确性。
|
|
315
|
-
|
|
316
|
-
#### Step 4:Pass 1 — 深度代码分析(按领域分组)
|
|
317
|
-
|
|
318
|
-
为每个领域分组运行 Pass 1。查看 `domain-groups.json` 了解分组数量。
|
|
319
|
-
|
|
320
|
-
```bash
|
|
321
|
-
# 查看有多少组
|
|
322
|
-
cat claudeos-core/generated/domain-groups.json | node -e "
|
|
323
|
-
const g = JSON.parse(require('fs').readFileSync('/dev/stdin','utf-8'));
|
|
324
|
-
g.groups.forEach((g,i) => console.log('Group '+(i+1)+': ['+g.domains.join(', ')+'] ('+g.type+', ~'+g.estimatedFiles+' files)'));
|
|
325
|
-
"
|
|
326
|
-
|
|
327
|
-
# 为每组运行 Pass 1(替换领域和组号)
|
|
328
|
-
# 注意:v1.6.1+ 使用 Node.js String.replace() 而不是 perl — perl 不再
|
|
329
|
-
# 必需,replacement-function 语义可防止领域名中可能出现的
|
|
330
|
-
# $/&/$1 字符引起的 regex 注入。
|
|
331
|
-
#
|
|
332
|
-
# 对于 Group 1:
|
|
333
|
-
DOMAIN_LIST="user, order, product" PASS_NUM=1 node -e "
|
|
334
|
-
const fs = require('fs');
|
|
335
|
-
const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
|
|
336
|
-
const out = tpl
|
|
337
|
-
.replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
|
|
338
|
-
.replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
|
|
339
|
-
process.stdout.write(out);
|
|
340
|
-
" | claude -p --dangerously-skip-permissions
|
|
341
|
-
|
|
342
|
-
# 对于 Group 2(如果存在):
|
|
343
|
-
DOMAIN_LIST="payment, system, delivery" PASS_NUM=2 node -e "
|
|
344
|
-
const fs = require('fs');
|
|
345
|
-
const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
|
|
346
|
-
const out = tpl
|
|
347
|
-
.replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
|
|
348
|
-
.replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
|
|
349
|
-
process.stdout.write(out);
|
|
350
|
-
" | claude -p --dangerously-skip-permissions
|
|
351
|
-
|
|
352
|
-
# 对于前端组,将 pass1-backend-prompt.md → pass1-frontend-prompt.md 替换
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
**验证:** `ls claudeos-core/generated/pass1-*.json` 应该每组显示一个 JSON。
|
|
356
|
-
|
|
357
|
-
#### Step 5:Pass 2 — 合并分析结果
|
|
358
|
-
|
|
359
|
-
```bash
|
|
360
|
-
cat claudeos-core/generated/pass2-prompt.md \
|
|
361
|
-
| claude -p --dangerously-skip-permissions
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
**验证:** `claudeos-core/generated/pass2-merged.json` 应该存在,且有 9 个以上顶级键。
|
|
365
|
-
|
|
366
|
-
#### Step 6:Pass 3 — 生成所有文档(拆分为多个阶段)
|
|
367
|
-
|
|
368
|
-
**v2.1.0 注意:** Pass 3 在自动化管道中**始终以 split 模式运行**。每个阶段都是一个独立的 `claude -p` 调用,拥有全新的上下文窗口,因此无论项目规模如何,输出累积溢出在结构上都是不可能的。`pass3-prompt.md` 模板会在每个阶段组装时附带一个 `STAGE:` 指令,告诉 Claude 要输出哪一子集的文件。对于手动模式,最简单的路径仍然是喂入完整模板并让 Claude 在一次调用中生成所有内容 — 但这仅在小型项目(≤5 个领域)上可靠。对于更大的项目,请使用 `npx claudeos-core init` 让 split 运行器处理阶段编排。
|
|
369
|
-
|
|
370
|
-
**单次调用模式(仅小型项目,≤5 个领域):**
|
|
371
|
-
|
|
372
|
-
```bash
|
|
373
|
-
cat claudeos-core/generated/pass3-prompt.md \
|
|
374
|
-
| claude -p --dangerously-skip-permissions
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
**逐阶段模式(推荐用于所有项目规模):**
|
|
378
|
-
|
|
379
|
-
自动化管道会运行以下这些阶段。阶段列表如下:
|
|
197
|
+
</details>
|
|
380
198
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
| `3a` | `pass3a-facts.md`(5–10 KB 蒸馏事实表) | 读取一次 `pass2-merged.json`;后续阶段引用此文件 |
|
|
384
|
-
| `3b-core` | `CLAUDE.md`、通用 `standard/`、通用 `.claude/rules/` | 跨项目的文件;无领域特定输出 |
|
|
385
|
-
| `3b-1..N` | 领域特定的 `standard/60.domains/*.md` + 领域规则 | 每阶段 ≤15 个领域的批次(≥16 领域时自动分割) |
|
|
386
|
-
| `3c-core` | `guide/`(9 个文件)、`skills/00.shared/MANIFEST.md`、`skills/*/` orchestrators | 共享 skills 和所有面向用户的指南 |
|
|
387
|
-
| `3c-1..N` | `skills/20.frontend-page/scaffold-page-feature/` 下的领域子 skills | 每阶段 ≤15 个领域的批次 |
|
|
388
|
-
| `3d-aux` | `database/`、`mcp-guide/` | 固定大小,与领域数量无关 |
|
|
389
|
-
|
|
390
|
-
对于 1–15 领域的项目,这会展开为 4 个阶段(`3a`、`3b-core`、`3c-core`、`3d-aux` — 无批次子分割)。对于 16–30 领域,它会展开为 8 个阶段(`3b` 和 `3c` 各自再分为 2 个批次)。完整表格请参阅[按项目规模自动扩展](#按项目规模自动扩展)。
|
|
391
|
-
|
|
392
|
-
**验证:** 你的项目根目录中应该存在 `CLAUDE.md`,并且应该写入 `claudeos-core/generated/pass3-complete.json` 标记。在 split 模式下,该标记包含 `mode: "split"` 以及一个列出每个已完成阶段的 `groupsCompleted` 数组 — 部分完成标记逻辑据此在崩溃后从正确的阶段恢复,而不是从 `3a` 重新开始(那会使 token 成本翻倍)。
|
|
393
|
-
|
|
394
|
-
> **暂存注意:** Pass 3 首先将规则文件写入 `claudeos-core/generated/.staged-rules/`,因为 Claude Code 的 sensitive-path 策略阻止直接写入 `.claude/`。自动化管道会在每个阶段后自动处理移动。如果你手动运行某个阶段,你需要自己移动暂存的树:`mv claudeos-core/generated/.staged-rules/* .claude/rules/`(保留子路径)。
|
|
199
|
+
<details>
|
|
200
|
+
<summary><strong>🧠 自动生成的 <code>decision-log.md</code> 种子(实际输出)</strong></summary>
|
|
395
201
|
|
|
396
|
-
|
|
202
|
+
```markdown
|
|
203
|
+
## 2026-04-26 — CQRS-lite read/write split inside the persistence layer
|
|
397
204
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
205
|
+
- **Context:** Writes go through `core.*Repository` port → `MyBatis*Repository`
|
|
206
|
+
adapter → `io.spring.infrastructure.mybatis.mapper.{Aggregate}Mapper`.
|
|
207
|
+
Reads bypass the domain port: application service →
|
|
208
|
+
`io.spring.infrastructure.mybatis.readservice.{Concept}ReadService` directly,
|
|
209
|
+
returning flat `*Data` DTOs from `io.spring.application.data.*`.
|
|
210
|
+
- **Options considered:** Single repository surface returning hydrated entities
|
|
211
|
+
for both reads and writes.
|
|
212
|
+
- **Decision:** Same database, two `@Mapper` packages — `mapper/` (write side,
|
|
213
|
+
operates on core entities) and `readservice/` (read side, returns `*Data` DTOs).
|
|
214
|
+
Read DTOs avoid entity hydration overhead.
|
|
215
|
+
- **Consequences:** Reads are NOT routed through the domain port — this is
|
|
216
|
+
intentional, not a bug. Application services may inject both a `*Repository`
|
|
217
|
+
(writes) and one or more `*ReadService` interfaces (reads) at the same time.
|
|
218
|
+
Do NOT add hydrate-then-map glue in the read path.
|
|
401
219
|
```
|
|
402
220
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
> **v2.1.0 gap-fill:** Pass 4 也会确保 `claudeos-core/skills/00.shared/MANIFEST.md` 存在。如果 Pass 3c 省略了它(在 skill-sparse 项目上可能发生,因为各 stack 的 `pass3.md` 模板将 `MANIFEST.md` 列为生成目标但未标记为 REQUIRED),gap-fill 会创建一个最小 stub,使 `.claude/rules/50.sync/02.skills-sync.md`(v2.2.0 路径 — sync 规则数量从 3 个减至 2 个,原 `03` 变为 `02`)始终有一个有效的引用目标。幂等:若文件已有真实内容(>20 字符)则跳过。
|
|
221
|
+
Pass 4 用从 `pass2-merged.json` 中提取的架构决策为 `decision-log.md` 播种 — 这样以后的会话不仅记得代码库 _长成什么样_,也记得 _为什么_ 这样。
|
|
406
222
|
|
|
407
|
-
>
|
|
223
|
+
</details>
|
|
408
224
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
```bash
|
|
412
|
-
# 生成元数据(在其他检查之前必需)
|
|
413
|
-
node claudeos-core-tools/manifest-generator/index.js
|
|
414
|
-
|
|
415
|
-
# 运行所有检查
|
|
416
|
-
node claudeos-core-tools/health-checker/index.js
|
|
225
|
+
---
|
|
417
226
|
|
|
418
|
-
|
|
419
|
-
node claudeos-core-tools/plan-validator/index.js --check # Plan ↔ disk 一致性
|
|
420
|
-
node claudeos-core-tools/sync-checker/index.js # 未注册/孤立文件
|
|
421
|
-
node claudeos-core-tools/content-validator/index.js # 文件质量检查(包括 memory/ 部分 [9/9])
|
|
422
|
-
node claudeos-core-tools/pass-json-validator/index.js # Pass 1–4 JSON + 完成标记检查
|
|
423
|
-
```
|
|
227
|
+
## Quick Start
|
|
424
228
|
|
|
425
|
-
|
|
229
|
+
**前置条件:** Node.js 18+,[Claude Code](https://docs.anthropic.com/en/docs/claude-code) 已安装并完成认证。
|
|
426
230
|
|
|
427
231
|
```bash
|
|
428
|
-
#
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
# 查看 CLAUDE.md
|
|
432
|
-
head -30 CLAUDE.md
|
|
433
|
-
|
|
434
|
-
# 查看一个 standard 文件
|
|
435
|
-
cat claudeos-core/standard/00.core/01.project-overview.md | head -20
|
|
436
|
-
|
|
437
|
-
# 查看规则
|
|
438
|
-
ls .claude/rules/*/
|
|
439
|
-
```
|
|
232
|
+
# 1. 进入你的项目根目录
|
|
233
|
+
cd my-spring-boot-project
|
|
440
234
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
### 开始使用
|
|
444
|
-
|
|
445
|
-
```
|
|
446
|
-
# 在 Claude Code 中 — 自然地提问:
|
|
447
|
-
"为 order 领域创建 CRUD"
|
|
448
|
-
"添加用户认证 API"
|
|
449
|
-
"重构这段代码以匹配项目模式"
|
|
450
|
-
|
|
451
|
-
# Claude Code 会自动引用你生成的 Standards、Rules 和 Skills。
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
---
|
|
455
|
-
|
|
456
|
-
## 工作原理 — 4-Pass 管道
|
|
457
|
-
|
|
458
|
-
```
|
|
235
|
+
# 2. 运行 init(它会分析你的代码并请求 Claude 写出 rules)
|
|
459
236
|
npx claudeos-core init
|
|
460
|
-
│
|
|
461
|
-
├── [1] npm install ← 依赖(~10 秒)
|
|
462
|
-
├── [2] 目录结构 ← 创建文件夹(~1 秒)
|
|
463
|
-
├── [3] plan-installer (Node.js) ← 项目扫描(~5 秒)
|
|
464
|
-
│ ├── 自动检测技术栈(多技术栈感知)
|
|
465
|
-
│ ├── 提取领域列表(标记:backend/frontend)
|
|
466
|
-
│ ├── 分成领域分组(按类型)
|
|
467
|
-
│ ├── 构建 pass3-context.json(精简摘要,v2.1.0)
|
|
468
|
-
│ └── 选择技术栈专用提示(按类型)
|
|
469
|
-
│
|
|
470
|
-
├── [4] Pass 1 × N (claude -p) ← 深度代码分析(~2-8 分钟)
|
|
471
|
-
│ ├── ⚙️ 后端分组 → 后端专用提示
|
|
472
|
-
│ └── 🎨 前端分组 → 前端专用提示
|
|
473
|
-
│
|
|
474
|
-
├── [5] Pass 2 × 1 (claude -p) ← 合并分析(~1 分钟)
|
|
475
|
-
│ └── 将所有 Pass 1 结果合并到 pass2-merged.json
|
|
476
|
-
│
|
|
477
|
-
├── [6] Pass 3 (split 模式, v2.1.0) ← 生成一切
|
|
478
|
-
│ │
|
|
479
|
-
│ ├── 3a × 1 (claude -p) ← 事实提取(~5-10 分钟)
|
|
480
|
-
│ │ └── 读取 pass2-merged.json 一次 → pass3a-facts.md
|
|
481
|
-
│ │
|
|
482
|
-
│ ├── 3b-core × 1 (claude -p) ← CLAUDE.md + 通用 standard/rules
|
|
483
|
-
│ ├── 3b-1..N × N (claude -p) ← 领域 standards/rules(每批 ≤15 个领域)
|
|
484
|
-
│ │
|
|
485
|
-
│ ├── 3c-core × 1 (claude -p) ← Guides + 共享 skills + MANIFEST.md
|
|
486
|
-
│ ├── 3c-1..N × N (claude -p) ← 领域子 skills(每批 ≤15 个领域)
|
|
487
|
-
│ │
|
|
488
|
-
│ └── 3d-aux × 1 (claude -p) ← database/ + mcp-guide/ 存根
|
|
489
|
-
│
|
|
490
|
-
├── [7] Pass 4 × 1 (claude -p) ← 内存脚手架(~30 秒-5 分钟)
|
|
491
|
-
│ ├── 种子 memory/(decision-log、failure-patterns、…)
|
|
492
|
-
│ ├── 生成 60.memory/ 规则
|
|
493
|
-
│ ├── 将 "Memory (L4)" 部分附加到 CLAUDE.md
|
|
494
|
-
│ └── Gap-fill:确保 skills/00.shared/MANIFEST.md 存在(v2.1.0)
|
|
495
|
-
│
|
|
496
|
-
└── [8] 验证 ← 自动运行 health checker
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
### 为什么是 4 个 Pass?
|
|
500
|
-
|
|
501
|
-
**Pass 1** 是唯一读取你的源代码的 pass。它为每个领域选择代表性文件,并跨 55–95 个分析类别(每个技术栈)提取模式。对于大型项目,Pass 1 会多次运行 — 每个领域分组一次。在多技术栈项目中(例如 Java backend + React frontend),backend 和 frontend 领域使用**针对每个技术栈定制的不同分析提示**。
|
|
502
|
-
|
|
503
|
-
**Pass 2** 将所有 Pass 1 结果合并成统一的分析:共同模式(100% 共享)、多数模式(50%+ 共享)、领域特定模式、按严重性的反模式和横切关注点(命名、安全、DB、测试、日志记录、性能)。Backend 和 frontend 结果一起合并。
|
|
504
|
-
|
|
505
|
-
**Pass 3**(split 模式,v2.1.0)接受合并后的分析,并跨多个顺序的 `claude -p` 调用生成整个文件生态系统(CLAUDE.md、rules、standards、skills、guides)。关键的洞察在于输出累积溢出无法从输入规模预测:单次调用的 Pass 3 在 2 领域项目上运行正常,在约 5 领域时可靠失败,而失败边界会根据每个文件碰巧多么冗长而移动。Split 模式完全绕开了这个问题 — 每个阶段以全新的上下文窗口开始,并写入有限的文件子集。跨阶段一致性(这是单次调用方法的主要优势)通过 `pass3a-facts.md` 得以保留,它是一个 5–10 KB 的蒸馏事实表,之后的每个阶段都会引用它。
|
|
506
|
-
|
|
507
|
-
Pass 3 提示模板还包括一个 **Phase 1 "Read Once, Extract Facts" 块**,其中有五条进一步约束输出量的规则:
|
|
508
237
|
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
- **Rule C** — 通过事实表作为单一可信源强制跨文件一致性。
|
|
512
|
-
- **Rule D** — 输出简洁:文件写入之间仅一行(`[WRITE]`/`[SKIP]`),不复述事实表,不回显文件内容。
|
|
513
|
-
- **Rule E** — 批量幂等检查:在 PHASE 2 开始时进行一次 `Glob`,而不是每个目标调用 `Read`。
|
|
514
|
-
|
|
515
|
-
在 **v2.2.0** 中,Pass 3 会将一个确定性的 CLAUDE.md scaffold(`pass-prompts/templates/common/claude-md-scaffold.md`)内联到提示中。这固定了 8 个顶层章节的标题和顺序,使生成的 `CLAUDE.md` 不会在项目之间漂移,同时仍允许每个章节的内容适应各个项目。stack-detector 的新 `.env` 解析器(`lib/env-parser.js`)向提示供应 `stack.envInfo`,使 port/host/API target 行匹配项目实际声明的值,而不是 framework 默认值。
|
|
516
|
-
|
|
517
|
-
**Pass 4** 搭建 L4 内存层:持久化的团队知识文件(decision-log、failure-patterns、compaction 策略、auto-rule-update)加上告诉未来会话何时以及如何读/写这些文件的 `60.memory/` 规则。内存层是 Claude Code 能够跨会话积累教训而不是每次重新发现的原因。当 `--lang` 是非英语时,回退的静态内容在被写入之前会通过 Claude 翻译。v2.1.0 为 `skills/00.shared/MANIFEST.md` 添加了一个 gap-fill,以防 Pass 3c 省略它。
|
|
518
|
-
|
|
519
|
-
---
|
|
238
|
+
# 3. 完成。打开 Claude Code 开始编码 — rules 已经加载好了。
|
|
239
|
+
```
|
|
520
240
|
|
|
521
|
-
|
|
241
|
+
`init` 完成后**你会得到**:
|
|
522
242
|
|
|
523
243
|
```
|
|
524
244
|
your-project/
|
|
525
|
-
│
|
|
526
|
-
├── CLAUDE.md ← Claude Code 入口点(8 部分确定性结构,v2.2.0)
|
|
527
|
-
│
|
|
528
245
|
├── .claude/
|
|
529
|
-
│ └── rules/
|
|
530
|
-
│ ├── 00.core/
|
|
531
|
-
│ ├── 10.backend/
|
|
532
|
-
│ ├── 20.frontend/
|
|
533
|
-
│ ├── 30.security-db/
|
|
534
|
-
│ ├── 40.infra/
|
|
535
|
-
│ ├── 50.sync/
|
|
536
|
-
│
|
|
537
|
-
│
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
│
|
|
541
|
-
│ │ ├──
|
|
542
|
-
│ │ ├──
|
|
543
|
-
│ │ ├──
|
|
544
|
-
│ │ ├──
|
|
545
|
-
│ │ ├──
|
|
546
|
-
│ │ ├──
|
|
547
|
-
│ │ ├──
|
|
548
|
-
│ │
|
|
549
|
-
│
|
|
550
|
-
│
|
|
551
|
-
│
|
|
552
|
-
│
|
|
553
|
-
│
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
│ │ ├── 00.core/ ← 概述、架构、命名
|
|
559
|
-
│ │ ├── 10.backend-api/ ← API 模式(技术栈专用)
|
|
560
|
-
│ │ ├── 20.frontend-ui/ ← 前端模式(如果检测到)
|
|
561
|
-
│ │ ├── 30.security-db/ ← 安全、DB schema、工具
|
|
562
|
-
│ │ ├── 40.infra/ ← 配置、日志、CI/CD
|
|
563
|
-
│ │ ├── 50.verification/ ← 构建验证、测试
|
|
564
|
-
│ │ ├── 60.domains/ ← 每个领域的 standards(由 Pass 3b-N 写入,v2.1.0)
|
|
565
|
-
│ │ └── 90.optional/ ← 可选约定(技术栈专用附加)
|
|
566
|
-
│ ├── skills/ ← CRUD/page 脚手架技能
|
|
567
|
-
│ │ └── 00.shared/MANIFEST.md ← 已注册 skills 的单一可信源
|
|
568
|
-
│ ├── guide/ ← 入门、FAQ、故障排除(9 个文件)
|
|
569
|
-
│ ├── database/ ← DB schema、迁移指南
|
|
570
|
-
│ ├── mcp-guide/ ← MCP 服务器集成指南
|
|
571
|
-
│ └── memory/ ← L4:团队知识(4 个文件)— 提交这些
|
|
572
|
-
│ ├── decision-log.md ← 设计决策背后的"为什么"
|
|
573
|
-
│ ├── failure-patterns.md ← 重现错误 & 修复(自动评分 — `npx claudeos-core memory score`)
|
|
574
|
-
│ ├── compaction.md ← 4 阶段压缩策略(运行 `npx claudeos-core memory compact`)
|
|
575
|
-
│ └── auto-rule-update.md ← 规则改进提议(`npx claudeos-core memory propose-rules`)
|
|
576
|
-
│
|
|
577
|
-
└── claudeos-core-tools/ ← 此工具包(不要修改)
|
|
578
|
-
```
|
|
579
|
-
|
|
580
|
-
每个 standard 文件都包含 ✅ 正确示例、❌ 错误示例和规则摘要表 — 全部来自你的实际代码模式,而不是通用模板。
|
|
581
|
-
|
|
582
|
-
> **v2.1.0 注意:** `claudeos-core/plan/` 不再生成。Master plan 是 Claude Code 在运行时不消费的内部备份,而在 Pass 3 中聚合它们是输出累积溢出的主要原因。请使用 `git` 进行备份/恢复。从 v2.0.x 升级的项目可以安全地删除任何现存的 `claudeos-core/plan/` 目录。
|
|
583
|
-
|
|
584
|
-
### Gitignore 建议
|
|
585
|
-
|
|
586
|
-
**提交**(团队知识 — 旨在共享):
|
|
587
|
-
- `CLAUDE.md` — Claude Code 入口点
|
|
588
|
-
- `.claude/rules/**` — 自动加载的规则
|
|
589
|
-
- `claudeos-core/standard/**`、`skills/**`、`guide/**`、`database/**`、`mcp-guide/**`、`plan/**` — 生成的文档
|
|
590
|
-
- `claudeos-core/memory/**` — 决策历史、失败模式、规则提议
|
|
591
|
-
|
|
592
|
-
**不要提交**(可重新生成的构建产物):
|
|
593
|
-
|
|
594
|
-
```gitignore
|
|
595
|
-
# ClaudeOS-Core — 生成的分析 & 翻译缓存
|
|
596
|
-
claudeos-core/generated/
|
|
597
|
-
```
|
|
598
|
-
|
|
599
|
-
`generated/` 目录包含分析 JSON(`pass1-*.json`、`pass2-merged.json`)、提示(`pass1/2/3/4-prompt.md`)、Pass 完成标记(`pass3-complete.json`、`pass4-memory.json`)、翻译缓存(`.i18n-cache-<lang>.json`)和临时暂存目录(`.staged-rules/`)— 全部可以通过重新运行 `npx claudeos-core init` 重建。
|
|
246
|
+
│ └── rules/ ← Claude Code 自动加载
|
|
247
|
+
│ ├── 00.core/ (通用 rules — 命名、架构)
|
|
248
|
+
│ ├── 10.backend/ (后端栈 rules,如有)
|
|
249
|
+
│ ├── 20.frontend/ (前端栈 rules,如有)
|
|
250
|
+
│ ├── 30.security-db/ (安全 & DB 约定)
|
|
251
|
+
│ ├── 40.infra/ (env、日志、CI/CD)
|
|
252
|
+
│ ├── 50.sync/ (文档同步提醒 — rules only)
|
|
253
|
+
│ ├── 60.memory/ (memory rules — Pass 4,rules only)
|
|
254
|
+
│ ├── 70.domains/{type}/ (按域 rules,type = backend|frontend)
|
|
255
|
+
│ └── 80.verification/ (测试策略 + 构建验证提醒)
|
|
256
|
+
├── claudeos-core/
|
|
257
|
+
│ ├── standard/ ← 参考文档(镜像分类结构)
|
|
258
|
+
│ │ ├── 00.core/ (项目概览、架构、命名)
|
|
259
|
+
│ │ ├── 10.backend/ (后端 reference — 仅当存在后端栈)
|
|
260
|
+
│ │ ├── 20.frontend/ (前端 reference — 仅当存在前端栈)
|
|
261
|
+
│ │ ├── 30.security-db/ (安全 & DB reference)
|
|
262
|
+
│ │ ├── 40.infra/ (env / 日志 / CI-CD reference)
|
|
263
|
+
│ │ ├── 70.domains/{type}/ (按域 reference)
|
|
264
|
+
│ │ ├── 80.verification/ (构建 / 启动 / 测试 reference — standard only)
|
|
265
|
+
│ │ └── 90.optional/ (栈相关附加 — standard only)
|
|
266
|
+
│ ├── skills/ (Claude 可应用的可复用模式)
|
|
267
|
+
│ ├── guide/ (常见任务的 how-to 指南)
|
|
268
|
+
│ ├── database/ (schema 概览、迁移指南)
|
|
269
|
+
│ ├── mcp-guide/ (MCP 集成笔记)
|
|
270
|
+
│ └── memory/ (decision log、failure patterns、compaction)
|
|
271
|
+
└── CLAUDE.md (Claude 最先读取的索引)
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
`rules/` 与 `standard/` 之间共享相同数字 prefix 的分类代表同一概念领域(例如 `10.backend` rules ↔ `10.backend` standards)。Rules-only 分类:`50.sync`(文档同步提醒)、`60.memory`(Pass 4 memory)。Standard-only 分类:`90.optional`(无强制力的栈相关附加)。其他 prefix(`00`、`10`、`20`、`30`、`40`、`70`、`80`)在 `rules/` 和 `standard/` 中都存在。现在 Claude Code 认识你的项目了。
|
|
600
275
|
|
|
601
276
|
---
|
|
602
277
|
|
|
603
|
-
##
|
|
604
|
-
|
|
605
|
-
Pass 3 的 split 模式会随领域数扩展阶段数。批次子分割在 16 个领域时启动,使每个阶段的输出保持在 ~50 个文件以下,这是在输出累积溢出开始之前 `claude -p` 的经验安全范围。
|
|
278
|
+
## 适合谁?
|
|
606
279
|
|
|
607
|
-
|
|
|
608
|
-
|
|
609
|
-
|
|
|
610
|
-
|
|
|
611
|
-
|
|
|
612
|
-
| 超大型 | 31–45 | 10 | 13–14 | ~100–150 分钟 |
|
|
613
|
-
| 超超大型 | 46–60 | 12 | 15–16 | ~150–200 分钟 |
|
|
614
|
-
| 超超超大型 | 61+ | 14+ | 17+ | 200 分钟+ |
|
|
615
|
-
|
|
616
|
-
阶段数公式(分批时):`1 (3a) + 1 (3b-core) + N (3b-1..N) + 1 (3c-core) + N (3c-1..N) + 1 (3d-aux) = 2N + 4`,其中 `N = ceil(totalDomains / 15)`。
|
|
280
|
+
| 你是… | 这工具帮你… |
|
|
281
|
+
|---|---|
|
|
282
|
+
| **用 Claude Code 启动新项目的独立开发者** | 完全跳过"教 Claude 我的约定"这一步 |
|
|
283
|
+
| **维护共享标准的团队负责人** | 自动化 `.claude/rules/` 的繁琐维护 |
|
|
284
|
+
| **已经在用 Claude Code 但厌倦修代码的人** | 让 Claude 跟随**你的**模式,而非"看上去通用"的模式 |
|
|
617
285
|
|
|
618
|
-
|
|
286
|
+
**不适合的场景:** 你想要一个开箱即用的预设 agents/skills/rules 包,不需要 scan 步骤(参见 [docs/zh-CN/comparison.md](docs/zh-CN/comparison.md));或者你的项目还不属于[受支持的栈](#supported-stacks)之一。
|
|
619
287
|
|
|
620
288
|
---
|
|
621
289
|
|
|
622
|
-
##
|
|
623
|
-
|
|
624
|
-
ClaudeOS-Core 包含 5 个内置验证工具,它们在生成后自动运行:
|
|
625
|
-
|
|
626
|
-
```bash
|
|
627
|
-
# 一次运行所有检查(推荐)
|
|
628
|
-
npx claudeos-core health
|
|
290
|
+
## 它是怎么工作的?
|
|
629
291
|
|
|
630
|
-
|
|
631
|
-
npx claudeos-core validate # Plan ↔ disk 比较
|
|
632
|
-
npx claudeos-core refresh # Disk → Plan 同步
|
|
633
|
-
npx claudeos-core restore # Plan → Disk 恢复
|
|
292
|
+
ClaudeOS-Core 把通常的 Claude Code 工作流反过来:
|
|
634
293
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
node claudeos-core-tools/plan-validator/index.js --check
|
|
639
|
-
node claudeos-core-tools/sync-checker/index.js
|
|
294
|
+
```
|
|
295
|
+
通常: 你描述项目 → Claude 猜你的栈 → Claude 写文档
|
|
296
|
+
本工具: 代码读出你的栈 → 代码把已确认的事实交给 Claude → Claude 基于事实写文档
|
|
640
297
|
```
|
|
641
298
|
|
|
642
|
-
|
|
643
|
-
|---|---|
|
|
644
|
-
| **manifest-generator** | 构建元数据 JSON(`rule-manifest.json`、`sync-map.json`,初始化 `stale-report.json`);索引包括 `memory/` 在内的 7 个目录(摘要中的 `totalMemory`)。v2.1.0:由于 master plans 已被移除,`plan-manifest.json` 不再生成。 |
|
|
645
|
-
| **plan-validator** | 为仍保有 `claudeos-core/plan/` 的项目(旧版升级情形)验证 master plan 的 `<file>` 块与 disk 一致。v2.1.0:当 `plan/` 缺失或为空时跳过 `plan-sync-status.json` 的生成 — `stale-report.json` 仍然会记录一条通过的 no-op。 |
|
|
646
|
-
| **sync-checker** | 检测未注册的文件(在 disk 上但不在 plan 中)和孤立条目 — 覆盖 7 个目录(v2.0.0 中添加了 `memory/`)。当 `sync-map.json` 没有映射时干净退出(v2.1.0 默认状态)。 |
|
|
647
|
-
| **content-validator** | 9 部分质量检查 — 空文件、缺失的 ✅/❌ 示例、必需部分,加上 L4 内存脚手架完整性(decision-log 标题日期、failure-pattern 必需字段、fence-aware 解析) |
|
|
648
|
-
| **pass-json-validator** | 验证 Pass 1–4 JSON 结构以及 `pass3-complete.json`(split-mode 形状,v2.1.0)和 `pass4-memory.json` 完成标记 |
|
|
649
|
-
|
|
650
|
-
---
|
|
651
|
-
|
|
652
|
-
## Claude Code 如何使用你的文档
|
|
653
|
-
|
|
654
|
-
ClaudeOS-Core 生成 Claude Code 实际读取的文档 — 以下是它的工作方式:
|
|
655
|
-
|
|
656
|
-
### Claude Code 自动读取的内容
|
|
299
|
+
核心思想:**Node.js scanner 先读你的源代码**(deterministic,没有 AI),然后 4-pass Claude 流水线在 scanner 找到的事实约束下写文档。Claude 没法编造代码里实际不存在的路径或框架。
|
|
657
300
|
|
|
658
|
-
|
|
659
|
-
|---|---|---|
|
|
660
|
-
| `CLAUDE.md` | 每次会话开始时 | 始终 |
|
|
661
|
-
| `.claude/rules/00.core/*` | 编辑任何文件时(`paths: ["**/*"]`) | 始终 |
|
|
662
|
-
| `.claude/rules/10.backend/*` | 编辑任何文件时(`paths: ["**/*"]`) | 始终 |
|
|
663
|
-
| `.claude/rules/20.frontend/*` | 编辑任何前端文件时(限定在 component/page/style 路径) | 条件性 |
|
|
664
|
-
| `.claude/rules/30.security-db/*` | 编辑任何文件时(`paths: ["**/*"]`) | 始终 |
|
|
665
|
-
| `.claude/rules/40.infra/*` | 仅编辑 config/infra 文件时(限定路径) | 条件性 |
|
|
666
|
-
| `.claude/rules/50.sync/*` | 仅编辑 claudeos-core 文件时(限定路径) | 条件性 |
|
|
667
|
-
| `.claude/rules/60.memory/*` | 编辑 `claudeos-core/memory/*` 时(限定到 memory 路径)— 指示**如何**读/写按需内存层 | 条件性(v2.0.0) |
|
|
301
|
+
完整架构见 [docs/zh-CN/architecture.md](docs/zh-CN/architecture.md)。
|
|
668
302
|
|
|
669
|
-
|
|
303
|
+
---
|
|
670
304
|
|
|
671
|
-
|
|
305
|
+
## Supported Stacks
|
|
672
306
|
|
|
673
|
-
|
|
674
|
-
- `claudeos-core/database/**` — DB schema(用于查询、映射器、迁移)
|
|
675
|
-
- `claudeos-core/memory/**`(v2.0.0)— L4 团队知识层;**不**自动加载(在每次会话中都会太嘈杂)。相反,`60.memory/*` 规则告诉 Claude *何时* 读取这些文件:在会话开始时(浏览最近的 `decision-log.md` + 高重要性的 `failure-patterns.md`),以及在做出决策或遇到重现错误时按需追加。
|
|
307
|
+
12 个栈,从你的项目文件中自动检测:
|
|
676
308
|
|
|
677
|
-
|
|
309
|
+
**Backend:** Java/Spring Boot · Kotlin/Spring Boot · Node/Express · Node/Fastify · Node/NestJS · Python/Django · Python/FastAPI · Python/Flask
|
|
678
310
|
|
|
679
|
-
|
|
311
|
+
**Frontend:** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
|
|
680
312
|
|
|
681
|
-
|
|
313
|
+
多栈项目(例如 Spring Boot 后端 + Next.js 前端)开箱即用。
|
|
682
314
|
|
|
683
|
-
|
|
684
|
-
|---|---|
|
|
685
|
-
| `claudeos-core/plan/` | 旧版项目(v2.0.x 及更早)的 Master Plan 备份。v2.1.0 不再生成。如果存在,Claude Code 不会自动加载 — 仅按需读取。 |
|
|
686
|
-
| `claudeos-core/generated/` | 构建元数据 JSON、提示、Pass 标记、翻译缓存、`.staged-rules/`。不用于编码。 |
|
|
687
|
-
| `claudeos-core/guide/` | 面向人类的入门指南。 |
|
|
688
|
-
| `claudeos-core/mcp-guide/` | MCP 服务器文档。不用于编码。 |
|
|
689
|
-
| `claudeos-core/memory/`(自动加载) | **设计上禁用自动加载** — 会在每次会话中膨胀上下文。改为通过 `60.memory/*` 规则按需读取(例如 `failure-patterns.md` 的会话开始扫描)。始终提交这些文件。 |
|
|
315
|
+
每个 scanner 的检测规则和提取内容,见 [docs/zh-CN/stacks.md](docs/zh-CN/stacks.md)。
|
|
690
316
|
|
|
691
317
|
---
|
|
692
318
|
|
|
693
319
|
## 日常工作流
|
|
694
320
|
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
```
|
|
698
|
-
# 像往常一样使用 Claude Code — 它会自动引用你的标准:
|
|
699
|
-
"为 order 领域创建 CRUD"
|
|
700
|
-
"添加用户资料更新 API"
|
|
701
|
-
"重构这段代码以匹配项目模式"
|
|
702
|
-
```
|
|
703
|
-
|
|
704
|
-
### 手动编辑标准后
|
|
321
|
+
三条命令覆盖约 95% 的使用场景:
|
|
705
322
|
|
|
706
323
|
```bash
|
|
707
|
-
#
|
|
708
|
-
npx claudeos-core
|
|
709
|
-
|
|
710
|
-
# 验证一切都是一致的
|
|
711
|
-
npx claudeos-core health
|
|
712
|
-
```
|
|
713
|
-
|
|
714
|
-
### 当文档损坏时
|
|
324
|
+
# 在某个项目首次运行
|
|
325
|
+
npx claudeos-core init
|
|
715
326
|
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
# 定期提交你生成的文档,这样你可以回滚特定文件而无需重新生成:
|
|
719
|
-
git checkout HEAD -- .claude/rules/ claudeos-core/
|
|
327
|
+
# 手动改了 standards 或 rules 之后
|
|
328
|
+
npx claudeos-core lint
|
|
720
329
|
|
|
721
|
-
#
|
|
722
|
-
npx claudeos-core
|
|
330
|
+
# 健康检查(commit 前或在 CI 中运行)
|
|
331
|
+
npx claudeos-core health
|
|
723
332
|
```
|
|
724
333
|
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
L4 内存层(`claudeos-core/memory/`)跨会话积累团队知识。3 个 CLI 子命令保持其健康:
|
|
334
|
+
memory layer 维护用的另外两条:
|
|
728
335
|
|
|
729
336
|
```bash
|
|
730
|
-
#
|
|
337
|
+
# 压缩 failure-patterns 日志(定期运行)
|
|
731
338
|
npx claudeos-core memory compact
|
|
732
|
-
# Stage 1:总结过期条目(>30 天,正文 → 一行)
|
|
733
|
-
# Stage 2:合并重复标题(frequency 求和,保留最新 fix)
|
|
734
|
-
# Stage 3:丢弃低重要性 + 过期(importance <3 AND lastSeen >60 天)
|
|
735
|
-
# Stage 4:强制每个文件 400 行上限(最古老的低重要性首先丢弃)
|
|
736
|
-
|
|
737
|
-
# Score:按重要性重新排名 failure-patterns.md 条目
|
|
738
|
-
npx claudeos-core memory score
|
|
739
|
-
# importance = round(frequency × 1.5 + recency × 5),最大 10
|
|
740
|
-
# 在追加几个新的失败模式后运行
|
|
741
339
|
|
|
742
|
-
#
|
|
340
|
+
# 把高频 failure pattern 提升为提议规则
|
|
743
341
|
npx claudeos-core memory propose-rules
|
|
744
|
-
# 读取 frequency ≥ 3 的 failure-patterns.md 条目
|
|
745
|
-
# 计算 confidence(加权证据的 sigmoid × 锚点乘数)
|
|
746
|
-
# 将提议写入 memory/auto-rule-update.md(不自动应用)
|
|
747
|
-
# Confidence ≥ 0.70 值得认真审查;接受 → 编辑规则 + 记录决策
|
|
748
|
-
|
|
749
|
-
# v2.1.0:`memory --help` 现在路由到子命令帮助(之前显示顶层)
|
|
750
|
-
npx claudeos-core memory --help
|
|
751
342
|
```
|
|
752
343
|
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
何时写入内存(Claude 按需执行此操作,但你也可以手动编辑):
|
|
756
|
-
- **`decision-log.md`** — 每当你在竞争模式之间选择、选择库、定义团队约定或决定*不*做某事时追加新条目。仅追加;从不编辑历史条目。
|
|
757
|
-
- **`failure-patterns.md`** — 在重现错误或不明显根本原因的**第二次出现**时追加。首次错误不需要条目。
|
|
758
|
-
- `compaction.md` 和 `auto-rule-update.md` — 由上面的 CLI 子命令生成/管理;不要手动编辑。
|
|
759
|
-
|
|
760
|
-
### CI/CD 集成
|
|
761
|
-
|
|
762
|
-
```yaml
|
|
763
|
-
# GitHub Actions 示例
|
|
764
|
-
- run: npx claudeos-core validate
|
|
765
|
-
# Exit code 1 阻止 PR
|
|
766
|
-
|
|
767
|
-
# 可选:每月内存维护(单独的 cron workflow)
|
|
768
|
-
- run: npx claudeos-core memory compact
|
|
769
|
-
- run: npx claudeos-core memory score
|
|
770
|
-
```
|
|
771
|
-
|
|
772
|
-
---
|
|
773
|
-
|
|
774
|
-
## 这有什么不同?
|
|
775
|
-
|
|
776
|
-
### 与其他 Claude Code 工具对比
|
|
777
|
-
|
|
778
|
-
| | ClaudeOS-Core | Everything Claude Code (50K+ ⭐) | Harness | specs-generator | Claude `/init` |
|
|
779
|
-
|---|---|---|---|---|---|
|
|
780
|
-
| **方法** | 代码先分析,然后 LLM 生成 | 预构建配置预设 | LLM 设计 agent 团队 | LLM 生成规范文档 | LLM 编写 CLAUDE.md |
|
|
781
|
-
| **读取你的源代码** | ✅ 确定性静态分析 | ❌ | ❌ | ❌(LLM 读取) | ❌(LLM 读取) |
|
|
782
|
-
| **技术栈检测** | 代码确认(ORM、DB、构建工具、pkg manager) | N/A(技术栈无关) | LLM 猜测 | LLM 猜测 | LLM 猜测 |
|
|
783
|
-
| **领域检测** | 代码确认(Java 5 模式、Kotlin CQRS、Next.js FSD) | N/A | LLM 猜测 | N/A | N/A |
|
|
784
|
-
| **相同项目 → 相同结果** | ✅ 确定性分析 | ✅(静态文件) | ❌(LLM 变化) | ❌(LLM 变化) | ❌(LLM 变化) |
|
|
785
|
-
| **大型项目处理** | 领域分组切分(每组 4 个领域 / 40 个文件) | N/A | 无切分 | 无切分 | 上下文窗口限制 |
|
|
786
|
-
| **输出** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans(40-50+ 文件) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 个规范文档 | CLAUDE.md(1 个文件) |
|
|
787
|
-
| **输出位置** | `.claude/rules/`(由 Claude Code 自动加载) | `.claude/` 各种 | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
|
|
788
|
-
| **生成后验证** | ✅ 5 个自动验证器 | ❌ | ❌ | ❌ | ❌ |
|
|
789
|
-
| **多语言输出** | ✅ 10 种语言 | ❌ | ❌ | ❌ | ❌ |
|
|
790
|
-
| **多技术栈** | ✅ Backend + Frontend 同时 | ❌ 技术栈无关 | ❌ | ❌ | 部分 |
|
|
791
|
-
| **持久内存层** | ✅ L4 — 决策日志 + 失败模式 + 自动评分规则提议(v2.0.0) | ❌ | ❌ | ❌ | ❌ |
|
|
792
|
-
| **Agent 编排** | ❌ | ✅ 28 agents | ✅ 6 patterns | ❌ | ❌ |
|
|
793
|
-
|
|
794
|
-
### 一句话的关键区别
|
|
795
|
-
|
|
796
|
-
**其他工具给 Claude "一般来说不错的指令"。ClaudeOS-Core 给 Claude "从你的实际代码中提取的指令"。**
|
|
797
|
-
|
|
798
|
-
这就是为什么 Claude Code 在你的 MyBatis 项目中停止生成 JPA 代码,
|
|
799
|
-
当你的代码库使用 `ok()` 时停止使用 `success()`,
|
|
800
|
-
当你的项目使用 `controller/user/` 时停止创建 `user/controller/` 目录。
|
|
801
|
-
|
|
802
|
-
### 互补,而非竞争
|
|
803
|
-
|
|
804
|
-
ClaudeOS-Core 专注于**项目特定规则和标准**。
|
|
805
|
-
其他工具专注于**agent 编排和工作流**。
|
|
806
|
-
|
|
807
|
-
你可以使用 ClaudeOS-Core 生成项目规则,然后在其之上使用 ECC 或 Harness 进行 agent 团队和工作流自动化。它们解决不同的问题。
|
|
344
|
+
每条命令的完整选项,见 [docs/zh-CN/commands.md](docs/zh-CN/commands.md)。
|
|
808
345
|
|
|
809
346
|
---
|
|
810
347
|
|
|
811
|
-
##
|
|
812
|
-
|
|
813
|
-
**Q:它会修改我的源代码吗?**
|
|
814
|
-
不会。它只创建 `CLAUDE.md`、`.claude/rules/` 和 `claudeos-core/`。你现有的代码永远不会被修改。
|
|
815
|
-
|
|
816
|
-
**Q:花费多少?**
|
|
817
|
-
它跨 4 个 pass 多次调用 `claude -p`。在 v2.1.0 split 模式中,仅 Pass 3 就根据项目规模展开为 4–14+ 个阶段(参见[按项目规模自动扩展](#按项目规模自动扩展))。一个典型的小型项目(1–15 领域)总共使用 8–9 次 `claude -p` 调用;18 领域项目使用 11 次;60 领域项目使用 15–17 次。每个阶段都以全新的上下文窗口运行 — 每次调用的 token 成本实际上比过去的单次调用 Pass 3 还低,因为没有任何阶段需要将整个文件树保存在一个上下文中。当 `--lang` 是非英语时,静态回退路径可能会调用几个额外的 `claude -p` 进行翻译;结果会缓存在 `claudeos-core/generated/.i18n-cache-<lang>.json` 中,以便后续运行重用。这在 Claude Code 的正常使用范围内。
|
|
818
|
-
|
|
819
|
-
**Q:什么是 Pass 3 split 模式,为什么在 v2.1.0 中添加?**
|
|
820
|
-
在 v2.1.0 之前,Pass 3 进行一次 `claude -p` 调用,必须在一次响应中输出整个生成文件树(`CLAUDE.md`、standards、rules、skills、guides — 通常 30–60 个文件)。这在小型项目上有效,但在约 5 个领域时就会可靠地触发 `Prompt is too long` 输出累积失败。失败无法从输入规模预测 — 它取决于每个生成文件碰巧多么冗长,并且可能间歇性地击中同一个项目。Split 模式在结构上绕开了这个问题:Pass 3 被拆分为顺序阶段(`3a` → `3b-core` → `3b-N` → `3c-core` → `3c-N` → `3d-aux`),每个都是具有全新上下文窗口的独立 `claude -p` 调用。跨阶段一致性通过 `pass3a-facts.md` 保留,这是一个 5–10 KB 的蒸馏事实表,之后每个阶段都引用它而不是重新读取 `pass2-merged.json`。`pass3-complete.json` 标记携带一个 `groupsCompleted` 数组,因此 `3c-2` 期间的崩溃会从 `3c-2` 恢复(而不是从 `3a`),避免 token 成本翻倍。
|
|
821
|
-
**Q:我应该将生成的文件提交到 Git 吗?**
|
|
822
|
-
是的,推荐。你的团队可以共享相同的 Claude Code 标准。考虑将 `claudeos-core/generated/` 添加到 `.gitignore`(分析 JSON 可以重新生成)。
|
|
823
|
-
|
|
824
|
-
**Q:混合技术栈项目(例如 Java backend + React frontend)怎么办?**
|
|
825
|
-
完全支持。ClaudeOS-Core 自动检测两个技术栈,将领域标记为 `backend` 或 `frontend`,并为每个使用特定技术栈的分析提示。Pass 2 合并一切,Pass 3 跨其 split 阶段生成 backend 和 frontend 标准 — backend 领域进入某些 3b/3c 批次,frontend 领域进入其他批次,全都引用同一份 `pass3a-facts.md` 以保证一致性。
|
|
826
|
-
|
|
827
|
-
**Q:它适用于 Turborepo / pnpm workspaces / Lerna 单体仓库吗?**
|
|
828
|
-
是的。ClaudeOS-Core 检测 `turbo.json`、`pnpm-workspace.yaml`、`lerna.json` 或 `package.json#workspaces`,并自动扫描子包 `package.json` 文件以查找 framework/ORM/DB 依赖项。领域扫描覆盖 `apps/*/src/` 和 `packages/*/src/` 模式。从单体仓库根目录运行。
|
|
829
|
-
|
|
830
|
-
**Q:重新运行时会发生什么?**
|
|
831
|
-
如果存在之前的 Pass 1/2 结果,会出现一个交互式提示让你选择:**Continue**(从停止的地方恢复)或 **Fresh**(删除所有并重新开始)。使用 `--force` 跳过提示并始终重新开始。在 v2.1.0 split 模式中,Pass 3 恢复以阶段粒度工作 — 如果运行在 `3c-2` 期间崩溃,下一次 `init` 将从 `3c-2` 恢复,而不是从 `3a` 重新开始(那会使 token 成本翻倍)。`pass3-complete.json` 标记记录 `mode: "split"` 加上一个 `groupsCompleted` 数组来驱动这一逻辑。
|
|
832
|
-
|
|
833
|
-
**Q:NestJS 是使用自己的模板还是 Express 的?**
|
|
834
|
-
NestJS 使用专用的 `node-nestjs` 模板,具有 NestJS 特定的分析类别:`@Module`、`@Injectable`、`@Controller` decorators、Guards、Pipes、Interceptors、DI 容器、CQRS 模式和 `Test.createTestingModule`。Express 项目使用单独的 `node-express` 模板。
|
|
835
|
-
|
|
836
|
-
**Q:Vue / Nuxt 项目怎么办?**
|
|
837
|
-
Vue/Nuxt 使用专用的 `vue-nuxt` 模板,涵盖 Composition API、`<script setup>`、defineProps/defineEmits、Pinia stores、`useFetch`/`useAsyncData`、Nitro 服务器路由和 `@nuxt/test-utils`。Next.js/React 项目使用 `node-nextjs` 模板。
|
|
838
|
-
|
|
839
|
-
**Q:它支持 Kotlin 吗?**
|
|
840
|
-
是的。ClaudeOS-Core 从 `build.gradle.kts` 或 `build.gradle` 中的 kotlin 插件自动检测 Kotlin。它使用专用的 `kotlin-spring` 模板,具有 Kotlin 特定的分析(data classes、sealed classes、coroutines、extension functions、MockK 等)。
|
|
841
|
-
|
|
842
|
-
**Q:CQRS / BFF 架构怎么办?**
|
|
843
|
-
对于 Kotlin 多模块项目完全支持。ClaudeOS-Core 读取 `settings.gradle.kts`,从模块名检测模块类型(command、query、bff、integration),并跨 Command/Query 模块对同一领域进行分组。生成的标准包括 command controllers 与 query controllers 的单独规则、BFF/Feign 模式和模块间通信约定。
|
|
844
|
-
|
|
845
|
-
**Q:Gradle 多模块单体仓库怎么办?**
|
|
846
|
-
ClaudeOS-Core 扫描所有子模块(`**/src/main/kotlin/**/*.kt`),不论嵌套深度。模块类型从命名约定推断(例如 `reservation-command-server` → domain: `reservation`,type: `command`)。也检测共享库(`shared-lib`、`integration-lib`)。
|
|
847
|
-
|
|
848
|
-
**Q:L4 内存层(v2.0.0)是什么?我应该提交 `claudeos-core/memory/` 吗?**
|
|
849
|
-
是的 — **始终提交** `claudeos-core/memory/`。它是持久化的团队知识:`decision-log.md` 记录架构选择背后的*为什么*(仅追加),`failure-patterns.md` 注册重现错误及其重要性分数,以便未来会话避免它们,`compaction.md` 定义 4 阶段压缩策略,`auto-rule-update.md` 收集机器生成的规则改进提议。与规则(按路径自动加载)不同,内存文件是**按需的** — Claude 只在 `60.memory/*` 规则指示它时读取它们(例如会话开始时扫描高重要性故障)。这样可以保持上下文成本低,同时保留长期知识。
|
|
850
|
-
|
|
851
|
-
**Q:如果 Pass 4 失败怎么办?**
|
|
852
|
-
自动化管道(`npx claudeos-core init`)有静态回退:如果 `claude -p` 失败或 `pass4-prompt.md` 缺失,它通过 `lib/memory-scaffold.js` 直接搭建内存层。当 `--lang` 是非英语时,静态回退**必须**通过 `claude` CLI 翻译 — 如果那也失败,运行以 `InitError` 中止(没有静默的英语回退)。在 `claude` 已认证时重新运行,或使用 `--lang en` 跳过翻译。翻译结果缓存在 `claudeos-core/generated/.i18n-cache-<lang>.json` 中,以便后续运行重用它们。
|
|
348
|
+
## 它有什么不同
|
|
853
349
|
|
|
854
|
-
|
|
855
|
-
请参阅上面的[内存层维护](#内存层维护v200)部分。简短版本:`compact` 运行 4 阶段策略(总结过期、合并重复、丢弃低重要性过期、强制 400 行上限);`score` 按重要性(frequency × recency)重新排名 `failure-patterns.md`;`propose-rules` 从重现的失败中将候选规则添加表面化到 `auto-rule-update.md`(不自动应用 — 手动审查和接受/拒绝)。
|
|
350
|
+
大多数 Claude Code 文档工具是从描述出发(你告诉工具,工具告诉 Claude)。ClaudeOS-Core 是从你的实际源代码出发(工具读取,工具把已确认的事实告诉 Claude,Claude 只写已确认的内容)。
|
|
856
351
|
|
|
857
|
-
|
|
858
|
-
v2.0.0 添加了三个 Pass 3 silent-failure 守卫(Guard 3 覆盖两个不完整输出变体:H2 用于 `guide/`,H1 用于 `standard/skills`)。Guard 1("部分 staged-rules 移动")和 Guard 3("不完整输出 — 缺失/空的 guide 文件或缺失的 standard 哨兵 / 空的 skills")不依赖现有规则,但 Guard 2("检测到零规则")依赖 — 当 Claude 忽略 `staging-override.md` 指令并试图直接写入 `.claude/` 时(Claude Code 的 sensitive-path 策略阻止的地方)会触发。先前运行的陈旧规则会让 Guard 2 假阴性 — 所以 `--force`/`fresh` 清除 `.claude/rules/` 以确保干净的检测。**在 `--force`/`fresh` 下,对规则文件的手动编辑将丢失**;如有需要,请先备份。(v2.1.0 注意:由于 master plans 不再生成,Guard 3 H1 不再检查 `plan/`。)
|
|
352
|
+
三个具体后果:
|
|
859
353
|
|
|
860
|
-
**
|
|
861
|
-
|
|
354
|
+
1. **Deterministic stack detection.** 同一个项目 + 同样的代码 = 同样的输出。不会出现"这次 Claude 又掷出了别的"。
|
|
355
|
+
2. **No invented paths.** Pass 3 的 prompt 显式列出所有允许的源路径;Claude 不能引用不存在的路径。
|
|
356
|
+
3. **Multi-stack aware.** 同一次运行中,后端和前端域使用不同的分析 prompt。
|
|
862
357
|
|
|
863
|
-
|
|
864
|
-
小型项目(≤5 领域)可以 — [Step 6](#step-6pass-3--生成所有文档拆分为多个阶段) 中的单次调用手动说明仍然有效。对于更大的项目,你应该使用 `npx claudeos-core init`,因为 split 运行器负责编排带全新上下文的逐阶段执行、处理 ≥16 领域时的批次子分割、写入正确的 `pass3-complete.json` 标记形状(`mode: "split"` + `groupsCompleted`),以及在阶段之间移动暂存规则。手工复现这种编排是可能的但很繁琐。如果你有理由手动运行阶段(例如调试特定阶段),你可以用合适的 `STAGE:` 指令模板化 `pass3-prompt.md` 并直接喂给 `claude -p` — 但请记住在每个阶段之后移动 `.staged-rules/` 并自行更新标记。
|
|
865
|
-
|
|
866
|
-
**Q:我的项目是从 v2.0.x 升级过来的,并且存在一个现有的 `claudeos-core/plan/` 目录。我该怎么办?**
|
|
867
|
-
无需任何操作 — v2.1.0 工具在 `plan/` 缺失或为空时会忽略它,而 `plan-validator` 仍然处理具有已填充 `plan/` 目录的旧版项目以保持向后兼容。如果你不需要 master plan 备份,可以安全地删除 `claudeos-core/plan/`(git 历史无论如何都是更好的备份)。如果保留 `plan/`,运行 `npx claudeos-core init` 不会更新它 — 在 v2.1.0 中新内容不再聚合到 master plans。验证工具干净地处理两种情况。
|
|
358
|
+
与其他工具的 scope 对比,见 [docs/zh-CN/comparison.md](docs/zh-CN/comparison.md)。对比关注的是**每个工具做什么**,而不是**哪个更好** — 大部分是互补的。
|
|
868
359
|
|
|
869
360
|
---
|
|
870
361
|
|
|
871
|
-
##
|
|
872
|
-
|
|
873
|
-
```
|
|
874
|
-
pass-prompts/templates/
|
|
875
|
-
├── common/ # 共享 header/footer + pass4 + staging-override + CLAUDE.md scaffold (v2.2.0)
|
|
876
|
-
│ ├── header.md # 角色 + 输出格式指令(所有 pass)
|
|
877
|
-
│ ├── pass3-footer.md # Pass 3 完成后 health-check 指令 + 5 个 CRITICAL 护栏块 (v2.2.0)
|
|
878
|
-
│ ├── pass3-phase1.md # "Read Once, Extract Facts" 块(Rule A-E)(v2.1.0)
|
|
879
|
-
│ ├── pass4.md # 内存脚手架提示 (v2.0.0)
|
|
880
|
-
│ ├── staging-override.md # 将 .claude/rules/** 写入重定向至 .staged-rules/** (v2.0.0)
|
|
881
|
-
│ ├── claude-md-scaffold.md # 确定性 8 节 CLAUDE.md 模板 (v2.2.0)
|
|
882
|
-
│ └── lang-instructions.json # 按语言的输出指令(10 种语言)
|
|
883
|
-
├── java-spring/ # Java / Spring Boot
|
|
884
|
-
├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
|
|
885
|
-
├── node-express/ # Node.js / Express
|
|
886
|
-
├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
|
|
887
|
-
├── node-fastify/ # Node.js / Fastify
|
|
888
|
-
├── node-nextjs/ # Next.js / React (App Router, RSC)
|
|
889
|
-
├── node-vite/ # Vite SPA (React, client-side routing, VITE_ env, Vitest)
|
|
890
|
-
├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
|
|
891
|
-
├── angular/ # Angular
|
|
892
|
-
├── python-django/ # Python / Django (DRF)
|
|
893
|
-
├── python-fastapi/ # Python / FastAPI
|
|
894
|
-
└── python-flask/ # Python / Flask (Blueprint, app factory, Jinja2)
|
|
895
|
-
```
|
|
896
|
-
|
|
897
|
-
`plan-installer` 自动检测你的技术栈,然后组装特定于类型的提示。NestJS、Vue/Nuxt、Vite SPA 和 Flask 分别使用专用模板,具有框架特定的分析类别(例如 NestJS 的 `@Module`/`@Injectable`/Guards;Vue 的 `<script setup>`/Pinia/useFetch;Vite 的 client-side routing/`VITE_` env;Flask 的 Blueprint/`app.factory`/Flask-SQLAlchemy)。对于多技术栈项目,分别生成 `pass1-backend-prompt.md` 和 `pass1-frontend-prompt.md`,而 `pass3-prompt.md` 结合两个技术栈的生成目标。在 v2.1.0 中,Pass 3 模板在被按 split-mode 阶段切片前,会被前置 `common/pass3-phase1.md`(包含 Rules A–E 的 "Read Once, Extract Facts" 块)。Pass 4 使用共享的 `common/pass4.md` 模板(内存脚手架),与技术栈无关。
|
|
898
|
-
|
|
899
|
-
**在 v2.2.0 中**,Pass 3 提示词还在 phase1 块和栈特定主体之间内联嵌入 `common/claude-md-scaffold.md`(确定性 8 节 CLAUDE.md 模板)——这固定了 8 节的结构以避免生成的 CLAUDE.md 在项目间漂移,同时内容仍按项目自适应。`claude-md-scaffold.md` 采用 **English-first** 编写;来自 `lang-instructions.json` 的语言注入指示 LLM 在输出时将节标题和散文翻译为目标输出语言。
|
|
900
|
-
|
|
901
|
-
---
|
|
362
|
+
## 验证(post-generation)
|
|
902
363
|
|
|
903
|
-
|
|
364
|
+
Claude 写完文档后,代码会去验证。5 个独立 validator:
|
|
904
365
|
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
- `
|
|
909
|
-
|
|
910
|
-
- `
|
|
911
|
-
- `
|
|
366
|
+
| Validator | 它检查什么 | 由谁触发 |
|
|
367
|
+
|---|---|---|
|
|
368
|
+
| `claude-md-validator` | CLAUDE.md 的结构性不变量(8 sections,language-invariant) | `claudeos-core lint` |
|
|
369
|
+
| `content-validator` | 引用的路径是否真实存在;manifest 一致性 | `health`(advisory) |
|
|
370
|
+
| `pass-json-validator` | Pass 1 / 2 / 3 / 4 的输出是 well-formed JSON | `health`(warn) |
|
|
371
|
+
| `plan-validator` | 保存的 plan 与 disk 上的内容一致 | `health`(fail-on-error) |
|
|
372
|
+
| `sync-checker` | Disk 文件与 `sync-map.json` 的注册项一致(orphaned/unregistered 检测) | `health`(fail-on-error) |
|
|
912
373
|
|
|
913
|
-
|
|
374
|
+
`health-checker` 用三档严重度(fail / warn / advisory)编排这 4 个运行时 validator,并以适合 CI 的 exit code 退出。`claude-md-validator` 通过 `lint` 命令单独运行,因为结构 drift 是 re-init 信号,不是软警告。可随时运行:
|
|
914
375
|
|
|
915
376
|
```bash
|
|
916
|
-
|
|
917
|
-
npx claudeos-core init
|
|
918
|
-
```
|
|
919
|
-
|
|
920
|
-
**检测到的内容:**
|
|
921
|
-
- 来自 `apps/web/package.json` 的依赖项(例如 `next`、`react`)→ frontend 技术栈
|
|
922
|
-
- 来自 `apps/api/package.json` 的依赖项(例如 `express`、`prisma`)→ backend 技术栈
|
|
923
|
-
- 来自 `packages/db/package.json` 的依赖项(例如 `drizzle-orm`)→ ORM/DB
|
|
924
|
-
- 来自 `pnpm-workspace.yaml` 的自定义工作空间路径(例如 `services/*`)
|
|
925
|
-
|
|
926
|
-
**领域扫描也涵盖单体仓库布局:**
|
|
927
|
-
- 后端领域的 `apps/api/src/modules/*/` 和 `apps/api/src/*/`
|
|
928
|
-
- 前端领域的 `apps/web/app/*/`、`apps/web/src/app/*/`、`apps/web/pages/*/`
|
|
929
|
-
- 共享包领域的 `packages/*/src/*/`
|
|
930
|
-
|
|
931
|
-
```
|
|
932
|
-
my-monorepo/ ← 在此运行:npx claudeos-core init
|
|
933
|
-
├── turbo.json ← 自动检测为 Turborepo
|
|
934
|
-
├── apps/
|
|
935
|
-
│ ├── web/ ← 从 apps/web/package.json 检测到 Next.js
|
|
936
|
-
│ │ ├── app/dashboard/ ← 检测到前端领域
|
|
937
|
-
│ │ └── package.json ← { "dependencies": { "next": "^14" } }
|
|
938
|
-
│ └── api/ ← 从 apps/api/package.json 检测到 Express
|
|
939
|
-
│ ├── src/modules/users/ ← 检测到后端领域
|
|
940
|
-
│ └── package.json ← { "dependencies": { "express": "^4" } }
|
|
941
|
-
├── packages/
|
|
942
|
-
│ ├── db/ ← 从 packages/db/package.json 检测到 Drizzle
|
|
943
|
-
│ └── ui/
|
|
944
|
-
└── package.json ← { "workspaces": ["apps/*", "packages/*"] }
|
|
377
|
+
npx claudeos-core health
|
|
945
378
|
```
|
|
946
379
|
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
## 故障排除
|
|
950
|
-
|
|
951
|
-
**"claude: command not found"** — Claude Code CLI 未安装或不在 PATH 中。参见 [Claude Code 文档](https://code.claude.com/docs/en/overview)。
|
|
380
|
+
每个 validator 的检查项详情,见 [docs/zh-CN/verification.md](docs/zh-CN/verification.md)。
|
|
952
381
|
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
**"0 domains detected"** — 你的项目结构可能不标准。请参阅上面适合你技术栈的检测模式。
|
|
956
|
-
|
|
957
|
-
**Kotlin 项目上的 "0 domains detected"** — 确保你的项目在根目录有 `build.gradle.kts`(或带有 kotlin 插件的 `build.gradle`),并且源文件在 `**/src/main/kotlin/` 下。对于多模块项目,确保 `settings.gradle.kts` 包含 `include()` 语句。也支持单模块 Kotlin 项目(没有 `settings.gradle`)— 领域从 `src/main/kotlin/` 下的包/类结构提取。
|
|
382
|
+
---
|
|
958
383
|
|
|
959
|
-
|
|
384
|
+
## Memory Layer(可选,适合长期项目)
|
|
960
385
|
|
|
961
|
-
|
|
386
|
+
v2.0 起,ClaudeOS-Core 会写出一个包含 4 个文件的 `claudeos-core/memory/` 文件夹:
|
|
962
387
|
|
|
963
|
-
|
|
388
|
+
- `decision-log.md` — 仅追加的"为什么选 X 而不是 Y"
|
|
389
|
+
- `failure-patterns.md` — 带有 frequency/importance 评分的反复出现的错误
|
|
390
|
+
- `compaction.md` — memory 如何随时间被自动压缩
|
|
391
|
+
- `auto-rule-update.md` — 应当成为新规则的模式
|
|
964
392
|
|
|
965
|
-
|
|
393
|
+
可以运行 `npx claudeos-core memory propose-rules` 让 Claude 查看近期的 failure pattern,并提议要添加的新规则。
|
|
966
394
|
|
|
967
|
-
|
|
395
|
+
memory 模型与生命周期,见 [docs/zh-CN/memory-layer.md](docs/zh-CN/memory-layer.md)。
|
|
968
396
|
|
|
969
|
-
|
|
397
|
+
---
|
|
970
398
|
|
|
971
|
-
|
|
399
|
+
## FAQ
|
|
972
400
|
|
|
973
|
-
**
|
|
401
|
+
**Q: 我需要 Claude API key 吗?**
|
|
402
|
+
A: 不需要。ClaudeOS-Core 使用你已安装的 Claude Code — 它把 prompt 通过管道送给本机的 `claude -p`。不用额外开账号。
|
|
974
403
|
|
|
975
|
-
**
|
|
404
|
+
**Q: 这会覆盖我现有的 CLAUDE.md 或 `.claude/rules/` 吗?**
|
|
405
|
+
A: 在新项目上首次运行:它会创建。不带 `--force` 重新运行:保留你的修改 — 上一次运行的 pass marker 会被检测到,对应的 pass 被跳过。带 `--force` 重新运行:全部清掉重新生成(你的修改会丢失 — 这就是 `--force` 的含义)。见 [docs/zh-CN/safety.md](docs/zh-CN/safety.md)。
|
|
976
406
|
|
|
977
|
-
**
|
|
407
|
+
**Q: 我的栈不被支持。可以加吗?**
|
|
408
|
+
A: 可以。新栈需要约 3 个 prompt 模板 + 一个 domain scanner。8 步指南见 [CONTRIBUTING.md](CONTRIBUTING.md)。
|
|
978
409
|
|
|
979
|
-
**
|
|
410
|
+
**Q: 如何用韩语(或其他语言)生成文档?**
|
|
411
|
+
A: `npx claudeos-core init --lang ko`。支持 10 种语言:en、ko、ja、zh-CN、es、vi、hi、ru、fr、de。
|
|
980
412
|
|
|
981
|
-
**
|
|
413
|
+
**Q: 它能用于 monorepo 吗?**
|
|
414
|
+
A: 可以 — Turborepo(`turbo.json`)、pnpm workspaces(`pnpm-workspace.yaml`)、Lerna(`lerna.json`)和 npm/yarn workspaces(`package.json#workspaces`)由 stack-detector 检测。每个 app 拥有独立分析。其他 monorepo 布局(例如 NX)不会被特别检测,但通用的 `apps/*/` 与 `packages/*/` 模式仍会被各栈 scanner 拾取。
|
|
982
415
|
|
|
983
|
-
**
|
|
416
|
+
**Q: 如果 Claude Code 生成了我不同意的 rules 怎么办?**
|
|
417
|
+
A: 直接编辑。然后运行 `npx claudeos-core lint` 验证 CLAUDE.md 在结构上仍然有效。在后续 `init` 运行(不带 `--force`)中,你的修改会被保留 — resume 机制会跳过已有 marker 的 pass。
|
|
984
418
|
|
|
985
|
-
**
|
|
419
|
+
**Q: 在哪里报告 bug?**
|
|
420
|
+
A: [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues)。安全相关问题见 [SECURITY.md](SECURITY.md)。
|
|
986
421
|
|
|
987
|
-
|
|
422
|
+
---
|
|
988
423
|
|
|
989
|
-
|
|
424
|
+
## Documentation
|
|
990
425
|
|
|
991
|
-
|
|
426
|
+
| 主题 | 阅读 |
|
|
427
|
+
|---|---|
|
|
428
|
+
| 4-pass 流水线如何工作(比图更深入) | [docs/zh-CN/architecture.md](docs/zh-CN/architecture.md) |
|
|
429
|
+
| 架构的可视化图示(Mermaid) | [docs/zh-CN/diagrams.md](docs/zh-CN/diagrams.md) |
|
|
430
|
+
| Stack 检测 — 每个 scanner 看什么 | [docs/zh-CN/stacks.md](docs/zh-CN/stacks.md) |
|
|
431
|
+
| Memory layer — decision log 和 failure pattern | [docs/zh-CN/memory-layer.md](docs/zh-CN/memory-layer.md) |
|
|
432
|
+
| 5 个 validator 详解 | [docs/zh-CN/verification.md](docs/zh-CN/verification.md) |
|
|
433
|
+
| 所有 CLI 命令和选项 | [docs/zh-CN/commands.md](docs/zh-CN/commands.md) |
|
|
434
|
+
| 手动安装(不用 `npx`) | [docs/zh-CN/manual-installation.md](docs/zh-CN/manual-installation.md) |
|
|
435
|
+
| Scanner 覆盖 — `.claudeos-scan.json` | [docs/zh-CN/advanced-config.md](docs/zh-CN/advanced-config.md) |
|
|
436
|
+
| 安全性:re-init 时保留什么 | [docs/zh-CN/safety.md](docs/zh-CN/safety.md) |
|
|
437
|
+
| 与同类工具的对比(scope,而非质量) | [docs/zh-CN/comparison.md](docs/zh-CN/comparison.md) |
|
|
438
|
+
| 错误与恢复 | [docs/zh-CN/troubleshooting.md](docs/zh-CN/troubleshooting.md) |
|
|
992
439
|
|
|
993
440
|
---
|
|
994
441
|
|
|
995
442
|
## 贡献
|
|
996
443
|
|
|
997
|
-
|
|
444
|
+
欢迎贡献 — 添加栈支持、改进 prompt、修 bug。见 [CONTRIBUTING.md](CONTRIBUTING.md)。
|
|
998
445
|
|
|
999
|
-
|
|
1000
|
-
- **IDE 集成** — VS Code 扩展、IntelliJ 插件
|
|
1001
|
-
- **CI/CD 模板** — GitLab CI、CircleCI、Jenkins 示例(GitHub Actions 已经自带 — 参见 `.github/workflows/test.yml`)
|
|
1002
|
-
- **测试覆盖率** — 扩展测试套件(当前 30 个测试文件中的 602 个测试,涵盖扫描器、技术栈检测、领域分组、计划解析、提示生成、CLI 选择器、单体仓库检测、Vite SPA 检测、验证工具、L4 内存脚手架、Pass 2 恢复验证、Pass 3 Guards 1/2/3(H1 哨兵 + H2 BOM-aware 空文件 + 严格陈旧标记 unlink)、Pass 3 split-mode 批次子分割、Pass 3 部分标记 resume(v2.1.0)、Pass 4 标记内容验证 + 陈旧标记 unlink 严格性 + scaffoldSkillsManifest gap-fill(v2.1.0)、翻译 env-skip 守卫 + early fail-fast + CI 工作流、staged-rules 移动、语言感知翻译回退、master plan 移除回归套件(v2.1.0)、memory score/compact 格式化回归(v2.1.0)和 AI Work Rules 模板结构、`.env` 解析器 port/host/API-target 提取 + 敏感变量 redaction (v2.2.0))
|
|
446
|
+
行为准则与安全策略见 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) 和 [SECURITY.md](SECURITY.md)。
|
|
1003
447
|
|
|
1004
|
-
|
|
448
|
+
## License
|
|
1005
449
|
|
|
1006
|
-
|
|
450
|
+
[ISC](LICENSE) — 任何用途均可免费使用,包括商用。
|
|
1007
451
|
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
由 **claudeos-core** 创建 — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
|
|
1011
|
-
|
|
1012
|
-
## 许可证
|
|
452
|
+
---
|
|
1013
453
|
|
|
1014
|
-
|
|
454
|
+
<sub>由 [@claudeos-core](https://github.com/claudeos-core) 用心打造。如果它为你节省了时间,在 GitHub 上点个 ⭐ 帮助保持可见。</sub>
|