claudeos-core 2.3.2 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +790 -74
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.de.md +374 -876
- package/README.es.md +374 -875
- package/README.fr.md +374 -875
- package/README.hi.md +374 -875
- package/README.ja.md +374 -875
- package/README.ko.md +374 -874
- package/README.md +374 -876
- package/README.ru.md +374 -877
- package/README.vi.md +374 -875
- package/README.zh-CN.md +374 -874
- 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.vi.md
CHANGED
|
@@ -1,1015 +1,514 @@
|
|
|
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)
|
|
4
9
|
|
|
5
|
-
|
|
6
|
-
npx claudeos-core init
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
ClaudeOS-Core đọc codebase của bạn, trích xuất mọi pattern tìm thấy và tạo ra bộ Standards, Rules, Skills và Guides hoàn chỉnh được tùy chỉnh cho _dự án của bạn_. Sau đó, khi bạn nói với Claude Code "Tạo CRUD cho đơn hàng", nó sẽ tạo ra code khớp chính xác với các pattern hiện có của bạn.
|
|
10
|
-
|
|
11
|
-
[🇺🇸 English](./README.md) · [🇰🇷 한국어](./README.ko.md) · [🇨🇳 中文](./README.zh-CN.md) · [🇯🇵 日本語](./README.ja.md) · [🇪🇸 Español](./README.es.md) · [🇮🇳 हिन्दी](./README.hi.md) · [🇷🇺 Русский](./README.ru.md) · [🇫🇷 Français](./README.fr.md) · [🇩🇪 Deutsch](./README.de.md)
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Tại sao chọn ClaudeOS-Core?
|
|
16
|
-
|
|
17
|
-
Mọi công cụ Claude Code khác hoạt động như sau:
|
|
18
|
-
|
|
19
|
-
> **Con người mô tả dự án → LLM tạo tài liệu**
|
|
20
|
-
|
|
21
|
-
ClaudeOS-Core hoạt động như sau:
|
|
22
|
-
|
|
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
|
-
|
|
25
|
-
Đây không phải là khác biệt nhỏ. Lý do quan trọng:
|
|
26
|
-
|
|
27
|
-
### Vấn đề cốt lõi: LLM đoán. Code thì không.
|
|
28
|
-
|
|
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 đã:
|
|
10
|
+
**Để Claude Code tuân theo các quy ước của _dự án bạn_ ngay từ lần đầu — không phải các mặc định chung chung.**
|
|
34
11
|
|
|
35
|
-
|
|
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
|
|
12
|
+
Một deterministic Node.js scanner đọc mã nguồn của bạn trước; sau đó pipeline Claude 4-pass viết toàn bộ — `CLAUDE.md` + `.claude/rules/` tự động nạp + standards + skills + L4 memory. 10 ngôn ngữ đầu ra, 5 validator hậu sinh, và một path allowlist tường minh ngăn LLM bịa ra các tệp hoặc framework không có trong code của bạn.
|
|
40
13
|
|
|
41
|
-
|
|
14
|
+
Hoạt động trên [**12 stack**](#supported-stacks) (bao gồm monorepo) — một lệnh `npx` duy nhất, không cần cấu hình, resume-safe, idempotent.
|
|
42
15
|
|
|
43
|
-
|
|
44
|
-
|
|
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.
|
|
47
|
-
|
|
48
|
-
### Before & After
|
|
49
|
-
|
|
50
|
-
**Không có ClaudeOS-Core** — bạn yêu cầu Claude Code tạo Order CRUD:
|
|
51
|
-
```
|
|
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
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**Có ClaudeOS-Core** — `.claude/rules/` đã chứa các pattern đã xác nhận của bạn:
|
|
60
|
-
```
|
|
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
|
|
16
|
+
```bash
|
|
17
|
+
npx claudeos-core init
|
|
66
18
|
```
|
|
67
19
|
|
|
68
|
-
|
|
20
|
+
[🇺🇸 English](README.md) · [🇰🇷 한국어](README.ko.md) · [🇨🇳 中文](README.zh-CN.md) · [🇯🇵 日本語](README.ja.md) · [🇪🇸 Español](README.es.md) · [🇮🇳 हिन्दी](README.hi.md) · [🇷🇺 Русский](README.ru.md) · [🇫🇷 Français](README.fr.md) · [🇩🇪 Deutsch](README.de.md)
|
|
69
21
|
|
|
70
22
|
---
|
|
71
23
|
|
|
72
|
-
##
|
|
73
|
-
|
|
74
|
-
Sinh ra tài liệu chỉ là một nửa vấn đề. Nửa còn lại là **biết rằng output là đúng** — xuyên suốt 10 ngôn ngữ output, 11 template stack, và các dự án ở mọi kích thước. v2.3.0 thêm hai validator tất định chạy sau khi sinh và không phụ thuộc vào LLM tự kiểm tra.
|
|
75
|
-
|
|
76
|
-
### `claude-md-validator` — bất biến cấu trúc
|
|
77
|
-
|
|
78
|
-
Mỗi `CLAUDE.md` được sinh ra đều được kiểm tra đối chiếu với 25 bất biến cấu trúc sử dụng chỉ những tín hiệu không phụ thuộc ngôn ngữ: cú pháp markdown (`^## `, `^### `), tên file literal (`decision-log.md`, `failure-patterns.md` — không bao giờ được dịch), số section, số sub-section mỗi section, và số hàng bảng. Cùng một validator, từng byte một, sẽ đưa ra phán quyết giống nhau đối với `CLAUDE.md` được sinh ra bằng tiếng Anh, Hàn, Nhật, Việt, Hindi, Nga, Tây Ban Nha, Trung, Pháp, hoặc Đức.
|
|
24
|
+
## Công cụ này là gì?
|
|
79
25
|
|
|
80
|
-
|
|
26
|
+
Bạn đang dùng Claude Code. Nó mạnh mẽ, nhưng mỗi phiên đều bắt đầu mới — không có ký ức về cách _dự án của bạn_ được tổ chức. Vì vậy nó fallback về các mặc định "tốt nói chung" mà hiếm khi khớp với những gì đội bạn thực sự làm:
|
|
81
27
|
|
|
82
|
-
|
|
28
|
+
- Đội bạn dùng **MyBatis**, nhưng Claude lại sinh JPA repository.
|
|
29
|
+
- Response wrapper của bạn là `ApiResponse.ok()`, nhưng Claude lại viết `ResponseEntity.success()`.
|
|
30
|
+
- Package của bạn là layer-first (`controller/order/`), nhưng Claude lại tạo domain-first (`order/controller/`).
|
|
31
|
+
- Lỗi của bạn đi qua centralized middleware, nhưng Claude rải `try/catch` ở mọi endpoint.
|
|
83
32
|
|
|
84
|
-
|
|
33
|
+
Bạn muốn có một bộ `.claude/rules/` cho từng dự án — Claude Code tự động nạp mỗi phiên — nhưng viết tay những rule đó cho mỗi repo mới mất hàng giờ, và chúng drift theo sự tiến hóa của code.
|
|
85
34
|
|
|
86
|
-
-
|
|
87
|
-
- **`MANIFEST_DRIFT`** — khi `claudeos-core/skills/00.shared/MANIFEST.md` đăng ký một skill mà `CLAUDE.md §6` không đề cập (hoặc ngược lại). Nhận diện layout orchestrator + sub-skills phổ biến, trong đó `CLAUDE.md §6` là điểm vào và `MANIFEST.md` là registry đầy đủ — các sub-skill được coi là được bao phủ thông qua orchestrator cha của chúng.
|
|
35
|
+
**ClaudeOS-Core viết chúng cho bạn, từ chính mã nguồn thực tế của bạn.** Một deterministic Node.js scanner đọc dự án bạn trước (stack, ORM, layout package, quy ước, đường dẫn tệp). Sau đó pipeline Claude 4-pass biến các sự kiện đã trích xuất thành một bộ tài liệu hoàn chỉnh:
|
|
88
36
|
|
|
89
|
-
|
|
37
|
+
- **`CLAUDE.md`** — chỉ mục dự án mà Claude đọc ở mỗi phiên
|
|
38
|
+
- **`.claude/rules/`** — rules tự động nạp theo category (`00.core` / `10.backend` / `20.frontend` / `30.security-db` / `40.infra` / `60.memory` / `70.domains` / `80.verification`)
|
|
39
|
+
- **`claudeos-core/standard/`** — tài liệu tham chiếu ("vì sao" sau mỗi rule)
|
|
40
|
+
- **`claudeos-core/skills/`** — pattern tái sử dụng (CRUD scaffolding, page template)
|
|
41
|
+
- **`claudeos-core/memory/`** — decision log + failure pattern lớn lên cùng dự án
|
|
90
42
|
|
|
91
|
-
|
|
43
|
+
Vì scanner trao cho Claude một path allowlist tường minh, LLM **không thể bịa ra các tệp hoặc framework không có trong code của bạn**. Năm validator hậu sinh (`claude-md-validator`, `content-validator`, `pass-json-validator`, `plan-validator`, `sync-checker`) xác minh đầu ra trước khi ship — language-invariant, vì vậy cùng một bộ rule áp dụng dù bạn sinh bằng tiếng Anh, tiếng Hàn hay 8 ngôn ngữ còn lại.
|
|
92
44
|
|
|
93
|
-
```bash
|
|
94
|
-
npx claudeos-core health # tất cả validator — một phán quyết go/no-go duy nhất
|
|
95
|
-
npx claudeos-core lint # chỉ bất biến cấu trúc CLAUDE.md (bất kỳ ngôn ngữ nào)
|
|
96
45
|
```
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
## Stack Được Hỗ Trợ
|
|
101
|
-
|
|
102
|
-
| Stack | Phát Hiện | Độ Sâu Phân Tích |
|
|
103
|
-
|---|---|---|
|
|
104
|
-
| **Java / Spring Boot** | `build.gradle`, `pom.xml`, 5 package patterns | 10 danh mục, 59 mục con |
|
|
105
|
-
| **Kotlin / Spring Boot** | `build.gradle.kts`, kotlin plugin, `settings.gradle.kts`, CQRS/BFF auto-detect | 12 danh mục, 95 mục con |
|
|
106
|
-
| **Node.js / Express** | `package.json` | 9 danh mục, 57 mục con |
|
|
107
|
-
| **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 danh mục, 68 mục con |
|
|
108
|
-
| **Next.js / React** | `package.json`, `next.config.*`, hỗ trợ FSD | 9 danh mục, 55 mục con |
|
|
109
|
-
| **Vue / Nuxt** | `package.json`, `nuxt.config.*`, Composition API | 9 danh mục, 58 mục con |
|
|
110
|
-
| **Python / Django** | `requirements.txt`, `pyproject.toml` | 10 danh mục, 55 mục con |
|
|
111
|
-
| **Python / FastAPI** | `requirements.txt`, `pyproject.toml` | 10 danh mục, 58 mục con |
|
|
112
|
-
| **Node.js / Fastify** | `package.json` | 10 danh mục, 62 mục con |
|
|
113
|
-
| **Vite / React SPA** | `package.json`, `vite.config.*` | 9 danh mục, 55 mục con |
|
|
114
|
-
| **Angular** | `package.json`, `angular.json` | 12 danh mục, 78 mục con |
|
|
115
|
-
|
|
116
|
-
Tự động phát hiện: ngôn ngữ & phiên bản, framework & phiên bản (bao gồm Vite như SPA framework), ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy, v.v.), database (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), package manager (Gradle, Maven, npm, yarn, pnpm, pip, poetry), kiến trúc (CQRS, BFF — phát hiện từ tên module), cấu trúc multi-module (từ settings.gradle), monorepo (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces), **cấu hình runtime từ `.env.example`** (v2.2.0 — trích xuất port/host/API-target từ 16+ tên biến quy ước trên các framework Vite · Next.js · Nuxt · Angular · Node · Python).
|
|
117
|
-
|
|
118
|
-
**Bạn không cần chỉ định gì cả. Tất cả được phát hiện tự động.**
|
|
119
|
-
|
|
120
|
-
### Cấu hình runtime từ `.env` (v2.2.0)
|
|
121
|
-
|
|
122
|
-
v2.2.0 bổ sung `lib/env-parser.js` để `CLAUDE.md` được sinh ra phản ánh những gì project thực sự khai báo, thay vì giá trị mặc định của framework.
|
|
123
|
-
|
|
124
|
-
- **Thứ tự tìm kiếm**: `.env.example` (canonical, đã commit) → `.env.local.example` → `.env.sample` → `.env.template` → `.env` → `.env.local` → `.env.development`. Biến thể `.example` thắng vì đó là shape-of-truth trung lập của developer, không phải override local của một contributor cụ thể.
|
|
125
|
-
- **Các quy ước biến port được nhận diện**: `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` tổng quát. Tên đặc thù framework thắng `PORT` tổng quát khi cả hai cùng hiện diện.
|
|
126
|
-
- **Host & API target**: `VITE_DEV_HOST` / `VITE_API_TARGET` / `NEXT_PUBLIC_API_URL` / `NUXT_PUBLIC_API_BASE` / `BACKEND_URL` / `PROXY_TARGET` v.v.
|
|
127
|
-
- **Độ ưu tiên**: Spring Boot `application.yml` `server.port` vẫn thắng (config framework-native), rồi đến port khai báo trong `.env`, cuối cùng mới fallback về default của framework (Vite 5173, Next.js 3000, Django 8000, v.v.).
|
|
128
|
-
- **Redact biến nhạy cảm**: giá trị của các biến khớp pattern `PASSWORD` / `SECRET` / `TOKEN` / `API_KEY` / `ACCESS_KEY` / `PRIVATE_KEY` / `CREDENTIAL` / `JWT_SECRET` / `CLIENT_SECRET` / `SESSION_SECRET` / `BEARER` / `SALT` được thay bằng `***REDACTED***` trước khi tới bất kỳ generator downstream nào. Defense-in-depth chống secret bị commit nhầm vào `.env.example`. `DATABASE_URL` được whitelist tường minh để giữ back-compat cho việc nhận diện DB của stack-detector.
|
|
129
|
-
|
|
130
|
-
### Phát Hiện Domain Java (5 pattern với fallback)
|
|
131
|
-
|
|
132
|
-
| Ưu tiên | Pattern | Cấu trúc | Ví dụ |
|
|
133
|
-
|---|---|---|---|
|
|
134
|
-
| A | Layer trước | `controller/{domain}/` | `controller/user/UserController.java` |
|
|
135
|
-
| B | Domain trước | `{domain}/controller/` | `user/controller/UserController.java` |
|
|
136
|
-
| D | Module prefix | `{module}/{domain}/controller/` | `front/member/controller/MemberController.java` |
|
|
137
|
-
| E | DDD/Hexagonal | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
|
|
138
|
-
| C | Phẳng | `controller/*.java` | `controller/UserController.java` → trích `user` từ tên class |
|
|
139
|
-
|
|
140
|
-
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.
|
|
141
|
-
|
|
142
|
-
### Phát Hiện Domain Kotlin Multi-Module
|
|
143
|
-
|
|
144
|
-
Dành cho dự án Kotlin với cấu trúc Gradle multi-module (ví dụ: CQRS monorepo):
|
|
145
|
-
|
|
146
|
-
| Bước | Hành Động | Ví Dụ |
|
|
147
|
-
|---|---|---|
|
|
148
|
-
| 1 | Quét `settings.gradle.kts` tìm `include()` | Tìm 14 module |
|
|
149
|
-
| 2 | Phát hiện kiểu module từ tên | `reservation-command-server` → type: `command` |
|
|
150
|
-
| 3 | Trích xuất domain từ tên module | `reservation-command-server` → domain: `reservation` |
|
|
151
|
-
| 4 | Gom cùng domain qua các module | `reservation-command-server` + `common-query-server` → 1 domain |
|
|
152
|
-
| 5 | Phát hiện kiến trúc | Có module `command` + `query` → CQRS |
|
|
153
|
-
|
|
154
|
-
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.
|
|
155
|
-
|
|
156
|
-
### Phát Hiện Domain Frontend
|
|
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
|
-
- **Phân tách RSC/Client**: phát hiện pattern `client.tsx`, theo dõi phân tách Server/Client component
|
|
162
|
-
- **Đườ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/`)
|
|
163
|
-
- **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.
|
|
164
|
-
- **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/`).
|
|
165
|
-
- **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ỏ.
|
|
166
|
-
- **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)
|
|
167
|
-
- **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
|
|
168
|
-
- **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.
|
|
169
|
-
|
|
170
|
-
### Scanner Overrides (v2.0.0)
|
|
171
|
-
|
|
172
|
-
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ế:
|
|
173
|
-
|
|
174
|
-
```json
|
|
175
|
-
{
|
|
176
|
-
"frontendScan": {
|
|
177
|
-
"platformKeywords": ["kiosk"],
|
|
178
|
-
"skipSubappNames": ["legacy"],
|
|
179
|
-
"minSubappFiles": 3
|
|
180
|
-
}
|
|
181
|
-
}
|
|
46
|
+
Trước: Bạn → Claude Code → code "tốt nói chung" → sửa thủ công mỗi lần
|
|
47
|
+
Sau: Bạn → Claude Code → code khớp với DỰ ÁN CỦA BẠN → dùng luôn
|
|
182
48
|
```
|
|
183
49
|
|
|
184
|
-
| Trường | Mặc định | Mục đích |
|
|
185
|
-
|---|---|---|
|
|
186
|
-
| `platformKeywords` | danh sách built-in ở trên | Các keyword `{platform}` bổ sung cho platform scan (ví dụ: `kiosk`, `vr`, `embedded`) |
|
|
187
|
-
| `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 |
|
|
188
|
-
| `minSubappFiles` | `2` | Ghi đè số file tối thiểu cần có trước khi một subapp trở thành domain |
|
|
189
|
-
|
|
190
|
-
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.
|
|
191
|
-
|
|
192
50
|
---
|
|
193
51
|
|
|
194
|
-
##
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
52
|
+
## Xem trên một dự án thật
|
|
53
|
+
|
|
54
|
+
Chạy trên [`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. Kết quả: **75 generated files**, tổng thời gian **53 phút**, mọi validator ✅.
|
|
55
|
+
|
|
56
|
+
<p align="center">
|
|
57
|
+
<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">
|
|
58
|
+
</p>
|
|
59
|
+
|
|
60
|
+
<details>
|
|
61
|
+
<summary><strong>📺 Đầu ra terminal (bản text, để tìm kiếm và sao chép)</strong></summary>
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
╔════════════════════════════════════════════════════╗
|
|
65
|
+
║ ClaudeOS-Core — Bootstrap (4-Pass) ║
|
|
66
|
+
╚════════════════════════════════════════════════════╝
|
|
67
|
+
Project root: spring-boot-realworld-example-app
|
|
68
|
+
Language: English (en)
|
|
69
|
+
|
|
70
|
+
[Phase 1] Detecting stack...
|
|
71
|
+
Language: java 11
|
|
72
|
+
Framework: spring-boot 2.6.3
|
|
73
|
+
Database: sqlite
|
|
74
|
+
ORM: mybatis
|
|
75
|
+
PackageMgr: gradle
|
|
76
|
+
|
|
77
|
+
[Phase 2] Scanning structure...
|
|
78
|
+
Backend: 2 domains
|
|
79
|
+
Total: 2 domains
|
|
80
|
+
Package: io.spring.infrastructure
|
|
81
|
+
|
|
82
|
+
[Phase 5] Active domains...
|
|
83
|
+
✅ 00.core ✅ 10.backend ⏭️ 20.frontend
|
|
84
|
+
✅ 30.security-db ✅ 40.infra
|
|
85
|
+
✅ 80.verification ✅ 90.optional
|
|
86
|
+
|
|
87
|
+
[4] Pass 1 — Deep analysis per domain group...
|
|
88
|
+
✅ pass1-1.json created (5m 34s)
|
|
89
|
+
[█████░░░░░░░░░░░░░░░] 25% (1/4)
|
|
90
|
+
|
|
91
|
+
[5] Pass 2 — Merging analysis results...
|
|
92
|
+
✅ pass2-merged.json created (4m 22s)
|
|
93
|
+
[██████████░░░░░░░░░░] 50% (2/4)
|
|
94
|
+
|
|
95
|
+
[6] Pass 3 — Generating all files...
|
|
96
|
+
🚀 Pass 3 split mode (3a → 3b → 3c → 3d-aux)
|
|
97
|
+
✅ 3a complete (2m 57s) — pass3a-facts.md (187-path allowlist)
|
|
98
|
+
✅ 3b complete (18m 49s) — CLAUDE.md + 19 standards + 20 rules
|
|
99
|
+
✅ 3c complete (12m 35s) — 13 skills + 9 guides
|
|
100
|
+
✅ 3d-aux complete (3m 18s) — database/ + mcp-guide/
|
|
101
|
+
🎉 Pass 3 split complete: 4/4 stages successful
|
|
102
|
+
[███████████████░░░░░] 75% (3/4)
|
|
103
|
+
|
|
104
|
+
[7] Pass 4 — Memory scaffolding...
|
|
105
|
+
📦 Pass 4 staged-rules: 6 rule files moved to .claude/rules/
|
|
106
|
+
✅ Pass 4 complete (5m)
|
|
107
|
+
📋 Gap-fill: all 12 expected files already present
|
|
108
|
+
[████████████████████] 100% (4/4)
|
|
109
|
+
|
|
110
|
+
╔═══════════════════════════════════════╗
|
|
111
|
+
║ ClaudeOS-Core — Health Checker ║
|
|
112
|
+
╚═══════════════════════════════════════╝
|
|
113
|
+
✅ plan-validator pass
|
|
114
|
+
✅ sync-checker pass
|
|
115
|
+
✅ content-validator pass
|
|
116
|
+
✅ pass-json-validator pass
|
|
117
|
+
✅ All systems operational
|
|
118
|
+
|
|
119
|
+
[Lint] ✅ CLAUDE.md structure valid (25 checks)
|
|
120
|
+
[Content] ✅ All content validation passed
|
|
121
|
+
Total: 0 advisories, 0 notes
|
|
122
|
+
|
|
123
|
+
╔════════════════════════════════════════════════════╗
|
|
124
|
+
║ ✅ ClaudeOS-Core — Complete ║
|
|
125
|
+
║ Files created: 75 ║
|
|
126
|
+
║ Domains analyzed: 1 group ║
|
|
127
|
+
║ L4 scaffolded: memory + rules ║
|
|
128
|
+
║ Output language: English ║
|
|
129
|
+
║ Total time: 53m 8s ║
|
|
130
|
+
╚════════════════════════════════════════════════════╝
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
</details>
|
|
134
|
+
|
|
135
|
+
<details>
|
|
136
|
+
<summary><strong>📄 Nội dung kết thúc trong <code>CLAUDE.md</code> của bạn (trích đoạn thực tế — Section 1 + 2)</strong></summary>
|
|
137
|
+
|
|
138
|
+
```markdown
|
|
139
|
+
# CLAUDE.md — spring-boot-realworld-example-app
|
|
140
|
+
|
|
141
|
+
> Reference implementation of the RealWorld backend specification on
|
|
142
|
+
> Java 11 + Spring Boot 2.6, exposing both REST and GraphQL endpoints
|
|
143
|
+
> over a hexagonal MyBatis persistence layer.
|
|
144
|
+
|
|
145
|
+
## 1. Role Definition
|
|
146
|
+
|
|
147
|
+
As the senior developer for this repository, you are responsible for
|
|
148
|
+
writing, modifying, and reviewing code. Responses must be written in English.
|
|
149
|
+
A Java Spring Boot REST + GraphQL API server organized around a hexagonal
|
|
150
|
+
(ports & adapters) architecture, with a CQRS-lite read/write split inside
|
|
151
|
+
an XML-driven MyBatis persistence layer and JWT-based authentication.
|
|
152
|
+
|
|
153
|
+
## 2. Project Overview
|
|
154
|
+
|
|
155
|
+
| Item | Value |
|
|
156
|
+
|---|---|
|
|
157
|
+
| Language | Java 11 |
|
|
158
|
+
| Framework | Spring Boot 2.6.3 |
|
|
159
|
+
| Build Tool | Gradle (Groovy DSL) |
|
|
160
|
+
| Persistence | MyBatis 3 via `mybatis-spring-boot-starter:2.2.2` (no JPA) |
|
|
161
|
+
| Database | SQLite (`org.xerial:sqlite-jdbc:3.36.0.3`) — `dev.db` (default), `:memory:` (test) |
|
|
162
|
+
| Migration | Flyway — single baseline `V1__create_tables.sql` |
|
|
163
|
+
| API Style | REST (`io.spring.api.*`) + GraphQL via Netflix DGS `:4.9.21` |
|
|
164
|
+
| Authentication | JWT HS512 (`jjwt-api:0.11.2`) + Spring Security `PasswordEncoder` |
|
|
165
|
+
| Server Port | 8080 (default) |
|
|
166
|
+
| Test Stack | JUnit Jupiter 5, Mockito, AssertJ, rest-assured, spring-mock-mvc |
|
|
225
167
|
```
|
|
226
168
|
|
|
227
|
-
|
|
169
|
+
Mọi giá trị bên trên — tọa độ dependency chính xác, tên tệp `dev.db`, tên migration `V1__create_tables.sql`, "no JPA" — đều được scanner trích xuất từ `build.gradle` / `application.properties` / cây mã nguồn trước khi Claude viết tệp. Không có gì là phỏng đoán.
|
|
228
170
|
|
|
229
|
-
|
|
171
|
+
</details>
|
|
230
172
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
║ Select generated document language (required) ║
|
|
234
|
-
╚══════════════════════════════════════════════════╝
|
|
235
|
-
|
|
236
|
-
Các file được tạo (CLAUDE.md, Standards, Rules,
|
|
237
|
-
Skills, Guides) sẽ được viết bằng Tiếng Việt.
|
|
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
|
|
251
|
-
```
|
|
173
|
+
<details>
|
|
174
|
+
<summary><strong>🛡️ Một rule thật được tự động nạp (<code>.claude/rules/10.backend/01.controller-rules.md</code>)</strong></summary>
|
|
252
175
|
|
|
253
|
-
|
|
176
|
+
````markdown
|
|
177
|
+
---
|
|
178
|
+
paths:
|
|
179
|
+
- "**/*"
|
|
180
|
+
---
|
|
254
181
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
182
|
+
# Controller Rules
|
|
183
|
+
|
|
184
|
+
## REST (`io.spring.api.*`)
|
|
185
|
+
|
|
186
|
+
- Controllers are the SOLE response wrapper for HTTP — no aggregator/facade above them.
|
|
187
|
+
Return `ResponseEntity<?>` or a body Spring serializes via `JacksonCustomizations`.
|
|
188
|
+
- Each controller method calls exactly ONE application service method. Multi-source
|
|
189
|
+
composition lives in the application service.
|
|
190
|
+
- Controllers MUST NOT import `io.spring.infrastructure.*`. No direct `@Mapper` access.
|
|
191
|
+
- Validate command-param arguments with `@Valid`. Custom JSR-303 constraints live under
|
|
192
|
+
`io.spring.application.{aggregate}.*`.
|
|
193
|
+
- Resolve the current user via `@AuthenticationPrincipal User`.
|
|
194
|
+
- Let exceptions propagate to `io.spring.api.exception.CustomizeExceptionHandler`
|
|
195
|
+
(`@ControllerAdvice`). Do NOT `try/catch` business exceptions inside the controller.
|
|
196
|
+
|
|
197
|
+
## GraphQL (`io.spring.graphql.*`)
|
|
198
|
+
|
|
199
|
+
- DGS components (`@DgsComponent`) are the sole GraphQL response wrappers.
|
|
200
|
+
Use `@DgsQuery` / `@DgsData` / `@DgsMutation`.
|
|
201
|
+
- Resolve the current user via `io.spring.graphql.SecurityUtil.getCurrentUser()`.
|
|
202
|
+
|
|
203
|
+
## Examples
|
|
204
|
+
|
|
205
|
+
✅ Correct:
|
|
206
|
+
```java
|
|
207
|
+
@PostMapping
|
|
208
|
+
public ResponseEntity<?> createArticle(@AuthenticationPrincipal User user,
|
|
209
|
+
@Valid @RequestBody NewArticleParam param) {
|
|
210
|
+
Article article = articleCommandService.createArticle(param, user);
|
|
211
|
+
ArticleData data = articleQueryService.findById(article.getId(), user)
|
|
212
|
+
.orElseThrow(ResourceNotFoundException::new);
|
|
213
|
+
return ResponseEntity.ok(Map.of("article", data));
|
|
214
|
+
}
|
|
259
215
|
```
|
|
260
216
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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 ..
|
|
217
|
+
❌ Incorrect:
|
|
218
|
+
```java
|
|
219
|
+
@PostMapping
|
|
220
|
+
public ResponseEntity<?> create(@RequestBody NewArticleParam p) {
|
|
221
|
+
try {
|
|
222
|
+
articleCommandService.createArticle(p, currentUser);
|
|
223
|
+
} catch (Exception e) { // NO — let CustomizeExceptionHandler handle it
|
|
224
|
+
return ResponseEntity.status(500).body(e.getMessage()); // NO — leaks raw message
|
|
225
|
+
}
|
|
226
|
+
return ResponseEntity.ok().build();
|
|
227
|
+
}
|
|
276
228
|
```
|
|
229
|
+
````
|
|
277
230
|
|
|
278
|
-
|
|
231
|
+
Glob `paths: ["**/*"]` có nghĩa là Claude Code tự động nạp rule này mỗi khi bạn chỉnh bất kỳ tệp nào trong dự án. Mọi tên class, đường dẫn package, exception handler trong rule đều được lấy thẳng từ source đã scan — bao gồm cả `CustomizeExceptionHandler` và `JacksonCustomizations` thực tế của dự án.
|
|
279
232
|
|
|
280
|
-
|
|
281
|
-
# Rules (v2.0.0: thêm 60.memory)
|
|
282
|
-
mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync,60.memory}
|
|
233
|
+
</details>
|
|
283
234
|
|
|
284
|
-
|
|
285
|
-
|
|
235
|
+
<details>
|
|
236
|
+
<summary><strong>🧠 Hạt mầm <code>decision-log.md</code> tự sinh (trích đoạn thực tế)</strong></summary>
|
|
286
237
|
|
|
287
|
-
|
|
288
|
-
|
|
238
|
+
```markdown
|
|
239
|
+
## 2026-04-26 — Hexagonal ports & adapters with MyBatis-only persistence
|
|
289
240
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
241
|
+
- **Context:** `io.spring.core.*` exposes `*Repository` ports (e.g.,
|
|
242
|
+
`io.spring.core.article.ArticleRepository`) implemented by
|
|
243
|
+
`io.spring.infrastructure.repository.MyBatis*Repository` adapters.
|
|
244
|
+
The domain layer has zero `org.springframework.*` /
|
|
245
|
+
`org.apache.ibatis.*` / `io.spring.infrastructure.*` imports.
|
|
246
|
+
- **Options considered:** JPA/Hibernate, Spring Data, MyBatis-Plus
|
|
247
|
+
`BaseMapper`. None adopted.
|
|
248
|
+
- **Decision:** MyBatis 3 (`mybatis-spring-boot-starter:2.2.2`) with
|
|
249
|
+
hand-written XML statements under `src/main/resources/mapper/*.xml`.
|
|
250
|
+
Hexagonal port/adapter wiring keeps the domain framework-free.
|
|
251
|
+
- **Consequences:** Every SQL lives in XML — `@Select`/`@Insert`/`@Update`/`@Delete`
|
|
252
|
+
annotations are forbidden. New aggregates require both a
|
|
253
|
+
`core.{aggregate}.{Aggregate}Repository` port AND a
|
|
254
|
+
`MyBatis{Aggregate}Repository` adapter; introducing a JPA repository would
|
|
255
|
+
split the persistence model.
|
|
293
256
|
```
|
|
294
257
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
#### Step 3: Chạy plan-installer (phân tích dự án)
|
|
298
|
-
|
|
299
|
-
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.
|
|
300
|
-
|
|
301
|
-
```bash
|
|
302
|
-
node claudeos-core-tools/plan-installer/index.js
|
|
303
|
-
```
|
|
258
|
+
Pass 4 gieo `decision-log.md` bằng các quyết định kiến trúc được trích từ `pass2-merged.json`, để các phiên sau ghi nhớ *vì sao* codebase trông như vậy — không chỉ *trông như thế nào*. Mọi tùy chọn ("JPA/Hibernate", "MyBatis-Plus") và mọi hệ quả đều bắt nguồn từ chính khối dependency `build.gradle` thực tế.
|
|
304
259
|
|
|
305
|
-
|
|
306
|
-
- `project-analysis.json` — stack, domain, thông tin frontend đã phát hiện
|
|
307
|
-
- `domain-groups.json` — các nhóm domain cho Pass 1
|
|
308
|
-
- `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — prompt phân tích
|
|
309
|
-
- `pass2-prompt.md` — prompt merge
|
|
310
|
-
- `pass3-prompt.md` — template prompt Pass 3 với block "Read Once, Extract Facts" Phase 1 được thêm vào đầu (Rules A–E). Pipeline tự động chia Pass 3 thành nhiều stage lúc runtime; template này dùng cho từng stage.
|
|
311
|
-
- `pass3-context.json` — slim project summary (< 5 KB, xây sau Pass 2) mà prompt Pass 3 ưu tiên hơn `pass2-merged.json` đầy đủ (v2.1.0)
|
|
312
|
-
- `pass4-prompt.md` — prompt L4 memory scaffolding (v2.0.0; dùng cùng `staging-override.md` cho ghi rule `60.memory/`)
|
|
260
|
+
</details>
|
|
313
261
|
|
|
314
|
-
|
|
262
|
+
---
|
|
315
263
|
|
|
316
|
-
|
|
264
|
+
## Quick Start
|
|
317
265
|
|
|
318
|
-
|
|
266
|
+
**Yêu cầu trước:** Node.js 18+, [Claude Code](https://docs.anthropic.com/en/docs/claude-code) đã cài đặt và xác thực.
|
|
319
267
|
|
|
320
268
|
```bash
|
|
321
|
-
#
|
|
322
|
-
|
|
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
|
-
# Chạy Pass 1 cho mỗi nhóm (thay domain và số nhóm)
|
|
328
|
-
# Lưu ý: v1.6.1+ dùng Node.js String.replace() thay vì perl — không còn
|
|
329
|
-
# yêu cầu perl, và ngữ nghĩa replacement-function ngăn chặn regex injection
|
|
330
|
-
# từ các ký tự $/&/$1 có thể xuất hiện trong tên domain.
|
|
331
|
-
#
|
|
332
|
-
# Cho nhóm 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
|
-
# Cho nhóm 2 (nếu có):
|
|
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
|
-
# Với nhóm frontend, đổi pass1-backend-prompt.md → pass1-frontend-prompt.md
|
|
353
|
-
```
|
|
269
|
+
# 1. Vào thư mục gốc dự án
|
|
270
|
+
cd my-spring-boot-project
|
|
354
271
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
#### Step 5: Pass 2 — Merge kết quả phân tích
|
|
272
|
+
# 2. Chạy init (lệnh này phân tích code và yêu cầu Claude viết rules)
|
|
273
|
+
npx claudeos-core init
|
|
358
274
|
|
|
359
|
-
|
|
360
|
-
cat claudeos-core/generated/pass2-prompt.md \
|
|
361
|
-
| claude -p --dangerously-skip-permissions
|
|
275
|
+
# 3. Xong. Mở Claude Code và bắt đầu code — rules đã được nạp sẵn.
|
|
362
276
|
```
|
|
363
277
|
|
|
364
|
-
**
|
|
365
|
-
|
|
366
|
-
#### Step 6: Pass 3 — Tạo toàn bộ tài liệu (chia thành nhiều stage)
|
|
367
|
-
|
|
368
|
-
**Lưu ý v2.1.0:** Pass 3 **luôn chạy ở chế độ split** bởi pipeline tự động. Mỗi stage là một lời gọi `claude -p` riêng biệt với context window mới, nên tràn output do tích lũy không thể xảy ra về mặt cấu trúc bất kể kích thước dự án. Template `pass3-prompt.md` được lắp ráp theo từng stage với một directive `STAGE:` chỉ cho Claude biết tập con file nào cần phát ra. Với chế độ thủ công, đường đơn giản nhất vẫn là đưa toàn bộ template và để Claude tạo mọi thứ trong một lời gọi — nhưng điều này chỉ đáng tin cậy trên dự án nhỏ (≤5 domain). Cho dự án lớn hơn, hãy dùng `npx claudeos-core init` để split runner xử lý điều phối stage.
|
|
278
|
+
**Bạn sẽ có** sau khi `init` hoàn tất:
|
|
369
279
|
|
|
370
|
-
**Chế độ lời gọi đơn (chỉ cho dự án nhỏ, ≤5 domain):**
|
|
371
|
-
|
|
372
|
-
```bash
|
|
373
|
-
cat claudeos-core/generated/pass3-prompt.md \
|
|
374
|
-
| claude -p --dangerously-skip-permissions
|
|
375
280
|
```
|
|
281
|
+
your-project/
|
|
282
|
+
├── .claude/
|
|
283
|
+
│ └── rules/ ← Tự động nạp bởi Claude Code
|
|
284
|
+
│ ├── 00.core/ (rules chung — naming, kiến trúc)
|
|
285
|
+
│ ├── 10.backend/ (rules backend stack, nếu có)
|
|
286
|
+
│ ├── 20.frontend/ (rules frontend stack, nếu có)
|
|
287
|
+
│ ├── 30.security-db/ (quy ước bảo mật & DB)
|
|
288
|
+
│ ├── 40.infra/ (env, logging, CI/CD)
|
|
289
|
+
│ ├── 50.sync/ (nhắc đồng bộ doc — chỉ rules)
|
|
290
|
+
│ ├── 60.memory/ (memory rules — Pass 4, chỉ rules)
|
|
291
|
+
│ ├── 70.domains/{type}/ (rules theo domain, type = backend|frontend)
|
|
292
|
+
│ └── 80.verification/ (chiến lược test + nhắc xác minh build)
|
|
293
|
+
├── claudeos-core/
|
|
294
|
+
│ ├── standard/ ← Tài liệu tham chiếu (mirror cấu trúc category)
|
|
295
|
+
│ │ ├── 00.core/ (project overview, kiến trúc, naming)
|
|
296
|
+
│ │ ├── 10.backend/ (reference backend — nếu có backend stack)
|
|
297
|
+
│ │ ├── 20.frontend/ (reference frontend — nếu có frontend stack)
|
|
298
|
+
│ │ ├── 30.security-db/ (reference bảo mật & DB)
|
|
299
|
+
│ │ ├── 40.infra/ (reference env / logging / CI-CD)
|
|
300
|
+
│ │ ├── 70.domains/{type}/ (reference theo domain)
|
|
301
|
+
│ │ ├── 80.verification/ (reference build / startup / testing — chỉ standard)
|
|
302
|
+
│ │ └── 90.optional/ (mở rộng riêng cho stack — chỉ standard)
|
|
303
|
+
│ ├── skills/ (mẫu tái sử dụng mà Claude có thể áp dụng)
|
|
304
|
+
│ ├── guide/ (hướng dẫn how-to cho các tác vụ thường gặp)
|
|
305
|
+
│ ├── database/ (tổng quan schema, hướng dẫn migration)
|
|
306
|
+
│ ├── mcp-guide/ (ghi chú tích hợp MCP)
|
|
307
|
+
│ └── memory/ (decision log, failure patterns, compaction)
|
|
308
|
+
└── CLAUDE.md (chỉ mục Claude đọc đầu tiên)
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Các category dùng chung tiền tố số giữa `rules/` và `standard/` đại diện cho cùng một mảng khái niệm (ví dụ: `10.backend` rules ↔ `10.backend` standards). Category chỉ-rules: `50.sync` (nhắc đồng bộ doc) và `60.memory` (Pass 4 memory). Category chỉ-standard: `90.optional` (mở rộng riêng stack, không cưỡng chế). Mọi tiền tố khác (`00`, `10`, `20`, `30`, `40`, `70`, `80`) xuất hiện ở CẢ `rules/` và `standard/`. Giờ Claude Code đã hiểu dự án của bạn.
|
|
376
312
|
|
|
377
|
-
|
|
313
|
+
---
|
|
378
314
|
|
|
379
|
-
|
|
315
|
+
## Dành cho ai?
|
|
380
316
|
|
|
381
|
-
|
|
|
382
|
-
|
|
383
|
-
|
|
|
384
|
-
|
|
|
385
|
-
|
|
|
386
|
-
|
|
|
387
|
-
|
|
|
388
|
-
|
|
|
317
|
+
| Bạn là... | Pain mà công cụ này gỡ bỏ |
|
|
318
|
+
|---|---|
|
|
319
|
+
| **Dev solo** đang khởi tạo dự án mới với Claude Code | "Dạy Claude quy ước của tôi mỗi phiên" — biến mất. `CLAUDE.md` + `.claude/rules/` 8-category được sinh trong một lần chạy. |
|
|
320
|
+
| **Team lead** duy trì chuẩn dùng chung qua nhiều repo | `.claude/rules/` drift khi mọi người đổi tên package, đổi ORM, đổi response wrapper. ClaudeOS-Core đồng bộ lại deterministic — cùng đầu vào, đầu ra byte-identical, không có diff noise. |
|
|
321
|
+
| **Đã dùng Claude Code** nhưng mệt mỏi vì sửa code được sinh | Sai response wrapper, sai layout package, JPA khi bạn dùng MyBatis, `try/catch` rải khắp khi dự án bạn dùng centralized middleware. Scanner trích các quy ước thật của bạn; mỗi pass Claude chạy dựa trên một path allowlist tường minh. |
|
|
322
|
+
| **Onboarding một repo mới** (dự án sẵn có, gia nhập đội mới) | Chạy `init` trên repo, nhận một bản đồ kiến trúc sống: bảng stack trong CLAUDE.md, rules từng layer kèm ví dụ ✅/❌, decision log đã gieo "vì sao" sau các lựa chọn lớn (JPA vs MyBatis, REST vs GraphQL, v.v.). Đọc 5 tệp thắng đọc 5.000 source file. |
|
|
323
|
+
| **Làm việc bằng tiếng Hàn / Nhật / Trung / 7 ngôn ngữ khác** | Hầu hết các bộ sinh rule Claude Code chỉ hỗ trợ tiếng Anh. ClaudeOS-Core viết toàn bộ bằng **10 ngôn ngữ** (`en/ko/ja/zh-CN/es/vi/hi/ru/fr/de`) với **xác minh cấu trúc byte-identical** — cùng verdict `claude-md-validator` bất kể ngôn ngữ đầu ra. |
|
|
324
|
+
| **Đang chạy trên monorepo** (Turborepo, pnpm/yarn workspaces, Lerna) | Domain backend + frontend được phân tích trong một lần chạy với prompt riêng biệt; `apps/*/` và `packages/*/` được walk tự động; rules theo từng stack được emit dưới `70.domains/{type}/`. |
|
|
325
|
+
| **Đóng góp OSS hoặc thử nghiệm** | Đầu ra thân thiện với gitignore — `claudeos-core/` là thư mục làm việc local của bạn, chỉ `CLAUDE.md` + `.claude/` cần ship. Resume-safe khi bị gián đoạn; idempotent khi chạy lại (chỉnh sửa thủ công của bạn được giữ lại nếu không có `--force`). |
|
|
389
326
|
|
|
390
|
-
|
|
327
|
+
**Không phù hợp nếu:** bạn muốn một bundle preset agents/skills/rules dạng one-size-fits-all chạy được ngay từ ngày đầu mà không cần bước scan (xem [docs/vi/comparison.md](docs/vi/comparison.md) để biết công cụ nào hợp với việc gì), dự án của bạn chưa khớp với một trong các [stack được hỗ trợ](#supported-stacks), hoặc bạn chỉ cần một `CLAUDE.md` đơn giản (built-in `claude /init` là đủ — không cần cài thêm công cụ).
|
|
391
328
|
|
|
392
|
-
|
|
329
|
+
---
|
|
393
330
|
|
|
394
|
-
|
|
331
|
+
## Hoạt động thế nào?
|
|
395
332
|
|
|
396
|
-
|
|
333
|
+
ClaudeOS-Core đảo ngược workflow Claude Code thông thường:
|
|
397
334
|
|
|
398
|
-
```bash
|
|
399
|
-
cat claudeos-core/generated/pass4-prompt.md \
|
|
400
|
-
| claude -p --dangerously-skip-permissions
|
|
401
335
|
```
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
> **Gap-fill v2.1.0:** Pass 4 cũng đảm bảo `claudeos-core/skills/00.shared/MANIFEST.md` tồn tại. Nếu Pass 3c bỏ sót (có thể xảy ra ở các dự án ít skill vì template stack `pass3.md` liệt kê `MANIFEST.md` là mục tiêu tạo mà không đánh dấu REQUIRED), gap-fill tạo stub tối thiểu để `.claude/rules/50.sync/02.skills-sync.md` (đường dẫn v2.2.0 — số lượng rule sync giảm từ 3 xuống 2, `03` trở thành `02`) luôn có tham chiếu hợp lệ. Idempotent: bỏ qua nếu file đã có nội dung thực (>20 ký tự).
|
|
406
|
-
|
|
407
|
-
> **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.
|
|
408
|
-
|
|
409
|
-
#### Step 8: Chạy verification tools
|
|
410
|
-
|
|
411
|
-
```bash
|
|
412
|
-
# Tạo metadata (bắt buộc trước các kiểm tra khác)
|
|
413
|
-
node claudeos-core-tools/manifest-generator/index.js
|
|
414
|
-
|
|
415
|
-
# Chạy tất cả kiểm tra
|
|
416
|
-
node claudeos-core-tools/health-checker/index.js
|
|
417
|
-
|
|
418
|
-
# Hoặc chạy từng kiểm tra:
|
|
419
|
-
node claudeos-core-tools/plan-validator/index.js --check # Plan ↔ disk consistency
|
|
420
|
-
node claudeos-core-tools/sync-checker/index.js # File chưa đăng ký/orphan
|
|
421
|
-
node claudeos-core-tools/content-validator/index.js # Kiểm tra chất lượng file (bao gồm mục memory/ [9/9])
|
|
422
|
-
node claudeos-core-tools/pass-json-validator/index.js # Kiểm tra JSON Pass 1–4 + completion marker
|
|
336
|
+
Thông thường: Bạn mô tả dự án → Claude đoán stack → Claude viết doc
|
|
337
|
+
Công cụ này: Code đọc stack → Code đưa sự kiện đã xác nhận cho Claude → Claude viết doc từ sự kiện
|
|
423
338
|
```
|
|
424
339
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
```bash
|
|
428
|
-
# Đếm số file được tạo
|
|
429
|
-
find .claude claudeos-core -type f | grep -v node_modules | grep -v '/generated/' | wc -l
|
|
430
|
-
|
|
431
|
-
# Kiểm tra CLAUDE.md
|
|
432
|
-
head -30 CLAUDE.md
|
|
340
|
+
Pipeline chạy theo **3 giai đoạn**, với code ở cả hai phía của lời gọi LLM:
|
|
433
341
|
|
|
434
|
-
|
|
435
|
-
cat claudeos-core/standard/00.core/01.project-overview.md | head -20
|
|
342
|
+
**1. Step A — Scanner (deterministic, không LLM).** Một Node.js scanner walk qua thư mục gốc dự án, đọc `package.json` / `build.gradle` / `pom.xml` / `pyproject.toml`, parse các tệp `.env*` (với redaction biến nhạy cảm cho `PASSWORD/SECRET/TOKEN/JWT_SECRET/...`), phân loại pattern kiến trúc (5 pattern A/B/C/D/E của Java, Kotlin CQRS / multi-module, Next.js App vs Pages Router, FSD, components-pattern), khám phá các domain, và xây dựng allowlist tường minh cho mọi đường dẫn source tồn tại. Đầu ra: `project-analysis.json` — single source of truth cho mọi bước sau.
|
|
436
343
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
344
|
+
**2. Step B — Pipeline Claude 4-pass (bị ràng buộc bởi sự kiện của Step A).**
|
|
345
|
+
- **Pass 1** đọc các tệp đại diện theo nhóm domain và trích ~50–100 quy ước mỗi domain — response wrapper, thư viện logging, error handling, quy ước đặt tên, pattern test. Chạy một lần mỗi nhóm domain (`max 4 domains, 40 files per group`) nên context không bao giờ overflow.
|
|
346
|
+
- **Pass 2** gộp toàn bộ phân tích theo từng domain thành bức tranh toàn dự án và giải quyết bất đồng bằng cách chọn quy ước trội nhất.
|
|
347
|
+
- **Pass 3** viết `CLAUDE.md` + `.claude/rules/` + `claudeos-core/standard/` + skills + guides — split thành các stage (`3a` facts → `3b-core/3b-N` rules+standards → `3c-core/3c-N` skills+guides → `3d-aux` database+mcp-guide) để prompt mỗi stage vừa với context window của LLM kể cả khi `pass2-merged.json` lớn. Sub-divide 3b/3c thành các batch ≤15 domain cho dự án ≥16 domain.
|
|
348
|
+
- **Pass 4** gieo lớp L4 memory (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`) và thêm các universal scaffold rule. Pass 4 **bị cấm chỉnh sửa `CLAUDE.md`** — Section 8 của Pass 3 là authoritative.
|
|
440
349
|
|
|
441
|
-
|
|
350
|
+
**3. Step C — Verification (deterministic, không LLM).** Năm validator kiểm tra đầu ra:
|
|
351
|
+
- `claude-md-validator` — 25 kiểm tra cấu trúc trên `CLAUDE.md` (8 sections, đếm H3/H4, tính duy nhất của memory file, T1 canonical heading invariant). Language-invariant: cùng verdict bất kể `--lang`.
|
|
352
|
+
- `content-validator` — 10 kiểm tra nội dung gồm xác minh path-claim (`STALE_PATH` bắt các tham chiếu `src/...` bị bịa) và phát hiện MANIFEST drift.
|
|
353
|
+
- `pass-json-validator` — Pass 1/2/3/4 well-formed JSON + đếm section theo stack.
|
|
354
|
+
- `plan-validator` — nhất quán plan ↔ disk (legacy, gần như no-op từ v2.1.0).
|
|
355
|
+
- `sync-checker` — nhất quán đăng ký disk ↔ `sync-map.json` qua 7 thư mục được theo dõi.
|
|
442
356
|
|
|
443
|
-
|
|
357
|
+
Ba mức severity (`fail` / `warn` / `advisory`) để warning không bao giờ deadlock CI vì hallucination LLM mà người dùng có thể tự sửa.
|
|
444
358
|
|
|
445
|
-
|
|
446
|
-
# Trong Claude Code — chỉ cần hỏi tự nhiên:
|
|
447
|
-
"Tạo CRUD cho domain order"
|
|
448
|
-
"Thêm API xác thực người dùng"
|
|
449
|
-
"Refactor code này khớp với pattern dự án"
|
|
359
|
+
Bất biến gắn kết tất cả: **Claude chỉ có thể trích các đường dẫn thật sự tồn tại trong code của bạn**, vì Step A trao cho nó một allowlist hữu hạn. Nếu LLM vẫn cố bịa (hiếm nhưng xảy ra với vài seed), Step C bắt được trước khi docs ship.
|
|
450
360
|
|
|
451
|
-
|
|
452
|
-
```
|
|
361
|
+
Chi tiết per-pass, resume dựa trên marker, workaround staged-rules cho `.claude/` sensitive-path block của Claude Code, và internals của stack detection xem [docs/vi/architecture.md](docs/vi/architecture.md).
|
|
453
362
|
|
|
454
363
|
---
|
|
455
364
|
|
|
456
|
-
##
|
|
457
|
-
|
|
458
|
-
```
|
|
459
|
-
npx claudeos-core init
|
|
460
|
-
│
|
|
461
|
-
├── [1] npm install ← Dependencies (~10s)
|
|
462
|
-
├── [2] Cấu trúc thư mục ← Tạo folder (~1s)
|
|
463
|
-
├── [3] plan-installer (Node.js) ← Quét dự án (~5s)
|
|
464
|
-
│ ├── Tự phát hiện stack (multi-stack aware)
|
|
465
|
-
│ ├── Trích domain list (tag: backend/frontend)
|
|
466
|
-
│ ├── Chia thành domain group (theo kiểu)
|
|
467
|
-
│ ├── Xây pass3-context.json (slim summary, v2.1.0)
|
|
468
|
-
│ └── Chọn prompt theo stack (theo kiểu)
|
|
469
|
-
│
|
|
470
|
-
├── [4] Pass 1 × N (claude -p) ← Phân tích code sâu (~2-8min)
|
|
471
|
-
│ ├── ⚙️ Backend group → prompt backend
|
|
472
|
-
│ └── 🎨 Frontend group → prompt frontend
|
|
473
|
-
│
|
|
474
|
-
├── [5] Pass 2 × 1 (claude -p) ← Merge phân tích (~1min)
|
|
475
|
-
│ └── Tổng hợp TẤT CẢ kết quả Pass 1 vào pass2-merged.json
|
|
476
|
-
│
|
|
477
|
-
├── [6] Pass 3 (split mode, v2.1.0) ← Tạo mọi thứ
|
|
478
|
-
│ │
|
|
479
|
-
│ ├── 3a × 1 (claude -p) ← Trích xuất fact (~5-10min)
|
|
480
|
-
│ │ └── Đọc pass2-merged.json một lần → pass3a-facts.md
|
|
481
|
-
│ │
|
|
482
|
-
│ ├── 3b-core × 1 (claude -p) ← CLAUDE.md + standard/rules chung
|
|
483
|
-
│ ├── 3b-1..N × N (claude -p) ← Standard/rules domain (≤15 domain/batch)
|
|
484
|
-
│ │
|
|
485
|
-
│ ├── 3c-core × 1 (claude -p) ← Guides + skill chung + MANIFEST.md
|
|
486
|
-
│ ├── 3c-1..N × N (claude -p) ← Sub-skill domain (≤15 domain/batch)
|
|
487
|
-
│ │
|
|
488
|
-
│ └── 3d-aux × 1 (claude -p) ← Stub database/ + mcp-guide/
|
|
489
|
-
│
|
|
490
|
-
├── [7] Pass 4 × 1 (claude -p) ← Memory scaffolding (~30s-5min)
|
|
491
|
-
│ ├── Seed memory/ (decision-log, failure-patterns, …)
|
|
492
|
-
│ ├── Tạo rules 60.memory/
|
|
493
|
-
│ ├── Append mục "Memory (L4)" vào CLAUDE.md
|
|
494
|
-
│ └── Gap-fill: đảm bảo skills/00.shared/MANIFEST.md tồn tại (v2.1.0)
|
|
495
|
-
│
|
|
496
|
-
└── [8] Xác minh ← Tự chạy health checker
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
### Tại sao 4 Pass?
|
|
500
|
-
|
|
501
|
-
**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.
|
|
502
|
-
|
|
503
|
-
**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.
|
|
365
|
+
## Supported Stacks
|
|
504
366
|
|
|
505
|
-
|
|
367
|
+
12 stack, tự động phát hiện từ tệp dự án:
|
|
506
368
|
|
|
507
|
-
|
|
369
|
+
**Backend:** Java/Spring Boot · Kotlin/Spring Boot · Node/Express · Node/Fastify · Node/NestJS · Python/Django · Python/FastAPI · Python/Flask
|
|
508
370
|
|
|
509
|
-
|
|
510
|
-
- **Rule B** — Ghi file idempotent (bỏ qua nếu target đã có nội dung thực), giúp Pass 3 có thể chạy lại an toàn sau khi gián đoạn.
|
|
511
|
-
- **Rule C** — Tính nhất quán xuyên file được đảm bảo qua bảng fact như single source of truth.
|
|
512
|
-
- **Rule D** — Output cô đọng: một dòng (`[WRITE]`/`[SKIP]`) giữa các lần ghi file, không nhắc lại bảng fact, không echo nội dung file.
|
|
513
|
-
- **Rule E** — Kiểm tra idempotent theo batch: một `Glob` lúc bắt đầu PHASE 2 thay vì gọi `Read` từng target.
|
|
371
|
+
**Frontend:** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
|
|
514
372
|
|
|
515
|
-
|
|
373
|
+
Dự án đa-stack (ví dụ: Spring Boot backend + Next.js frontend) hoạt động ngay không cần cấu hình.
|
|
516
374
|
|
|
517
|
-
|
|
375
|
+
Quy tắc phát hiện và những gì mỗi scanner trích xuất xem tại [docs/vi/stacks.md](docs/vi/stacks.md).
|
|
518
376
|
|
|
519
377
|
---
|
|
520
378
|
|
|
521
|
-
##
|
|
379
|
+
## Workflow hằng ngày
|
|
522
380
|
|
|
523
|
-
|
|
524
|
-
your-project/
|
|
525
|
-
│
|
|
526
|
-
├── CLAUDE.md ← Entry point của Claude Code (cấu trúc 8-phần deterministic, v2.2.0)
|
|
527
|
-
│
|
|
528
|
-
├── .claude/
|
|
529
|
-
│ └── rules/ ← Rules kích hoạt theo glob
|
|
530
|
-
│ ├── 00.core/
|
|
531
|
-
│ ├── 10.backend/
|
|
532
|
-
│ ├── 20.frontend/
|
|
533
|
-
│ ├── 30.security-db/
|
|
534
|
-
│ ├── 40.infra/
|
|
535
|
-
│ ├── 50.sync/ ← Rule nhắc sync
|
|
536
|
-
│ └── 60.memory/ ← Rule scope on-demand của L4 memory (v2.0.0)
|
|
537
|
-
│
|
|
538
|
-
├── claudeos-core/ ← Thư mục output chính
|
|
539
|
-
│ ├── generated/ ← JSON phân tích + prompt động + Pass markers (nên gitignore)
|
|
540
|
-
│ │ ├── project-analysis.json ← Thông tin stack (multi-stack aware)
|
|
541
|
-
│ │ ├── domain-groups.json ← Groups với type: backend/frontend
|
|
542
|
-
│ │ ├── pass1-backend-prompt.md ← Prompt phân tích backend
|
|
543
|
-
│ │ ├── pass1-frontend-prompt.md ← Prompt phân tích frontend (nếu phát hiện)
|
|
544
|
-
│ │ ├── pass2-prompt.md ← Prompt merge
|
|
545
|
-
│ │ ├── pass2-merged.json ← Output Pass 2 (chỉ Pass 3a tiêu thụ)
|
|
546
|
-
│ │ ├── pass3-context.json ← Slim summary (< 5 KB) cho Pass 3 (v2.1.0)
|
|
547
|
-
│ │ ├── pass3-prompt.md ← Template prompt Pass 3 (block Phase 1 được thêm trước)
|
|
548
|
-
│ │ ├── pass3a-facts.md ← Fact sheet được ghi bởi Pass 3a, đọc bởi 3b/3c/3d (v2.1.0)
|
|
549
|
-
│ │ ├── pass4-prompt.md ← Prompt memory scaffolding (v2.0.0)
|
|
550
|
-
│ │ ├── pass3-complete.json ← Marker hoàn thành Pass 3 (split mode: bao gồm groupsCompleted, v2.1.0)
|
|
551
|
-
│ │ ├── pass4-memory.json ← Marker hoàn thành Pass 4 (bỏ qua khi resume)
|
|
552
|
-
│ │ ├── rule-manifest.json ← Index file cho công cụ xác minh
|
|
553
|
-
│ │ ├── sync-map.json ← Mapping Plan ↔ disk (rỗng ở v2.1.0; giữ lại để tương thích sync-checker)
|
|
554
|
-
│ │ ├── stale-report.json ← Kết quả xác minh tổng hợp
|
|
555
|
-
│ │ ├── .i18n-cache-<lang>.json ← Cache bản dịch (`--lang` khác tiếng Anh)
|
|
556
|
-
│ │ └── .staged-rules/ ← Thư mục staging tạm cho ghi `.claude/rules/` (tự động di chuyển + dọn)
|
|
557
|
-
│ ├── standard/ ← Coding standards (15-19 file + theo domain ở 60.domains/)
|
|
558
|
-
│ │ ├── 00.core/ ← Tổng quan, kiến trúc, naming
|
|
559
|
-
│ │ ├── 10.backend-api/ ← API pattern (theo stack)
|
|
560
|
-
│ │ ├── 20.frontend-ui/ ← Frontend pattern (nếu phát hiện)
|
|
561
|
-
│ │ ├── 30.security-db/ ← Security, DB schema, utilities
|
|
562
|
-
│ │ ├── 40.infra/ ← Config, logging, CI/CD
|
|
563
|
-
│ │ ├── 50.verification/ ← Build verification, testing
|
|
564
|
-
│ │ ├── 60.domains/ ← Standard theo domain (ghi bởi Pass 3b-N, v2.1.0)
|
|
565
|
-
│ │ └── 90.optional/ ← Convention tùy chọn (mở rộng theo stack)
|
|
566
|
-
│ ├── skills/ ← Skills scaffold CRUD/page
|
|
567
|
-
│ │ └── 00.shared/MANIFEST.md ← Single source of truth cho skill đã đăng ký
|
|
568
|
-
│ ├── guide/ ← Onboarding, FAQ, troubleshooting (9 file)
|
|
569
|
-
│ ├── database/ ← DB schema, hướng dẫn migration
|
|
570
|
-
│ ├── mcp-guide/ ← Hướng dẫn tích hợp MCP server
|
|
571
|
-
│ └── memory/ ← L4: kiến thức team (4 file) — commit các file này
|
|
572
|
-
│ ├── decision-log.md ← Lý do "tại sao" đằng sau quyết định thiết kế
|
|
573
|
-
│ ├── failure-patterns.md ← Lỗi lặp lại & cách fix (tự chấm điểm — `npx claudeos-core memory score`)
|
|
574
|
-
│ ├── compaction.md ← Chiến lược compaction 4 giai đoạn (chạy `npx claudeos-core memory compact`)
|
|
575
|
-
│ └── auto-rule-update.md ← Đề xuất cải tiến rule (`npx claudeos-core memory propose-rules`)
|
|
576
|
-
│
|
|
577
|
-
└── claudeos-core-tools/ ← Toolkit này (không sửa)
|
|
578
|
-
```
|
|
381
|
+
Ba lệnh phủ ~95% nhu cầu sử dụng:
|
|
579
382
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
### Đề xuất gitignore
|
|
585
|
-
|
|
586
|
-
**Nên commit** (kiến thức team — có mục đích chia sẻ):
|
|
587
|
-
- `CLAUDE.md` — entry point của Claude Code
|
|
588
|
-
- `.claude/rules/**` — rules tự động load
|
|
589
|
-
- `claudeos-core/standard/**`, `skills/**`, `guide/**`, `database/**`, `mcp-guide/**`, `plan/**` — tài liệu được tạo (lưu ý: `plan/**` không còn được tạo ở v2.1.0)
|
|
590
|
-
- `claudeos-core/memory/**` — lịch sử quyết định, failure pattern, đề xuất rule
|
|
383
|
+
```bash
|
|
384
|
+
# Lần đầu trên một dự án
|
|
385
|
+
npx claudeos-core init
|
|
591
386
|
|
|
592
|
-
|
|
387
|
+
# Sau khi bạn chỉnh thủ công standards hoặc rules
|
|
388
|
+
npx claudeos-core lint
|
|
593
389
|
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
claudeos-core/generated/
|
|
390
|
+
# Health check (chạy trước khi commit, hoặc trong CI)
|
|
391
|
+
npx claudeos-core health
|
|
597
392
|
```
|
|
598
393
|
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
---
|
|
602
|
-
|
|
603
|
-
## Tự Động Mở Rộng Theo Kích Thước Dự Án
|
|
604
|
-
|
|
605
|
-
Split mode của Pass 3 mở rộng số stage theo số domain. Việc chia batch kích hoạt ở 16 domain để giữ output mỗi stage dưới ~50 file, là khoảng an toàn thực nghiệm cho `claude -p` trước khi tràn output do tích lũy.
|
|
606
|
-
|
|
607
|
-
| Kích thước | Domain | Số stage Pass 3 | Tổng `claude -p` | Thời gian ước tính |
|
|
608
|
-
|---|---|---|---|---|
|
|
609
|
-
| Nhỏ | 1–4 | 4 (`3a`, `3b-core`, `3c-core`, `3d-aux`) | 7 (Pass 1 + 2 + 4 stage Pass 3 + Pass 4) | ~10–15 phút |
|
|
610
|
-
| Vừa | 5–15 | 4 | 8–9 | ~25–45 phút |
|
|
611
|
-
| Lớn | 16–30 | **8** (3b, 3c mỗi cái chia thành 2 batch) | 11–12 | **~60–105 phút** |
|
|
612
|
-
| Rất lớn | 31–45 | 10 | 13–14 | ~100–150 phút |
|
|
613
|
-
| Siêu lớn | 46–60 | 12 | 15–16 | ~150–200 phút |
|
|
614
|
-
| Cực lớn | 61+ | 14+ | 17+ | 200 phút+ |
|
|
615
|
-
|
|
616
|
-
Công thức số stage (khi chia batch): `1 (3a) + 1 (3b-core) + N (3b-1..N) + 1 (3c-core) + N (3c-1..N) + 1 (3d-aux) = 2N + 4`, với `N = ceil(totalDomains / 15)`.
|
|
617
|
-
|
|
618
|
-
Pass 4 (memory scaffolding) thêm khoảng ~30 giây đến 5 phút lên trên tùy thuộc vào việc chạy tạo qua Claude hay fallback tĩnh. 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 = tier Vừa.
|
|
619
|
-
|
|
620
|
-
---
|
|
621
|
-
|
|
622
|
-
## Công Cụ Xác Minh
|
|
623
|
-
|
|
624
|
-
ClaudeOS-Core bao gồm 5 công cụ xác minh built-in chạy tự động sau khi tạo:
|
|
394
|
+
Hai lệnh nữa cho bảo trì memory layer:
|
|
625
395
|
|
|
626
396
|
```bash
|
|
627
|
-
#
|
|
628
|
-
npx claudeos-core
|
|
629
|
-
|
|
630
|
-
# Lệnh riêng lẻ
|
|
631
|
-
npx claudeos-core validate # So sánh Plan ↔ disk
|
|
632
|
-
npx claudeos-core refresh # Disk → Plan sync
|
|
633
|
-
npx claudeos-core restore # Plan → Disk restore
|
|
397
|
+
# Compact log failure-patterns (chạy định kỳ)
|
|
398
|
+
npx claudeos-core memory compact
|
|
634
399
|
|
|
635
|
-
#
|
|
636
|
-
|
|
637
|
-
node claudeos-core-tools/manifest-generator/index.js
|
|
638
|
-
node claudeos-core-tools/plan-validator/index.js --check
|
|
639
|
-
node claudeos-core-tools/sync-checker/index.js
|
|
400
|
+
# Đề xuất các pattern lỗi thường gặp thành rule mới
|
|
401
|
+
npx claudeos-core memory propose-rules
|
|
640
402
|
```
|
|
641
403
|
|
|
642
|
-
|
|
643
|
-
|---|---|
|
|
644
|
-
| **manifest-generator** | Tạo JSON metadata (`rule-manifest.json`, `sync-map.json`, khởi tạo `stale-report.json`); index 7 thư mục bao gồm `memory/` (`totalMemory` trong summary). v2.1.0: `plan-manifest.json` không còn được tạo vì master plan đã bị loại bỏ. |
|
|
645
|
-
| **plan-validator** | Xác minh block `<file>` master plan với disk cho các dự án vẫn còn `claudeos-core/plan/` (trường hợp upgrade legacy). v2.1.0: bỏ qua tạo `plan-sync-status.json` khi `plan/` vắng mặt hoặc rỗng — `stale-report.json` vẫn ghi một no-op pass. |
|
|
646
|
-
| **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). Thoát sạch khi `sync-map.json` không có mapping nào (trạng thái mặc định của v2.1.0). |
|
|
647
|
-
| **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) |
|
|
648
|
-
| **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` (shape split-mode, v2.1.0) và `pass4-memory.json` |
|
|
404
|
+
Tùy chọn đầy đủ của từng lệnh xem tại [docs/vi/commands.md](docs/vi/commands.md).
|
|
649
405
|
|
|
650
406
|
---
|
|
651
407
|
|
|
652
|
-
##
|
|
653
|
-
|
|
654
|
-
ClaudeOS-Core tạo tài liệu mà Claude Code thực sự đọc — đây là cách:
|
|
655
|
-
|
|
656
|
-
### Cái Claude Code đọc tự động
|
|
657
|
-
|
|
658
|
-
| File | Khi nào | Đảm bảo |
|
|
659
|
-
|---|---|---|
|
|
660
|
-
| `CLAUDE.md` | Mỗi lần bắt đầu hội thoại | Luôn luôn |
|
|
661
|
-
| `.claude/rules/00.core/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
|
|
662
|
-
| `.claude/rules/10.backend/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
|
|
663
|
-
| `.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 |
|
|
664
|
-
| `.claude/rules/30.security-db/*` | Khi sửa bất kỳ file nào (`paths: ["**/*"]`) | Luôn luôn |
|
|
665
|
-
| `.claude/rules/40.infra/*` | Chỉ khi sửa file config/infra (đường dẫn có scope) | Có điều kiện |
|
|
666
|
-
| `.claude/rules/50.sync/*` | Chỉ khi sửa file claudeos-core (đường dẫn có scope) | Có điều kiện |
|
|
667
|
-
| `.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) |
|
|
668
|
-
|
|
669
|
-
### Cái Claude Code đọc theo yêu cầu qua rule references
|
|
670
|
-
|
|
671
|
-
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:
|
|
408
|
+
## Điều gì làm công cụ này khác biệt
|
|
672
409
|
|
|
673
|
-
|
|
674
|
-
- `claudeos-core/database/**` — DB schema (cho query, mapper, migration)
|
|
675
|
-
- `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.
|
|
410
|
+
Hầu hết công cụ sinh tài liệu Claude Code đều sinh từ một mô tả (bạn nói cho công cụ, công cụ nói cho Claude). ClaudeOS-Core sinh từ chính mã nguồn của bạn (công cụ đọc, công cụ nói cho Claude phần nào đã được xác nhận, Claude chỉ viết những gì đã được xác nhận).
|
|
676
411
|
|
|
677
|
-
|
|
412
|
+
Ba hệ quả cụ thể:
|
|
678
413
|
|
|
679
|
-
|
|
414
|
+
1. **Phát hiện stack có tính deterministic.** Cùng dự án + cùng code = cùng đầu ra. Không có chuyện "lần này Claude đoán khác."
|
|
415
|
+
2. **Không bịa ra đường dẫn.** Prompt của Pass 3 liệt kê tường minh mọi đường dẫn nguồn được phép; Claude không thể trích các đường dẫn không tồn tại.
|
|
416
|
+
3. **Hiểu đa-stack.** Domain backend và frontend dùng prompt phân tích khác nhau trong cùng một lần chạy.
|
|
680
417
|
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
| Folder | Lý do loại trừ |
|
|
684
|
-
|---|---|
|
|
685
|
-
| `claudeos-core/plan/` | Master Plan backup từ các dự án legacy (v2.0.x và trước đó). Không tạo ở v2.1.0. Nếu có mặt, Claude Code sẽ không tự động load — chỉ đọc theo yêu cầu. |
|
|
686
|
-
| `claudeos-core/generated/` | JSON metadata build, prompt, Pass marker, translation cache, `.staged-rules/`. Không dùng cho coding. |
|
|
687
|
-
| `claudeos-core/guide/` | Hướng dẫn onboarding cho con người. |
|
|
688
|
-
| `claudeos-core/mcp-guide/` | Tài liệu MCP server. Không dùng cho coding. |
|
|
689
|
-
| `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. |
|
|
418
|
+
So sánh phạm vi side-by-side với các công cụ khác xem [docs/vi/comparison.md](docs/vi/comparison.md). So sánh là về **mỗi công cụ làm gì**, không phải **cái nào tốt hơn** — phần lớn là bổ trợ nhau.
|
|
690
419
|
|
|
691
420
|
---
|
|
692
421
|
|
|
693
|
-
##
|
|
422
|
+
## Xác minh (sau khi sinh)
|
|
694
423
|
|
|
695
|
-
|
|
424
|
+
Sau khi Claude viết doc, code sẽ xác minh chúng. Năm validator độc lập:
|
|
696
425
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
426
|
+
| Validator | Kiểm tra gì | Chạy bởi |
|
|
427
|
+
|---|---|---|
|
|
428
|
+
| `claude-md-validator` | Bất biến cấu trúc của CLAUDE.md (8 sections, language-invariant) | `claudeos-core lint` |
|
|
429
|
+
| `content-validator` | Đường dẫn nêu trong tài liệu thật sự tồn tại; manifest nhất quán | `health` (advisory) |
|
|
430
|
+
| `pass-json-validator` | Đầu ra Pass 1 / 2 / 3 / 4 là JSON đúng cú pháp | `health` (warn) |
|
|
431
|
+
| `plan-validator` | Plan đã lưu khớp với đĩa | `health` (fail-on-error) |
|
|
432
|
+
| `sync-checker` | Tệp trên đĩa khớp với đăng ký trong `sync-map.json` (phát hiện orphaned/unregistered) | `health` (fail-on-error) |
|
|
703
433
|
|
|
704
|
-
|
|
434
|
+
Một `health-checker` điều phối bốn validator runtime với mức độ ba bậc (fail / warn / advisory) và thoát với exit code phù hợp cho CI. `claude-md-validator` chạy riêng qua lệnh `lint` vì lệch cấu trúc là tín hiệu cần re-init, không phải warning nhẹ. Có thể chạy bất cứ lúc nào:
|
|
705
435
|
|
|
706
436
|
```bash
|
|
707
|
-
# Sau khi sửa file standard hoặc rules:
|
|
708
|
-
npx claudeos-core refresh
|
|
709
|
-
|
|
710
|
-
# Xác minh mọi thứ nhất quán
|
|
711
437
|
npx claudeos-core health
|
|
712
438
|
```
|
|
713
439
|
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
```bash
|
|
717
|
-
# Khuyến nghị v2.1.0: dùng git để khôi phục (vì master plan không còn
|
|
718
|
-
# được tạo nữa). Commit tài liệu được tạo thường xuyên để có thể rollback
|
|
719
|
-
# từng file cụ thể mà không cần tạo lại:
|
|
720
|
-
git checkout HEAD -- .claude/rules/ claudeos-core/
|
|
721
|
-
|
|
722
|
-
# Legacy (dự án v2.0.x vẫn còn claudeos-core/plan/):
|
|
723
|
-
npx claudeos-core restore
|
|
724
|
-
```
|
|
725
|
-
|
|
726
|
-
### Bảo Trì Memory Layer (v2.0.0)
|
|
727
|
-
|
|
728
|
-
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:
|
|
729
|
-
|
|
730
|
-
```bash
|
|
731
|
-
# Compact: áp dụng chính sách compaction 4 giai đoạn (chạy định kỳ — ví dụ hàng tháng)
|
|
732
|
-
npx claudeos-core memory compact
|
|
733
|
-
# Stage 1: tóm tắt các entry cũ (>30 ngày, body → một dòng)
|
|
734
|
-
# Stage 2: merge heading trùng (tổng frequency, giữ fix mới nhất)
|
|
735
|
-
# Stage 3: bỏ importance thấp + cũ (importance <3 VÀ lastSeen >60 ngày)
|
|
736
|
-
# Stage 4: áp dụng giới hạn 400 dòng mỗi file (bỏ importance thấp cũ nhất trước)
|
|
737
|
-
|
|
738
|
-
# Score: xếp hạng lại các entry trong failure-patterns.md theo importance
|
|
739
|
-
npx claudeos-core memory score
|
|
740
|
-
# importance = round(frequency × 1.5 + recency × 5), giới hạn 10
|
|
741
|
-
# Chạy sau khi append vài failure pattern mới
|
|
742
|
-
|
|
743
|
-
# Propose-rules: nổi bật các candidate rule addition từ failure lặp lại
|
|
744
|
-
npx claudeos-core memory propose-rules
|
|
745
|
-
# Đọc các entry failure-patterns.md với frequency ≥ 3
|
|
746
|
-
# Tính confidence (sigmoid trên weighted evidence × anchor multiplier)
|
|
747
|
-
# Ghi proposal vào memory/auto-rule-update.md (KHÔNG tự động áp dụng)
|
|
748
|
-
# Confidence ≥ 0.70 đáng xem xét nghiêm túc; nếu accept → sửa rule + log quyết định
|
|
749
|
-
|
|
750
|
-
# v2.1.0: `memory --help` giờ route tới help subcommand (trước đây hiển thị top-level)
|
|
751
|
-
npx claudeos-core memory --help
|
|
752
|
-
```
|
|
753
|
-
|
|
754
|
-
> **Fix v2.1.0:** `memory score` không còn để lại dòng `importance` trùng lặp sau lần chạy đầu (trước đây dòng được tự chấm điểm được thêm ở trên trong khi dòng nguyên bản bị bỏ lại bên dưới). Marker summary Stage 1 của `memory compact` giờ là markdown list item đúng định dạng (`- _Summarized on ..._`) nên render sạch và được parse lại đúng ở các lần compact sau.
|
|
755
|
-
|
|
756
|
-
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):
|
|
757
|
-
- **`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ử.
|
|
758
|
-
- **`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.
|
|
759
|
-
- `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.
|
|
760
|
-
|
|
761
|
-
### Tích Hợp CI/CD
|
|
762
|
-
|
|
763
|
-
```yaml
|
|
764
|
-
# Ví dụ GitHub Actions
|
|
765
|
-
- run: npx claudeos-core validate
|
|
766
|
-
# Exit code 1 chặn PR
|
|
767
|
-
|
|
768
|
-
# Tùy chọn: housekeeping memory hàng tháng (workflow cron riêng)
|
|
769
|
-
- run: npx claudeos-core memory compact
|
|
770
|
-
- run: npx claudeos-core memory score
|
|
771
|
-
```
|
|
440
|
+
Chi tiết kiểm tra của từng validator xem [docs/vi/verification.md](docs/vi/verification.md).
|
|
772
441
|
|
|
773
442
|
---
|
|
774
443
|
|
|
775
|
-
##
|
|
776
|
-
|
|
777
|
-
### So với Các Công Cụ Claude Code Khác
|
|
778
|
-
|
|
779
|
-
| | ClaudeOS-Core | Everything Claude Code (50K+ ⭐) | Harness | specs-generator | Claude `/init` |
|
|
780
|
-
|---|---|---|---|---|---|
|
|
781
|
-
| **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 |
|
|
782
|
-
| **Đọc source code** | ✅ Phân tích tĩnh deterministic | ❌ | ❌ | ❌ (LLM đọc) | ❌ (LLM đọc) |
|
|
783
|
-
| **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 |
|
|
784
|
-
| **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 |
|
|
785
|
-
| **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) |
|
|
786
|
-
| **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 |
|
|
787
|
-
| **Output** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans (40-50+ file) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 spec document | CLAUDE.md (1 file) |
|
|
788
|
-
| **Vị trí output** | `.claude/rules/` (tự load bởi Claude Code) | `.claude/` đủ loại | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
|
|
789
|
-
| **Xác minh sau khi tạo** | ✅ 5 validator tự động | ❌ | ❌ | ❌ | ❌ |
|
|
790
|
-
| **Output đa ngôn ngữ** | ✅ 10 ngôn ngữ | ❌ | ❌ | ❌ | ❌ |
|
|
791
|
-
| **Multi-stack** | ✅ Backend + Frontend đồng thời | ❌ Stack-agnostic | ❌ | ❌ | Một phần |
|
|
792
|
-
| **Memory layer bền vững** | ✅ L4 — decision log + failure pattern + đề xuất rule chấm điểm tự động (v2.0.0) | ❌ | ❌ | ❌ | ❌ |
|
|
793
|
-
| **Điều phối agent** | ❌ | ✅ 28 agent | ✅ 6 pattern | ❌ | ❌ |
|
|
444
|
+
## Memory Layer (tùy chọn, dành cho dự án dài hạn)
|
|
794
445
|
|
|
795
|
-
|
|
446
|
+
Sau v2.0, ClaudeOS-Core ghi một thư mục `claudeos-core/memory/` chứa bốn tệp:
|
|
796
447
|
|
|
797
|
-
|
|
448
|
+
- `decision-log.md` — append-only "vì sao chọn X thay vì Y"
|
|
449
|
+
- `failure-patterns.md` — lỗi tái diễn kèm điểm frequency/importance
|
|
450
|
+
- `compaction.md` — cách memory được tự động compact theo thời gian
|
|
451
|
+
- `auto-rule-update.md` — pattern cần được biến thành rule mới
|
|
798
452
|
|
|
799
|
-
|
|
800
|
-
ngừng dùng `success()` khi codebase của bạn dùng `ok()`,
|
|
801
|
-
và ngừng tạo thư mục `user/controller/` khi dự án của bạn dùng `controller/user/`.
|
|
453
|
+
Bạn có thể chạy `npx claudeos-core memory propose-rules` để yêu cầu Claude xem xét các pattern lỗi gần đây và đề xuất rule mới.
|
|
802
454
|
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
ClaudeOS-Core tập trung vào **rule và standard đặc thù dự án**.
|
|
806
|
-
Các công cụ khác tập trung vào **điều phối agent và workflow**.
|
|
807
|
-
|
|
808
|
-
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.
|
|
455
|
+
Mô hình memory và vòng đời xem [docs/vi/memory-layer.md](docs/vi/memory-layer.md).
|
|
809
456
|
|
|
810
457
|
---
|
|
811
458
|
|
|
812
459
|
## FAQ
|
|
813
460
|
|
|
814
|
-
**
|
|
815
|
-
Không.
|
|
816
|
-
|
|
817
|
-
**Q: Chi phí là bao nhiêu?**
|
|
818
|
-
Nó gọi `claude -p` vài lần qua 4 pass. Ở split mode v2.1.0, chỉ riêng Pass 3 đã mở rộng thành 4–14+ stage tùy theo kích thước dự án (xem [Tự Động Mở Rộng](#tự-động-mở-rộng-theo-kích-thước-dự-án)). Một dự án nhỏ điển hình (1–15 domain) dùng tổng cộng 8–9 lời gọi `claude -p`; dự án 18 domain dùng 11; dự án 60 domain dùng 15–17. Mỗi stage chạy với context window mới — chi phí token mỗi lời gọi thực ra thấp hơn Pass 3 lời-gọi-đơn, vì không stage nào phải giữ toàn bộ cây file trong một context. 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. Vẫn nằm trong mức sử dụng Claude Code bình thường.
|
|
819
|
-
|
|
820
|
-
**Q: Pass 3 split mode là gì và tại sao được thêm ở v2.1.0?**
|
|
821
|
-
Trước v2.1.0, Pass 3 thực hiện một lời gọi `claude -p` đơn phải phát ra toàn bộ cây file được tạo (`CLAUDE.md`, standards, rules, skills, guides — thường 30–60 file) trong một response. Điều này hoạt động trên dự án nhỏ nhưng luôn gặp lỗi `Prompt is too long` do tích lũy output ở ~5 domain. Lỗi không thể dự đoán từ kích thước input — nó phụ thuộc vào mức độ dài dòng của mỗi file được tạo, và có thể ập đến cùng một dự án một cách không ổn định. Split mode né vấn đề này về cấu trúc: Pass 3 được chia thành các stage tuần tự (`3a` → `3b-core` → `3b-N` → `3c-core` → `3c-N` → `3d-aux`), mỗi cái là một lời gọi `claude -p` riêng với context window mới. Tính nhất quán xuyên stage được bảo tồn bởi `pass3a-facts.md`, fact sheet đã chắt lọc 5–10 KB mà mọi stage sau tham chiếu thay vì đọc lại `pass2-merged.json`. Marker `pass3-complete.json` mang mảng `groupsCompleted` để crash trong `3c-2` resume từ `3c-2` (không phải từ `3a`), tránh chi phí token gấp đôi.
|
|
822
|
-
**Q: Tôi có nên commit các file được tạo vào Git không?**
|
|
823
|
-
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).
|
|
824
|
-
|
|
825
|
-
**Q: Còn dự án mixed-stack (ví dụ Java backend + React frontend)?**
|
|
826
|
-
Đượ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 qua các split stage — domain backend rơi vào một số batch 3b/3c, domain frontend vào các batch khác, tất cả đều tham chiếu cùng `pass3a-facts.md` để có tính nhất quán.
|
|
827
|
-
|
|
828
|
-
**Q: Nó có hoạt động với monorepo Turborepo / pnpm workspaces / Lerna không?**
|
|
829
|
-
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.
|
|
830
|
-
|
|
831
|
-
**Q: Chạy lại thì chuyện gì xảy ra?**
|
|
832
|
-
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. Ở split mode v2.1.0, resume Pass 3 hoạt động ở mức độ stage — nếu lần chạy crash trong `3c-2`, `init` tiếp theo resume từ `3c-2` thay vì bắt đầu lại từ `3a` (sẽ nhân đôi chi phí token). Marker `pass3-complete.json` ghi `mode: "split"` cộng với mảng `groupsCompleted` để điều khiển logic này.
|
|
833
|
-
|
|
834
|
-
**Q: NestJS có template riêng hay dùng của Express?**
|
|
835
|
-
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.
|
|
461
|
+
**H: Tôi có cần Claude API key không?**
|
|
462
|
+
Đ: Không. ClaudeOS-Core dùng cài đặt Claude Code sẵn có của bạn — nó truyền prompt đến `claude -p` trên máy bạn. Không cần tài khoản phụ.
|
|
836
463
|
|
|
837
|
-
**
|
|
838
|
-
|
|
464
|
+
**H: Lệnh này có ghi đè CLAUDE.md hoặc `.claude/rules/` đang có không?**
|
|
465
|
+
Đ: Lần chạy đầu trên dự án mới: tạo mới. Chạy lại không có `--force` thì giữ nguyên chỉnh sửa của bạn — marker từ lần chạy trước được phát hiện và pass đó bị bỏ qua. Chạy lại với `--force` thì xóa và sinh lại tất cả (các chỉnh sửa của bạn bị mất — đó chính là ý nghĩa của `--force`). Xem [docs/vi/safety.md](docs/vi/safety.md).
|
|
839
466
|
|
|
840
|
-
**
|
|
841
|
-
Có.
|
|
467
|
+
**H: Stack của tôi không được hỗ trợ. Tôi có thể thêm không?**
|
|
468
|
+
Đ: Có. Stack mới cần ~3 prompt template + một domain scanner. Xem [CONTRIBUTING.md](CONTRIBUTING.md) để có hướng dẫn 8 bước.
|
|
842
469
|
|
|
843
|
-
**
|
|
844
|
-
|
|
470
|
+
**H: Làm sao sinh doc bằng tiếng Việt (hoặc ngôn ngữ khác)?**
|
|
471
|
+
Đ: `npx claudeos-core init --lang vi`. Hỗ trợ 10 ngôn ngữ: en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
|
|
845
472
|
|
|
846
|
-
**
|
|
847
|
-
|
|
473
|
+
**H: Có chạy với monorepo không?**
|
|
474
|
+
Đ: Có — Turborepo (`turbo.json`), pnpm workspaces (`pnpm-workspace.yaml`), Lerna (`lerna.json`) và npm/yarn workspaces (`package.json#workspaces`) được stack-detector phát hiện. Mỗi app được phân tích riêng. Các layout monorepo khác (ví dụ NX) không được phát hiện đặc biệt, nhưng các pattern chung `apps/*/` và `packages/*/` vẫn được scanner theo từng stack nhặt được.
|
|
848
475
|
|
|
849
|
-
**
|
|
850
|
-
|
|
476
|
+
**H: Nếu Claude Code sinh ra rule mà tôi không đồng ý thì sao?**
|
|
477
|
+
Đ: Sửa trực tiếp. Sau đó chạy `npx claudeos-core lint` để kiểm tra CLAUDE.md vẫn đúng cấu trúc. Các chỉnh sửa của bạn được giữ qua các lần `init` sau (không có `--force`) — cơ chế resume bỏ qua các pass đã có marker.
|
|
851
478
|
|
|
852
|
-
**
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
**Q: `memory compact` / `memory score` / `memory propose-rules` làm gì?**
|
|
856
|
-
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).
|
|
857
|
-
|
|
858
|
-
**Q: Tại sao `--force` (hoặc chế độ "fresh" resume) xóa `.claude/rules/`?**
|
|
859
|
-
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`). Guard 1 ("partial staged-rules move") và Guard 3 ("incomplete output — missing/empty guide files or missing standard sentinel / empty skills") 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. (Lưu ý v2.1.0: Guard 3 H1 không còn kiểm tra `plan/` vì master plan không còn được tạo.)
|
|
860
|
-
|
|
861
|
-
**Q: `claudeos-core/generated/.staged-rules/` là gì và tại sao tồn tại?**
|
|
862
|
-
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. Ở split mode v2.1.0, stage runner di chuyển staged rules vào `.claude/rules/` sau mỗi stage (không chỉ cuối cùng), nên crash giữa Pass 3 vẫn để lại rule của các stage đã hoàn thành trước đó tại chỗ.
|
|
863
|
-
|
|
864
|
-
**Q: Tôi có thể chạy Pass 3 thủ công thay vì `npx claudeos-core init` không?**
|
|
865
|
-
Có cho dự án nhỏ (≤5 domain) — hướng dẫn thủ công lời-gọi-đơn ở [Step 6](#step-6-pass-3--tạo-toàn-bộ-tài-liệu-chia-thành-nhiều-stage) vẫn hoạt động. Cho dự án lớn hơn bạn nên dùng `npx claudeos-core init` vì split runner là cái điều phối thực thi từng stage với context mới, xử lý chia batch ở ≥16 domain, ghi shape marker `pass3-complete.json` đúng (`mode: "split"` + `groupsCompleted`), và di chuyển staged rules giữa các stage. Tái tạo điều phối đó bằng tay có thể được nhưng mệt mỏi. Nếu bạn có lý do chạy stage thủ công (ví dụ: debug một stage cụ thể), bạn có thể template `pass3-prompt.md` với directive `STAGE:` phù hợp và đưa cho `claude -p` trực tiếp — nhưng nhớ di chuyển `.staged-rules/` sau mỗi stage và tự cập nhật marker.
|
|
866
|
-
|
|
867
|
-
**Q: Dự án của tôi là upgrade từ v2.0.x và có thư mục `claudeos-core/plan/` hiện hữu. Tôi phải làm gì?**
|
|
868
|
-
Không cần gì cả — công cụ v2.1.0 bỏ qua `plan/` khi nó vắng mặt hoặc rỗng, và `plan-validator` vẫn xử lý các dự án legacy có thư mục `plan/` đã điền để tương thích ngược. Bạn có thể xóa an toàn `claudeos-core/plan/` nếu không cần master plan backup (git history dù sao cũng là backup tốt hơn). Nếu giữ `plan/`, chạy `npx claudeos-core init` sẽ không cập nhật nó — nội dung mới không được tổng hợp vào master plan ở v2.1.0. Công cụ xác minh xử lý sạch cả hai trường hợp.
|
|
479
|
+
**H: Báo bug ở đâu?**
|
|
480
|
+
Đ: [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). Vấn đề bảo mật xem [SECURITY.md](SECURITY.md).
|
|
869
481
|
|
|
870
482
|
---
|
|
871
483
|
|
|
872
|
-
##
|
|
873
|
-
|
|
874
|
-
```
|
|
875
|
-
pass-prompts/templates/
|
|
876
|
-
├── common/ # header/footer dùng chung + pass4 + staging-override + CLAUDE.md scaffold (v2.2.0)
|
|
877
|
-
│ ├── header.md # Vai trò + chỉ thị định dạng output (tất cả pass)
|
|
878
|
-
│ ├── pass3-footer.md # Chỉ thị health-check sau Pass 3 + 5 khối guardrail CRITICAL (v2.2.0)
|
|
879
|
-
│ ├── pass3-phase1.md # Khối "Read Once, Extract Facts" với Rule A-E (v2.1.0)
|
|
880
|
-
│ ├── pass4.md # Prompt scaffolding memory (v2.0.0)
|
|
881
|
-
│ ├── staging-override.md # Chuyển hướng write .claude/rules/** sang .staged-rules/** (v2.0.0)
|
|
882
|
-
│ ├── claude-md-scaffold.md # Template CLAUDE.md 8 section tất định (v2.2.0)
|
|
883
|
-
│ └── lang-instructions.json # Chỉ thị output theo ngôn ngữ (10 ngôn ngữ)
|
|
884
|
-
├── java-spring/ # Java / Spring Boot
|
|
885
|
-
├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
|
|
886
|
-
├── node-express/ # Node.js / Express
|
|
887
|
-
├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
|
|
888
|
-
├── node-fastify/ # Node.js / Fastify
|
|
889
|
-
├── node-nextjs/ # Next.js / React (App Router, RSC)
|
|
890
|
-
├── node-vite/ # Vite SPA (React, client-side routing, VITE_ env, Vitest)
|
|
891
|
-
├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
|
|
892
|
-
├── angular/ # Angular
|
|
893
|
-
├── python-django/ # Python / Django (DRF)
|
|
894
|
-
├── python-fastapi/ # Python / FastAPI
|
|
895
|
-
└── python-flask/ # Python / Flask (Blueprint, app factory, Jinja2)
|
|
896
|
-
```
|
|
897
|
-
|
|
898
|
-
`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. Ở v2.1.0, template Pass 3 được thêm `common/pass3-phase1.md` (block "Read Once, Extract Facts" với Rules A–E) vào đầu trước khi được cắt theo từng stage split-mode. Pass 4 dùng template chung `common/pass4.md` (memory scaffolding) bất kể stack.
|
|
484
|
+
## Documentation
|
|
899
485
|
|
|
900
|
-
|
|
486
|
+
| Chủ đề | Đọc tại |
|
|
487
|
+
|---|---|
|
|
488
|
+
| Cách pipeline 4-pass hoạt động (sâu hơn diagram) | [docs/vi/architecture.md](docs/vi/architecture.md) |
|
|
489
|
+
| Diagram trực quan (Mermaid) của kiến trúc | [docs/vi/diagrams.md](docs/vi/diagrams.md) |
|
|
490
|
+
| Phát hiện stack — mỗi scanner tìm gì | [docs/vi/stacks.md](docs/vi/stacks.md) |
|
|
491
|
+
| Memory layer — decision log và failure pattern | [docs/vi/memory-layer.md](docs/vi/memory-layer.md) |
|
|
492
|
+
| Chi tiết cả 5 validator | [docs/vi/verification.md](docs/vi/verification.md) |
|
|
493
|
+
| Mọi lệnh CLI và tùy chọn | [docs/vi/commands.md](docs/vi/commands.md) |
|
|
494
|
+
| Cài thủ công (không dùng `npx`) | [docs/vi/manual-installation.md](docs/vi/manual-installation.md) |
|
|
495
|
+
| Override scanner — `.claudeos-scan.json` | [docs/vi/advanced-config.md](docs/vi/advanced-config.md) |
|
|
496
|
+
| An toàn: cái gì được giữ khi re-init | [docs/vi/safety.md](docs/vi/safety.md) |
|
|
497
|
+
| So sánh với các công cụ tương tự (về phạm vi, không phải chất lượng) | [docs/vi/comparison.md](docs/vi/comparison.md) |
|
|
498
|
+
| Lỗi và cách phục hồi | [docs/vi/troubleshooting.md](docs/vi/troubleshooting.md) |
|
|
901
499
|
|
|
902
500
|
---
|
|
903
501
|
|
|
904
|
-
##
|
|
905
|
-
|
|
906
|
-
ClaudeOS-Core tự động phát hiện setup monorepo JS/TS và quét sub-package tìm dependency.
|
|
907
|
-
|
|
908
|
-
**Các monorepo marker được hỗ trợ** (tự phát hiện):
|
|
909
|
-
- `turbo.json` (Turborepo)
|
|
910
|
-
- `pnpm-workspace.yaml` (pnpm workspaces)
|
|
911
|
-
- `lerna.json` (Lerna)
|
|
912
|
-
- `package.json#workspaces` (npm/yarn workspaces)
|
|
913
|
-
|
|
914
|
-
**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:
|
|
915
|
-
|
|
916
|
-
```bash
|
|
917
|
-
cd my-monorepo
|
|
918
|
-
npx claudeos-core init
|
|
919
|
-
```
|
|
920
|
-
|
|
921
|
-
**Những gì được phát hiện:**
|
|
922
|
-
- Dependency từ `apps/web/package.json` (ví dụ: `next`, `react`) → frontend stack
|
|
923
|
-
- Dependency từ `apps/api/package.json` (ví dụ: `express`, `prisma`) → backend stack
|
|
924
|
-
- Dependency từ `packages/db/package.json` (ví dụ: `drizzle-orm`) → ORM/DB
|
|
925
|
-
- Đường dẫn workspace tùy chỉnh từ `pnpm-workspace.yaml` (ví dụ: `services/*`)
|
|
926
|
-
|
|
927
|
-
**Quét domain cũng bao phủ layout monorepo:**
|
|
928
|
-
- `apps/api/src/modules/*/` và `apps/api/src/*/` cho backend domain
|
|
929
|
-
- `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` cho frontend domain
|
|
930
|
-
- `packages/*/src/*/` cho shared package domain
|
|
931
|
-
|
|
932
|
-
```
|
|
933
|
-
my-monorepo/ ← Chạy ở đây: npx claudeos-core init
|
|
934
|
-
├── turbo.json ← Tự phát hiện là Turborepo
|
|
935
|
-
├── apps/
|
|
936
|
-
│ ├── web/ ← Next.js phát hiện từ apps/web/package.json
|
|
937
|
-
│ │ ├── app/dashboard/ ← Frontend domain được phát hiện
|
|
938
|
-
│ │ └── package.json ← { "dependencies": { "next": "^14" } }
|
|
939
|
-
│ └── api/ ← Express phát hiện từ apps/api/package.json
|
|
940
|
-
│ ├── src/modules/users/ ← Backend domain được phát hiện
|
|
941
|
-
│ └── package.json ← { "dependencies": { "express": "^4" } }
|
|
942
|
-
├── packages/
|
|
943
|
-
│ ├── db/ ← Drizzle phát hiện từ packages/db/package.json
|
|
944
|
-
│ └── ui/
|
|
945
|
-
└── package.json ← { "workspaces": ["apps/*", "packages/*"] }
|
|
946
|
-
```
|
|
947
|
-
|
|
948
|
-
> **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.
|
|
949
|
-
|
|
950
|
-
## Xử Lý Sự Cố
|
|
951
|
-
|
|
952
|
-
**"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).
|
|
953
|
-
|
|
954
|
-
**"npm install failed"** — Phiên bản Node.js có thể quá thấp. Yêu cầu v18+.
|
|
955
|
-
|
|
956
|
-
**"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.
|
|
957
|
-
|
|
958
|
-
**"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/`.
|
|
959
|
-
|
|
960
|
-
**"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`.
|
|
961
|
-
|
|
962
|
-
**"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.
|
|
963
|
-
|
|
964
|
-
**"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.
|
|
965
|
-
|
|
966
|
-
**"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`.
|
|
967
|
-
|
|
968
|
-
**"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.
|
|
969
|
-
|
|
970
|
-
**"Pass 3 finished but the following required output(s) are missing or empty" (v2.0.0, cập nhật v2.1.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/` hoặc `claudeos-core/skills/`. 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. `database/` và `mcp-guide/` bị loại trừ có chủ đích (một số stack tạo ra 0 file hợp lệ). `plan/` không còn được kiểm tra kể từ v2.1.0 (master plan đã bị loại bỏ). Đườ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.
|
|
971
|
-
|
|
972
|
-
**"Pass 3 split stage crashed partway through (v2.1.0)"** — Khi một trong các split stage (ví dụ: `3b-1`, `3c-2`) lỗi giữa chừng, marker mức stage KHÔNG được ghi, nhưng các stage đã hoàn thành ĐƯỢC ghi trong `pass3-complete.json.groupsCompleted`. Lần chạy `init` tiếp theo đọc mảng này và resume từ stage chưa hoàn thành đầu tiên, bỏ qua mọi công việc đã hoàn thành trước đó. Bạn không cần làm gì thủ công — chỉ cần chạy lại `npx claudeos-core init`. Nếu resume cứ lỗi ở cùng stage, kiểm tra `claudeos-core/generated/pass3-prompt.md` tìm nội dung bị lỗi, rồi thử `--force` để khởi động lại đầy đủ. Shape `pass3-complete.json` (`mode: "split"`, `groupsCompleted: [...]`) ổn định; một marker thiếu hoặc lỗi sẽ khiến toàn bộ Pass 3 chạy lại từ `3a`.
|
|
973
|
-
|
|
974
|
-
**"Pass 3 stale marker (shape mismatch) — treating as incomplete" (v2.1.0)** — Một `pass3-complete.json` từ lần chạy lời-gọi-đơn pre-v2.1.0 đang được diễn giải theo luật split-mode mới. Kiểm tra shape tìm `mode: "split"` và mảng `groupsCompleted`; nếu thiếu, marker được coi là partial và Pass 3 chạy lại ở split mode. Nếu bạn upgrade từ v2.0.x, điều này xảy ra một lần là mong đợi — lần chạy tiếp theo sẽ ghi shape marker đúng. Không cần hành động.
|
|
975
|
-
|
|
976
|
-
**"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`.
|
|
502
|
+
## Đóng góp
|
|
977
503
|
|
|
978
|
-
|
|
504
|
+
Chào đón đóng góp — thêm hỗ trợ stack, cải thiện prompt, sửa bug. Xem [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
979
505
|
|
|
980
|
-
|
|
506
|
+
Quy tắc ứng xử và chính sách bảo mật xem [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) và [SECURITY.md](SECURITY.md).
|
|
981
507
|
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
**"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`.
|
|
985
|
-
|
|
986
|
-
**"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`.
|
|
987
|
-
|
|
988
|
-
**Cảnh báo "⚠️ v2.2.0 upgrade detected" (v2.2.0)** — `CLAUDE.md` hiện tại được sinh bởi phiên bản trước v2.2.0. Regeneration mặc định ở resume mode sẽ skip các file existing dưới Rule B idempotency, nên các cải tiến cấu trúc v2.2.0 (CLAUDE.md scaffold 8-section, per-file paths trong `40.infra/*`, port accuracy dựa trên `.env.example`, redesign Section 8 `Common Rules & Memory (L4)` (thiết kế lại với hai sub-section: Common Rules · L4 Memory), hàng rule `60.memory/*`, forward-reference `04.doc-writing-guide.md`) sẽ KHÔNG được áp dụng. Fix: chạy lại với `npx claudeos-core init --force`. Nó overwrite file generated (`CLAUDE.md`, `.claude/rules/`, `claudeos-core/standard/`, `claudeos-core/skills/`, `claudeos-core/guide/`) đồng thời giữ nguyên `claudeos-core/memory/` (decision-log, failure-patterns bạn đã tích luỹ — append-only). Commit project trước nếu muốn diff các overwrite.
|
|
989
|
-
|
|
990
|
-
**Port trong CLAUDE.md khác với `.env.example` (v2.2.0)** — Parser `.env` mới của stack-detector (`lib/env-parser.js`) đọc `.env.example` trước (canonical, committed), rồi các variant `.env` làm fallback. Biến port được nhận diện: `PORT`, `VITE_PORT`, `VITE_DESKTOP_PORT`, `NEXT_PUBLIC_PORT`, `NUXT_PORT`, `DJANGO_PORT`, v.v. Với Spring Boot, `server.port` trong `application.yml` vẫn ưu tiên hơn `.env` (config framework-native thắng). Nếu project dùng tên biến env bất thường, đổi thành convention hoặc mở issue để mở rộng `PORT_VAR_KEYS`. Framework default (Vite 5173, Next.js 3000, Django 8000) chỉ dùng khi cả direct detection lẫn `.env` đều im lặng.
|
|
991
|
-
|
|
992
|
-
**Giá trị secret bị redact thành `***REDACTED***` trong docs generated (v2.2.0)** — Hành vi mong đợi. Parser `.env` v2.2.0 tự động redact giá trị của biến khớp các pattern `PASSWORD`/`SECRET`/`TOKEN`/`API_KEY`/`CREDENTIAL`/`PRIVATE_KEY` trước khi tới bất kỳ generator nào. Đây là defense-in-depth chống secret bị commit nhầm vào `.env.example`. `DATABASE_URL` giữ nguyên vì back-compat nhận diện DB của stack-detector. Nếu thấy `***REDACTED***` trong `CLAUDE.md` generated thì là bug — giá trị redacted không nên tới bảng; vui lòng báo issue. Config runtime không nhạy cảm (port, host, API target, NODE_ENV, v.v.) vẫn pass qua nguyên vẹn.
|
|
993
|
-
|
|
994
|
-
---
|
|
995
|
-
|
|
996
|
-
## Đóng Góp
|
|
997
|
-
|
|
998
|
-
Đóng góp được hoan nghênh! Các khu vực cần giúp đỡ nhất:
|
|
999
|
-
|
|
1000
|
-
- **Template stack mới** — Ruby/Rails, Go (Gin/Fiber/Echo), PHP (Laravel/Symfony), Rust (Axum/Actix), Svelte/SvelteKit, Remix
|
|
1001
|
-
- **Tích hợp IDE** — VS Code extension, IntelliJ plugin
|
|
1002
|
-
- **Template CI/CD** — ví dụ GitLab CI, CircleCI, Jenkins (GitHub Actions đã có — xem `.github/workflows/test.yml`)
|
|
1003
|
-
- **Độ phủ test** — Mở rộng test suite (hiện tại 602 test trên 30 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), chia batch split-mode Pass 3, resume partial-marker Pass 3 (v2.1.0), xác thực nội dung marker Pass 4 + độ nghiêm ngặt unlink marker cũ + gap-fill scaffoldSkillsManifest (v2.1.0), guard env-skip dịch + fail-fast sớm + CI workflow, di chuyển staged-rules, fallback dịch lang-aware, suite regression loại bỏ master plan (v2.1.0), regression định dạng memory score/compact (v2.1.0), và cấu trúc template AI Work Rules, và trích xuất port/host/API-target từ parser `.env` + redact biến nhạy cảm (v2.2.0))
|
|
508
|
+
## License
|
|
1004
509
|
|
|
1005
|
-
|
|
510
|
+
[ISC](LICENSE) — miễn phí cho mọi mục đích, kể cả thương mại.
|
|
1006
511
|
|
|
1007
512
|
---
|
|
1008
513
|
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
Tạo bởi **claudeos-core** — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
|
|
1012
|
-
|
|
1013
|
-
## License
|
|
1014
|
-
|
|
1015
|
-
ISC
|
|
514
|
+
<sub>Xây dựng tận tâm bởi [@claudeos-core](https://github.com/claudeos-core). Nếu công cụ này tiết kiệm thời gian cho bạn, một ⭐ trên GitHub giúp nó được nhiều người biết đến.</sub>
|