claudeos-core 2.4.0 → 2.4.2
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 +74 -3
- package/README.de.md +253 -195
- package/README.es.md +242 -184
- package/README.fr.md +240 -182
- package/README.hi.md +248 -190
- package/README.ja.md +247 -189
- package/README.ko.md +220 -162
- package/README.md +163 -105
- package/README.ru.md +254 -196
- package/README.vi.md +250 -192
- package/README.zh-CN.md +252 -194
- package/package.json +1 -1
package/README.vi.md
CHANGED
|
@@ -7,44 +7,40 @@
|
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
[](https://www.npmjs.com/package/claudeos-core)
|
|
9
9
|
|
|
10
|
-
**
|
|
10
|
+
**Một CLI đọc trực tiếp source code dự án rồi tự sinh ra `CLAUDE.md` cùng `.claude/rules/`. Bộ công cụ gồm Node.js scanner, pipeline 4-pass cho Claude và 5 validator. Hỗ trợ 12 stack, 10 ngôn ngữ, và không bao giờ tạo ra đường dẫn không có trong code.**
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
13
|
npx claudeos-core init
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
+
Có thể dùng ngay với [**12 stack**](#supported-stacks), kể cả monorepo. Một câu lệnh là đủ, không cần cấu hình, chạy giữa chừng dừng lại vẫn tiếp tục được, và chạy nhiều lần cũng an toàn.
|
|
17
|
+
|
|
16
18
|
[🇺🇸 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)
|
|
17
19
|
|
|
18
20
|
---
|
|
19
21
|
|
|
20
|
-
##
|
|
22
|
+
## Đây là gì?
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
- Đội của bạn dùng MyBatis, nhưng Claude lại sinh code JPA.
|
|
24
|
-
- Wrapper của bạn là `ApiResponse.ok()`, nhưng Claude lại viết `ResponseEntity.success()`.
|
|
25
|
-
- Package của bạn là `controller/order/`, nhưng Claude lại tạo `order/controller/`.
|
|
24
|
+
Mỗi khi mở phiên mới, Claude Code lại rơi về mặc định của framework. Team đang dùng **MyBatis** thì Claude vẫn cứ viết JPA. Wrapper dự án là `ApiResponse.ok()`, Claude lại quen tay gõ `ResponseEntity.success()`. Package theo layer-first, Claude lại sinh ra kiểu domain-first. Viết tay `.claude/rules/` cho từng repo thì chữa được tạm thời, nhưng code đổi vài lần là rules cũng lệch theo.
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
**ClaudeOS-Core sinh lại toàn bộ tài liệu này một cách nhất quán, đọc thẳng từ source code thật.** Đầu tiên, một Node.js scanner duyệt dự án để chốt stack, ORM, cấu trúc package và đường dẫn file. Tiếp đó pipeline 4-pass của Claude viết toàn bộ tài liệu: `CLAUDE.md`, `.claude/rules/` auto-load, standards và skills. Mọi pass đều bị khoá trong một allowlist đường dẫn tường minh, LLM không thoát ra được. Cuối cùng, năm validator soi lại kết quả trước khi xuất.
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
Nhờ vậy, cùng input thì luôn ra cùng output, byte-identical ở cả 10 ngôn ngữ, và không bịa ra đường dẫn không có trong code. (Xem chi tiết ở phần [Điểm khác biệt](#điểm-khác-biệt) bên dưới.)
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
Trước: Bạn → Claude Code → code "tốt nói chung" → sửa thủ công
|
|
33
|
-
Sau: Bạn → Claude Code → code khớp với dự án của bạn → dùng luôn
|
|
34
|
-
```
|
|
30
|
+
Với các dự án chạy lâu dài, công cụ còn seed thêm một [Memory Layer](#memory-layer-tùy-chọn-cho-dự-án-dài-hạn) riêng.
|
|
35
31
|
|
|
36
32
|
---
|
|
37
33
|
|
|
38
|
-
## Xem trên
|
|
34
|
+
## Xem trên dự án thực tế
|
|
39
35
|
|
|
40
|
-
Chạy trên [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app)
|
|
36
|
+
Chạy thử trên [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app). Dự án dùng Java 11, Spring Boot 2.6, MyBatis, SQLite với 187 file source. Kết quả: **75 file được sinh ra**, tổng thời gian **53 phút**, mọi validator đều ✅.
|
|
41
37
|
|
|
42
38
|
<p align="center">
|
|
43
39
|
<img src="docs/assets/spring-boot-realworld-demo.gif" alt="ClaudeOS-Core init running on spring-boot-realworld-example-app — stack detection, 4-pass pipeline, validators, completion summary" width="769">
|
|
44
40
|
</p>
|
|
45
41
|
|
|
46
42
|
<details>
|
|
47
|
-
<summary><strong
|
|
43
|
+
<summary><strong>Output terminal (bản text, để tiện tìm kiếm và copy)</strong></summary>
|
|
48
44
|
|
|
49
45
|
```text
|
|
50
46
|
╔════════════════════════════════════════════════════╗
|
|
@@ -79,18 +75,18 @@ Chạy trên [`spring-boot-realworld-example-app`](https://github.com/gothinkste
|
|
|
79
75
|
[██████████░░░░░░░░░░] 50% (2/4)
|
|
80
76
|
|
|
81
77
|
[6] Pass 3 — Generating all files...
|
|
82
|
-
|
|
78
|
+
Pass 3 split mode (3a → 3b → 3c → 3d-aux)
|
|
83
79
|
✅ 3a complete (2m 57s) — pass3a-facts.md (187-path allowlist)
|
|
84
80
|
✅ 3b complete (18m 49s) — CLAUDE.md + 19 standards + 20 rules
|
|
85
81
|
✅ 3c complete (12m 35s) — 13 skills + 9 guides
|
|
86
82
|
✅ 3d-aux complete (3m 18s) — database/ + mcp-guide/
|
|
87
|
-
|
|
83
|
+
Pass 3 split complete: 4/4 stages successful
|
|
88
84
|
[███████████████░░░░░] 75% (3/4)
|
|
89
85
|
|
|
90
86
|
[7] Pass 4 — Memory scaffolding...
|
|
91
|
-
|
|
87
|
+
Pass 4 staged-rules: 6 rule files moved to .claude/rules/
|
|
92
88
|
✅ Pass 4 complete (5m)
|
|
93
|
-
|
|
89
|
+
Gap-fill: all 12 expected files already present
|
|
94
90
|
[████████████████████] 100% (4/4)
|
|
95
91
|
|
|
96
92
|
╔═══════════════════════════════════════╗
|
|
@@ -119,37 +115,45 @@ Chạy trên [`spring-boot-realworld-example-app`](https://github.com/gothinkste
|
|
|
119
115
|
</details>
|
|
120
116
|
|
|
121
117
|
<details>
|
|
122
|
-
<summary><strong
|
|
118
|
+
<summary><strong>Phần thực sự đi vào <code>CLAUDE.md</code> của bạn (trích đoạn thật — Section 1 + 2)</strong></summary>
|
|
123
119
|
|
|
124
120
|
```markdown
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
121
|
+
# CLAUDE.md — spring-boot-realworld-example-app
|
|
122
|
+
|
|
123
|
+
> Reference implementation of the RealWorld backend specification on
|
|
124
|
+
> Java 11 + Spring Boot 2.6, exposing both REST and GraphQL endpoints
|
|
125
|
+
> over a hexagonal MyBatis persistence layer.
|
|
126
|
+
|
|
127
|
+
#### 1. Role Definition
|
|
128
|
+
|
|
129
|
+
As the senior developer for this repository, you are responsible for
|
|
130
|
+
writing, modifying, and reviewing code. Responses must be written in English.
|
|
131
|
+
A Java Spring Boot REST + GraphQL API server organized around a hexagonal
|
|
132
|
+
(ports & adapters) architecture, with a CQRS-lite read/write split inside
|
|
133
|
+
an XML-driven MyBatis persistence layer and JWT-based authentication.
|
|
134
|
+
|
|
135
|
+
#### 2. Project Overview
|
|
136
|
+
|
|
137
|
+
| Item | Value |
|
|
138
|
+
|---|---|
|
|
139
|
+
| Language | Java 11 |
|
|
140
|
+
| Framework | Spring Boot 2.6.3 |
|
|
141
|
+
| Build Tool | Gradle (Groovy DSL) |
|
|
142
|
+
| Persistence | MyBatis 3 via `mybatis-spring-boot-starter:2.2.2` (no JPA) |
|
|
143
|
+
| Database | SQLite (`org.xerial:sqlite-jdbc:3.36.0.3`) — `dev.db` (default), `:memory:` (test) |
|
|
144
|
+
| Migration | Flyway — single baseline `V1__create_tables.sql` |
|
|
145
|
+
| API Style | REST (`io.spring.api.*`) + GraphQL via Netflix DGS `:4.9.21` |
|
|
146
|
+
| Authentication | JWT HS512 (`jjwt-api:0.11.2`) + Spring Security `PasswordEncoder` |
|
|
147
|
+
| Server Port | 8080 (default) |
|
|
148
|
+
| Test Stack | JUnit Jupiter 5, Mockito, AssertJ, rest-assured, spring-mock-mvc |
|
|
145
149
|
```
|
|
146
150
|
|
|
147
|
-
|
|
151
|
+
Mọi giá trị trong bảng trên đều do scanner đọc thẳng từ `build.gradle`, `application.properties` và cây source trước khi Claude viết file. Toạ độ dependency, tên file `dev.db`, tên migration `V1__create_tables.sql`, ghi chú "no JPA" — tất cả đều là sự thật trích xuất, không chỗ nào là phỏng đoán.
|
|
148
152
|
|
|
149
153
|
</details>
|
|
150
154
|
|
|
151
155
|
<details>
|
|
152
|
-
<summary><strong
|
|
156
|
+
<summary><strong>Một rule auto-load thật (<code>.claude/rules/10.backend/01.controller-rules.md</code>)</strong></summary>
|
|
153
157
|
|
|
154
158
|
````markdown
|
|
155
159
|
---
|
|
@@ -157,298 +161,352 @@ paths:
|
|
|
157
161
|
- "**/*"
|
|
158
162
|
---
|
|
159
163
|
|
|
160
|
-
|
|
164
|
+
#### Controller Rules
|
|
165
|
+
|
|
166
|
+
##### REST (`io.spring.api.*`)
|
|
167
|
+
|
|
168
|
+
- Controllers are the SOLE response wrapper for HTTP — no aggregator/facade above them.
|
|
169
|
+
Return `ResponseEntity<?>` or a body Spring serializes via `JacksonCustomizations`.
|
|
170
|
+
- Each controller method calls exactly ONE application service method. Multi-source
|
|
171
|
+
composition lives in the application service.
|
|
172
|
+
- Controllers MUST NOT import `io.spring.infrastructure.*`. No direct `@Mapper` access.
|
|
173
|
+
- Validate command-param arguments with `@Valid`. Custom JSR-303 constraints live under
|
|
174
|
+
`io.spring.application.{aggregate}.*`.
|
|
175
|
+
- Resolve the current user via `@AuthenticationPrincipal User`.
|
|
176
|
+
- Let exceptions propagate to `io.spring.api.exception.CustomizeExceptionHandler`
|
|
177
|
+
(`@ControllerAdvice`). Do NOT `try/catch` business exceptions inside the controller.
|
|
161
178
|
|
|
162
|
-
|
|
163
|
-
- Every SQL statement lives in `src/main/resources/mapper/*.xml`.
|
|
164
|
-
NO `@Select` / `@Insert` / `@Update` / `@Delete` annotations on `@Mapper` methods.
|
|
165
|
-
- Each `@Mapper` interface has exactly one XML file at
|
|
166
|
-
`src/main/resources/mapper/{InterfaceName}.xml`.
|
|
167
|
-
- `<mapper namespace="...">` MUST be the fully qualified Java interface name.
|
|
168
|
-
The single existing exception is `TransferData.xml` (free-form `transfer.data`).
|
|
179
|
+
##### GraphQL (`io.spring.graphql.*`)
|
|
169
180
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
- Prefer `LIMIT n OFFSET m` over MySQL-style `LIMIT m, n`.
|
|
181
|
+
- DGS components (`@DgsComponent`) are the sole GraphQL response wrappers.
|
|
182
|
+
Use `@DgsQuery` / `@DgsData` / `@DgsMutation`.
|
|
183
|
+
- Resolve the current user via `io.spring.graphql.SecurityUtil.getCurrentUser()`.
|
|
174
184
|
|
|
175
|
-
|
|
185
|
+
##### Examples
|
|
176
186
|
|
|
177
187
|
✅ Correct:
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
188
|
+
```java
|
|
189
|
+
@PostMapping
|
|
190
|
+
public ResponseEntity<?> createArticle(@AuthenticationPrincipal User user,
|
|
191
|
+
@Valid @RequestBody NewArticleParam param) {
|
|
192
|
+
Article article = articleCommandService.createArticle(param, user);
|
|
193
|
+
ArticleData data = articleQueryService.findById(article.getId(), user)
|
|
194
|
+
.orElseThrow(ResourceNotFoundException::new);
|
|
195
|
+
return ResponseEntity.ok(Map.of("article", data));
|
|
196
|
+
}
|
|
187
197
|
```
|
|
188
198
|
|
|
189
199
|
❌ Incorrect:
|
|
190
|
-
```
|
|
191
|
-
|
|
200
|
+
```java
|
|
201
|
+
@PostMapping
|
|
202
|
+
public ResponseEntity<?> create(@RequestBody NewArticleParam p) {
|
|
203
|
+
try {
|
|
204
|
+
articleCommandService.createArticle(p, currentUser);
|
|
205
|
+
} catch (Exception e) { // NO — let CustomizeExceptionHandler handle it
|
|
206
|
+
return ResponseEntity.status(500).body(e.getMessage()); // NO — leaks raw message
|
|
207
|
+
}
|
|
208
|
+
return ResponseEntity.ok().build();
|
|
209
|
+
}
|
|
192
210
|
```
|
|
193
211
|
````
|
|
194
212
|
|
|
195
|
-
Glob `paths: ["**/*"]`
|
|
213
|
+
Glob `paths: ["**/*"]` nghĩa là Claude Code sẽ tự động nạp rule này mỗi khi sửa bất kỳ file nào trong dự án. Tên class, đường dẫn package, exception handler trong rule đều lấy nguyên văn từ source đã quét, kể cả `CustomizeExceptionHandler` và `JacksonCustomizations` thật của dự án.
|
|
196
214
|
|
|
197
215
|
</details>
|
|
198
216
|
|
|
199
217
|
<details>
|
|
200
|
-
<summary><strong
|
|
218
|
+
<summary><strong>Một seed <code>decision-log.md</code> được sinh tự động (trích đoạn thật)</strong></summary>
|
|
201
219
|
|
|
202
220
|
```markdown
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
- **Context:**
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
`
|
|
209
|
-
|
|
210
|
-
- **Options considered:**
|
|
211
|
-
|
|
212
|
-
- **Decision:**
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
- **Consequences:**
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
221
|
+
#### 2026-04-26 — Hexagonal ports & adapters with MyBatis-only persistence
|
|
222
|
+
|
|
223
|
+
- **Context:** `io.spring.core.*` exposes `*Repository` ports (e.g.,
|
|
224
|
+
`io.spring.core.article.ArticleRepository`) implemented by
|
|
225
|
+
`io.spring.infrastructure.repository.MyBatis*Repository` adapters.
|
|
226
|
+
The domain layer has zero `org.springframework.*` /
|
|
227
|
+
`org.apache.ibatis.*` / `io.spring.infrastructure.*` imports.
|
|
228
|
+
- **Options considered:** JPA/Hibernate, Spring Data, MyBatis-Plus
|
|
229
|
+
`BaseMapper`. None adopted.
|
|
230
|
+
- **Decision:** MyBatis 3 (`mybatis-spring-boot-starter:2.2.2`) with
|
|
231
|
+
hand-written XML statements under `src/main/resources/mapper/*.xml`.
|
|
232
|
+
Hexagonal port/adapter wiring keeps the domain framework-free.
|
|
233
|
+
- **Consequences:** Every SQL lives in XML — `@Select`/`@Insert`/`@Update`/`@Delete`
|
|
234
|
+
annotations are forbidden. New aggregates require both a
|
|
235
|
+
`core.{aggregate}.{Aggregate}Repository` port AND a
|
|
236
|
+
`MyBatis{Aggregate}Repository` adapter; introducing a JPA repository would
|
|
237
|
+
split the persistence model.
|
|
219
238
|
```
|
|
220
239
|
|
|
221
|
-
Pass 4
|
|
240
|
+
Pass 4 ghi sẵn các quyết định kiến trúc trích từ `pass2-merged.json` vào `decision-log.md`. Nhờ vậy, các phiên về sau không chỉ biết codebase _trông như thế nào_, mà còn nhớ được _vì sao nó lại như vậy_. Mọi option ("JPA/Hibernate", "MyBatis-Plus") cùng các consequence đều neo vào block dependency có thật trong `build.gradle`.
|
|
222
241
|
|
|
223
242
|
</details>
|
|
224
243
|
|
|
225
244
|
---
|
|
226
245
|
|
|
227
|
-
##
|
|
246
|
+
## Đã kiểm thử trên
|
|
228
247
|
|
|
229
|
-
|
|
248
|
+
ClaudeOS-Core đi kèm các benchmark tham chiếu trên dự án OSS thật. Nếu đã thử trên một public repo nào đó, hãy [mở issue](https://github.com/claudeos-core/claudeos-core/issues) để chúng tôi bổ sung vào bảng này.
|
|
249
|
+
|
|
250
|
+
| Dự án | Stack | Scanned → Generated | Trạng thái |
|
|
251
|
+
|---|---|---|---|
|
|
252
|
+
| [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app) | Java 11 · Spring Boot 2.6 · MyBatis · SQLite | 187 → 75 files | ✅ cả 5 validator đều pass |
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Bắt đầu nhanh
|
|
257
|
+
|
|
258
|
+
**Yêu cầu trước:** Node.js 18 trở lên, [Claude Code](https://docs.anthropic.com/en/docs/claude-code) đã cài và đã đăng nhập.
|
|
230
259
|
|
|
231
260
|
```bash
|
|
232
|
-
# 1. Vào thư mục gốc dự án
|
|
261
|
+
# 1. Vào thư mục gốc của dự án
|
|
233
262
|
cd my-spring-boot-project
|
|
234
263
|
|
|
235
|
-
# 2. Chạy init (lệnh này
|
|
264
|
+
# 2. Chạy init (lệnh này quét code rồi nhờ Claude viết rules)
|
|
236
265
|
npx claudeos-core init
|
|
237
266
|
|
|
238
|
-
# 3. Xong. Mở Claude Code và bắt
|
|
267
|
+
# 3. Xong. Mở Claude Code và bắt tay vào code — rules đã sẵn sàng.
|
|
239
268
|
```
|
|
240
269
|
|
|
241
|
-
|
|
270
|
+
Sau khi `init` hoàn tất, bạn sẽ thấy cấu trúc như sau.
|
|
242
271
|
|
|
243
272
|
```
|
|
244
273
|
your-project/
|
|
245
274
|
├── .claude/
|
|
246
|
-
│ └── rules/ ←
|
|
275
|
+
│ └── rules/ ← Claude Code tự động load
|
|
247
276
|
│ ├── 00.core/ (rules chung — naming, kiến trúc)
|
|
248
277
|
│ ├── 10.backend/ (rules backend stack, nếu có)
|
|
249
278
|
│ ├── 20.frontend/ (rules frontend stack, nếu có)
|
|
250
|
-
│ ├── 30.security-db/ (quy ước bảo mật
|
|
279
|
+
│ ├── 30.security-db/ (quy ước bảo mật và DB)
|
|
251
280
|
│ ├── 40.infra/ (env, logging, CI/CD)
|
|
252
|
-
│ ├── 50.sync/ (nhắc đồng bộ
|
|
281
|
+
│ ├── 50.sync/ (nhắc đồng bộ tài liệu — chỉ rules)
|
|
253
282
|
│ ├── 60.memory/ (memory rules — Pass 4, chỉ rules)
|
|
254
283
|
│ ├── 70.domains/{type}/ (rules theo domain, type = backend|frontend)
|
|
255
|
-
│ └── 80.verification/ (chiến lược test
|
|
284
|
+
│ └── 80.verification/ (chiến lược test và nhắc verify build)
|
|
256
285
|
├── claudeos-core/
|
|
257
|
-
│ ├── standard/ ← Tài liệu tham chiếu (
|
|
258
|
-
│ │ ├── 00.core/ (
|
|
259
|
-
│ │ ├── 10.backend/ (
|
|
260
|
-
│ │ ├── 20.frontend/ (
|
|
261
|
-
│ │ ├── 30.security-db/ (
|
|
262
|
-
│ │ ├── 40.infra/ (
|
|
263
|
-
│ │ ├── 70.domains/{type}/ (
|
|
264
|
-
│ │ ├── 80.verification/ (
|
|
265
|
-
│ │ └── 90.optional/ (mở rộng
|
|
266
|
-
│ ├── skills/ (
|
|
267
|
-
│ ├── guide/ (hướng dẫn how-to cho các tác vụ
|
|
286
|
+
│ ├── standard/ ← Tài liệu tham chiếu (cấu trúc category song song)
|
|
287
|
+
│ │ ├── 00.core/ (tổng quan dự án, kiến trúc, naming)
|
|
288
|
+
│ │ ├── 10.backend/ (tham chiếu backend — nếu có backend stack)
|
|
289
|
+
│ │ ├── 20.frontend/ (tham chiếu frontend — nếu có frontend stack)
|
|
290
|
+
│ │ ├── 30.security-db/ (tham chiếu bảo mật và DB)
|
|
291
|
+
│ │ ├── 40.infra/ (tham chiếu env / logging / CI-CD)
|
|
292
|
+
│ │ ├── 70.domains/{type}/ (tham chiếu theo domain)
|
|
293
|
+
│ │ ├── 80.verification/ (tham chiếu build / startup / test — chỉ standard)
|
|
294
|
+
│ │ └── 90.optional/ (mở rộng theo stack — chỉ standard)
|
|
295
|
+
│ ├── skills/ (pattern tái sử dụng để Claude áp dụng)
|
|
296
|
+
│ ├── guide/ (hướng dẫn how-to cho các tác vụ phổ biến)
|
|
268
297
|
│ ├── database/ (tổng quan schema, hướng dẫn migration)
|
|
269
298
|
│ ├── mcp-guide/ (ghi chú tích hợp MCP)
|
|
270
299
|
│ └── memory/ (decision log, failure patterns, compaction)
|
|
271
|
-
└── CLAUDE.md (
|
|
300
|
+
└── CLAUDE.md (index Claude đọc đầu tiên)
|
|
272
301
|
```
|
|
273
302
|
|
|
274
|
-
Các category
|
|
303
|
+
Các category cùng số prefix ở `rules/` và `standard/` cùng chỉ về một vùng khái niệm. Chẳng hạn `10.backend` rules đối ứng `10.backend` standards. Hai category chỉ tồn tại bên rules là `50.sync` (nhắc đồng bộ tài liệu) và `60.memory` (memory của Pass 4). Phía standard có một category riêng là `90.optional`, dành cho phần mở rộng theo stack và không enforce. Các prefix còn lại (`00`, `10`, `20`, `30`, `40`, `70`, `80`) thì xuất hiện ở cả hai bên. Đến đây, Claude Code đã hiểu dự án của bạn.
|
|
275
304
|
|
|
276
305
|
---
|
|
277
306
|
|
|
278
307
|
## Dành cho ai?
|
|
279
308
|
|
|
280
|
-
| Bạn là... |
|
|
309
|
+
| Bạn là... | Vấn đề được giải quyết |
|
|
281
310
|
|---|---|
|
|
282
|
-
| **
|
|
283
|
-
| **Team lead**
|
|
284
|
-
| **Đã
|
|
311
|
+
| **Solo dev** đang khởi động dự án mới với Claude Code | Khỏi phải dạy lại quy ước cho Claude mỗi phiên. `CLAUDE.md` cùng 8 category trong `.claude/rules/` được sinh ra chỉ trong một lần chạy. |
|
|
312
|
+
| **Team lead** quản lý standards dùng chung giữa nhiều repo | `.claude/rules/` rất hay drift mỗi khi đổi tên package, đổi ORM hay đổi response wrapper. ClaudeOS-Core đồng bộ lại một cách nhất quán: cùng input thì ra output byte-identical, không có diff thừa. |
|
|
313
|
+
| **Đã quen Claude Code** nhưng chán cảnh phải sửa lại code mỗi lần | Sai response wrapper, sai cấu trúc package, viết JPA trong khi dự án dùng MyBatis, rải `try/catch` trong khi đã có middleware tập trung. Scanner trích quy ước thật của dự án, mỗi pass của Claude đều chạy trong allowlist tường minh. |
|
|
314
|
+
| **Onboard vào repo mới** (dự án có sẵn, vào team mới) | Chạy `init` xong là có ngay tấm bản đồ kiến trúc sống. Bảng stack trong CLAUDE.md, rules theo từng layer kèm ví dụ ✅/❌, decision log seed sẵn lý do đằng sau những lựa chọn lớn (JPA hay MyBatis, REST hay GraphQL...). Đọc 5 file vẫn nhanh hơn lội qua 5.000 file source. |
|
|
315
|
+
| **Làm việc bằng tiếng Hàn, Nhật, Trung và 7 ngôn ngữ khác** | Phần lớn rule generator cho Claude Code chỉ có tiếng Anh. ClaudeOS-Core viết toàn bộ ở **10 ngôn ngữ** (`en/ko/ja/zh-CN/es/vi/hi/ru/fr/de`) và áp **kiểm tra cấu trúc byte-identical**. Verdict của `claude-md-validator` không đổi dù chọn ngôn ngữ output nào. |
|
|
316
|
+
| **Đang dùng monorepo** (Turborepo, pnpm/yarn workspaces, Lerna) | Domain backend và frontend được phân tích trong cùng một lần chạy nhưng bằng prompt riêng. `apps/*/` và `packages/*/` được duyệt tự động, rules theo từng stack đổ vào `70.domains/{type}/`. |
|
|
317
|
+
| **Đóng góp OSS hoặc đang thử nghiệm** | Output thân thiện với gitignore. `claudeos-core/` là thư mục làm việc local, chỉ `CLAUDE.md` và `.claude/` cần ship. Đứt giữa chừng vẫn tiếp tục được, chạy lại nhiều lần vẫn an toàn (chỉnh sửa tay không bị mất nếu không kèm `--force`). |
|
|
285
318
|
|
|
286
|
-
**
|
|
319
|
+
**Có thể không phù hợp nếu** bạn muốn một bundle preset agents/skills/rules xài đượ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 hoàn cảnh nào), dự án chưa rơi vào một trong các [stack được hỗ trợ](#supported-stacks), hoặc chỉ cần đúng một file `CLAUDE.md`. Riêng trường hợp cuối thì `claude /init` có sẵn là đủ, khỏi cài thêm tool nào khác.
|
|
287
320
|
|
|
288
321
|
---
|
|
289
322
|
|
|
290
|
-
##
|
|
323
|
+
## Cách hoạt động
|
|
291
324
|
|
|
292
|
-
ClaudeOS-Core đảo ngược workflow Claude Code thông thường
|
|
325
|
+
ClaudeOS-Core đảo ngược workflow Claude Code thông thường.
|
|
293
326
|
|
|
294
327
|
```
|
|
295
|
-
Thông thường:
|
|
296
|
-
|
|
328
|
+
Thông thường: Bạn mô tả dự án → Claude đoán stack của bạn → Claude viết docs
|
|
329
|
+
Cách này: Code đọc stack của bạn → Code đưa fact đã xác nhận cho Claude → Claude viết docs từ fact
|
|
297
330
|
```
|
|
298
331
|
|
|
299
|
-
|
|
332
|
+
Pipeline gồm **ba giai đoạn**, code có mặt ở cả hai phía của lời gọi LLM.
|
|
333
|
+
|
|
334
|
+
**1. Step A — Scanner (nhất quán, không gọi LLM).** Một Node.js scanner đi qua thư mục gốc, đọc `package.json`, `build.gradle`, `pom.xml`, `pyproject.toml`, parse các file `.env*` (đồng thời redact các biến nhạy cảm như `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 hoặc multi-module; Next.js App Router so với Pages Router; FSD; components-pattern), tìm ra các domain, rồi dựng allowlist tường minh chứa mọi đường dẫn source thật. Output là `project-analysis.json`, đóng vai trò single source of truth cho mọi bước về sau.
|
|
335
|
+
|
|
336
|
+
**2. Step B — Pipeline Claude 4-pass (ràng buộc bởi fact của Step A).**
|
|
337
|
+
- **Pass 1** đọc các file đại diện theo từng domain group rồi trích ra khoảng 50–100 quy ước cho mỗi domain: response wrapper, thư viện logging, cách xử lý lỗi, quy ước naming, pattern test. Mỗi domain group chỉ chạy một lần (`max 4 domains, 40 files per group`) nên context không bao giờ tràn.
|
|
338
|
+
- **Pass 2** gộp toàn bộ phân tích theo domain thành bức tranh chung của dự án. Có mâu thuẫn thì công cụ chọn quy ước phổ biến nhất.
|
|
339
|
+
- **Pass 3** viết `CLAUDE.md`, `.claude/rules/`, `claudeos-core/standard/`, skills và guides. Bước này được chia thành nhiều 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ẫn vừa context window dù `pass2-merged.json` có lớn cỡ nào. Với dự án từ 16 domain trở lên, 3b/3c sẽ chia tiếp thành các batch ≤15 domain.
|
|
340
|
+
- **Pass 4** seed L4 memory layer (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`) và bổ sung các rule scaffold phổ quát. Pass 4 **tuyệt đối không được sửa `CLAUDE.md`**. Section 8 do Pass 3 viết mới là nguồn duy nhất.
|
|
341
|
+
|
|
342
|
+
**3. Step C — Verification (nhất quán, không gọi LLM).** Năm validator soi lại kết quả.
|
|
343
|
+
- `claude-md-validator` chạy 25 kiểm tra cấu trúc trên `CLAUDE.md` (8 section, đếm H3/H4, tính duy nhất của file memory, bất biến T1 canonical heading). Validator này language-invariant, nên chọn `--lang` nào cũng ra cùng verdict.
|
|
344
|
+
- `content-validator` chạy 10 kiểm tra nội dung, gồm verify path-claim (`STALE_PATH` bắt được tham chiếu `src/...` bịa đặt) và phát hiện MANIFEST drift.
|
|
345
|
+
- `pass-json-validator` kiểm tra JSON well-formedness của Pass 1/2/3/4 cùng số section theo từng stack.
|
|
346
|
+
- `plan-validator` so plan với disk (legacy, gần như no-op từ v2.1.0).
|
|
347
|
+
- `sync-checker` đối chiếu disk với `sync-map.json` qua 7 thư mục được track.
|
|
348
|
+
|
|
349
|
+
Có ba mức severity (`fail` / `warn` / `advisory`), nhờ vậy các warning kiểu hallucination LLM mà dev tự sửa được sẽ không bao giờ làm kẹt CI.
|
|
350
|
+
|
|
351
|
+
Cốt lõi gắn kết tất cả lại là một bất biến: **Claude chỉ được trích dẫn các đường dẫn có thật trong code**, vì Step A đã đưa cho nó một allowlist hữu hạn. Tuy nhiên, nếu LLM vẫn cố bịa (hiếm gặp, chỉ xuất hiện ở vài seed cụ thể) thì Step C cũng sẽ bắt lại trước khi docs được ship.
|
|
300
352
|
|
|
301
|
-
|
|
353
|
+
Để xem chi tiết từng pass, cơ chế resume dựa trên marker, workaround staged-rules dùng để vượt qua block đường dẫn nhạy cảm `.claude/` của Claude Code, cùng internals của stack detection, mời đọc [docs/vi/architecture.md](docs/vi/architecture.md).
|
|
302
354
|
|
|
303
355
|
---
|
|
304
356
|
|
|
305
357
|
## Supported Stacks
|
|
306
358
|
|
|
307
|
-
12 stack, tự động phát hiện từ
|
|
359
|
+
12 stack, tự động phát hiện từ chính các file dự án.
|
|
308
360
|
|
|
309
361
|
**Backend:** Java/Spring Boot · Kotlin/Spring Boot · Node/Express · Node/Fastify · Node/NestJS · Python/Django · Python/FastAPI · Python/Flask
|
|
310
362
|
|
|
311
363
|
**Frontend:** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
|
|
312
364
|
|
|
313
|
-
Dự án
|
|
365
|
+
Dự án multi-stack (chẳng hạn Spring Boot backend cộng Next.js frontend) chạy được luôn mà không cần điều chỉnh.
|
|
314
366
|
|
|
315
|
-
Quy tắc phát hiện và những gì mỗi scanner trích xuất
|
|
367
|
+
Quy tắc phát hiện và những gì mỗi scanner trích xuất được mô tả trong [docs/vi/stacks.md](docs/vi/stacks.md).
|
|
316
368
|
|
|
317
369
|
---
|
|
318
370
|
|
|
319
|
-
##
|
|
371
|
+
## Quy trình hàng ngày
|
|
320
372
|
|
|
321
|
-
Ba lệnh
|
|
373
|
+
Ba lệnh sau đủ dùng cho khoảng 95% trường hợp.
|
|
322
374
|
|
|
323
375
|
```bash
|
|
324
|
-
# Lần đầu trên một dự án
|
|
376
|
+
# Lần đầu chạy trên một dự án
|
|
325
377
|
npx claudeos-core init
|
|
326
378
|
|
|
327
|
-
# Sau khi bạn chỉnh
|
|
379
|
+
# Sau khi bạn chỉnh tay standards hoặc rules
|
|
328
380
|
npx claudeos-core lint
|
|
329
381
|
|
|
330
|
-
# Health check (chạy trước khi commit
|
|
382
|
+
# Health check (chạy trước khi commit hoặc trong CI)
|
|
331
383
|
npx claudeos-core health
|
|
332
384
|
```
|
|
333
385
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
```bash
|
|
337
|
-
# Compact log failure-patterns (chạy định kỳ)
|
|
338
|
-
npx claudeos-core memory compact
|
|
339
|
-
|
|
340
|
-
# Đề xuất các pattern lỗi thường gặp thành rule mới
|
|
341
|
-
npx claudeos-core memory propose-rules
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
Tùy chọn đầy đủ của từng lệnh xem tại [docs/vi/commands.md](docs/vi/commands.md).
|
|
386
|
+
Đầy đủ option của từng lệnh có trong [docs/vi/commands.md](docs/vi/commands.md). Các lệnh thuộc memory layer (`memory compact`, `memory propose-rules`) được nói rõ ở phần [Memory Layer](#memory-layer-tùy-chọn-cho-dự-án-dài-hạn) bên dưới.
|
|
345
387
|
|
|
346
388
|
---
|
|
347
389
|
|
|
348
|
-
##
|
|
390
|
+
## Điểm khác biệt
|
|
349
391
|
|
|
350
|
-
|
|
392
|
+
Phần lớn công cụ tài liệu cho Claude Code sinh ra từ một bản mô tả: bạn nói cho công cụ, công cụ nói lại cho Claude. ClaudeOS-Core thì sinh thẳng từ source code thật. Công cụ tự đọc, tự đẩy các fact đã xác nhận sang Claude, còn Claude chỉ viết đúng những gì đã được xác nhận.
|
|
351
393
|
|
|
352
|
-
|
|
394
|
+
Cách làm này dẫn tới ba điểm khác biệt cụ thể.
|
|
353
395
|
|
|
354
|
-
1. **
|
|
355
|
-
2. **Không
|
|
356
|
-
3. **Hiểu
|
|
396
|
+
1. **Stack detection nhất quán.** Cùng dự án, cùng code thì luôn ra cùng output. Hết cảnh "lần này Claude lại đoán khác".
|
|
397
|
+
2. **Không tạo path bịa.** Prompt của Pass 3 liệt kê tường minh mọi source path được phép, vì thế Claude không thể trích ra path không tồn tại.
|
|
398
|
+
3. **Hiểu được multi-stack.** Trong cùng một lần chạy, domain backend và frontend dùng prompt phân tích riêng.
|
|
357
399
|
|
|
358
|
-
|
|
400
|
+
Muốn so sánh scope cạnh nhau với các công cụ khác, mời đọc [docs/vi/comparison.md](docs/vi/comparison.md). Nội dung tập trung vào **mỗi công cụ làm gì**, chứ không phải **công cụ nào tốt hơn**. Thực ra phần lớn là bổ sung cho nhau.
|
|
359
401
|
|
|
360
402
|
---
|
|
361
403
|
|
|
362
|
-
## Xác minh (sau khi
|
|
404
|
+
## Xác minh (sau khi tạo)
|
|
363
405
|
|
|
364
|
-
Sau khi Claude viết
|
|
406
|
+
Sau khi Claude viết xong docs, đến lượt code kiểm tra lại. Năm validator độc lập như sau.
|
|
365
407
|
|
|
366
|
-
| Validator | Kiểm tra gì | Chạy bởi |
|
|
408
|
+
| Validator | Kiểm tra cái gì | Chạy bởi |
|
|
367
409
|
|---|---|---|
|
|
368
|
-
| `claude-md-validator` | Bất biến cấu trúc của CLAUDE.md (8
|
|
369
|
-
| `content-validator` |
|
|
370
|
-
| `pass-json-validator` |
|
|
371
|
-
| `plan-validator` | Plan đã lưu khớp với
|
|
372
|
-
| `sync-checker` |
|
|
410
|
+
| `claude-md-validator` | Bất biến cấu trúc của CLAUDE.md (8 section, language-invariant) | `claudeos-core lint` |
|
|
411
|
+
| `content-validator` | Path claim có thật trong code; manifest nhất quán | `health` (advisory) |
|
|
412
|
+
| `pass-json-validator` | Output Pass 1 / 2 / 3 / 4 là JSON hợp lệ | `health` (warn) |
|
|
413
|
+
| `plan-validator` | Plan đã lưu khớp với disk | `health` (fail-on-error) |
|
|
414
|
+
| `sync-checker` | File trên disk khớp với đăng ký trong `sync-map.json` (phát hiện orphaned/unregistered) | `health` (fail-on-error) |
|
|
373
415
|
|
|
374
|
-
|
|
416
|
+
`health-checker` điều phối bốn runtime validator theo ba mức severity (fail / warn / advisory) và thoát với mã phù hợp cho CI. Riêng `claude-md-validator` chạy độc lập qua lệnh `lint`, vì cấu trúc bị drift là tín hiệu cần re-init, không phải warning mềm. Có thể chạy bất kỳ lúc nào.
|
|
375
417
|
|
|
376
418
|
```bash
|
|
377
419
|
npx claudeos-core health
|
|
378
420
|
```
|
|
379
421
|
|
|
380
|
-
Chi tiết kiểm tra của từng validator
|
|
422
|
+
Chi tiết kiểm tra của từng validator có trong [docs/vi/verification.md](docs/vi/verification.md).
|
|
381
423
|
|
|
382
424
|
---
|
|
383
425
|
|
|
384
|
-
## Memory Layer (tùy chọn,
|
|
426
|
+
## Memory Layer (tùy chọn, cho dự án dài hạn)
|
|
385
427
|
|
|
386
|
-
|
|
428
|
+
Ngoài pipeline scaffolding kể trên, ClaudeOS-Core còn seed thêm thư mục `claudeos-core/memory/` cho những dự án cần giữ context vượt ra ngoài một phiên đơn lẻ. Phần này là tùy chọn. Nếu chỉ cần `CLAUDE.md` và rules thì cứ bỏ qua, không sao cả.
|
|
387
429
|
|
|
388
|
-
|
|
389
|
-
|
|
430
|
+
Bốn file, tất cả đều do Pass 4 viết.
|
|
431
|
+
|
|
432
|
+
- `decision-log.md` — sổ append-only ghi "vì sao chọn X thay vì Y", seed từ `pass2-merged.json`
|
|
433
|
+
- `failure-patterns.md` — danh sách lỗi lặp lại kèm điểm frequency và importance
|
|
390
434
|
- `compaction.md` — cách memory được tự động compact theo thời gian
|
|
391
|
-
- `auto-rule-update.md` — pattern
|
|
435
|
+
- `auto-rule-update.md` — các pattern nên được nâng thành rule mới
|
|
436
|
+
|
|
437
|
+
Hai lệnh để duy trì layer này lâu dài.
|
|
392
438
|
|
|
393
|
-
|
|
439
|
+
```bash
|
|
440
|
+
# Compact log failure-patterns (chạy định kỳ)
|
|
441
|
+
npx claudeos-core memory compact
|
|
442
|
+
|
|
443
|
+
# Đề xuất rule mới từ các failure pattern xuất hiện thường xuyên
|
|
444
|
+
npx claudeos-core memory propose-rules
|
|
445
|
+
```
|
|
394
446
|
|
|
395
|
-
Mô hình memory và
|
|
447
|
+
Mô hình memory và lifecycle được mô tả trong [docs/vi/memory-layer.md](docs/vi/memory-layer.md).
|
|
396
448
|
|
|
397
449
|
---
|
|
398
450
|
|
|
399
451
|
## FAQ
|
|
400
452
|
|
|
401
|
-
**
|
|
402
|
-
|
|
453
|
+
**Q: Có cần Claude API key không?**
|
|
454
|
+
A: Không. ClaudeOS-Core dùng chính bản Claude Code đã cài trên máy. Prompt được pipe sang `claude -p` ngay tại máy, khỏi cần thêm tài khoản nào khác.
|
|
455
|
+
|
|
456
|
+
**Q: Lệnh này có ghi đè `CLAUDE.md` hay `.claude/rules/` đang có không?**
|
|
457
|
+
A: Lần đầu chạy trên dự án trống thì nó tạo mới. Chạy lại không kèm `--force` thì các chỉnh sửa tay được giữ nguyên, vì marker từ lần chạy trước được phát hiện và pass tương ứng sẽ bị skip. Còn nếu kèm `--force` thì mọi thứ sẽ bị xóa rồi sinh lại, kéo theo phần chỉnh sửa cũng mất. Đó đúng là ý nghĩa của `--force`. Chi tiết ở [docs/vi/safety.md](docs/vi/safety.md).
|
|
458
|
+
|
|
459
|
+
**Q: Stack của tôi chưa được hỗ trợ, có thêm vào được không?**
|
|
460
|
+
A: Được. Một stack mới chỉ cần khoảng 3 prompt template và một domain scanner. Hướng dẫn 8 bước nằm trong [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
403
461
|
|
|
404
|
-
**
|
|
405
|
-
|
|
462
|
+
**Q: Làm sao sinh docs bằng tiếng Hàn (hoặc ngôn ngữ khác)?**
|
|
463
|
+
A: Chạy `npx claudeos-core init --lang ko` là xong. Có 10 ngôn ngữ được hỗ trợ: en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
|
|
406
464
|
|
|
407
|
-
**
|
|
408
|
-
|
|
465
|
+
**Q: Có dùng được với monorepo không?**
|
|
466
|
+
A: Có. Stack-detector nhận diện Turborepo (`turbo.json`), pnpm workspaces (`pnpm-workspace.yaml`), Lerna (`lerna.json`) và npm/yarn workspaces (`package.json#workspaces`). Mỗi app có phần phân tích riêng. Một số layout monorepo khác như NX tuy chưa có nhánh detect riêng, nhưng pattern chung `apps/*/` và `packages/*/` thì scanner theo từng stack vẫn nhận ra được.
|
|
409
467
|
|
|
410
|
-
**
|
|
411
|
-
|
|
468
|
+
**Q: Nếu Claude Code sinh ra rule mà tôi không đồng ý thì sao?**
|
|
469
|
+
A: Cứ sửa trực tiếp. Sau đó chạy `npx claudeos-core lint` để chắc rằng cấu trúc CLAUDE.md vẫn hợp lệ. Phần chỉnh sửa tay sẽ được giữ qua các lần `init` sau (miễn không kèm `--force`), vì cơ chế resume sẽ skip những pass đã có marker.
|
|
412
470
|
|
|
413
|
-
**
|
|
414
|
-
|
|
471
|
+
**Q: Báo bug ở đâu?**
|
|
472
|
+
A: Tại [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). Các vấn đề bảo mật xin xem [SECURITY.md](SECURITY.md).
|
|
473
|
+
|
|
474
|
+
---
|
|
415
475
|
|
|
416
|
-
|
|
417
|
-
Đ: 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.
|
|
476
|
+
## Nếu điều này tiết kiệm thời gian cho bạn
|
|
418
477
|
|
|
419
|
-
|
|
420
|
-
Đ: [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). Vấn đề bảo mật xem [SECURITY.md](SECURITY.md).
|
|
478
|
+
Một ⭐ trên GitHub giúp dự án dễ được nhìn thấy hơn và giúp người khác tìm tới. Issue, PR và đóng góp stack template đều rất được hoan nghênh. Chi tiết trong [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
421
479
|
|
|
422
480
|
---
|
|
423
481
|
|
|
424
|
-
##
|
|
482
|
+
## Tài liệu
|
|
425
483
|
|
|
426
|
-
| Chủ đề | Đọc
|
|
484
|
+
| Chủ đề | Đọc ở đâu |
|
|
427
485
|
|---|---|
|
|
428
|
-
|
|
|
429
|
-
| Diagram trực quan
|
|
430
|
-
|
|
|
486
|
+
| Pipeline 4-pass hoạt động ra sao (sâu hơn diagram) | [docs/vi/architecture.md](docs/vi/architecture.md) |
|
|
487
|
+
| Diagram trực quan của kiến trúc (Mermaid) | [docs/vi/diagrams.md](docs/vi/diagrams.md) |
|
|
488
|
+
| Stack detection — mỗi scanner nhìn vào đâu | [docs/vi/stacks.md](docs/vi/stacks.md) |
|
|
431
489
|
| Memory layer — decision log và failure pattern | [docs/vi/memory-layer.md](docs/vi/memory-layer.md) |
|
|
432
490
|
| Chi tiết cả 5 validator | [docs/vi/verification.md](docs/vi/verification.md) |
|
|
433
|
-
|
|
|
434
|
-
| Cài thủ công (không
|
|
435
|
-
| Override scanner
|
|
436
|
-
| An toàn: cái gì được giữ khi re-init | [docs/vi/safety.md](docs/vi/safety.md) |
|
|
437
|
-
| So sánh với các công cụ tương tự (về
|
|
438
|
-
| Lỗi và cách phục
|
|
491
|
+
| Tất cả lệnh CLI và option | [docs/vi/commands.md](docs/vi/commands.md) |
|
|
492
|
+
| Cài đặt thủ công (không qua `npx`) | [docs/vi/manual-installation.md](docs/vi/manual-installation.md) |
|
|
493
|
+
| Override scanner qua `.claudeos-scan.json` | [docs/vi/advanced-config.md](docs/vi/advanced-config.md) |
|
|
494
|
+
| An toàn: cái gì được giữ lại khi re-init | [docs/vi/safety.md](docs/vi/safety.md) |
|
|
495
|
+
| So sánh với các công cụ tương tự (về scope, không phải chất lượng) | [docs/vi/comparison.md](docs/vi/comparison.md) |
|
|
496
|
+
| Lỗi thường gặp và cách khôi phục | [docs/vi/troubleshooting.md](docs/vi/troubleshooting.md) |
|
|
439
497
|
|
|
440
498
|
---
|
|
441
499
|
|
|
442
500
|
## Đóng góp
|
|
443
501
|
|
|
444
|
-
|
|
502
|
+
Mọi đóng góp đều được hoan nghênh. Thêm hỗ trợ stack mới, cải thiện prompt, fix bug — đều rất tốt. Chi tiết trong [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
445
503
|
|
|
446
|
-
|
|
504
|
+
Code of Conduct và policy bảo mật có ở [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) và [SECURITY.md](SECURITY.md).
|
|
447
505
|
|
|
448
|
-
##
|
|
506
|
+
## Giấy phép
|
|
449
507
|
|
|
450
|
-
[ISC](LICENSE)
|
|
508
|
+
[ISC License](LICENSE). Miễn phí cho mọi mục đích sử dụng, kể cả thương mại. © 2025–2026 ClaudeOS-Core contributors.
|
|
451
509
|
|
|
452
510
|
---
|
|
453
511
|
|
|
454
|
-
<sub>
|
|
512
|
+
<sub>Dự án được duy trì bởi team [claudeos-core](https://github.com/claudeos-core). Issue và PR gửi về <https://github.com/claudeos-core/claudeos-core>.</sub>
|