claudeos-core 1.7.0 → 2.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.
- package/CHANGELOG.md +138 -0
- package/CONTRIBUTING.md +92 -59
- package/README.de.md +465 -240
- package/README.es.md +446 -223
- package/README.fr.md +461 -238
- package/README.hi.md +485 -261
- package/README.ja.md +440 -235
- package/README.ko.md +244 -56
- package/README.md +215 -47
- package/README.ru.md +462 -238
- package/README.vi.md +454 -230
- package/README.zh-CN.md +476 -252
- package/bin/cli.js +144 -140
- package/bin/commands/init.js +550 -46
- package/bin/commands/memory.js +426 -0
- package/bin/lib/cli-utils.js +206 -143
- package/bootstrap.sh +81 -390
- package/content-validator/index.js +436 -340
- package/lib/expected-guides.js +23 -0
- package/lib/expected-outputs.js +91 -0
- package/lib/language-config.js +35 -0
- package/lib/memory-scaffold.js +1014 -0
- package/lib/plan-parser.js +153 -149
- package/lib/staged-rules.js +118 -0
- package/manifest-generator/index.js +176 -171
- package/package.json +1 -1
- package/pass-json-validator/index.js +337 -299
- package/pass-prompts/templates/common/pass3-footer.md +16 -0
- package/pass-prompts/templates/common/pass4.md +317 -0
- package/pass-prompts/templates/common/staging-override.md +26 -0
- package/pass-prompts/templates/python-flask/pass1.md +119 -0
- package/pass-prompts/templates/python-flask/pass2.md +85 -0
- package/pass-prompts/templates/python-flask/pass3.md +103 -0
- package/plan-installer/domain-grouper.js +2 -1
- package/plan-installer/prompt-generator.js +120 -96
- package/plan-installer/scanners/scan-frontend.js +219 -10
- package/plan-installer/scanners/scan-java.js +226 -223
- package/plan-installer/scanners/scan-python.js +21 -0
- package/sync-checker/index.js +133 -132
package/README.vi.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ClaudeOS-Core
|
|
2
2
|
|
|
3
|
-
**Công cụ duy nhất đọc mã nguồn trước, xác nhận stack và pattern bằng phân tích deterministic, sau đó tạo
|
|
3
|
+
**Công cụ duy nhất đọc mã nguồn trước, xác nhận stack và pattern bằng phân tích deterministic, sau đó tạo Claude Code rules phù hợp chính xác với dự án của bạn.**
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npx claudeos-core init
|
|
@@ -12,50 +12,60 @@ ClaudeOS-Core đọc codebase của bạn, trích xuất mọi pattern tìm th
|
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
## Tại sao ClaudeOS-Core?
|
|
15
|
+
## Tại sao chọn ClaudeOS-Core?
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Mọi công cụ Claude Code khác hoạt động như sau:
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
> **Con người mô tả dự án → LLM tạo tài liệu**
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
ClaudeOS-Core hoạt động như sau:
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
> **Code phân tích source → Code xây dựng prompt tùy chỉnh → LLM tạo tài liệu → Code xác minh đầu ra**
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
Đây không phải là khác biệt nhỏ. Lý do quan trọng:
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
### Vấn đề cốt lõi: LLM đoán. Code thì không.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
29
|
+
Khi bạn yêu cầu Claude "phân tích dự án này", nó **đoán** stack, ORM, cấu trúc domain của bạn.
|
|
30
|
+
Nó có thể thấy `spring-boot` trong `build.gradle` nhưng bỏ sót việc bạn dùng MyBatis (không phải JPA).
|
|
31
|
+
Nó có thể phát hiện thư mục `user/` nhưng không nhận ra dự án của bạn dùng layer-first packaging (Pattern A), không phải domain-first (Pattern B).
|
|
32
|
+
|
|
33
|
+
**ClaudeOS-Core không đoán.** Trước khi Claude nhìn thấy dự án của bạn, Node.js code đã:
|
|
34
|
+
|
|
35
|
+
- Parse `build.gradle` / `package.json` / `pyproject.toml` và **xác nhận** stack, ORM, DB và package manager
|
|
36
|
+
- Quét cấu trúc thư mục và **xác nhận** danh sách domain kèm số lượng file
|
|
37
|
+
- Phân loại cấu trúc dự án vào một trong 5 pattern Java, Kotlin CQRS/BFF, hoặc Next.js App Router/FSD
|
|
38
|
+
- Chia domain thành các nhóm có kích thước tối ưu phù hợp với context window của Claude
|
|
39
|
+
- Lắp ráp prompt riêng cho stack với mọi sự thật đã xác nhận được chèn vào
|
|
40
|
+
|
|
41
|
+
Khi Claude nhận prompt, không còn gì phải đoán. Stack đã xác nhận. Domain đã xác nhận. Pattern cấu trúc đã xác nhận. Nhiệm vụ duy nhất của Claude là tạo tài liệu khớp với các **sự thật đã xác nhận** này.
|
|
34
42
|
|
|
35
43
|
### Kết quả
|
|
36
44
|
|
|
37
|
-
Các
|
|
38
|
-
ClaudeOS-Core tạo tài liệu biết rằng dự án
|
|
45
|
+
Các công cụ khác tạo tài liệu "tốt một cách chung chung".
|
|
46
|
+
ClaudeOS-Core tạo tài liệu biết rằng dự án dùng `ApiResponse.ok()` (không phải `ResponseEntity.success()`), MyBatis XML mapper của bạn nằm ở `src/main/resources/mybatis/mappers/`, và package structure là `com.company.module.{domain}.controller` — vì nó đã đọc code thực tế của bạn.
|
|
39
47
|
|
|
40
48
|
### Before & After
|
|
41
49
|
|
|
42
|
-
**Không có ClaudeOS-Core
|
|
50
|
+
**Không có ClaudeOS-Core** — bạn yêu cầu Claude Code tạo Order CRUD:
|
|
43
51
|
```
|
|
44
|
-
❌
|
|
45
|
-
❌ ResponseEntity.success() (ApiResponse.ok())
|
|
46
|
-
❌ order/controller/ (controller/order/)
|
|
47
|
-
|
|
52
|
+
❌ Dùng repository kiểu JPA (dự án của bạn dùng MyBatis)
|
|
53
|
+
❌ Tạo ResponseEntity.success() (wrapper của bạn là ApiResponse.ok())
|
|
54
|
+
❌ Đặt file vào order/controller/ (dự án của bạn dùng controller/order/)
|
|
55
|
+
❌ Tạo comment tiếng Anh (team của bạn viết comment tiếng Việt)
|
|
56
|
+
→ Bạn mất 20 phút sửa từng file đã tạo
|
|
48
57
|
```
|
|
49
58
|
|
|
50
|
-
**Có ClaudeOS-Core
|
|
59
|
+
**Có ClaudeOS-Core** — `.claude/rules/` đã chứa các pattern đã xác nhận của bạn:
|
|
51
60
|
```
|
|
52
|
-
✅ MyBatis mapper + XML (build.gradle)
|
|
53
|
-
✅ ApiResponse.ok() (source
|
|
54
|
-
✅ controller/order/ (Pattern A)
|
|
55
|
-
|
|
61
|
+
✅ Tạo MyBatis mapper + XML (phát hiện từ build.gradle)
|
|
62
|
+
✅ Dùng ApiResponse.ok() (trích xuất từ source thực tế của bạn)
|
|
63
|
+
✅ Đặt file vào controller/order/ (Pattern A xác nhận bằng structure scan)
|
|
64
|
+
✅ Comment tiếng Việt (--lang vi đã áp dụng)
|
|
65
|
+
→ Code được tạo khớp ngay với convention của dự án
|
|
56
66
|
```
|
|
57
67
|
|
|
58
|
-
Sự khác biệt này tích lũy. 10 task/ngày × 20 phút tiết kiệm = **hơn 3 giờ/ngày**.
|
|
68
|
+
Sự khác biệt này được tích lũy. 10 task/ngày × 20 phút tiết kiệm = **hơn 3 giờ/ngày**.
|
|
59
69
|
|
|
60
70
|
---
|
|
61
71
|
|
|
@@ -79,7 +89,6 @@ Tự động phát hiện: ngôn ngữ & phiên bản, framework & phiên bản
|
|
|
79
89
|
|
|
80
90
|
**Bạn không cần chỉ định gì cả. Tất cả được phát hiện tự động.**
|
|
81
91
|
|
|
82
|
-
|
|
83
92
|
### Phát Hiện Domain Java (5 pattern với fallback)
|
|
84
93
|
|
|
85
94
|
| Ưu tiên | Pattern | Cấu trúc | Ví dụ |
|
|
@@ -92,41 +101,66 @@ Tự động phát hiện: ngôn ngữ & phiên bản, framework & phiên bản
|
|
|
92
101
|
|
|
93
102
|
Các domain chỉ có service (không có controller) cũng được phát hiện qua thư mục `service/`, `dao/`, `aggregator/`, `facade/`, `usecase/`, `orchestrator/`, `mapper/`, `repository/`. Bỏ qua: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2`, v.v.
|
|
94
103
|
|
|
95
|
-
|
|
96
104
|
### Phát Hiện Domain Kotlin Multi-Module
|
|
97
105
|
|
|
98
106
|
Dành cho dự án Kotlin với cấu trúc Gradle multi-module (ví dụ: CQRS monorepo):
|
|
99
107
|
|
|
100
108
|
| Bước | Hành Động | Ví Dụ |
|
|
101
109
|
|---|---|---|
|
|
102
|
-
| 1 | Quét `settings.gradle.kts` tìm `include()` | Tìm
|
|
103
|
-
| 2 | Phát hiện
|
|
110
|
+
| 1 | Quét `settings.gradle.kts` tìm `include()` | Tìm 14 module |
|
|
111
|
+
| 2 | Phát hiện kiểu module từ tên | `reservation-command-server` → type: `command` |
|
|
104
112
|
| 3 | Trích xuất domain từ tên module | `reservation-command-server` → domain: `reservation` |
|
|
105
|
-
| 4 |
|
|
113
|
+
| 4 | Gom cùng domain qua các module | `reservation-command-server` + `common-query-server` → 1 domain |
|
|
106
114
|
| 5 | Phát hiện kiến trúc | Có module `command` + `query` → CQRS |
|
|
107
115
|
|
|
108
|
-
|
|
116
|
+
Các kiểu module được hỗ trợ: `command`, `query`, `bff`, `integration`, `standalone`, `library`. Các thư viện dùng chung (`shared-lib`, `integration-lib`) được phát hiện như domain đặc biệt.
|
|
109
117
|
|
|
110
118
|
### Phát Hiện Domain Frontend
|
|
111
119
|
|
|
112
120
|
- **App Router**: `app/{domain}/page.tsx` (Next.js)
|
|
113
121
|
- **Pages Router**: `pages/{domain}/index.tsx`
|
|
114
122
|
- **FSD (Feature-Sliced Design)**: `features/*/`, `widgets/*/`, `entities/*/`
|
|
115
|
-
- **RSC/Client
|
|
116
|
-
- **Đường dẫn lồng nhau không chuẩn**: Phát hiện pages, components và FSD
|
|
117
|
-
- **
|
|
118
|
-
- **
|
|
123
|
+
- **Phân tách RSC/Client**: phát hiện pattern `client.tsx`, theo dõi phân tách Server/Client component
|
|
124
|
+
- **Đường dẫn lồng nhau không chuẩn**: Phát hiện pages, components và các FSD layer dưới đường dẫn `src/*/` (ví dụ: `src/admin/pages/dashboard/`, `src/admin/components/form/`, `src/admin/features/billing/`)
|
|
125
|
+
- **Phát hiện chia tách Platform/tier (v2.0.0)**: Nhận diện layout `src/{platform}/{subapp}/` — `{platform}` có thể là keyword device/target (`desktop`, `pc`, `web`, `mobile`, `mc`, `mo`, `sp`, `tablet`, `tab`, `pwa`, `tv`, `ctv`, `ott`, `watch`, `wear`) hoặc keyword access-tier (`admin`, `cms`, `backoffice`, `back-office`, `portal`). Sinh một domain cho mỗi cặp `(platform, subapp)` với tên `{platform}-{subapp}` kèm số đếm routes/components/layouts/hooks riêng cho từng domain. Chạy đồng thời trên Angular, Next.js, React và Vue (glob đa đuôi `{tsx,jsx,ts,js,vue}`). Yêu cầu ≥2 file nguồn cho mỗi subapp để tránh domain nhiễu 1-file.
|
|
126
|
+
- **Monorepo platform split (v2.0.0)**: Platform scan cũng khớp với `{apps,packages}/*/src/{platform}/{subapp}/` (Turborepo/pnpm workspace có `src/`) và `{apps,packages}/{platform}/{subapp}/` (workspace không có wrapper `src/`).
|
|
127
|
+
- **Fallback E — routes-file (v2.0.0)**: Khi scanner chính + Fallback A–D đều trả về 0, glob `**/routes/*.{tsx,jsx,ts,js,vue}` và gom nhóm theo tên thư mục cha của `routes`. Bắt các dự án React Router file-routing (CRA/Vite + `react-router`) không khớp với `page.tsx` của Next.js hoặc layout FSD. Tên cha chung chung (`src`, `app`, `pages`) được lọc bỏ.
|
|
128
|
+
- **Config fallback**: Phát hiện Next.js/Vite/Nuxt từ file cấu hình khi không có trong `package.json` (hỗ trợ monorepo)
|
|
129
|
+
- **Deep directory fallback**: Đối với dự án React/CRA/Vite/Vue/RN, quét `**/components/*/`, `**/views/*/`, `**/screens/*/`, `**/containers/*/`, `**/pages/*/`, `**/routes/*/`, `**/modules/*/`, `**/domains/*/` ở bất kỳ độ sâu nào
|
|
130
|
+
- **Danh sách bỏ qua dùng chung (v2.0.0)**: Tất cả scanner chia sẻ `BUILD_IGNORE_DIRS` (`node_modules`, `build`, `dist`, `out`, `.next`, `.nuxt`, `.svelte-kit`, `.angular`, `.turbo`, `.cache`, `.parcel-cache`, `coverage`, `storybook-static`, `.vercel`, `.netlify`) và `TEST_FILE_IGNORE` (spec/test/stories/e2e/cy + `__snapshots__`/`__tests__`) để build output và test fixture không làm phồng số file của từng domain.
|
|
131
|
+
|
|
132
|
+
### Scanner Overrides (v2.0.0)
|
|
133
|
+
|
|
134
|
+
Thả tùy chọn `.claudeos-scan.json` tại root của dự án để mở rộng giá trị mặc định của scanner mà không cần chỉnh sửa toolkit. Tất cả các trường đều **cộng dồn** — các mục của người dùng mở rộng giá trị mặc định, không thay thế:
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"frontendScan": {
|
|
139
|
+
"platformKeywords": ["kiosk"],
|
|
140
|
+
"skipSubappNames": ["legacy"],
|
|
141
|
+
"minSubappFiles": 3
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
| Trường | Mặc định | Mục đích |
|
|
147
|
+
|---|---|---|
|
|
148
|
+
| `platformKeywords` | danh sách built-in ở trên | Các keyword `{platform}` bổ sung cho platform scan (ví dụ: `kiosk`, `vr`, `embedded`) |
|
|
149
|
+
| `skipSubappNames` | chỉ các thư mục cấu trúc | Các tên subapp bổ sung để loại khỏi việc sinh domain của platform scan |
|
|
150
|
+
| `minSubappFiles` | `2` | Ghi đè số file tối thiểu cần có trước khi một subapp trở thành domain |
|
|
151
|
+
|
|
152
|
+
Thiếu file hoặc JSON bị lỗi → âm thầm fallback về mặc định (không crash). Sử dụng điển hình: opt-in một viết tắt ngắn (`adm`, `bo`) mà danh sách built-in loại vì quá mơ hồ, hoặc nâng `minSubappFiles` cho monorepo nhiễu.
|
|
119
153
|
|
|
120
154
|
---
|
|
121
155
|
|
|
122
156
|
## Bắt Đầu Nhanh
|
|
123
157
|
|
|
124
|
-
### Yêu
|
|
158
|
+
### Yêu cầu trước
|
|
125
159
|
|
|
126
160
|
- **Node.js** v18+
|
|
127
161
|
- **Claude Code CLI** (đã cài đặt & xác thực)
|
|
128
162
|
|
|
129
|
-
### Cài
|
|
163
|
+
### Cài đặt
|
|
130
164
|
|
|
131
165
|
```bash
|
|
132
166
|
cd /your/project/root
|
|
@@ -138,23 +172,23 @@ npx claudeos-core init
|
|
|
138
172
|
npm install -g claudeos-core
|
|
139
173
|
claudeos-core init
|
|
140
174
|
|
|
141
|
-
# Cách C: devDependency
|
|
175
|
+
# Cách C: project devDependency
|
|
142
176
|
npm install --save-dev claudeos-core
|
|
143
177
|
npx claudeos-core init
|
|
144
178
|
|
|
145
|
-
# Cách D: git clone (
|
|
179
|
+
# Cách D: git clone (để phát triển/đóng góp)
|
|
146
180
|
git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
|
|
147
181
|
|
|
148
182
|
# Đa nền tảng (PowerShell, CMD, Bash, Zsh — mọi terminal)
|
|
149
183
|
node claudeos-core-tools/bin/cli.js init
|
|
150
184
|
|
|
151
|
-
#
|
|
185
|
+
# Linux/macOS (chỉ Bash)
|
|
152
186
|
bash claudeos-core-tools/bootstrap.sh
|
|
153
187
|
```
|
|
154
188
|
|
|
155
|
-
### Ngôn
|
|
189
|
+
### Ngôn Ngữ Đầu Ra (10 ngôn ngữ)
|
|
156
190
|
|
|
157
|
-
Khi chạy `init` không có `--lang`,
|
|
191
|
+
Khi chạy `init` không có `--lang`, selector tương tác sẽ hiện ra — dùng phím mũi tên hoặc phím số để chọn:
|
|
158
192
|
|
|
159
193
|
```
|
|
160
194
|
╔══════════════════════════════════════════════════╗
|
|
@@ -162,31 +196,37 @@ Khi chạy `init` không có `--lang`, bộ chọn tương tác bằng phím mũ
|
|
|
162
196
|
╚══════════════════════════════════════════════════╝
|
|
163
197
|
|
|
164
198
|
Các file được tạo (CLAUDE.md, Standards, Rules,
|
|
165
|
-
Skills, Guides) sẽ được viết bằng
|
|
199
|
+
Skills, Guides) sẽ được viết bằng Tiếng Việt.
|
|
166
200
|
|
|
167
201
|
1. en — English
|
|
168
|
-
|
|
202
|
+
2. ko — 한국어 (Korean)
|
|
203
|
+
3. zh-CN — 简体中文 (Chinese Simplified)
|
|
204
|
+
4. ja — 日本語 (Japanese)
|
|
205
|
+
5. es — Español (Spanish)
|
|
169
206
|
❯ 6. vi — Tiếng Việt (Vietnamese)
|
|
170
|
-
|
|
207
|
+
7. hi — हिन्दी (Hindi)
|
|
208
|
+
8. ru — Русский (Russian)
|
|
209
|
+
9. fr — Français (French)
|
|
210
|
+
10. de — Deutsch (German)
|
|
171
211
|
|
|
172
212
|
↑↓ Move 1-0 Jump Enter Select ESC Cancel
|
|
173
213
|
```
|
|
174
214
|
|
|
175
|
-
Mô tả
|
|
215
|
+
Mô tả sẽ đổi sang ngôn ngữ được chọn khi bạn điều hướng. Để bỏ qua selector, truyền `--lang` trực tiếp:
|
|
176
216
|
|
|
177
217
|
```bash
|
|
178
|
-
npx claudeos-core init --lang
|
|
179
|
-
npx claudeos-core init --lang
|
|
180
|
-
npx claudeos-core init --lang
|
|
218
|
+
npx claudeos-core init --lang ko # Korean
|
|
219
|
+
npx claudeos-core init --lang ja # Japanese
|
|
220
|
+
npx claudeos-core init --lang en # English (mặc định)
|
|
181
221
|
```
|
|
182
222
|
|
|
183
|
-
> **Lưu ý:**
|
|
223
|
+
> **Lưu ý:** Cài đặt này chỉ áp dụng cho ngôn ngữ của các file tài liệu được tạo. Phân tích code (Pass 1–2) luôn chạy bằng tiếng Anh; output được tạo (Pass 3) được viết bằng ngôn ngữ bạn chọn. Các ví dụ code bên trong file được tạo vẫn giữ nguyên cú pháp ngôn ngữ lập trình gốc.
|
|
184
224
|
|
|
185
|
-
|
|
225
|
+
Vậy thôi. Sau 5–20 phút (Pass 1×N + Pass 2 + Pass 3 + Pass 4 memory scaffolding), tất cả tài liệu được tạo và sẵn sàng sử dụng. CLI hiển thị thanh tiến trình kèm phần trăm, thời gian đã trôi qua và ETA cho mỗi pass.
|
|
186
226
|
|
|
187
227
|
### Cài Đặt Thủ Công Từng Bước
|
|
188
228
|
|
|
189
|
-
Nếu bạn muốn kiểm soát hoàn toàn từng giai đoạn — hoặc nếu pipeline tự động
|
|
229
|
+
Nếu bạn muốn kiểm soát hoàn toàn từng giai đoạn — hoặc nếu pipeline tự động bị lỗi ở bước nào đó — bạn có thể chạy từng giai đoạn thủ công. Cách này cũng hữu ích để hiểu cách ClaudeOS-Core hoạt động bên trong.
|
|
190
230
|
|
|
191
231
|
#### Step 1: Clone và cài đặt dependencies
|
|
192
232
|
|
|
@@ -200,8 +240,8 @@ cd claudeos-core-tools && npm install && cd ..
|
|
|
200
240
|
#### Step 2: Tạo cấu trúc thư mục
|
|
201
241
|
|
|
202
242
|
```bash
|
|
203
|
-
# Rules
|
|
204
|
-
mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync}
|
|
243
|
+
# Rules (v2.0.0: thêm 60.memory)
|
|
244
|
+
mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync,60.memory}
|
|
205
245
|
|
|
206
246
|
# Standards
|
|
207
247
|
mkdir -p claudeos-core/standard/{00.core,10.backend-api,20.frontend-ui,30.security-db,40.infra,50.verification,90.optional}
|
|
@@ -209,69 +249,102 @@ mkdir -p claudeos-core/standard/{00.core,10.backend-api,20.frontend-ui,30.securi
|
|
|
209
249
|
# Skills
|
|
210
250
|
mkdir -p claudeos-core/skills/{00.shared,10.backend-crud/scaffold-crud-feature,20.frontend-page/scaffold-page-feature,50.testing,90.experimental}
|
|
211
251
|
|
|
212
|
-
# Guide, Plan, Database, MCP, Generated
|
|
252
|
+
# Guide, Plan, Database, MCP, Generated, Memory (v2.0.0: thêm memory)
|
|
213
253
|
mkdir -p claudeos-core/guide/{01.onboarding,02.usage,03.troubleshooting,04.architecture}
|
|
214
|
-
mkdir -p claudeos-core/{plan,database,mcp-guide,generated}
|
|
254
|
+
mkdir -p claudeos-core/{plan,database,mcp-guide,generated,memory}
|
|
215
255
|
```
|
|
216
256
|
|
|
217
257
|
#### Step 3: Chạy plan-installer (phân tích dự án)
|
|
218
258
|
|
|
219
|
-
|
|
259
|
+
Lệnh này quét dự án, phát hiện stack, tìm domain, chia chúng thành các nhóm và tạo prompt.
|
|
220
260
|
|
|
221
261
|
```bash
|
|
222
262
|
node claudeos-core-tools/plan-installer/index.js
|
|
223
263
|
```
|
|
224
264
|
|
|
225
|
-
|
|
226
|
-
- `project-analysis.json` — stack
|
|
227
|
-
- `domain-groups.json` — nhóm domain cho Pass 1
|
|
265
|
+
**Output (trong `claudeos-core/generated/`):**
|
|
266
|
+
- `project-analysis.json` — stack, domain, thông tin frontend đã phát hiện
|
|
267
|
+
- `domain-groups.json` — các nhóm domain cho Pass 1
|
|
228
268
|
- `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — prompt phân tích
|
|
229
|
-
- `pass2-prompt.md` — prompt
|
|
230
|
-
- `pass3-prompt.md` — prompt tạo
|
|
269
|
+
- `pass2-prompt.md` — prompt merge
|
|
270
|
+
- `pass3-prompt.md` — prompt tạo (được bọc bằng directive `staging-override.md` — xem ghi chú Step 6)
|
|
271
|
+
- `pass4-prompt.md` — prompt L4 memory scaffolding (v2.0.0; dùng cùng `staging-override.md` cho ghi rule `60.memory/`)
|
|
231
272
|
|
|
232
273
|
Bạn có thể kiểm tra các file này để xác minh độ chính xác phát hiện trước khi tiếp tục.
|
|
233
274
|
|
|
234
|
-
#### Step 4: Pass 1 — Phân tích code sâu
|
|
275
|
+
#### Step 4: Pass 1 — Phân tích code sâu (mỗi nhóm domain)
|
|
235
276
|
|
|
236
|
-
Chạy Pass 1 cho mỗi nhóm domain. Kiểm tra `domain-groups.json` để biết số nhóm.
|
|
277
|
+
Chạy Pass 1 cho mỗi nhóm domain. Kiểm tra `domain-groups.json` để biết số lượng nhóm.
|
|
237
278
|
|
|
238
279
|
```bash
|
|
239
|
-
#
|
|
280
|
+
# Kiểm tra có bao nhiêu nhóm
|
|
240
281
|
cat claudeos-core/generated/domain-groups.json | node -e "
|
|
241
282
|
const g = JSON.parse(require('fs').readFileSync('/dev/stdin','utf-8'));
|
|
242
283
|
g.groups.forEach((g,i) => console.log('Group '+(i+1)+': ['+g.domains.join(', ')+'] ('+g.type+', ~'+g.estimatedFiles+' files)'));
|
|
243
284
|
"
|
|
244
285
|
|
|
245
|
-
#
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
286
|
+
# Chạy Pass 1 cho mỗi nhóm (thay domain và số nhóm)
|
|
287
|
+
# Lưu ý: v1.6.1+ dùng Node.js String.replace() thay vì perl — không còn
|
|
288
|
+
# yêu cầu perl, và ngữ nghĩa replacement-function ngăn chặn regex injection
|
|
289
|
+
# từ các ký tự $/&/$1 có thể xuất hiện trong tên domain.
|
|
290
|
+
#
|
|
291
|
+
# Cho nhóm 1:
|
|
292
|
+
DOMAIN_LIST="user, order, product" PASS_NUM=1 node -e "
|
|
293
|
+
const fs = require('fs');
|
|
294
|
+
const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
|
|
295
|
+
const out = tpl
|
|
296
|
+
.replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
|
|
297
|
+
.replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
|
|
298
|
+
process.stdout.write(out);
|
|
299
|
+
" | claude -p --dangerously-skip-permissions
|
|
300
|
+
|
|
301
|
+
# Cho nhóm 2 (nếu có):
|
|
302
|
+
DOMAIN_LIST="payment, system, delivery" PASS_NUM=2 node -e "
|
|
303
|
+
const fs = require('fs');
|
|
304
|
+
const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
|
|
305
|
+
const out = tpl
|
|
306
|
+
.replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
|
|
307
|
+
.replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
|
|
308
|
+
process.stdout.write(out);
|
|
309
|
+
" | claude -p --dangerously-skip-permissions
|
|
310
|
+
|
|
311
|
+
# Với nhóm frontend, đổi pass1-backend-prompt.md → pass1-frontend-prompt.md
|
|
252
312
|
```
|
|
253
313
|
|
|
254
314
|
**Xác minh:** `ls claudeos-core/generated/pass1-*.json` phải hiển thị một JSON cho mỗi nhóm.
|
|
255
315
|
|
|
256
|
-
#### Step 5: Pass 2 —
|
|
316
|
+
#### Step 5: Pass 2 — Merge kết quả phân tích
|
|
257
317
|
|
|
258
318
|
```bash
|
|
259
319
|
cat claudeos-core/generated/pass2-prompt.md \
|
|
260
320
|
| claude -p --dangerously-skip-permissions
|
|
261
321
|
```
|
|
262
322
|
|
|
263
|
-
**Xác minh:** `claudeos-core/generated/pass2-merged.json` phải tồn tại với 9+ key
|
|
323
|
+
**Xác minh:** `claudeos-core/generated/pass2-merged.json` phải tồn tại với 9+ top-level key.
|
|
264
324
|
|
|
265
|
-
#### Step 6: Pass 3 — Tạo
|
|
325
|
+
#### Step 6: Pass 3 — Tạo toàn bộ tài liệu
|
|
266
326
|
|
|
267
327
|
```bash
|
|
268
328
|
cat claudeos-core/generated/pass3-prompt.md \
|
|
269
329
|
| claude -p --dangerously-skip-permissions
|
|
270
330
|
```
|
|
271
331
|
|
|
272
|
-
**Xác minh:** `CLAUDE.md` phải tồn tại ở thư mục gốc dự án.
|
|
332
|
+
**Xác minh:** `CLAUDE.md` phải tồn tại ở thư mục gốc dự án, và marker `claudeos-core/generated/pass3-complete.json` phải được ghi.
|
|
333
|
+
|
|
334
|
+
> **Lưu ý (v2.0.0):** Pass 3 ghi các file rule vào `claudeos-core/generated/.staged-rules/` trước, vì chính sách sensitive-path của Claude Code chặn ghi trực tiếp vào `.claude/`. Pipeline tự động (`npx claudeos-core init`) xử lý việc di chuyển tự động. Nếu bạn chạy bước này thủ công, bạn cần tự di chuyển cây staging: `mv claudeos-core/generated/.staged-rules/* .claude/rules/` (giữ nguyên subpath).
|
|
335
|
+
|
|
336
|
+
#### Step 7: Pass 4 — Memory scaffolding
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
cat claudeos-core/generated/pass4-prompt.md \
|
|
340
|
+
| claude -p --dangerously-skip-permissions
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**Xác minh:** `claudeos-core/memory/` phải chứa 4 file (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`), `.claude/rules/60.memory/` phải chứa 4 file rule, `claudeos-core/plan/50.memory-master.md` phải tồn tại, và `CLAUDE.md` giờ phải có mục `## Memory (L4)` được append. Marker: `claudeos-core/generated/pass4-memory.json`.
|
|
344
|
+
|
|
345
|
+
> **Lưu ý:** Nếu `claude -p` lỗi hoặc thiếu `pass4-prompt.md`, pipeline tự động sẽ fallback về scaffold tĩnh qua `lib/memory-scaffold.js` (có dịch qua Claude khi `--lang` khác tiếng Anh). Fallback tĩnh chỉ chạy bên trong `npx claudeos-core init` — chế độ thủ công yêu cầu Pass 4 thành công.
|
|
273
346
|
|
|
274
|
-
#### Step
|
|
347
|
+
#### Step 8: Chạy verification tools
|
|
275
348
|
|
|
276
349
|
```bash
|
|
277
350
|
# Tạo metadata (bắt buộc trước các kiểm tra khác)
|
|
@@ -280,69 +353,85 @@ node claudeos-core-tools/manifest-generator/index.js
|
|
|
280
353
|
# Chạy tất cả kiểm tra
|
|
281
354
|
node claudeos-core-tools/health-checker/index.js
|
|
282
355
|
|
|
283
|
-
# Hoặc chạy kiểm tra
|
|
284
|
-
node claudeos-core-tools/plan-validator/index.js --check # Plan ↔ disk
|
|
285
|
-
node claudeos-core-tools/sync-checker/index.js #
|
|
286
|
-
node claudeos-core-tools/content-validator/index.js #
|
|
287
|
-
node claudeos-core-tools/pass-json-validator/index.js # JSON
|
|
356
|
+
# Hoặc chạy từng kiểm tra:
|
|
357
|
+
node claudeos-core-tools/plan-validator/index.js --check # Plan ↔ disk consistency
|
|
358
|
+
node claudeos-core-tools/sync-checker/index.js # File chưa đăng ký/orphan
|
|
359
|
+
node claudeos-core-tools/content-validator/index.js # Kiểm tra chất lượng file (bao gồm mục memory/ [9/9])
|
|
360
|
+
node claudeos-core-tools/pass-json-validator/index.js # Kiểm tra JSON Pass 1–4 + completion marker
|
|
288
361
|
```
|
|
289
362
|
|
|
290
|
-
#### Step
|
|
363
|
+
#### Step 9: Xác minh kết quả
|
|
291
364
|
|
|
292
365
|
```bash
|
|
366
|
+
# Đếm số file được tạo
|
|
293
367
|
find .claude claudeos-core -type f | grep -v node_modules | grep -v '/generated/' | wc -l
|
|
368
|
+
|
|
369
|
+
# Kiểm tra CLAUDE.md
|
|
294
370
|
head -30 CLAUDE.md
|
|
371
|
+
|
|
372
|
+
# Kiểm tra một file standard
|
|
373
|
+
cat claudeos-core/standard/00.core/01.project-overview.md | head -20
|
|
374
|
+
|
|
375
|
+
# Kiểm tra rules
|
|
295
376
|
ls .claude/rules/*/
|
|
296
377
|
```
|
|
297
378
|
|
|
298
|
-
> **Mẹo:** Nếu bước nào
|
|
379
|
+
> **Mẹo:** Nếu bước nào đó lỗi, bạn có thể sửa và chạy lại đúng bước đó. Kết quả Pass 1/2 được cache — nếu `pass1-N.json` hoặc `pass2-merged.json` đã tồn tại, pipeline tự động sẽ bỏ qua. Dùng `npx claudeos-core init --force` để xóa kết quả trước và bắt đầu lại từ đầu.
|
|
299
380
|
|
|
300
381
|
### Bắt Đầu Sử Dụng
|
|
301
382
|
|
|
302
383
|
```
|
|
303
|
-
# Trong Claude Code — chỉ cần
|
|
304
|
-
"Tạo CRUD cho domain
|
|
384
|
+
# Trong Claude Code — chỉ cần hỏi tự nhiên:
|
|
385
|
+
"Tạo CRUD cho domain order"
|
|
305
386
|
"Thêm API xác thực người dùng"
|
|
306
|
-
"Refactor code này
|
|
387
|
+
"Refactor code này khớp với pattern dự án"
|
|
307
388
|
|
|
308
389
|
# Claude Code tự động tham chiếu Standards, Rules và Skills đã tạo.
|
|
309
390
|
```
|
|
310
391
|
|
|
311
392
|
---
|
|
312
393
|
|
|
313
|
-
## Cách Hoạt Động —
|
|
394
|
+
## Cách Hoạt Động — 4-Pass Pipeline
|
|
314
395
|
|
|
315
396
|
```
|
|
316
397
|
npx claudeos-core init
|
|
317
398
|
│
|
|
318
|
-
├── [1] npm install ←
|
|
319
|
-
├── [2] Cấu trúc thư mục
|
|
399
|
+
├── [1] npm install ← Dependencies (~10s)
|
|
400
|
+
├── [2] Cấu trúc thư mục ← Tạo folder (~1s)
|
|
320
401
|
├── [3] plan-installer (Node.js) ← Quét dự án (~5s)
|
|
321
|
-
│ ├── Tự
|
|
322
|
-
│ ├── Trích
|
|
323
|
-
│ ├──
|
|
324
|
-
│ └── Chọn prompt theo stack (theo
|
|
402
|
+
│ ├── Tự phát hiện stack (multi-stack aware)
|
|
403
|
+
│ ├── Trích domain list (tag: backend/frontend)
|
|
404
|
+
│ ├── Chia thành domain group (theo kiểu)
|
|
405
|
+
│ └── Chọn prompt theo stack (theo kiểu)
|
|
325
406
|
│
|
|
326
|
-
├── [4] Pass 1 × N (claude -p) ← Phân tích code
|
|
327
|
-
│ ├── ⚙️
|
|
328
|
-
│ └── 🎨
|
|
407
|
+
├── [4] Pass 1 × N (claude -p) ← Phân tích code sâu (~2-8min)
|
|
408
|
+
│ ├── ⚙️ Backend group → prompt backend
|
|
409
|
+
│ └── 🎨 Frontend group → prompt frontend
|
|
329
410
|
│
|
|
330
|
-
├── [5] Pass 2 × 1 (claude -p) ←
|
|
411
|
+
├── [5] Pass 2 × 1 (claude -p) ← Merge phân tích (~1min)
|
|
331
412
|
│ └── Tổng hợp TẤT CẢ kết quả Pass 1 (backend + frontend)
|
|
332
413
|
│
|
|
333
|
-
├── [6] Pass 3 × 1 (claude -p) ← Tạo
|
|
414
|
+
├── [6] Pass 3 × 1 (claude -p) ← Tạo mọi thứ (~3-5min)
|
|
334
415
|
│ └── Prompt kết hợp (mục tiêu backend + frontend)
|
|
335
416
|
│
|
|
336
|
-
|
|
417
|
+
├── [7] Pass 4 × 1 (claude -p) ← Memory scaffolding (~30s)
|
|
418
|
+
│ ├── Khởi tạo memory/ (decision-log, failure-patterns, …)
|
|
419
|
+
│ ├── Tạo rules 60.memory/
|
|
420
|
+
│ ├── Append mục "Memory (L4)" vào CLAUDE.md
|
|
421
|
+
│ └── Xây dựng plan 50.memory-master.md
|
|
422
|
+
│
|
|
423
|
+
└── [8] Xác minh ← Tự chạy health checker
|
|
337
424
|
```
|
|
338
425
|
|
|
339
|
-
### Tại
|
|
426
|
+
### Tại sao 4 Pass?
|
|
427
|
+
|
|
428
|
+
**Pass 1** là pass duy nhất đọc mã nguồn của bạn. Nó chọn các file đại diện cho mỗi domain và trích xuất pattern qua 55–95 danh mục phân tích (theo stack). Với dự án lớn, Pass 1 chạy nhiều lần — mỗi lần cho một nhóm domain. Với dự án multi-stack (ví dụ Java backend + React frontend), domain backend và frontend dùng **prompt phân tích khác nhau** phù hợp từng stack.
|
|
340
429
|
|
|
341
|
-
**Pass
|
|
430
|
+
**Pass 2** merge tất cả kết quả Pass 1 thành phân tích thống nhất: pattern chung (100% share), pattern đa số (50%+ share), pattern đặc thù domain, anti-pattern theo mức độ nghiêm trọng và các mối quan tâm cross-cutting (naming, security, DB, testing, logging, performance). Kết quả backend và frontend được merge cùng nhau.
|
|
342
431
|
|
|
343
|
-
**Pass
|
|
432
|
+
**Pass 3** nhận phân tích đã merge và tạo toàn bộ hệ sinh thái file (CLAUDE.md, rules, standards, skills, guides). Nó không bao giờ đọc mã nguồn — chỉ đọc JSON phân tích. Ở chế độ multi-stack, prompt tạo kết hợp cả mục tiêu backend và frontend để cả hai bộ standard đều được tạo trong một pass.
|
|
344
433
|
|
|
345
|
-
**Pass
|
|
434
|
+
**Pass 4** scaffold L4 Memory layer: các file kiến thức team bền vững (decision-log, failure-patterns, compaction policy, auto-rule-update) cộng với rules `60.memory/` chỉ dẫn các session tương lai khi nào và cách đọc/ghi các file đó. Memory layer là thứ giúp Claude Code tích lũy bài học qua các session thay vì phải khám phá lại mỗi lần. Khi `--lang` khác tiếng Anh, nội dung fallback tĩnh được dịch qua Claude trước khi ghi.
|
|
346
435
|
|
|
347
436
|
---
|
|
348
437
|
|
|
@@ -351,206 +440,316 @@ npx claudeos-core init
|
|
|
351
440
|
```
|
|
352
441
|
your-project/
|
|
353
442
|
│
|
|
354
|
-
├── CLAUDE.md ←
|
|
443
|
+
├── CLAUDE.md ← Entry point của Claude Code
|
|
355
444
|
│
|
|
356
445
|
├── .claude/
|
|
357
|
-
│ └── rules/ ← Rules kích hoạt
|
|
446
|
+
│ └── rules/ ← Rules kích hoạt theo glob
|
|
358
447
|
│ ├── 00.core/
|
|
359
448
|
│ ├── 10.backend/
|
|
360
449
|
│ ├── 20.frontend/
|
|
361
450
|
│ ├── 30.security-db/
|
|
362
451
|
│ ├── 40.infra/
|
|
363
|
-
│
|
|
452
|
+
│ ├── 50.sync/ ← Rule nhắc sync
|
|
453
|
+
│ └── 60.memory/ ← Rule scope on-demand của L4 memory (v2.0.0)
|
|
364
454
|
│
|
|
365
|
-
├── claudeos-core/ ← Thư mục
|
|
366
|
-
│ ├── generated/ ← JSON phân tích + prompt động
|
|
367
|
-
│ ├──
|
|
368
|
-
│ ├──
|
|
455
|
+
├── claudeos-core/ ← Thư mục output chính
|
|
456
|
+
│ ├── generated/ ← JSON phân tích + prompt động + Pass markers (nên gitignore)
|
|
457
|
+
│ │ ├── project-analysis.json ← Thông tin stack (multi-stack aware)
|
|
458
|
+
│ │ ├── domain-groups.json ← Groups với type: backend/frontend
|
|
459
|
+
│ │ ├── pass1-backend-prompt.md ← Prompt phân tích backend
|
|
460
|
+
│ │ ├── pass1-frontend-prompt.md ← Prompt phân tích frontend (nếu phát hiện)
|
|
461
|
+
│ │ ├── pass2-prompt.md ← Prompt merge
|
|
462
|
+
│ │ ├── pass3-prompt.md ← Prompt tạo (kết hợp)
|
|
463
|
+
│ │ ├── pass4-prompt.md ← Prompt memory scaffolding (v2.0.0)
|
|
464
|
+
│ │ ├── pass3-complete.json ← Marker hoàn thành Pass 3 (bỏ qua khi resume)
|
|
465
|
+
│ │ ├── pass4-memory.json ← Marker hoàn thành Pass 4 (bỏ qua khi resume)
|
|
466
|
+
│ │ ├── .i18n-cache-<lang>.json ← Cache bản dịch (`--lang` khác tiếng Anh)
|
|
467
|
+
│ │ └── .staged-rules/ ← Thư mục staging tạm cho ghi `.claude/rules/` (tự động di chuyển + dọn)
|
|
468
|
+
│ ├── standard/ ← Coding standards (15-19 file)
|
|
469
|
+
│ │ ├── 00.core/ ← Tổng quan, kiến trúc, naming
|
|
470
|
+
│ │ ├── 10.backend-api/ ← API pattern (theo stack)
|
|
471
|
+
│ │ ├── 20.frontend-ui/ ← Frontend pattern (nếu phát hiện)
|
|
472
|
+
│ │ ├── 30.security-db/ ← Security, DB schema, utilities
|
|
473
|
+
│ │ ├── 40.infra/ ← Config, logging, CI/CD
|
|
474
|
+
│ │ ├── 50.verification/ ← Build verification, testing
|
|
475
|
+
│ │ └── 90.optional/ ← Convention tùy chọn (mở rộng theo stack)
|
|
476
|
+
│ ├── skills/ ← Skills scaffold CRUD
|
|
369
477
|
│ ├── guide/ ← Onboarding, FAQ, troubleshooting (9 file)
|
|
370
|
-
│ ├── plan/ ← Master
|
|
371
|
-
│ ├── database/ ←
|
|
372
|
-
│
|
|
478
|
+
│ ├── plan/ ← Master plans (backup/restore)
|
|
479
|
+
│ ├── database/ ← DB schema, hướng dẫn migration
|
|
480
|
+
│ ├── mcp-guide/ ← Hướng dẫn tích hợp MCP server
|
|
481
|
+
│ └── memory/ ← L4: kiến thức team (4 file) — commit các file này
|
|
482
|
+
│ ├── decision-log.md ← Lý do "tại sao" đằng sau quyết định thiết kế
|
|
483
|
+
│ ├── failure-patterns.md ← Lỗi lặp lại & cách fix (tự chấm điểm — `npx claudeos-core memory score`)
|
|
484
|
+
│ ├── compaction.md ← Chiến lược compaction 4 giai đoạn (chạy `npx claudeos-core memory compact`)
|
|
485
|
+
│ └── auto-rule-update.md ← Đề xuất cải tiến rule (`npx claudeos-core memory propose-rules`)
|
|
373
486
|
│
|
|
374
|
-
└── claudeos-core-tools/ ←
|
|
487
|
+
└── claudeos-core-tools/ ← Toolkit này (không sửa)
|
|
375
488
|
```
|
|
376
489
|
|
|
377
|
-
|
|
490
|
+
Mọi file standard đều bao gồm ví dụ đúng ✅, ví dụ sai ❌, và bảng tóm tắt rule — tất cả đều được trích xuất từ pattern code thực tế của bạn, không phải template chung chung.
|
|
491
|
+
|
|
492
|
+
### Đề xuất gitignore
|
|
493
|
+
|
|
494
|
+
**Nên commit** (kiến thức team — có mục đích chia sẻ):
|
|
495
|
+
- `CLAUDE.md` — entry point của Claude Code
|
|
496
|
+
- `.claude/rules/**` — rules tự động load
|
|
497
|
+
- `claudeos-core/standard/**`, `skills/**`, `guide/**`, `database/**`, `mcp-guide/**`, `plan/**` — tài liệu được tạo
|
|
498
|
+
- `claudeos-core/memory/**` — lịch sử quyết định, failure pattern, đề xuất rule
|
|
499
|
+
|
|
500
|
+
**KHÔNG commit** (build artifact có thể tạo lại):
|
|
501
|
+
|
|
502
|
+
```gitignore
|
|
503
|
+
# ClaudeOS-Core — phân tích được tạo & cache dịch
|
|
504
|
+
claudeos-core/generated/
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
Thư mục `generated/` chứa JSON phân tích (`pass1-*.json`, `pass2-merged.json`), prompts (`pass1/2/3/4-prompt.md`), Pass completion marker (`pass3-complete.json`, `pass4-memory.json`), translation cache (`.i18n-cache-<lang>.json`), và thư mục staging tạm (`.staged-rules/`) — tất cả có thể xây lại bằng cách chạy lại `npx claudeos-core init`.
|
|
378
508
|
|
|
379
509
|
---
|
|
380
510
|
|
|
381
|
-
## Tự Động Mở Rộng Theo
|
|
511
|
+
## Tự Động Mở Rộng Theo Kích Thước Dự Án
|
|
382
512
|
|
|
383
|
-
|
|
|
513
|
+
| Kích thước | Domain | Số lần Pass 1 | Tổng `claude -p` | Thời gian ước tính |
|
|
384
514
|
|---|---|---|---|---|
|
|
385
|
-
| Nhỏ | 1–4 | 1 | 3 | ~5
|
|
386
|
-
|
|
|
387
|
-
| Lớn | 9–16 | 3–4 |
|
|
388
|
-
| Rất
|
|
515
|
+
| Nhỏ | 1–4 | 1 | 4 (Pass 1 + 2 + 3 + 4) | ~5–6min |
|
|
516
|
+
| Vừa | 5–8 | 2 | 5 | ~8–9min |
|
|
517
|
+
| Lớn | 9–16 | 3–4 | 6–7 | ~12–13min |
|
|
518
|
+
| Rất lớn | 17+ | 5+ | 8+ | ~18min+ |
|
|
389
519
|
|
|
390
|
-
Với dự án multi-stack (ví
|
|
520
|
+
Pass 4 (memory scaffolding) thêm khoảng ~30s lên trên các pass phân tích. Với dự án multi-stack (ví dụ Java + React), domain backend và frontend được đếm cộng lại. Dự án 6 backend + 4 frontend = 10 tổng, mở rộng như "Lớn".
|
|
391
521
|
|
|
392
522
|
---
|
|
393
523
|
|
|
394
|
-
## Công Cụ Xác
|
|
524
|
+
## Công Cụ Xác Minh
|
|
395
525
|
|
|
396
|
-
ClaudeOS-Core bao gồm 5 công cụ xác
|
|
526
|
+
ClaudeOS-Core bao gồm 5 công cụ xác minh built-in chạy tự động sau khi tạo:
|
|
397
527
|
|
|
398
528
|
```bash
|
|
399
529
|
# Chạy tất cả kiểm tra cùng lúc (khuyến nghị)
|
|
400
530
|
npx claudeos-core health
|
|
401
531
|
|
|
402
532
|
# Lệnh riêng lẻ
|
|
403
|
-
npx claudeos-core validate # So sánh Plan ↔
|
|
404
|
-
npx claudeos-core refresh #
|
|
405
|
-
npx claudeos-core restore #
|
|
533
|
+
npx claudeos-core validate # So sánh Plan ↔ disk
|
|
534
|
+
npx claudeos-core refresh # Disk → Plan sync
|
|
535
|
+
npx claudeos-core restore # Plan → Disk restore
|
|
536
|
+
|
|
537
|
+
# Hoặc dùng node trực tiếp (cho người dùng git clone)
|
|
538
|
+
node claudeos-core-tools/health-checker/index.js
|
|
539
|
+
node claudeos-core-tools/manifest-generator/index.js
|
|
540
|
+
node claudeos-core-tools/plan-validator/index.js --check
|
|
541
|
+
node claudeos-core-tools/sync-checker/index.js
|
|
406
542
|
```
|
|
407
543
|
|
|
408
|
-
| Công
|
|
544
|
+
| Công cụ | Chức năng |
|
|
409
545
|
|---|---|
|
|
410
|
-
| **manifest-generator** |
|
|
411
|
-
| **plan-validator** | So sánh
|
|
412
|
-
| **sync-checker** | Phát hiện file chưa đăng ký (trên
|
|
413
|
-
| **content-validator** |
|
|
414
|
-
| **pass-json-validator** | Xác
|
|
546
|
+
| **manifest-generator** | Tạo JSON metadata (rule-manifest, sync-map, plan-manifest); index 7 thư mục bao gồm `memory/` (`totalMemory` trong summary) |
|
|
547
|
+
| **plan-validator** | So sánh block `<file>` Master Plan với disk — 3 chế độ: check, refresh, restore |
|
|
548
|
+
| **sync-checker** | Phát hiện file chưa đăng ký (trên disk nhưng không có trong plan) và entry orphan — bao phủ 7 thư mục (thêm `memory/` ở v2.0.0) |
|
|
549
|
+
| **content-validator** | Kiểm tra chất lượng 9 mục — file rỗng, thiếu ví dụ ✅/❌, mục bắt buộc, cộng với toàn vẹn scaffold L4 memory (ngày heading decision-log, trường bắt buộc failure-pattern, parse nhận biết fence) |
|
|
550
|
+
| **pass-json-validator** | Xác minh cấu trúc JSON Pass 1–4 cộng với marker hoàn thành `pass3-complete.json` và `pass4-memory.json` |
|
|
415
551
|
|
|
416
552
|
---
|
|
417
553
|
|
|
418
|
-
## Claude Code
|
|
554
|
+
## Cách Claude Code Dùng Tài Liệu Của Bạn
|
|
419
555
|
|
|
420
|
-
|
|
556
|
+
ClaudeOS-Core tạo tài liệu mà Claude Code thực sự đọc — đây là cách:
|
|
421
557
|
|
|
422
|
-
###
|
|
558
|
+
### Cái Claude Code đọc tự động
|
|
423
559
|
|
|
424
|
-
| File |
|
|
560
|
+
| File | Khi nào | Đảm bảo |
|
|
425
561
|
|---|---|---|
|
|
426
|
-
| `CLAUDE.md` | Mỗi lần bắt đầu
|
|
427
|
-
| `.claude/rules/00.core/*` | Khi
|
|
428
|
-
| `.claude/rules/10.backend/*` | Khi
|
|
429
|
-
| `.claude/rules/
|
|
430
|
-
| `.claude/rules/
|
|
431
|
-
| `.claude/rules/
|
|
562
|
+
| `CLAUDE.md` | Mỗi lần bắt đầu hội thoại | Luôn luôn |
|
|
563
|
+
| `.claude/rules/00.core/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
|
|
564
|
+
| `.claude/rules/10.backend/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
|
|
565
|
+
| `.claude/rules/20.frontend/*` | Khi sửa bất kỳ file frontend nào (scope tới đường dẫn component/page/style) | Có điều kiện |
|
|
566
|
+
| `.claude/rules/30.security-db/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
|
|
567
|
+
| `.claude/rules/40.infra/*` | Chỉ khi sửa file config/infra (đường dẫn có scope) | Có điều kiện |
|
|
568
|
+
| `.claude/rules/50.sync/*` | Chỉ khi sửa file claudeos-core (đường dẫn có scope) | Có điều kiện |
|
|
569
|
+
| `.claude/rules/60.memory/*` | Khi sửa `claudeos-core/memory/*` (scope tới đường dẫn memory) — chỉ dẫn **cách** đọc/ghi memory layer on-demand | Có điều kiện (v2.0.0) |
|
|
432
570
|
|
|
433
|
-
###
|
|
571
|
+
### Cái Claude Code đọc theo yêu cầu qua rule references
|
|
434
572
|
|
|
435
|
-
Mỗi file
|
|
573
|
+
Mỗi file rule link tới standard tương ứng qua mục `## Reference`. Claude chỉ đọc standard liên quan cho task hiện tại:
|
|
436
574
|
|
|
437
|
-
- `claudeos-core/standard/**` —
|
|
575
|
+
- `claudeos-core/standard/**` — coding pattern, ví dụ ✅/❌, convention đặt tên
|
|
438
576
|
- `claudeos-core/database/**` — DB schema (cho query, mapper, migration)
|
|
577
|
+
- `claudeos-core/memory/**` (v2.0.0) — L4 team knowledge layer; **không** auto-load (sẽ quá nhiễu ở mỗi hội thoại). Thay vào đó, các rule `60.memory/*` chỉ dẫn Claude *khi nào* Read các file này: ở đầu session (lướt qua `decision-log.md` gần đây + `failure-patterns.md` importance cao), và append theo yêu cầu khi ra quyết định hoặc gặp lỗi lặp lại.
|
|
439
578
|
|
|
440
|
-
`00.standard-reference.md` đóng vai trò
|
|
579
|
+
`00.standard-reference.md` đóng vai trò như danh bạ của tất cả file standard để phát hiện những standard không có rule tương ứng.
|
|
441
580
|
|
|
442
|
-
###
|
|
581
|
+
### Cái Claude Code KHÔNG đọc (tiết kiệm context)
|
|
443
582
|
|
|
444
|
-
|
|
583
|
+
Các folder này được loại trừ rõ ràng qua mục `DO NOT Read` trong rule standard-reference:
|
|
445
584
|
|
|
446
|
-
|
|
|
585
|
+
| Folder | Lý do loại trừ |
|
|
447
586
|
|---|---|
|
|
448
|
-
| `claudeos-core/plan/` |
|
|
449
|
-
| `claudeos-core/generated/` | JSON metadata build
|
|
450
|
-
| `claudeos-core/guide/` | Hướng dẫn onboarding cho người
|
|
587
|
+
| `claudeos-core/plan/` | Master Plan backup (~340KB). Dùng `npx claudeos-core refresh` để sync. |
|
|
588
|
+
| `claudeos-core/generated/` | JSON metadata build, prompt, Pass marker, translation cache, `.staged-rules/`. Không dùng cho coding. |
|
|
589
|
+
| `claudeos-core/guide/` | Hướng dẫn onboarding cho con người. |
|
|
451
590
|
| `claudeos-core/mcp-guide/` | Tài liệu MCP server. Không dùng cho coding. |
|
|
591
|
+
| `claudeos-core/memory/` (auto-load) | **Auto-load bị tắt** có chủ đích — sẽ làm phồng context ở mỗi hội thoại. Đọc theo yêu cầu qua rule `60.memory/*` thay thế (ví dụ: scan `failure-patterns.md` lúc bắt đầu session). Luôn commit các file này. |
|
|
452
592
|
|
|
453
593
|
---
|
|
454
594
|
|
|
455
|
-
## Quy Trình
|
|
595
|
+
## Quy Trình Hằng Ngày
|
|
456
596
|
|
|
457
597
|
### Sau Khi Cài Đặt
|
|
458
598
|
|
|
459
599
|
```
|
|
460
|
-
#
|
|
461
|
-
"Tạo CRUD cho domain
|
|
462
|
-
"Thêm API cập nhật
|
|
463
|
-
"Refactor code này
|
|
600
|
+
# Chỉ dùng Claude Code như bình thường — nó tham chiếu standard của bạn tự động:
|
|
601
|
+
"Tạo CRUD cho domain order"
|
|
602
|
+
"Thêm API cập nhật profile người dùng"
|
|
603
|
+
"Refactor code này khớp với pattern dự án"
|
|
464
604
|
```
|
|
465
605
|
|
|
466
|
-
### Sau Khi
|
|
606
|
+
### Sau Khi Sửa Standard Thủ Công
|
|
467
607
|
|
|
468
608
|
```bash
|
|
469
|
-
# Sau khi
|
|
609
|
+
# Sau khi sửa file standard hoặc rules:
|
|
470
610
|
npx claudeos-core refresh
|
|
471
611
|
|
|
472
612
|
# Xác minh mọi thứ nhất quán
|
|
473
613
|
npx claudeos-core health
|
|
474
614
|
```
|
|
475
615
|
|
|
476
|
-
### Khi
|
|
616
|
+
### Khi Docs Bị Hỏng
|
|
477
617
|
|
|
478
618
|
```bash
|
|
479
619
|
# Khôi phục mọi thứ từ Master Plan
|
|
480
620
|
npx claudeos-core restore
|
|
481
621
|
```
|
|
482
622
|
|
|
623
|
+
### Bảo Trì Memory Layer (v2.0.0)
|
|
624
|
+
|
|
625
|
+
L4 Memory layer (`claudeos-core/memory/`) tích lũy kiến thức team qua các session. Ba CLI subcommand giữ nó khỏe mạnh:
|
|
626
|
+
|
|
627
|
+
```bash
|
|
628
|
+
# Compact: áp dụng chính sách compaction 4 giai đoạn (chạy định kỳ — ví dụ hàng tháng)
|
|
629
|
+
npx claudeos-core memory compact
|
|
630
|
+
# Stage 1: tóm tắt các entry cũ (>30 ngày, body → một dòng)
|
|
631
|
+
# Stage 2: merge heading trùng (tổng frequency, giữ fix mới nhất)
|
|
632
|
+
# Stage 3: bỏ importance thấp + cũ (importance <3 VÀ lastSeen >60 ngày)
|
|
633
|
+
# Stage 4: áp dụng giới hạn 400 dòng mỗi file (bỏ importance thấp cũ nhất trước)
|
|
634
|
+
|
|
635
|
+
# Score: xếp hạng lại các entry trong failure-patterns.md theo importance
|
|
636
|
+
npx claudeos-core memory score
|
|
637
|
+
# importance = round(frequency × 1.5 + recency × 5), giới hạn 10
|
|
638
|
+
# Chạy sau khi append vài failure pattern mới
|
|
639
|
+
|
|
640
|
+
# Propose-rules: nổi bật các candidate rule addition từ failure lặp lại
|
|
641
|
+
npx claudeos-core memory propose-rules
|
|
642
|
+
# Đọc các entry failure-patterns.md với frequency ≥ 3
|
|
643
|
+
# Tính confidence (sigmoid trên weighted evidence × anchor multiplier)
|
|
644
|
+
# Ghi proposal vào memory/auto-rule-update.md (KHÔNG tự động áp dụng)
|
|
645
|
+
# Confidence ≥ 0.70 đáng xem xét nghiêm túc; nếu accept → sửa rule + log quyết định
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
Khi nào ghi vào memory (Claude làm theo yêu cầu, nhưng bạn cũng có thể sửa thủ công):
|
|
649
|
+
- **`decision-log.md`** — append entry mới bất cứ khi nào bạn chọn giữa các pattern cạnh tranh, chọn thư viện, định nghĩa convention team, hoặc quyết định KHÔNG làm gì đó. Chỉ append; không bao giờ sửa entry lịch sử.
|
|
650
|
+
- **`failure-patterns.md`** — append vào **lần xuất hiện thứ hai** của lỗi lặp lại hoặc nguyên nhân không hiển nhiên. Lỗi lần đầu không cần entry.
|
|
651
|
+
- `compaction.md` và `auto-rule-update.md` — được tạo/quản lý bởi các CLI subcommand trên; không sửa bằng tay.
|
|
652
|
+
|
|
483
653
|
### Tích Hợp CI/CD
|
|
484
654
|
|
|
485
655
|
```yaml
|
|
486
656
|
# Ví dụ GitHub Actions
|
|
487
657
|
- run: npx claudeos-core validate
|
|
488
|
-
#
|
|
658
|
+
# Exit code 1 chặn PR
|
|
659
|
+
|
|
660
|
+
# Tùy chọn: housekeeping memory hàng tháng (workflow cron riêng)
|
|
661
|
+
- run: npx claudeos-core memory compact
|
|
662
|
+
- run: npx claudeos-core memory score
|
|
489
663
|
```
|
|
490
664
|
|
|
491
665
|
---
|
|
492
666
|
|
|
493
|
-
## Khác Biệt
|
|
667
|
+
## Khác Biệt Ra Sao?
|
|
668
|
+
|
|
669
|
+
### So với Các Công Cụ Claude Code Khác
|
|
494
670
|
|
|
495
671
|
| | ClaudeOS-Core | Everything Claude Code (50K+ ⭐) | Harness | specs-generator | Claude `/init` |
|
|
496
672
|
|---|---|---|---|---|---|
|
|
497
|
-
| **
|
|
498
|
-
|
|
|
499
|
-
| **
|
|
500
|
-
| **
|
|
501
|
-
| **
|
|
502
|
-
| **
|
|
503
|
-
| **Output** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans (40-50+
|
|
504
|
-
| **
|
|
505
|
-
| **
|
|
506
|
-
| **
|
|
507
|
-
| **Multi-stack** | ✅ Backend + Frontend
|
|
508
|
-
| **
|
|
673
|
+
| **Cách tiếp cận** | Code phân tích trước, rồi LLM tạo | Preset config dựng sẵn | LLM thiết kế agent team | LLM tạo spec doc | LLM viết CLAUDE.md |
|
|
674
|
+
| **Đọc source code** | ✅ Phân tích tĩnh deterministic | ❌ | ❌ | ❌ (LLM đọc) | ❌ (LLM đọc) |
|
|
675
|
+
| **Phát hiện stack** | Code xác nhận (ORM, DB, build tool, pkg manager) | N/A (stack-agnostic) | LLM đoán | LLM đoán | LLM đoán |
|
|
676
|
+
| **Phát hiện domain** | Code xác nhận (Java 5 pattern, Kotlin CQRS, Next.js FSD) | N/A | LLM đoán | N/A | N/A |
|
|
677
|
+
| **Cùng dự án → cùng kết quả** | ✅ Phân tích deterministic | ✅ (file tĩnh) | ❌ (LLM thay đổi) | ❌ (LLM thay đổi) | ❌ (LLM thay đổi) |
|
|
678
|
+
| **Xử lý dự án lớn** | Chia domain group (4 domain / 40 file mỗi group) | N/A | Không chia | Không chia | Giới hạn context window |
|
|
679
|
+
| **Output** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans (40-50+ file) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 spec document | CLAUDE.md (1 file) |
|
|
680
|
+
| **Vị trí output** | `.claude/rules/` (tự load bởi Claude Code) | `.claude/` đủ loại | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
|
|
681
|
+
| **Xác minh sau khi tạo** | ✅ 5 validator tự động | ❌ | ❌ | ❌ | ❌ |
|
|
682
|
+
| **Output đa ngôn ngữ** | ✅ 10 ngôn ngữ | ❌ | ❌ | ❌ | ❌ |
|
|
683
|
+
| **Multi-stack** | ✅ Backend + Frontend đồng thời | ❌ Stack-agnostic | ❌ | ❌ | Một phần |
|
|
684
|
+
| **Memory layer bền vững** | ✅ L4 — decision log + failure pattern + đề xuất rule chấm điểm tự động (v2.0.0) | ❌ | ❌ | ❌ | ❌ |
|
|
685
|
+
| **Điều phối agent** | ❌ | ✅ 28 agent | ✅ 6 pattern | ❌ | ❌ |
|
|
686
|
+
|
|
687
|
+
### Khác biệt chính trong một câu
|
|
509
688
|
|
|
510
|
-
|
|
689
|
+
**Các công cụ khác cho Claude "instructions tốt nói chung". ClaudeOS-Core cho Claude "instructions trích xuất từ code thực tế của bạn".**
|
|
511
690
|
|
|
512
|
-
|
|
691
|
+
Đó là lý do Claude Code ngừng tạo code JPA trong dự án MyBatis,
|
|
692
|
+
ngừng dùng `success()` khi codebase của bạn dùng `ok()`,
|
|
693
|
+
và ngừng tạo thư mục `user/controller/` khi dự án của bạn dùng `controller/user/`.
|
|
513
694
|
|
|
514
|
-
###
|
|
695
|
+
### Bổ sung, không cạnh tranh
|
|
515
696
|
|
|
516
|
-
ClaudeOS-Core
|
|
517
|
-
|
|
697
|
+
ClaudeOS-Core tập trung vào **rule và standard đặc thù dự án**.
|
|
698
|
+
Các công cụ khác tập trung vào **điều phối agent và workflow**.
|
|
699
|
+
|
|
700
|
+
Bạn có thể dùng ClaudeOS-Core để tạo rule cho dự án, rồi dùng ECC hoặc Harness bên trên cho agent team và tự động hóa workflow. Chúng giải quyết các vấn đề khác nhau.
|
|
518
701
|
|
|
519
702
|
---
|
|
703
|
+
|
|
520
704
|
## FAQ
|
|
521
705
|
|
|
522
|
-
**
|
|
523
|
-
Không.
|
|
706
|
+
**Q: Nó có sửa source code của tôi không?**
|
|
707
|
+
Không. Nó chỉ tạo `CLAUDE.md`, `.claude/rules/`, và `claudeos-core/`. Code hiện có của bạn không bao giờ bị sửa.
|
|
708
|
+
|
|
709
|
+
**Q: Chi phí là bao nhiêu?**
|
|
710
|
+
Nó gọi `claude -p` 4–8 lần (Pass 1 × N + Pass 2 + Pass 3 + Pass 4). Nằm trong mức sử dụng Claude Code bình thường. Khi `--lang` khác tiếng Anh, đường fallback tĩnh có thể gọi thêm vài `claude -p` để dịch; kết quả được cache trong `claudeos-core/generated/.i18n-cache-<lang>.json` nên các lần chạy sau dùng lại.
|
|
711
|
+
|
|
712
|
+
**Q: Tôi có nên commit các file được tạo vào Git không?**
|
|
713
|
+
Có, khuyến nghị. Team của bạn có thể chia sẻ cùng standard Claude Code. Hãy xem xét thêm `claudeos-core/generated/` vào `.gitignore` (JSON phân tích có thể tạo lại).
|
|
714
|
+
|
|
715
|
+
**Q: Còn dự án mixed-stack (ví dụ Java backend + React frontend)?**
|
|
716
|
+
Được hỗ trợ hoàn toàn. ClaudeOS-Core tự phát hiện cả hai stack, gắn tag domain là `backend` hoặc `frontend`, và dùng prompt phân tích theo stack cho mỗi cái. Pass 2 merge mọi thứ, và Pass 3 tạo cả standard backend và frontend trong một pass.
|
|
524
717
|
|
|
525
|
-
**
|
|
526
|
-
|
|
718
|
+
**Q: Nó có hoạt động với monorepo Turborepo / pnpm workspaces / Lerna không?**
|
|
719
|
+
Có. ClaudeOS-Core phát hiện `turbo.json`, `pnpm-workspace.yaml`, `lerna.json`, hoặc `package.json#workspaces` và tự động quét file `package.json` của sub-package để tìm dependency framework/ORM/DB. Quét domain bao phủ pattern `apps/*/src/` và `packages/*/src/`. Chạy từ root monorepo.
|
|
527
720
|
|
|
528
|
-
**
|
|
529
|
-
|
|
721
|
+
**Q: Chạy lại thì chuyện gì xảy ra?**
|
|
722
|
+
Nếu kết quả Pass 1/2 trước đó tồn tại, một prompt tương tác cho bạn chọn: **Continue** (tiếp tục từ chỗ dừng) hoặc **Fresh** (xóa tất cả và bắt đầu lại). Dùng `--force` để bỏ qua prompt và luôn bắt đầu mới. Pass 3 luôn chạy lại. Các phiên bản trước có thể được khôi phục từ Master Plan.
|
|
530
723
|
|
|
531
|
-
**
|
|
532
|
-
|
|
724
|
+
**Q: NestJS có template riêng hay dùng của Express?**
|
|
725
|
+
NestJS dùng template `node-nestjs` chuyên dụng với các danh mục phân tích đặc thù NestJS: decorator `@Module`, `@Injectable`, `@Controller`, Guards, Pipes, Interceptors, DI container, pattern CQRS, và `Test.createTestingModule`. Dự án Express dùng template `node-express` riêng biệt.
|
|
533
726
|
|
|
534
|
-
**
|
|
535
|
-
|
|
727
|
+
**Q: Còn dự án Vue / Nuxt?**
|
|
728
|
+
Vue/Nuxt dùng template `vue-nuxt` chuyên dụng bao phủ Composition API, `<script setup>`, defineProps/defineEmits, Pinia store, `useFetch`/`useAsyncData`, Nitro server route, và `@nuxt/test-utils`. Dự án Next.js/React dùng template `node-nextjs`.
|
|
536
729
|
|
|
537
|
-
**
|
|
538
|
-
Có. ClaudeOS-Core phát hiện
|
|
730
|
+
**Q: Nó có hỗ trợ Kotlin không?**
|
|
731
|
+
Có. ClaudeOS-Core tự phát hiện Kotlin từ `build.gradle.kts` hoặc kotlin plugin trong `build.gradle`. Nó dùng template `kotlin-spring` chuyên dụng với phân tích đặc thù Kotlin (data class, sealed class, coroutine, extension function, MockK, v.v.).
|
|
539
732
|
|
|
540
|
-
**
|
|
541
|
-
|
|
733
|
+
**Q: Còn kiến trúc CQRS / BFF?**
|
|
734
|
+
Được hỗ trợ hoàn toàn cho dự án Kotlin multi-module. ClaudeOS-Core đọc `settings.gradle.kts`, phát hiện kiểu module (command, query, bff, integration) từ tên module, và nhóm cùng domain qua các module Command/Query. Các standard được tạo bao gồm rule riêng cho command controller vs query controller, pattern BFF/Feign, và convention giao tiếp liên module.
|
|
542
735
|
|
|
543
|
-
**
|
|
544
|
-
|
|
736
|
+
**Q: Còn Gradle multi-module monorepo?**
|
|
737
|
+
ClaudeOS-Core quét tất cả submodule (`**/src/main/kotlin/**/*.kt`) bất kể độ sâu nesting. Kiểu module được suy ra từ convention đặt tên (ví dụ `reservation-command-server` → domain: `reservation`, type: `command`). Các thư viện shared (`shared-lib`, `integration-lib`) cũng được phát hiện.
|
|
545
738
|
|
|
546
|
-
**
|
|
547
|
-
|
|
739
|
+
**Q: L4 Memory layer là gì (v2.0.0)? Tôi có nên commit `claudeos-core/memory/` không?**
|
|
740
|
+
Có — **luôn commit** `claudeos-core/memory/`. Đó là kiến thức team bền vững: `decision-log.md` ghi lại *lý do* đằng sau các lựa chọn kiến trúc (chỉ append), `failure-patterns.md` đăng ký các lỗi lặp lại với importance score để session tương lai tránh, `compaction.md` định nghĩa chính sách compaction 4 giai đoạn, và `auto-rule-update.md` thu thập các đề xuất cải tiến rule do máy tạo. Khác với rule (tự load theo path), file memory là **on-demand** — Claude chỉ đọc khi rule `60.memory/*` hướng dẫn (ví dụ: scan failure importance cao lúc bắt đầu session). Điều này giữ chi phí context thấp trong khi bảo toàn kiến thức dài hạn.
|
|
548
741
|
|
|
549
|
-
**
|
|
550
|
-
|
|
742
|
+
**Q: Nếu Pass 4 lỗi thì sao?**
|
|
743
|
+
Pipeline tự động (`npx claudeos-core init`) có static fallback: nếu `claude -p` lỗi hoặc thiếu `pass4-prompt.md`, nó scaffold memory layer trực tiếp qua `lib/memory-scaffold.js`. Khi `--lang` khác tiếng Anh, static fallback **phải** dịch qua CLI `claude` — nếu cũng lỗi, lần chạy sẽ abort với `InitError` (không fallback âm thầm về English). Chạy lại khi `claude` đã xác thực, hoặc dùng `--lang en` để bỏ qua dịch. Kết quả dịch được cache trong `claudeos-core/generated/.i18n-cache-<lang>.json` nên lần chạy sau dùng lại.
|
|
551
744
|
|
|
552
|
-
**
|
|
553
|
-
|
|
745
|
+
**Q: `memory compact` / `memory score` / `memory propose-rules` làm gì?**
|
|
746
|
+
Xem mục [Bảo Trì Memory Layer](#bảo-trì-memory-layer-v200) ở trên. Phiên bản ngắn: `compact` chạy chính sách 4 giai đoạn (tóm tắt cũ, merge trùng, bỏ importance thấp cũ, áp dụng giới hạn 400 dòng); `score` xếp hạng lại `failure-patterns.md` theo importance (frequency × recency); `propose-rules` nổi bật candidate rule addition từ failure lặp lại vào `auto-rule-update.md` (không tự động áp dụng — xem và accept/reject thủ công).
|
|
747
|
+
|
|
748
|
+
**Q: Tại sao `--force` (hoặc chế độ "fresh" resume) xóa `.claude/rules/`?**
|
|
749
|
+
v2.0.0 thêm ba silent-failure guard cho Pass 3 (Guard 3 bao phủ hai biến thể output không đầy đủ: H2 cho `guide/` và H1 cho `standard/skills/plan`). Guard 1 ("partial staged-rules move") và Guard 3 ("incomplete output — missing/empty guide files or missing standard sentinel / empty skills / empty plan") không phụ thuộc vào rule hiện có, nhưng Guard 2 ("zero rules detected") thì có — nó kích hoạt khi Claude bỏ qua directive `staging-override.md` và thử ghi trực tiếp vào `.claude/` (nơi chính sách sensitive-path của Claude Code chặn). Rule cũ từ lần chạy trước sẽ khiến Guard 2 false-negative — nên `--force`/`fresh` xóa `.claude/rules/` để đảm bảo phát hiện sạch. **Sửa rule thủ công sẽ bị mất** dưới `--force`/`fresh`; hãy backup trước nếu cần.
|
|
750
|
+
|
|
751
|
+
**Q: `claudeos-core/generated/.staged-rules/` là gì và tại sao tồn tại?**
|
|
752
|
+
Chính sách sensitive-path của Claude Code từ chối ghi trực tiếp vào `.claude/` từ subprocess `claude -p` (ngay cả với `--dangerously-skip-permissions`). v2.0.0 đi vòng bằng cách cho prompt Pass 3/4 chuyển hướng mọi ghi `.claude/rules/` vào thư mục staging; orchestrator Node.js (không chịu chính sách đó) sau đó di chuyển cây staged vào `.claude/rules/` sau mỗi pass. Điều này trong suốt với người dùng — thư mục được tự tạo, tự dọn, và tự di chuyển. Nếu lần chạy trước crash giữa chừng di chuyển, lần chạy sau xóa staging dir trước khi thử lại.
|
|
554
753
|
|
|
555
754
|
---
|
|
556
755
|
|
|
@@ -558,34 +757,36 @@ ClaudeOS-Core quét tất cả submodule (`**/src/main/kotlin/**/*.kt`) bất k
|
|
|
558
757
|
|
|
559
758
|
```
|
|
560
759
|
pass-prompts/templates/
|
|
561
|
-
├── common/ #
|
|
760
|
+
├── common/ # header/footer dùng chung + pass4 + staging-override
|
|
562
761
|
├── java-spring/ # Java / Spring Boot
|
|
563
762
|
├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
|
|
564
763
|
├── node-express/ # Node.js / Express
|
|
565
764
|
├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
|
|
566
765
|
├── node-fastify/ # Node.js / Fastify
|
|
567
|
-
├── node-nextjs/ # Next.js / React
|
|
766
|
+
├── node-nextjs/ # Next.js / React (App Router, RSC)
|
|
767
|
+
├── node-vite/ # Vite SPA (React, client-side routing, VITE_ env, Vitest)
|
|
568
768
|
├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
|
|
569
769
|
├── angular/ # Angular
|
|
570
770
|
├── python-django/ # Python / Django (DRF)
|
|
571
|
-
|
|
771
|
+
├── python-fastapi/ # Python / FastAPI
|
|
772
|
+
└── python-flask/ # Python / Flask (Blueprint, app factory, Jinja2)
|
|
572
773
|
```
|
|
573
774
|
|
|
574
|
-
`plan-installer` tự phát hiện stack của bạn,
|
|
775
|
+
`plan-installer` tự phát hiện các stack của bạn, rồi lắp ráp prompt theo kiểu. NestJS, Vue/Nuxt, Vite SPA và Flask mỗi cái dùng template chuyên dụng với danh mục phân tích đặc thù framework (ví dụ: `@Module`/`@Injectable`/Guards cho NestJS; `<script setup>`/Pinia/useFetch cho Vue; client-side routing/`VITE_` env cho Vite; Blueprint/`app.factory`/Flask-SQLAlchemy cho Flask). Cho dự án multi-stack, `pass1-backend-prompt.md` và `pass1-frontend-prompt.md` riêng biệt được tạo, trong khi `pass3-prompt.md` kết hợp mục tiêu tạo của cả hai stack. Pass 4 dùng template chung `common/pass4.md` (memory scaffolding) bất kể stack.
|
|
575
776
|
|
|
576
777
|
---
|
|
577
778
|
|
|
578
779
|
## Hỗ Trợ Monorepo
|
|
579
780
|
|
|
580
|
-
ClaudeOS-Core tự động phát hiện
|
|
781
|
+
ClaudeOS-Core tự động phát hiện setup monorepo JS/TS và quét sub-package tìm dependency.
|
|
581
782
|
|
|
582
|
-
**
|
|
783
|
+
**Các monorepo marker được hỗ trợ** (tự phát hiện):
|
|
583
784
|
- `turbo.json` (Turborepo)
|
|
584
785
|
- `pnpm-workspace.yaml` (pnpm workspaces)
|
|
585
786
|
- `lerna.json` (Lerna)
|
|
586
787
|
- `package.json#workspaces` (npm/yarn workspaces)
|
|
587
788
|
|
|
588
|
-
**Chạy từ
|
|
789
|
+
**Chạy từ root monorepo** — ClaudeOS-Core đọc `apps/*/package.json` và `packages/*/package.json` để khám phá dependency framework/ORM/DB qua các sub-package:
|
|
589
790
|
|
|
590
791
|
```bash
|
|
591
792
|
cd my-monorepo
|
|
@@ -598,20 +799,20 @@ npx claudeos-core init
|
|
|
598
799
|
- Dependency từ `packages/db/package.json` (ví dụ: `drizzle-orm`) → ORM/DB
|
|
599
800
|
- Đường dẫn workspace tùy chỉnh từ `pnpm-workspace.yaml` (ví dụ: `services/*`)
|
|
600
801
|
|
|
601
|
-
**Quét domain cũng bao
|
|
602
|
-
- `apps/api/src/modules/*/` và `apps/api/src/*/` cho domain
|
|
603
|
-
- `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` cho domain
|
|
604
|
-
- `packages/*/src/*/` cho
|
|
802
|
+
**Quét domain cũng bao phủ layout monorepo:**
|
|
803
|
+
- `apps/api/src/modules/*/` và `apps/api/src/*/` cho backend domain
|
|
804
|
+
- `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` cho frontend domain
|
|
805
|
+
- `packages/*/src/*/` cho shared package domain
|
|
605
806
|
|
|
606
807
|
```
|
|
607
808
|
my-monorepo/ ← Chạy ở đây: npx claudeos-core init
|
|
608
|
-
├── turbo.json ← Tự
|
|
809
|
+
├── turbo.json ← Tự phát hiện là Turborepo
|
|
609
810
|
├── apps/
|
|
610
811
|
│ ├── web/ ← Next.js phát hiện từ apps/web/package.json
|
|
611
|
-
│ │ ├── app/dashboard/ ←
|
|
812
|
+
│ │ ├── app/dashboard/ ← Frontend domain được phát hiện
|
|
612
813
|
│ │ └── package.json ← { "dependencies": { "next": "^14" } }
|
|
613
814
|
│ └── api/ ← Express phát hiện từ apps/api/package.json
|
|
614
|
-
│ ├── src/modules/users/ ←
|
|
815
|
+
│ ├── src/modules/users/ ← Backend domain được phát hiện
|
|
615
816
|
│ └── package.json ← { "dependencies": { "express": "^4" } }
|
|
616
817
|
├── packages/
|
|
617
818
|
│ ├── db/ ← Drizzle phát hiện từ packages/db/package.json
|
|
@@ -619,38 +820,61 @@ my-monorepo/ ← Chạy ở đây: npx claudeos-core init
|
|
|
619
820
|
└── package.json ← { "workspaces": ["apps/*", "packages/*"] }
|
|
620
821
|
```
|
|
621
822
|
|
|
622
|
-
> **Lưu ý:** Với monorepo Kotlin/Java, phát hiện multi-module
|
|
823
|
+
> **Lưu ý:** Với monorepo Kotlin/Java, phát hiện multi-module dùng `settings.gradle.kts` (xem [Phát Hiện Domain Kotlin Multi-Module](#phát-hiện-domain-kotlin-multi-module) ở trên) và không cần marker monorepo JS.
|
|
623
824
|
|
|
624
825
|
## Xử Lý Sự Cố
|
|
625
826
|
|
|
626
|
-
**"claude: command not found"** — Claude Code CLI chưa được cài đặt hoặc không
|
|
827
|
+
**"claude: command not found"** — Claude Code CLI chưa được cài đặt hoặc không trong PATH. Xem [tài liệu Claude Code](https://code.claude.com/docs/en/overview).
|
|
627
828
|
|
|
628
829
|
**"npm install failed"** — Phiên bản Node.js có thể quá thấp. Yêu cầu v18+.
|
|
629
830
|
|
|
630
|
-
**"0 domains detected"** — Cấu trúc dự án có thể không chuẩn. Xem pattern phát hiện
|
|
831
|
+
**"0 domains detected"** — Cấu trúc dự án của bạn có thể không chuẩn. Xem các pattern phát hiện ở trên cho stack của bạn.
|
|
832
|
+
|
|
833
|
+
**"0 domains detected" trên dự án Kotlin** — Đảm bảo dự án có `build.gradle.kts` (hoặc `build.gradle` với kotlin plugin) ở root, và file source nằm dưới `**/src/main/kotlin/`. Với dự án multi-module, đảm bảo `settings.gradle.kts` chứa các lệnh `include()`. Dự án Kotlin single-module (không có `settings.gradle`) cũng được hỗ trợ — domain được trích xuất từ cấu trúc package/class dưới `src/main/kotlin/`.
|
|
834
|
+
|
|
835
|
+
**"Language detected as java instead of kotlin"** — ClaudeOS-Core kiểm tra root `build.gradle(.kts)` trước, rồi tới file build submodule. Nếu file build root dùng plugin `java` không có `kotlin`, nhưng submodule dùng Kotlin, công cụ kiểm tra tối đa 5 file build submodule làm fallback. Nếu vẫn không phát hiện, đảm bảo ít nhất một `build.gradle.kts` chứa `kotlin("jvm")` hoặc `org.jetbrains.kotlin`.
|
|
836
|
+
|
|
837
|
+
**"CQRS not detected"** — Phát hiện kiến trúc dựa trên tên module chứa từ khóa `command` và `query`. Nếu module của bạn dùng tên khác (ví dụ: `write-server`, `read-server`), kiến trúc CQRS sẽ không tự phát hiện. Bạn có thể chỉnh thủ công prompt được tạo sau khi plan-installer chạy.
|
|
838
|
+
|
|
839
|
+
**"Pass 3 produced 0 rule files under .claude/rules/" (v2.0.0)** — Guard 2 kích hoạt: Claude bỏ qua directive `staging-override.md` và thử ghi trực tiếp vào `.claude/`, nơi chính sách sensitive-path của Claude Code chặn ghi. Chạy lại với `npx claudeos-core init --force`. Nếu lỗi vẫn xuất hiện, kiểm tra `claudeos-core/generated/pass3-prompt.md` để xác nhận block `staging-override.md` ở đầu.
|
|
840
|
+
|
|
841
|
+
**"Pass 3 finished but N rule file(s) could not be moved from staging" (v2.0.0)** — Guard 1 kích hoạt: việc di chuyển staging gặp khóa file tạm thời (thường là Windows antivirus hoặc file-watcher). Marker KHÔNG được ghi, nên lần chạy `init` tiếp theo tự động retry Pass 3. Chỉ cần chạy lại `npx claudeos-core init`.
|
|
631
842
|
|
|
632
|
-
**
|
|
843
|
+
**"Pass 3 produced CLAUDE.md and rules but N/9 guide files are missing or empty" (v2.0.0)** — Guard 3 (H2) kích hoạt: Claude bị cắt giữa chừng sau khi viết CLAUDE.md + rules nhưng trước khi hoàn thành (hoặc bắt đầu) mục `claudeos-core/guide/` (mong đợi 9 file). Cũng kích hoạt trên file chỉ có BOM hoặc chỉ có whitespace (heading đã viết nhưng body bị cắt). Không có guard này, completion marker vẫn được ghi, để `guide/` trống vĩnh viễn ở các lần chạy sau. Marker KHÔNG được ghi ở đây, nên lần chạy `init` tiếp theo retry Pass 3 từ cùng kết quả Pass 2. Nếu cứ lặp lại, chạy lại với `npx claudeos-core init --force` để tạo lại từ đầu.
|
|
633
844
|
|
|
634
|
-
**"
|
|
845
|
+
**"Pass 3 finished but the following required output(s) are missing or empty" (v2.0.0)** — Guard 3 (H1) kích hoạt: Claude bị cắt SAU `claudeos-core/guide/` nhưng trước (hoặc trong lúc) `claudeos-core/standard/`, `claudeos-core/skills/`, hoặc `claudeos-core/plan/`. Yêu cầu: (a) `standard/00.core/01.project-overview.md` tồn tại và không rỗng (sentinel được ghi bởi mọi prompt Pass 3 của mọi stack), (b) `skills/` có ≥1 `.md` không rỗng, (c) `plan/` có ≥1 `.md` không rỗng. `database/` và `mcp-guide/` bị loại trừ có chủ đích (một số stack tạo ra 0 file hợp lệ). Đường khôi phục như Guard 3 (H2): chạy lại `init`, hoặc `--force` nếu lỗi vẫn tiếp diễn.
|
|
635
846
|
|
|
636
|
-
**"
|
|
847
|
+
**"pass2-merged.json exists but is malformed or incomplete (<5 top-level keys), re-running" (v2.0.0)** — Log thông tin, không phải lỗi. Khi resume, `init` giờ parse và validate `pass2-merged.json` (yêu cầu ≥5 top-level key, phản chiếu ngưỡng `INSUFFICIENT_KEYS` của `pass-json-validator`). Skeleton `{}` hoặc JSON lỗi từ lần chạy crash trước tự động bị xóa và Pass 2 chạy lại. Không cần hành động thủ công — pipeline tự chữa. Nếu cứ lặp lại, kiểm tra `claudeos-core/generated/pass2-prompt.md` và retry với `--force`.
|
|
848
|
+
|
|
849
|
+
**"Static fallback failed while translating to lang='ko'" (v2.0.0)** — Khi `--lang` khác tiếng Anh, Pass 4 / static fallback / gap-fill đều yêu cầu CLI `claude` để dịch. Nếu dịch lỗi (CLI chưa xác thực, timeout mạng, hoặc strict validation từ chối output: <40% độ dài, code fence hỏng, mất frontmatter, v.v.), lần chạy abort thay vì âm thầm ghi tiếng Anh. Sửa: đảm bảo `claude` đã xác thực, hoặc chạy lại với `--lang en` để bỏ qua dịch.
|
|
850
|
+
|
|
851
|
+
**"pass4-memory.json exists but memory/ is empty" (v2.0.0)** — Lần chạy trước đã ghi marker nhưng người dùng (hoặc script dọn dẹp) xóa `claudeos-core/memory/`. CLI tự phát hiện marker cũ này và chạy lại Pass 4 ở lần `init` tiếp theo. Không cần hành động thủ công.
|
|
852
|
+
|
|
853
|
+
**"pass4-memory.json exists but is malformed (missing passNum/memoryFiles) — re-running Pass 4" (v2.0.0)** — Log thông tin, không phải lỗi. Nội dung marker Pass 4 giờ được validate (`passNum === 4` + mảng `memoryFiles` không rỗng), không chỉ sự tồn tại. Một lỗi Claude một phần đã phát ra thứ như `{"error":"timeout"}` làm thân marker trước đây sẽ được chấp nhận như thành công mãi mãi; giờ marker bị xóa và Pass 4 tự chạy lại.
|
|
854
|
+
|
|
855
|
+
**"Could not delete stale pass3-complete.json / pass4-memory.json" InitError (v2.0.0)** — `init` phát hiện marker cũ (Pass 3: CLAUDE.md bị xóa bên ngoài; Pass 4: memory/ rỗng hoặc thân marker lỗi) và thử xóa, nhưng gọi `unlinkSync` lỗi — thường vì Windows antivirus hoặc file-watcher (editor, IDE indexer) đang giữ file handle. Trước đây điều này bị bỏ qua âm thầm, khiến pipeline bỏ qua pass và dùng lại marker cũ. Giờ nó lỗi rõ ràng. Sửa: đóng mọi editor/AV scanner có thể đang mở file, rồi chạy lại `npx claudeos-core init`.
|
|
856
|
+
|
|
857
|
+
**"CLAUDEOS_SKIP_TRANSLATION=1 is set but --lang='ko' requires translation" InitError (v2.0.0)** — Bạn đang set env var chỉ dành cho test `CLAUDEOS_SKIP_TRANSLATION=1` trong shell (có thể là sót từ setup CI/test) VÀ chọn `--lang` khác tiếng Anh. Env var này short-circuit đường dịch mà static-fallback và gap-fill của Pass 4 phụ thuộc để output không phải tiếng Anh. `init` phát hiện xung đột lúc chọn ngôn ngữ và abort ngay lập tức (thay vì crash giữa Pass-4 với lỗi lồng khó hiểu). Sửa: hoặc `unset CLAUDEOS_SKIP_TRANSLATION` trước khi chạy, hoặc dùng `npx claudeos-core init --lang en`.
|
|
637
858
|
|
|
638
859
|
---
|
|
639
860
|
|
|
640
861
|
## Đóng Góp
|
|
641
862
|
|
|
642
|
-
|
|
863
|
+
Đóng góp được hoan nghênh! Các khu vực cần giúp đỡ nhất:
|
|
864
|
+
|
|
865
|
+
- **Template stack mới** — Ruby/Rails, Go (Gin/Fiber/Echo), PHP (Laravel/Symfony), Rust (Axum/Actix), Svelte/SvelteKit, Remix
|
|
866
|
+
- **Tích hợp IDE** — VS Code extension, IntelliJ plugin
|
|
867
|
+
- **Template CI/CD** — ví dụ GitLab CI, CircleCI, Jenkins (GitHub Actions đã có — xem `.github/workflows/test.yml`)
|
|
868
|
+
- **Độ phủ test** — Mở rộng test suite (hiện tại 489 test trên 24 file test bao phủ scanner, phát hiện stack, domain grouping, plan parsing, tạo prompt, CLI selector, phát hiện monorepo, phát hiện Vite SPA, công cụ xác minh, L4 memory scaffold, xác thực resume Pass 2, Pass 3 Guards 1/2/3 (sentinel H1 + empty-file nhận biết BOM H2 + unlink marker cũ nghiêm ngặt), xác thực nội dung marker Pass 4 + độ nghiêm ngặt unlink marker cũ, guard env-skip dịch + fail-fast sớm + CI workflow, di chuyển staged-rules, fallback dịch lang-aware, và cấu trúc template AI Work Rules)
|
|
643
869
|
|
|
644
|
-
|
|
645
|
-
- **Hỗ trợ monorepo sâu** — Root sub-project riêng, phát hiện workspace
|
|
646
|
-
- **Độ phủ test** — Mở rộng bộ test (hiện tại 269 test bao gồm tất cả scanner, phát hiện stack, nhóm domain, phân tích plan, tạo prompt, bộ chọn CLI, phát hiện monorepo, công cụ xác thực và phát hiện Vite SPA)
|
|
870
|
+
Xem [`CONTRIBUTING.md`](./CONTRIBUTING.md) để có danh sách đầy đủ các khu vực, code style, commit convention, và hướng dẫn từng bước để thêm template stack mới.
|
|
647
871
|
|
|
648
872
|
---
|
|
649
873
|
|
|
650
874
|
## Tác Giả
|
|
651
875
|
|
|
652
|
-
|
|
876
|
+
Tạo bởi **claudeos-core** — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
|
|
653
877
|
|
|
654
|
-
##
|
|
878
|
+
## License
|
|
655
879
|
|
|
656
880
|
ISC
|