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.fr.md
CHANGED
|
@@ -7,44 +7,40 @@
|
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
[](https://www.npmjs.com/package/claudeos-core)
|
|
9
9
|
|
|
10
|
-
**
|
|
10
|
+
**Une CLI qui produit `CLAUDE.md` et `.claude/rules/` à partir du code source réel du projet, et qui renvoie toujours le même résultat pour les mêmes entrées. Elle s'appuie sur un scanner Node.js, un pipeline Claude en 4 passes, et 5 validateurs. 12 stacks, 10 langues pris en charge, et aucun chemin fabriqué hors du code.**
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
13
|
npx claudeos-core init
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
+
Compatible avec [**12 stacks**](#supported-stacks), monorepos compris. Une seule commande, sans configuration, reprenant après une interruption, et sans risque à la ré-exécution.
|
|
17
|
+
|
|
16
18
|
[🇺🇸 English](README.md) · [🇰🇷 한국어](README.ko.md) · [🇨🇳 中文](README.zh-CN.md) · [🇯🇵 日本語](README.ja.md) · [🇪🇸 Español](README.es.md) · [🇻🇳 Tiếng Việt](README.vi.md) · [🇮🇳 हिन्दी](README.hi.md) · [🇷🇺 Русский](README.ru.md) · [🇩🇪 Deutsch](README.de.md)
|
|
17
19
|
|
|
18
20
|
---
|
|
19
21
|
|
|
20
|
-
## C'est quoi
|
|
22
|
+
## C'est quoi ?
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
- Votre équipe utilise MyBatis, mais Claude génère du code JPA.
|
|
24
|
-
- Votre wrapper est `ApiResponse.ok()`, mais Claude écrit `ResponseEntity.success()`.
|
|
25
|
-
- Vos packages sont `controller/order/`, mais Claude crée `order/controller/`.
|
|
24
|
+
À chaque nouvelle session, Claude Code retombe sur les valeurs par défaut génériques du framework. L'équipe travaille avec **MyBatis** ? Claude écrit du JPA. Le wrapper de réponse s'appelle `ApiResponse.ok()` ? Claude utilise `ResponseEntity.success()`. Les paquets sont organisés par couches ? La génération propose une architecture orientée domaine. Écrire `.claude/rules/` à la main pour chaque dépôt règle le problème, jusqu'au jour où le code évolue et où les règles se mettent à dériver.
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
**ClaudeOS-Core régénère ces règles de façon reproductible, à partir du code source réel.** Un scanner Node.js commence par lire le projet : stack, ORM, organisation des paquets, chemins de fichiers. Un pipeline Claude en 4 passes prend ensuite le relais et produit l'ensemble complet : `CLAUDE.md`, les fichiers `.claude/rules/` chargés automatiquement, les standards et les skills. Tout reste cantonné à une liste blanche de chemins explicite, hors de laquelle le LLM ne peut pas sortir. Cinq validateurs contrôlent le résultat avant le rendu final.
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
Conséquence : pour une même entrée, la sortie est rigoureusement identique au bit près, dans n'importe laquelle des 10 langues, et aucun chemin n'est fabriqué. (Le détail se trouve plus bas, dans [Ce qui le rend différent](#ce-qui-le-rend-différent).)
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
Avant : Vous → Claude Code → code « globalement bon » → corrections manuelles
|
|
33
|
-
Après : Vous → Claude Code → code qui colle à votre projet → on expédie
|
|
34
|
-
```
|
|
30
|
+
Pour les projets qui durent dans le temps, un [Memory Layer](#memory-layer-optionnel-pour-les-projets-longue-durée) distinct est également initialisé.
|
|
35
31
|
|
|
36
32
|
---
|
|
37
33
|
|
|
38
|
-
##
|
|
34
|
+
## Voir sur un vrai projet
|
|
39
35
|
|
|
40
|
-
Exécution sur [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app)
|
|
36
|
+
Exécution sur [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app), un projet Java 11 · Spring Boot 2.6 · MyBatis · SQLite, 187 fichiers source. Résultat obtenu : **75 fichiers générés**, durée totale **53 minutes**, tous les validateurs au vert.
|
|
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>Sortie terminal (version texte, pour la recherche et la copie)</strong></summary>
|
|
48
44
|
|
|
49
45
|
```text
|
|
50
46
|
╔════════════════════════════════════════════════════╗
|
|
@@ -79,18 +75,18 @@ Exécution sur [`spring-boot-realworld-example-app`](https://github.com/gothinks
|
|
|
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 @@ Exécution sur [`spring-boot-realworld-example-app`](https://github.com/gothinks
|
|
|
119
115
|
</details>
|
|
120
116
|
|
|
121
117
|
<details>
|
|
122
|
-
<summary><strong
|
|
118
|
+
<summary><strong>Ce qui finit dans votre <code>CLAUDE.md</code> (extrait réel, sections 1 et 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
|
+
Toutes les valeurs ci-dessus, des coordonnées exactes des dépendances au nom de fichier `dev.db`, en passant par la migration `V1__create_tables.sql` et la mention « no JPA », sont extraites par le scanner depuis `build.gradle`, `application.properties` et l'arborescence source, avant même que Claude n'écrive la moindre ligne. Rien n'est deviné.
|
|
148
152
|
|
|
149
153
|
</details>
|
|
150
154
|
|
|
151
155
|
<details>
|
|
152
|
-
<summary><strong
|
|
156
|
+
<summary><strong>Une rule chargée automatiquement (<code>.claude/rules/10.backend/01.controller-rules.md</code>)</strong></summary>
|
|
153
157
|
|
|
154
158
|
````markdown
|
|
155
159
|
---
|
|
@@ -157,267 +161,321 @@ paths:
|
|
|
157
161
|
- "**/*"
|
|
158
162
|
---
|
|
159
163
|
|
|
160
|
-
|
|
164
|
+
#### Controller Rules
|
|
165
|
+
|
|
166
|
+
##### REST (`io.spring.api.*`)
|
|
161
167
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
-
|
|
168
|
-
|
|
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.
|
|
169
178
|
|
|
170
|
-
|
|
171
|
-
- `<if>` predicates MUST guard both null and empty:
|
|
172
|
-
`<if test="X != null and X != ''">`. Empty-only is the existing HIGH-severity bug pattern.
|
|
173
|
-
- Prefer `LIMIT n OFFSET m` over MySQL-style `LIMIT m, n`.
|
|
179
|
+
##### GraphQL (`io.spring.graphql.*`)
|
|
174
180
|
|
|
175
|
-
|
|
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()`.
|
|
184
|
+
|
|
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
|
-
Le glob `paths: ["**/*"]`
|
|
213
|
+
Le glob `paths: ["**/*"]` indique à Claude Code de charger automatiquement cette rule dès qu'un fichier du projet est édité. Tous les noms de classe, chemins de paquet et exception handlers proviennent du code scanné, y compris les véritables `CustomizeExceptionHandler` et `JacksonCustomizations` du projet.
|
|
196
214
|
|
|
197
215
|
</details>
|
|
198
216
|
|
|
199
217
|
<details>
|
|
200
|
-
<summary><strong
|
|
218
|
+
<summary><strong>Un seed <code>decision-log.md</code> auto-généré (extrait réel)</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
|
-
|
|
240
|
+
La passe 4 alimente `decision-log.md` avec les décisions architecturales tirées de `pass2-merged.json`. Les sessions futures gardent ainsi en mémoire le *pourquoi* derrière la base de code, et pas seulement le *à quoi ça ressemble*. Chaque option (« JPA/Hibernate », « MyBatis-Plus ») comme chaque conséquence s'ancre directement dans le bloc de dépendances réel de `build.gradle`.
|
|
222
241
|
|
|
223
242
|
</details>
|
|
224
243
|
|
|
225
244
|
---
|
|
226
245
|
|
|
227
|
-
##
|
|
246
|
+
## Testé sur
|
|
247
|
+
|
|
248
|
+
ClaudeOS-Core est livré avec des benchmarks de référence mesurés sur de vrais projets open source. Si vous l'avez essayé sur un dépôt public, [ouvrez une issue](https://github.com/claudeos-core/claudeos-core/issues) et le projet rejoindra le tableau.
|
|
249
|
+
|
|
250
|
+
| Projet | Stack | Scanné → Généré | Statut |
|
|
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 fichiers | ✅ 5 validateurs au vert |
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Démarrage rapide
|
|
228
257
|
|
|
229
258
|
**Prérequis :** Node.js 18+, [Claude Code](https://docs.anthropic.com/en/docs/claude-code) installé et authentifié.
|
|
230
259
|
|
|
231
260
|
```bash
|
|
232
|
-
# 1.
|
|
261
|
+
# 1. Se placer à la racine du projet
|
|
233
262
|
cd my-spring-boot-project
|
|
234
263
|
|
|
235
|
-
# 2. Lancer init (
|
|
264
|
+
# 2. Lancer init (le code est analysé, puis Claude rédige les rules)
|
|
236
265
|
npx claudeos-core init
|
|
237
266
|
|
|
238
|
-
# 3. Terminé. Ouvrez Claude Code et
|
|
267
|
+
# 3. Terminé. Ouvrez Claude Code et commencez à coder, les rules sont déjà chargées.
|
|
239
268
|
```
|
|
240
269
|
|
|
241
|
-
|
|
270
|
+
Une fois `init` terminé, voici l'arborescence obtenue :
|
|
242
271
|
|
|
243
272
|
```
|
|
244
273
|
your-project/
|
|
245
274
|
├── .claude/
|
|
246
|
-
│ └── rules/ ←
|
|
247
|
-
│ ├── 00.core/ (rules générales
|
|
248
|
-
│ ├── 10.backend/ (rules
|
|
249
|
-
│ ├── 20.frontend/ (rules
|
|
250
|
-
│ ├── 30.security-db/ (sécurité
|
|
275
|
+
│ └── rules/ ← Chargé automatiquement par Claude Code
|
|
276
|
+
│ ├── 00.core/ (rules générales : naming, architecture)
|
|
277
|
+
│ ├── 10.backend/ (rules backend, le cas échéant)
|
|
278
|
+
│ ├── 20.frontend/ (rules frontend, le cas échéant)
|
|
279
|
+
│ ├── 30.security-db/ (conventions sécurité et BD)
|
|
251
280
|
│ ├── 40.infra/ (env, logging, CI/CD)
|
|
252
|
-
│ ├── 50.sync/ (rappels de doc
|
|
253
|
-
│ ├── 60.memory/ (memory
|
|
281
|
+
│ ├── 50.sync/ (rappels de synchro doc — rules uniquement)
|
|
282
|
+
│ ├── 60.memory/ (rules memory — Pass 4, rules uniquement)
|
|
254
283
|
│ ├── 70.domains/{type}/ (rules par domaine, type = backend|frontend)
|
|
255
|
-
│ └── 80.verification/ (stratégie de tests
|
|
284
|
+
│ └── 80.verification/ (stratégie de tests et rappels de vérif build)
|
|
256
285
|
├── claudeos-core/
|
|
257
|
-
│ ├── standard/ ←
|
|
258
|
-
│ │ ├── 00.core/ (
|
|
286
|
+
│ ├── standard/ ← Documentation de référence (miroir des catégories)
|
|
287
|
+
│ │ ├── 00.core/ (présentation projet, architecture, naming)
|
|
259
288
|
│ │ ├── 10.backend/ (référence backend — si stack backend)
|
|
260
289
|
│ │ ├── 20.frontend/ (référence frontend — si stack frontend)
|
|
261
|
-
│ │ ├── 30.security-db/ (référence sécurité
|
|
290
|
+
│ │ ├── 30.security-db/ (référence sécurité et BD)
|
|
262
291
|
│ │ ├── 40.infra/ (référence env / logging / CI-CD)
|
|
263
292
|
│ │ ├── 70.domains/{type}/ (référence par domaine)
|
|
264
|
-
│ │ ├── 80.verification/ (référence build / startup / tests — standard
|
|
265
|
-
│ │ └── 90.optional/ (extras spécifiques au stack — standard
|
|
293
|
+
│ │ ├── 80.verification/ (référence build / startup / tests — standard uniquement)
|
|
294
|
+
│ │ └── 90.optional/ (extras spécifiques au stack — standard uniquement)
|
|
266
295
|
│ ├── skills/ (patterns réutilisables que Claude peut appliquer)
|
|
267
|
-
│ ├── guide/ (
|
|
268
|
-
│ ├── database/ (
|
|
296
|
+
│ ├── guide/ (guides pratiques pour les tâches fréquentes)
|
|
297
|
+
│ ├── database/ (panorama du schéma, guide de migration)
|
|
269
298
|
│ ├── mcp-guide/ (notes d'intégration MCP)
|
|
270
299
|
│ └── memory/ (decision log, failure patterns, compaction)
|
|
271
300
|
└── CLAUDE.md (l'index que Claude lit en premier)
|
|
272
301
|
```
|
|
273
302
|
|
|
274
|
-
|
|
303
|
+
Lorsque `rules/` et `standard/` partagent le même préfixe numérique, ils couvrent la même zone conceptuelle : les rules `10.backend` répondent aux standards `10.backend`, par exemple. Deux catégories existent uniquement côté rules : `50.sync` (rappels de synchro doc) et `60.memory` (mémoire issue de la passe 4). Une seule existe uniquement côté standard : `90.optional` (extras spécifiques au stack, sans contrainte d'application). Tous les autres préfixes (`00`, `10`, `20`, `30`, `40`, `70`, `80`) figurent dans les deux. Claude Code connaît désormais le projet.
|
|
275
304
|
|
|
276
305
|
---
|
|
277
306
|
|
|
278
|
-
## À qui s'adresse
|
|
307
|
+
## À qui s'adresse-t-il ?
|
|
279
308
|
|
|
280
|
-
|
|
|
309
|
+
| Profil | Le problème qui disparaît |
|
|
281
310
|
|---|---|
|
|
282
|
-
| **
|
|
283
|
-
| **
|
|
284
|
-
| **
|
|
311
|
+
| **Développeur solo** qui démarre un nouveau projet avec Claude Code | « Réexpliquer les conventions à Claude à chaque session » : terminé. `CLAUDE.md` et les `.claude/rules/` répartis en 8 catégories sont générés en une seule passe. |
|
|
312
|
+
| **Tech lead** qui maintient des standards communs entre plusieurs dépôts | Les `.claude/rules/` qui dérivent à mesure que les paquets sont renommés, que l'ORM change ou que le wrapper de réponse évolue. ClaudeOS-Core resynchronise tout de façon reproductible : même entrée, même sortie au bit près, donc zéro bruit dans les diffs. |
|
|
313
|
+
| **Utilisateur de Claude Code** lassé de corriger le code généré | Mauvais wrapper de réponse, paquets mal organisés, JPA alors que le projet utilise MyBatis, `try/catch` éparpillés alors qu'un middleware centralisé existe. Le scanner extrait les vraies conventions du projet, et chaque passe Claude opère sur une liste blanche de chemins explicite. |
|
|
314
|
+
| **Onboarding sur un nouveau dépôt** (projet existant, intégration en équipe) | Un simple `init` suffit pour obtenir une carte d'architecture vivante : tableau de stack dans CLAUDE.md, rules par couche avec exemples ✅/❌, decision log initialisé avec le « pourquoi » des choix structurants (JPA ou MyBatis, REST ou GraphQL, etc.). Lire 5 fichiers vaut mieux qu'éplucher 5 000 fichiers source. |
|
|
315
|
+
| **Travail en coréen, japonais, chinois ou 7 autres langues** | La plupart des générateurs de rules pour Claude Code se cantonnent à l'anglais. ClaudeOS-Core produit l'ensemble complet dans **10 langues** (`en/ko/ja/zh-CN/es/vi/hi/ru/fr/de`), avec une **validation structurelle identique au bit près**. Le verdict de `claude-md-validator` reste le même quelle que soit la langue de sortie. |
|
|
316
|
+
| **Projet en monorepo** (Turborepo, pnpm/yarn workspaces, Lerna) | Domaines backend et frontend analysés dans la même exécution, avec des prompts distincts. Les répertoires `apps/*/` et `packages/*/` sont parcourus automatiquement, et les rules par stack atterrissent dans `70.domains/{type}/`. |
|
|
317
|
+
| **Contribution OSS ou expérimentation** | La sortie reste compatible avec `.gitignore` : `claudeos-core/` est un répertoire de travail local, seuls `CLAUDE.md` et `.claude/` ont vocation à être livrés. La reprise est sûre après interruption et la commande est idempotente. Les éditions manuelles des rules survivent tant que `--force` n'est pas utilisé. |
|
|
285
318
|
|
|
286
|
-
**Pas adapté si :** vous
|
|
319
|
+
**Pas adapté si :** vous cherchez un preset universel d'agents, skills et rules qui fonctionne dès le premier jour sans étape de scan (voir [docs/fr/comparison.md](docs/fr/comparison.md) pour situer chaque outil) ; votre projet ne correspond pas encore à l'un des [stacks pris en charge](#supported-stacks) ; ou un simple `CLAUDE.md` vous suffit (dans ce cas, le `claude /init` intégré fait déjà l'affaire, inutile d'installer un outil de plus).
|
|
287
320
|
|
|
288
321
|
---
|
|
289
322
|
|
|
290
323
|
## Comment ça marche ?
|
|
291
324
|
|
|
292
|
-
ClaudeOS-Core inverse le
|
|
325
|
+
ClaudeOS-Core inverse le flux Claude Code habituel :
|
|
293
326
|
|
|
294
327
|
```
|
|
295
328
|
Habituel : Vous décrivez le projet → Claude devine votre stack → Claude écrit la doc
|
|
296
|
-
Ici : Le code lit votre stack → Le code
|
|
329
|
+
Ici : Le code lit votre stack → Le code passe les faits confirmés à Claude → Claude écrit la doc à partir de ces faits
|
|
297
330
|
```
|
|
298
331
|
|
|
299
|
-
|
|
332
|
+
Le pipeline se déroule en **trois étapes**, avec du code de part et d'autre de l'appel LLM.
|
|
333
|
+
|
|
334
|
+
**1. Étape A — Scanner (reproductible, sans LLM).** Un scanner Node.js parcourt la racine du projet, lit `package.json`, `build.gradle`, `pom.xml` ou `pyproject.toml`, et analyse les fichiers `.env*`. Les variables sensibles (`PASSWORD/SECRET/TOKEN/JWT_SECRET/...`) sont automatiquement masquées. Le scanner classe ensuite le pattern d'architecture (5 patterns Java A/B/C/D/E, Kotlin CQRS ou multi-module, Next.js App ou Pages Router, FSD, components-pattern), identifie les domaines et construit une liste blanche explicite qui recense chaque chemin de fichier source réellement présent. Le tout finit dans `project-analysis.json`, source unique de vérité pour la suite.
|
|
335
|
+
|
|
336
|
+
**2. Étape B — Pipeline Claude en 4 passes (contraint par les faits de l'étape A).**
|
|
337
|
+
- **Pass 1** lit des fichiers représentatifs par groupe de domaines et en extrait 50 à 100 conventions par domaine : wrappers de réponse, bibliothèques de logging, gestion des erreurs, conventions de naming, patterns de tests. La passe tourne une fois par groupe de domaines (`max 4 domains, 40 files per group`), si bien que le contexte ne déborde jamais.
|
|
338
|
+
- **Pass 2** fusionne toutes les analyses par domaine en une vue projet globale et tranche les désaccords en retenant la convention dominante.
|
|
339
|
+
- **Pass 3** rédige `CLAUDE.md`, `.claude/rules/`, `claudeos-core/standard/`, les skills et les guides. Le travail est découpé en stages (`3a` facts, puis `3b-core/3b-N` rules+standards, puis `3c-core/3c-N` skills+guides, enfin `3d-aux` database+mcp-guide) afin que le prompt de chaque stage tienne dans la fenêtre de contexte du LLM, même lorsque `pass2-merged.json` devient volumineux. Pour les projets de 16 domaines ou plus, 3b et 3c sont à nouveau découpés en lots de 15 domaines maximum.
|
|
340
|
+
- **Pass 4** initialise la couche memory L4 (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`) et ajoute les rules de scaffold universelles. Cette passe a **interdiction de toucher à `CLAUDE.md`** : la section 8 produite par la passe 3 fait autorité.
|
|
341
|
+
|
|
342
|
+
**3. Étape C — Vérification (reproductible, sans LLM).** Cinq validateurs contrôlent le résultat.
|
|
343
|
+
- `claude-md-validator` : 25 vérifications structurelles sur `CLAUDE.md` (8 sections, comptage H3/H4, unicité des fichiers memory, invariant T1 sur les canonical headings). Indépendant de la langue : le verdict reste identique quel que soit `--lang`.
|
|
344
|
+
- `content-validator` : 10 vérifications de contenu, dont la vérification des chemins cités (`STALE_PATH` repère les références `src/...` absentes du code) et la détection de drift dans le MANIFEST.
|
|
345
|
+
- `pass-json-validator` : bonne forme JSON pour les passes 1/2/3/4 et comptage des sections en fonction du stack.
|
|
346
|
+
- `plan-validator` : cohérence plan ↔ disque (legacy, principalement no-op depuis la v2.1.0).
|
|
347
|
+
- `sync-checker` : cohérence d'enregistrement disque ↔ `sync-map.json` sur 7 répertoires suivis.
|
|
348
|
+
|
|
349
|
+
Trois niveaux de sévérité (`fail`, `warn`, `advisory`) cohabitent : ainsi, les warnings ne bloquent jamais la CI pour une hallucination LLM que l'on peut corriger à la main.
|
|
300
350
|
|
|
301
|
-
|
|
351
|
+
L'invariant qui tient tout l'édifice est simple : **Claude ne peut citer que des chemins réellement présents dans le code**, puisque l'étape A lui remet une liste blanche finie. Si le LLM tente malgré tout d'inventer quelque chose (cas rare, mais cela arrive sur certains seeds), l'étape C l'attrape avant la livraison.
|
|
352
|
+
|
|
353
|
+
Pour les détails par passe, le mécanisme de reprise par marker, le contournement staged-rules face au blocage `.claude/` de Claude Code, et le fonctionnement interne de la stack detection, voir [docs/fr/architecture.md](docs/fr/architecture.md).
|
|
302
354
|
|
|
303
355
|
---
|
|
304
356
|
|
|
305
357
|
## Supported Stacks
|
|
306
358
|
|
|
307
|
-
12 stacks,
|
|
359
|
+
12 stacks, détectés automatiquement à partir des fichiers de votre projet.
|
|
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
|
-
Les projets multi-stack (par
|
|
365
|
+
Les projets multi-stack (par exemple un backend Spring Boot couplé à un frontend Next.js) fonctionnent sans configuration particulière.
|
|
314
366
|
|
|
315
|
-
Pour les règles de détection et
|
|
367
|
+
Pour les règles de détection et le contenu extrait par chaque scanner, voir [docs/fr/stacks.md](docs/fr/stacks.md).
|
|
316
368
|
|
|
317
369
|
---
|
|
318
370
|
|
|
319
|
-
##
|
|
371
|
+
## Flux de travail quotidien
|
|
320
372
|
|
|
321
|
-
Trois commandes couvrent
|
|
373
|
+
Trois commandes couvrent environ 95 % des usages :
|
|
322
374
|
|
|
323
375
|
```bash
|
|
324
|
-
# Première
|
|
376
|
+
# Première utilisation sur un projet
|
|
325
377
|
npx claudeos-core init
|
|
326
378
|
|
|
327
|
-
# Après avoir édité manuellement les standards ou rules
|
|
379
|
+
# Après avoir édité manuellement les standards ou les rules
|
|
328
380
|
npx claudeos-core lint
|
|
329
381
|
|
|
330
|
-
# Health check (avant
|
|
382
|
+
# Health check (avant un commit, ou en CI)
|
|
331
383
|
npx claudeos-core health
|
|
332
384
|
```
|
|
333
385
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
```bash
|
|
337
|
-
# Compacter le log failure-patterns (à exécuter périodiquement)
|
|
338
|
-
npx claudeos-core memory compact
|
|
339
|
-
|
|
340
|
-
# Promouvoir des failure patterns fréquents en rules proposées
|
|
341
|
-
npx claudeos-core memory propose-rules
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
Pour toutes les options de chaque commande, voir [docs/fr/commands.md](docs/fr/commands.md).
|
|
386
|
+
Pour les options complètes de chaque commande, voir [docs/fr/commands.md](docs/fr/commands.md). Les commandes du memory layer (`memory compact`, `memory propose-rules`) sont documentées dans la section [Memory Layer](#memory-layer-optionnel-pour-les-projets-longue-durée) ci-dessous.
|
|
345
387
|
|
|
346
388
|
---
|
|
347
389
|
|
|
348
|
-
## Ce qui
|
|
390
|
+
## Ce qui le rend différent
|
|
349
391
|
|
|
350
|
-
La plupart des outils de documentation Claude Code génèrent à partir d'une description
|
|
392
|
+
La plupart des outils de documentation pour Claude Code génèrent à partir d'une description : l'utilisateur explique à l'outil, qui transmet ensuite à Claude. ClaudeOS-Core, lui, génère à partir du code source réel : l'outil lit le code, transmet à Claude ce qui est confirmé, et Claude n'écrit que ce qui est confirmé.
|
|
351
393
|
|
|
352
|
-
Trois conséquences concrètes
|
|
394
|
+
Trois conséquences concrètes en découlent.
|
|
353
395
|
|
|
354
|
-
1. **Détection de stack
|
|
355
|
-
2. **Aucun chemin
|
|
356
|
-
3. **
|
|
396
|
+
1. **Détection de stack reproductible.** À projet et code identiques, sortie identique. Plus de « cette fois Claude est parti sur autre chose ».
|
|
397
|
+
2. **Aucun chemin fabriqué.** Le prompt de la passe 3 énumère noir sur blanc chaque chemin source autorisé : Claude ne peut donc pas citer un chemin qui n'existe pas.
|
|
398
|
+
3. **Pensé multi-stack.** Backend et frontend s'appuient sur des prompts d'analyse distincts, dans une même exécution.
|
|
357
399
|
|
|
358
|
-
Pour une comparaison
|
|
400
|
+
Pour une comparaison de scope côte à côte avec d'autres outils, voir [docs/fr/comparison.md](docs/fr/comparison.md). Cette comparaison décrit **ce que chaque outil fait**, pas **lequel est meilleur** : la plupart sont en réalité complémentaires.
|
|
359
401
|
|
|
360
402
|
---
|
|
361
403
|
|
|
362
404
|
## Vérification (post-génération)
|
|
363
405
|
|
|
364
|
-
Une fois la
|
|
406
|
+
Une fois la documentation rédigée par Claude, le code prend le relais pour la valider. Cinq validateurs distincts entrent en jeu.
|
|
365
407
|
|
|
366
|
-
|
|
|
408
|
+
| Validateur | Ce qu'il vérifie | Lancé par |
|
|
367
409
|
|---|---|---|
|
|
368
|
-
| `claude-md-validator` | Invariants structurels de CLAUDE.md (8 sections,
|
|
369
|
-
| `content-validator` |
|
|
370
|
-
| `pass-json-validator` |
|
|
371
|
-
| `plan-validator` |
|
|
372
|
-
| `sync-checker` |
|
|
410
|
+
| `claude-md-validator` | Invariants structurels de CLAUDE.md (8 sections, indépendant de la langue) | `claudeos-core lint` |
|
|
411
|
+
| `content-validator` | Existence réelle des chemins cités, cohérence du manifest | `health` (advisory) |
|
|
412
|
+
| `pass-json-validator` | Bonne forme JSON des sorties Pass 1 / 2 / 3 / 4 | `health` (warn) |
|
|
413
|
+
| `plan-validator` | Correspondance entre le plan sauvegardé et le disque | `health` (fail-on-error) |
|
|
414
|
+
| `sync-checker` | Correspondance entre les fichiers sur disque et les entrées de `sync-map.json` (détection orphaned/unregistered) | `health` (fail-on-error) |
|
|
373
415
|
|
|
374
|
-
Un `health-checker` orchestre les quatre
|
|
416
|
+
Un `health-checker` orchestre les quatre validateurs runtime selon les trois niveaux de sévérité (fail / warn / advisory) et sort avec le code adapté à la CI. `claude-md-validator`, en revanche, se lance séparément via la commande `lint` : un drift structurel n'est pas un simple warning, c'est le signal qu'il faut relancer `init`. Exécution possible à tout moment :
|
|
375
417
|
|
|
376
418
|
```bash
|
|
377
419
|
npx claudeos-core health
|
|
378
420
|
```
|
|
379
421
|
|
|
380
|
-
Pour le détail des
|
|
422
|
+
Pour le détail des contrôles de chaque validateur, voir [docs/fr/verification.md](docs/fr/verification.md).
|
|
381
423
|
|
|
382
424
|
---
|
|
383
425
|
|
|
384
|
-
## Memory Layer (optionnel, pour les projets
|
|
426
|
+
## Memory Layer (optionnel, pour les projets longue durée)
|
|
385
427
|
|
|
386
|
-
|
|
428
|
+
Au-delà du pipeline de scaffolding décrit plus haut, ClaudeOS-Core initialise un dossier `claudeos-core/memory/` pour les projets dont le contexte dépasse une seule session. La couche est optionnelle : on peut tout à fait l'ignorer si seuls `CLAUDE.md` et les rules sont nécessaires.
|
|
387
429
|
|
|
388
|
-
|
|
389
|
-
- `failure-patterns.md` — erreurs récurrentes avec scores frequency/importance
|
|
390
|
-
- `compaction.md` — comment la memory est auto-compactée au fil du temps
|
|
391
|
-
- `auto-rule-update.md` — patterns qui devraient devenir de nouvelles rules
|
|
430
|
+
Quatre fichiers, tous écrits par la passe 4 :
|
|
392
431
|
|
|
393
|
-
|
|
432
|
+
- `decision-log.md` : journal append-only du « pourquoi avoir choisi X plutôt que Y », initialisé depuis `pass2-merged.json`.
|
|
433
|
+
- `failure-patterns.md` : erreurs récurrentes, accompagnées de scores frequency / importance.
|
|
434
|
+
- `compaction.md` : description de la compaction automatique de la mémoire au fil du temps.
|
|
435
|
+
- `auto-rule-update.md` : patterns qui devraient être promus au rang de nouvelles rules.
|
|
394
436
|
|
|
395
|
-
|
|
437
|
+
Deux commandes assurent la maintenance de cette couche dans la durée :
|
|
438
|
+
|
|
439
|
+
```bash
|
|
440
|
+
# Compacter le log failure-patterns (à lancer périodiquement)
|
|
441
|
+
npx claudeos-core memory compact
|
|
442
|
+
|
|
443
|
+
# Promouvoir les failure patterns fréquents en rules proposées
|
|
444
|
+
npx claudeos-core memory propose-rules
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
Pour le modèle de mémoire et son cycle de vie, voir [docs/fr/memory-layer.md](docs/fr/memory-layer.md).
|
|
396
448
|
|
|
397
449
|
---
|
|
398
450
|
|
|
399
451
|
## FAQ
|
|
400
452
|
|
|
401
|
-
**Q :
|
|
402
|
-
R : Non. ClaudeOS-Core
|
|
453
|
+
**Q : Faut-il une clé API Claude ?**
|
|
454
|
+
R : Non. ClaudeOS-Core s'appuie sur l'installation Claude Code déjà présente sur le poste et envoie les prompts à `claude -p` en local. Aucun compte supplémentaire n'est requis.
|
|
403
455
|
|
|
404
|
-
**Q :
|
|
405
|
-
R :
|
|
456
|
+
**Q : Mes CLAUDE.md ou `.claude/rules/` existants seront-ils écrasés ?**
|
|
457
|
+
R : Sur un projet vierge, ils sont créés. En réexécution sans `--force`, les éditions sont préservées : les pass markers du run précédent sont détectés et les passes correspondantes sont sautées. Avec `--force`, tout est effacé et régénéré depuis zéro : les éditions sont alors perdues, et c'est précisément le rôle de `--force`. Voir [docs/fr/safety.md](docs/fr/safety.md).
|
|
406
458
|
|
|
407
|
-
**Q : Mon stack n'est pas
|
|
408
|
-
R : Oui.
|
|
459
|
+
**Q : Mon stack n'est pas pris en charge. Puis-je l'ajouter ?**
|
|
460
|
+
R : Oui. Compter environ 3 templates de prompts et un domain scanner pour un nouveau stack. Voir [CONTRIBUTING.md](CONTRIBUTING.md) pour le guide en 8 étapes.
|
|
409
461
|
|
|
410
|
-
**Q : Comment générer la
|
|
411
|
-
R : `npx claudeos-core init --lang
|
|
462
|
+
**Q : Comment générer la documentation en coréen (ou dans une autre langue) ?**
|
|
463
|
+
R : `npx claudeos-core init --lang ko`. 10 langues prises en charge : en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
|
|
412
464
|
|
|
413
465
|
**Q : Cela fonctionne-t-il avec les monorepos ?**
|
|
414
|
-
R : Oui
|
|
466
|
+
R : Oui. Turborepo (`turbo.json`), pnpm workspaces (`pnpm-workspace.yaml`), Lerna (`lerna.json`) et les npm/yarn workspaces (`package.json#workspaces`) sont reconnus par le stack-detector, et chaque app obtient sa propre analyse. D'autres layouts (NX, par exemple) ne sont pas détectés explicitement, mais les patterns génériques `apps/*/` et `packages/*/` restent captés par les scanners par stack.
|
|
415
467
|
|
|
416
|
-
**Q : Et si Claude Code génère des rules avec lesquelles je suis
|
|
417
|
-
R : Éditez-les directement
|
|
468
|
+
**Q : Et si Claude Code génère des rules avec lesquelles je ne suis pas d'accord ?**
|
|
469
|
+
R : Éditez-les directement, puis lancez `npx claudeos-core lint` pour vérifier que CLAUDE.md reste structurellement valide. Les éditions sont préservées lors des prochains `init` (sans `--force`), car le mécanisme de reprise saute les passes dont les markers existent déjà.
|
|
418
470
|
|
|
419
471
|
**Q : Où signaler les bugs ?**
|
|
420
|
-
R : [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). Pour les problèmes de sécurité, voir [SECURITY.md](SECURITY.md).
|
|
472
|
+
R : Sur les [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). Pour les problèmes de sécurité, voir [SECURITY.md](SECURITY.md).
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
## Si cela vous a fait gagner du temps
|
|
477
|
+
|
|
478
|
+
Une ⭐ sur GitHub aide à garder le projet visible et à le faire découvrir. Les issues, les PR et les contributions de templates de stack sont les bienvenues. Voir [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
421
479
|
|
|
422
480
|
---
|
|
423
481
|
|
|
@@ -425,15 +483,15 @@ R : [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). Pour
|
|
|
425
483
|
|
|
426
484
|
| Sujet | À lire |
|
|
427
485
|
|---|---|
|
|
428
|
-
|
|
|
486
|
+
| Fonctionnement du pipeline 4-pass (plus en profondeur que le diagramme) | [docs/fr/architecture.md](docs/fr/architecture.md) |
|
|
429
487
|
| Diagrammes visuels (Mermaid) de l'architecture | [docs/fr/diagrams.md](docs/fr/diagrams.md) |
|
|
430
|
-
|
|
|
431
|
-
| Memory layer
|
|
432
|
-
| Les 5
|
|
433
|
-
| Toutes les commandes CLI et options | [docs/fr/commands.md](docs/fr/commands.md) |
|
|
488
|
+
| Stack detection : ce que chaque scanner cherche | [docs/fr/stacks.md](docs/fr/stacks.md) |
|
|
489
|
+
| Memory layer : decision logs et failure patterns | [docs/fr/memory-layer.md](docs/fr/memory-layer.md) |
|
|
490
|
+
| Les 5 validateurs en détail | [docs/fr/verification.md](docs/fr/verification.md) |
|
|
491
|
+
| Toutes les commandes CLI et leurs options | [docs/fr/commands.md](docs/fr/commands.md) |
|
|
434
492
|
| Installation manuelle (sans `npx`) | [docs/fr/manual-installation.md](docs/fr/manual-installation.md) |
|
|
435
|
-
| Overrides
|
|
436
|
-
| Sécurité : ce qui est préservé
|
|
493
|
+
| Overrides du scanner : `.claudeos-scan.json` | [docs/fr/advanced-config.md](docs/fr/advanced-config.md) |
|
|
494
|
+
| Sécurité : ce qui est préservé en cas de re-init | [docs/fr/safety.md](docs/fr/safety.md) |
|
|
437
495
|
| Comparaison avec des outils similaires (scope, pas qualité) | [docs/fr/comparison.md](docs/fr/comparison.md) |
|
|
438
496
|
| Erreurs et récupération | [docs/fr/troubleshooting.md](docs/fr/troubleshooting.md) |
|
|
439
497
|
|
|
@@ -441,14 +499,14 @@ R : [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). Pour
|
|
|
441
499
|
|
|
442
500
|
## Contribuer
|
|
443
501
|
|
|
444
|
-
Les contributions sont
|
|
502
|
+
Les contributions sont bienvenues : ajout de support de stack, amélioration des prompts, corrections de bugs. Voir [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
445
503
|
|
|
446
|
-
Pour le
|
|
504
|
+
Pour le code de conduite et la politique de sécurité, voir [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) et [SECURITY.md](SECURITY.md).
|
|
447
505
|
|
|
448
506
|
## Licence
|
|
449
507
|
|
|
450
|
-
[ISC](LICENSE)
|
|
508
|
+
[ISC License](LICENSE). Libre pour tout usage, y compris commercial. © 2025–2026 ClaudeOS-Core contributors.
|
|
451
509
|
|
|
452
510
|
---
|
|
453
511
|
|
|
454
|
-
<sub>
|
|
512
|
+
<sub>Maintenu par l'équipe [claudeos-core](https://github.com/claudeos-core). Issues et PR sur <https://github.com/claudeos-core/claudeos-core>.</sub>
|