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.ja.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 はコードベースを読み取り、見つけたすべてのパターンを抽出して、_あなたの_ プロジェクトに合わせた Standards、Rules、Skills、Guides の完全なセットを生成します。その後、Claude Code に「注文の CRUD を作成して」と伝えると、既存のパターンに完全に一致するコードが生成されます。
|
|
10
|
-
|
|
11
|
-
[🇺🇸 English](./README.md) · [🇰🇷 한국어](./README.ko.md) · [🇨🇳 中文](./README.zh-CN.md) · [🇪🇸 Español](./README.es.md) · [🇻🇳 Tiếng Việt](./README.vi.md) · [🇮🇳 हिन्दी](./README.hi.md) · [🇷🇺 Русский](./README.ru.md) · [🇫🇷 Français](./README.fr.md) · [🇩🇪 Deutsch](./README.de.md)
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## なぜ ClaudeOS-Core なのか?
|
|
16
|
-
|
|
17
|
-
他のすべての Claude Code ツールはこう動作します:
|
|
18
|
-
|
|
19
|
-
> **人間がプロジェクトを説明 → LLM がドキュメントを生成**
|
|
20
|
-
|
|
21
|
-
ClaudeOS-Core はこう動作します:
|
|
22
|
-
|
|
23
|
-
> **コードがソースを分析 → コードがカスタムプロンプトを構築 → LLM がドキュメントを生成 → コードが出力を検証**
|
|
24
|
-
|
|
25
|
-
これは小さな違いではありません。なぜ重要なのか説明します:
|
|
26
|
-
|
|
27
|
-
### 核心的な問題:LLM は推測する。コードは推測しない。
|
|
28
|
-
|
|
29
|
-
Claude に「このプロジェクトを分析して」と頼むと、スタック、ORM、ドメイン構造を**推測**します。
|
|
30
|
-
`build.gradle` で `spring-boot` を見ても、MyBatis を使っていること(JPA ではない)を見逃すかもしれません。
|
|
31
|
-
`user/` ディレクトリを検出しても、プロジェクトが layer-first パッケージング(Pattern A)を使っていて domain-first(Pattern B)ではないことに気付かないかもしれません。
|
|
32
|
-
|
|
33
|
-
**ClaudeOS-Core は推測しません。** Claude がプロジェクトを見る前に、Node.js コードがすでに以下を実行済みです:
|
|
10
|
+
**Claude Code が初回の試行から _あなたのプロジェクトの_ コンベンションに従うようにします — generic な既定値ではなく。**
|
|
34
11
|
|
|
35
|
-
|
|
36
|
-
- ディレクトリ構造をスキャンしてファイル数付きのドメインリストを**確定**
|
|
37
|
-
- プロジェクト構造を Java 5 パターン、Kotlin CQRS/BFF、Next.js App Router/FSD のいずれかに**分類**
|
|
38
|
-
- Claude のコンテキストウィンドウに収まる最適サイズのグループにドメインを**分割**
|
|
39
|
-
- 確定された事実がすべて注入されたスタック固有のプロンプトを**組み立て**
|
|
12
|
+
deterministic な Node.js scanner がコードを先に読み、4-pass の Claude パイプラインが抽出された事実を基に完全なドキュメントセットを書き込みます — `CLAUDE.md` + 自動ロードされる `.claude/rules/` + standards + skills + L4 memory。10 種の出力言語、5 つの post-generation validator、LLM がコードに存在しないファイルや framework をでっち上げないようにする明示的な path allowlist。
|
|
40
13
|
|
|
41
|
-
|
|
14
|
+
[**12 stacks**](#supported-stacks) で即座に動作 (monorepo 含む) — `npx` コマンド一つ、設定不要、中断時 resume-safe、再実行 idempotent。
|
|
42
15
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
他のツールは「一般的に良い」ドキュメントを生成します。
|
|
46
|
-
ClaudeOS-Core は、プロジェクトが `ApiResponse.ok()`(`ResponseEntity.success()` ではない)を使っていること、MyBatis XML マッパーが `src/main/resources/mybatis/mappers/` にあること、パッケージ構造が `com.company.module.{domain}.controller` であることを知っているドキュメントを生成します — 実際のコードを読んだからです。
|
|
47
|
-
|
|
48
|
-
### Before & After
|
|
49
|
-
|
|
50
|
-
**ClaudeOS-Core なし** — Claude Code に注文 CRUD の作成を依頼すると:
|
|
51
|
-
```
|
|
52
|
-
❌ JPA スタイルの repository を使用(プロジェクトは MyBatis)
|
|
53
|
-
❌ ResponseEntity.success() を生成(あなたのラッパーは ApiResponse.ok())
|
|
54
|
-
❌ order/controller/ にファイルを配置(プロジェクトは controller/order/ 構造)
|
|
55
|
-
❌ 英語コメントを生成(チームは日本語コメント)
|
|
56
|
-
→ 生成ファイルごとに 20 分の修正
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**ClaudeOS-Core あり** — `.claude/rules/` に確定されたパターンがすでに存在:
|
|
60
|
-
```
|
|
61
|
-
✅ MyBatis マッパー + XML を生成(build.gradle から検出)
|
|
62
|
-
✅ ApiResponse.ok() を使用(実際のソースから抽出)
|
|
63
|
-
✅ controller/order/ にファイルを配置(構造スキャンで Pattern A 確定)
|
|
64
|
-
✅ 日本語コメント(--lang ja 適用)
|
|
65
|
-
→ 生成コードがプロジェクト規約と即座に一致
|
|
16
|
+
```bash
|
|
17
|
+
npx claudeos-core init
|
|
66
18
|
```
|
|
67
19
|
|
|
68
|
-
|
|
20
|
+
[🇺🇸 English](README.md) · [🇰🇷 한국어](README.ko.md) · [🇨🇳 中文](README.zh-CN.md) · [🇪🇸 Español](README.es.md) · [🇻🇳 Tiếng Việt](README.vi.md) · [🇮🇳 हिन्दी](README.hi.md) · [🇷🇺 Русский](README.ru.md) · [🇫🇷 Français](README.fr.md) · [🇩🇪 Deutsch](README.de.md)
|
|
69
21
|
|
|
70
22
|
---
|
|
71
23
|
|
|
72
|
-
##
|
|
73
|
-
|
|
74
|
-
生成は問題の半分にすぎません。もう半分は **出力が正しいと分かること** です — 10 の出力言語、11 のスタックテンプレート、あらゆる規模のプロジェクトにわたって。v2.3.0 は生成後に実行され、LLM の自己チェックに依存しない決定論的な validator を 2 つ追加します。
|
|
75
|
-
|
|
76
|
-
### `claude-md-validator` — 構造的不変条件
|
|
77
|
-
|
|
78
|
-
生成されたすべての `CLAUDE.md` は、言語不変のシグナルのみを使う 25 の構造的不変条件に対して検証されます: Markdown 構文 (`^## `, `^### `)、翻訳されないリテラルファイル名 (`decision-log.md`, `failure-patterns.md`)、セクション数、セクションごとのサブセクション数、テーブル行数。同じ validator が、英語・韓国語・日本語・ベトナム語・ヒンディー語・ロシア語・スペイン語・中国語・フランス語・ドイツ語で生成された `CLAUDE.md` に対してバイト単位で同じ判定を下します。
|
|
24
|
+
## このツールは何ですか?
|
|
79
25
|
|
|
80
|
-
|
|
26
|
+
あなたは Claude Code を使っています。強力なツールですが、毎セッションが新しく始まります — _あなたの_ プロジェクトがどう構成されているかの記憶がありません。そのため、チームが実際に行っているパターンとほとんどマッチしない「generally good」な既定値に fallback します:
|
|
81
27
|
|
|
82
|
-
|
|
28
|
+
- チームでは **MyBatis** を使っているのに、Claude は JPA repository を生成する。
|
|
29
|
+
- 応答 wrapper は `ApiResponse.ok()` なのに、Claude は `ResponseEntity.success()` と書く。
|
|
30
|
+
- パッケージは layer-first (`controller/order/`) なのに、Claude は domain-first (`order/controller/`) を作る。
|
|
31
|
+
- エラーは centralized middleware を通すのに、Claude はあらゆる endpoint に `try/catch` を撒き散らす。
|
|
83
32
|
|
|
84
|
-
|
|
33
|
+
プロジェクトごとに `.claude/rules/` セットがあれば良いのですが — Claude Code が毎セッション自動ロードしてくれる — 新しい repo ごとに手で書くのは何時間もかかり、コードが進化するにつれ drift していきます。
|
|
85
34
|
|
|
86
|
-
-
|
|
87
|
-
- **`MANIFEST_DRIFT`** — `claudeos-core/skills/00.shared/MANIFEST.md` に登録された skill が `CLAUDE.md §6` に言及されていない (または逆)。`CLAUDE.md §6` がエントリーポイントで `MANIFEST.md` が完全なレジストリとなる orchestrator + sub-skill レイアウトを認識し、sub-skill は親 orchestrator を介して間接的にカバーされると判定します。
|
|
35
|
+
**ClaudeOS-Core は実際のソースコードからそれをあなたの代わりに書きます。** deterministic な Node.js scanner がプロジェクトを先に読み (スタック、ORM、パッケージ layout、コンベンション、ファイルパス)、4-pass の Claude パイプラインが抽出された事実を完全なドキュメントセットに変換します:
|
|
88
36
|
|
|
89
|
-
|
|
37
|
+
- **`CLAUDE.md`** — Claude が毎セッション最初に読むプロジェクトインデックス
|
|
38
|
+
- **`.claude/rules/`** — カテゴリごとに自動ロードされる rules (`00.core` / `10.backend` / `20.frontend` / `30.security-db` / `40.infra` / `60.memory` / `70.domains` / `80.verification`)
|
|
39
|
+
- **`claudeos-core/standard/`** — 参照ドキュメント (各 rule の「なぜ」)
|
|
40
|
+
- **`claudeos-core/skills/`** — 再利用可能なパターン (CRUD scaffolding、ページテンプレート)
|
|
41
|
+
- **`claudeos-core/memory/`** — プロジェクトと共に成長する decision log + failure pattern
|
|
90
42
|
|
|
91
|
-
|
|
43
|
+
scanner が Claude に明示的な path allowlist を渡すため、LLM は **コードに存在しないファイルや framework をでっち上げることができません**。5 つの post-generation validator (`claude-md-validator`, `content-validator`, `pass-json-validator`, `plan-validator`, `sync-checker`) が出力を ship 前に検証します — language-invariant なので、英語で生成しても、日本語で生成しても、他の 8 言語のいずれで生成しても同じルールが適用されます。
|
|
92
44
|
|
|
93
|
-
```bash
|
|
94
|
-
npx claudeos-core health # すべての validator — 単一 go/no-go 判定
|
|
95
|
-
npx claudeos-core lint # CLAUDE.md 構造不変条件のみ (任意の言語)
|
|
96
45
|
```
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
## 対応スタック
|
|
101
|
-
|
|
102
|
-
| スタック | 検出方法 | 分析深度 |
|
|
103
|
-
|---|---|---|
|
|
104
|
-
| **Java / Spring Boot** | `build.gradle`、`pom.xml`、5 パッケージパターン | 10 大分類、59 小項目 |
|
|
105
|
-
| **Kotlin / Spring Boot** | `build.gradle.kts`、kotlin plugin、`settings.gradle.kts`、CQRS/BFF 自動検出 | 12 大分類、95 小項目 |
|
|
106
|
-
| **Node.js / Express** | `package.json` | 9 大分類、57 小項目 |
|
|
107
|
-
| **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 大分類、68 小項目 |
|
|
108
|
-
| **Next.js / React** | `package.json`、`next.config.*`、FSD サポート | 9 大分類、55 小項目 |
|
|
109
|
-
| **Vue / Nuxt** | `package.json`、`nuxt.config.*`、Composition API | 9 大分類、58 小項目 |
|
|
110
|
-
| **Python / Django** | `requirements.txt`、`pyproject.toml` | 10 大分類、55 小項目 |
|
|
111
|
-
| **Python / FastAPI** | `requirements.txt`、`pyproject.toml` | 10 大分類、58 小項目 |
|
|
112
|
-
| **Node.js / Fastify** | `package.json` | 10 大分類、62 小項目 |
|
|
113
|
-
| **Vite / React SPA** | `package.json`、`vite.config.*` | 9 大分類、55 小項目 |
|
|
114
|
-
| **Angular** | `package.json`、`angular.json` | 12 大分類、78 小項目 |
|
|
115
|
-
|
|
116
|
-
自動検出対象:言語とバージョン、フレームワークとバージョン(SPA フレームワークとしての Vite を含む)、ORM(MyBatis、JPA、Exposed、Prisma、TypeORM、SQLAlchemy など)、データベース(PostgreSQL、MySQL、Oracle、MongoDB、SQLite)、パッケージマネージャ(Gradle、Maven、npm、yarn、pnpm、pip、poetry)、アーキテクチャ(CQRS、BFF — モジュール名から)、マルチモジュール構造(settings.gradle から)、モノレポ(Turborepo、pnpm-workspace、Lerna、npm/yarn workspaces)、**`.env.example` ランタイム設定**(v2.2.0 — Vite・Next.js・Nuxt・Angular・Node・Python フレームワークの 16 以上の慣習的変数名から port/host/API-target を抽出)。
|
|
117
|
-
|
|
118
|
-
**何も指定する必要はありません。すべて自動的に検出されます。**
|
|
119
|
-
|
|
120
|
-
### `.env`-driven ランタイム設定(v2.2.0)
|
|
121
|
-
|
|
122
|
-
v2.2.0 では `lib/env-parser.js` が追加され、生成される `CLAUDE.md` がフレームワークのデフォルトではなく、プロジェクトが実際に宣言している内容を反映するようになりました。
|
|
123
|
-
|
|
124
|
-
- **検索順序**:`.env.example`(canonical、コミット対象)→ `.env.local.example` → `.env.sample` → `.env.template` → `.env` → `.env.local` → `.env.development`。`.example` バリアントが優先されるのは、それが「開発者中立な shape-of-truth」であり、特定コントリビュータのローカルオーバーライドではないためです。
|
|
125
|
-
- **認識されるポート変数名の慣例**:`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`。両方存在する場合はフレームワーク固有名が汎用 `PORT` より優先されます。
|
|
126
|
-
- **ホストと API ターゲット**:`VITE_DEV_HOST` / `VITE_API_TARGET` / `NEXT_PUBLIC_API_URL` / `NUXT_PUBLIC_API_BASE` / `BACKEND_URL` / `PROXY_TARGET` など。
|
|
127
|
-
- **優先順位**:Spring Boot の `application.yml` `server.port` が引き続き最優先(framework-native config)、次に `.env` 宣言のポート、最後の手段としてフレームワークのデフォルト(Vite 5173、Next.js 3000、Django 8000 など)。
|
|
128
|
-
- **機密変数の redaction**:`PASSWORD` / `SECRET` / `TOKEN` / `API_KEY` / `ACCESS_KEY` / `PRIVATE_KEY` / `CREDENTIAL` / `JWT_SECRET` / `CLIENT_SECRET` / `SESSION_SECRET` / `BEARER` / `SALT` パターンにマッチする変数の値は、下流のジェネレータに到達する前に `***REDACTED***` へ置換されます。`.env.example` に誤ってコミットされた機密情報に対する defense-in-depth です。`DATABASE_URL` は stack-detector の DB 識別における後方互換性のため、明示的にホワイトリスト登録されています。
|
|
129
|
-
|
|
130
|
-
### Java ドメイン検出(5 パターン、フォールバック付き)
|
|
131
|
-
|
|
132
|
-
| 優先度 | パターン | 構造 | 例 |
|
|
133
|
-
|---|---|---|---|
|
|
134
|
-
| A | レイヤー優先 | `controller/{domain}/` | `controller/user/UserController.java` |
|
|
135
|
-
| B | ドメイン優先 | `{domain}/controller/` | `user/controller/UserController.java` |
|
|
136
|
-
| D | モジュールプレフィックス | `{module}/{domain}/controller/` | `front/member/controller/MemberController.java` |
|
|
137
|
-
| E | DDD/ヘキサゴナル | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
|
|
138
|
-
| C | フラット | `controller/*.java` | `controller/UserController.java` → クラス名から `user` を抽出 |
|
|
139
|
-
|
|
140
|
-
Controller を持たない Service 専用ドメインも、`service/`、`dao/`、`aggregator/`、`facade/`、`usecase/`、`orchestrator/`、`mapper/`、`repository/` ディレクトリを通じて検出されます。スキップ:`common`、`config`、`util`、`core`、`front`、`admin`、`v1`、`v2` など。
|
|
141
|
-
|
|
142
|
-
### Kotlin マルチモジュールドメイン検出
|
|
143
|
-
|
|
144
|
-
Gradle マルチモジュール構造の Kotlin プロジェクト(例:CQRS モノレポ)向け:
|
|
145
|
-
|
|
146
|
-
| ステップ | 動作 | 例 |
|
|
147
|
-
|---|---|---|
|
|
148
|
-
| 1 | `settings.gradle.kts` から `include()` をスキャン | 14 モジュールを検出 |
|
|
149
|
-
| 2 | モジュール名からタイプを検出 | `reservation-command-server` → type: `command` |
|
|
150
|
-
| 3 | モジュール名からドメインを抽出 | `reservation-command-server` → domain: `reservation` |
|
|
151
|
-
| 4 | モジュール間で同じドメインをグループ化 | `reservation-command-server` + `common-query-server` → 1 ドメイン |
|
|
152
|
-
| 5 | アーキテクチャ検出 | `command` + `query` モジュール存在 → CQRS |
|
|
153
|
-
|
|
154
|
-
対応モジュールタイプ:`command`、`query`、`bff`、`integration`、`standalone`、`library`。共有ライブラリ(`shared-lib`、`integration-lib`)は特殊ドメインとして検出されます。
|
|
155
|
-
|
|
156
|
-
### フロントエンドドメイン検出
|
|
157
|
-
|
|
158
|
-
- **App Router**:`app/{domain}/page.tsx`(Next.js)
|
|
159
|
-
- **Pages Router**:`pages/{domain}/index.tsx`
|
|
160
|
-
- **FSD (Feature-Sliced Design)**:`features/*/`、`widgets/*/`、`entities/*/`
|
|
161
|
-
- **RSC/Client 分離**:`client.tsx` パターンを検出、Server/Client コンポーネント分離を追跡
|
|
162
|
-
- **非標準ネストパス**:`src/*/` 配下のページ、コンポーネント、FSD レイヤーを検出(例:`src/admin/pages/dashboard/`、`src/admin/components/form/`、`src/admin/features/billing/`)
|
|
163
|
-
- **プラットフォーム/ティア分割検出 (v2.0.0)**:`src/{platform}/{subapp}/` レイアウトを認識 — `{platform}` はデバイス/ターゲットキーワード(`desktop`、`pc`、`web`、`mobile`、`mc`、`mo`、`sp`、`tablet`、`tab`、`pwa`、`tv`、`ctv`、`ott`、`watch`、`wear`)またはアクセスティアキーワード(`admin`、`cms`、`backoffice`、`back-office`、`portal`)を指定できます。`(platform, subapp)` ペアごとに `{platform}-{subapp}` という名前のドメインを 1 つ生成し、ドメインごとの routes/components/layouts/hooks のカウントを提供します。Angular、Next.js、React、Vue で同時に動作(マルチ拡張子 glob `{tsx,jsx,ts,js,vue}`)。subapp あたり 2 ファイル以上必要(1 ファイルのノイジーなドメインを回避)。
|
|
164
|
-
- **モノレポプラットフォーム分割 (v2.0.0)**:プラットフォームスキャンは `{apps,packages}/*/src/{platform}/{subapp}/`(`src/` を持つ Turborepo/pnpm workspace)および `{apps,packages}/{platform}/{subapp}/`(`src/` ラッパーなしの workspaces)にもマッチします。
|
|
165
|
-
- **Fallback E — routes ファイル (v2.0.0)**:主要スキャナ + Fallback A–D がすべて 0 を返した場合、`**/routes/*.{tsx,jsx,ts,js,vue}` を glob し、`routes` の親ディレクトリ名でグループ化。Next.js の `page.tsx` や FSD レイアウトにマッチしない React Router ファイルルーティングプロジェクト(CRA/Vite + `react-router`)を捕捉します。汎用的な親名(`src`、`app`、`pages`)はフィルタアウトされます。
|
|
166
|
-
- **Config フォールバック**:`package.json` になくても、設定ファイルから Next.js/Vite/Nuxt を検出(モノレポ対応)
|
|
167
|
-
- **Deep ディレクトリフォールバック**:React/CRA/Vite/Vue/RN プロジェクトで、`**/components/*/`、`**/views/*/`、`**/screens/*/`、`**/containers/*/`、`**/pages/*/`、`**/routes/*/`、`**/modules/*/`、`**/domains/*/` をどの深さでもスキャン
|
|
168
|
-
- **共有無視リスト (v2.0.0)**:すべてのスキャナが `BUILD_IGNORE_DIRS`(`node_modules`、`build`、`dist`、`out`、`.next`、`.nuxt`、`.svelte-kit`、`.angular`、`.turbo`、`.cache`、`.parcel-cache`、`coverage`、`storybook-static`、`.vercel`、`.netlify`)と `TEST_FILE_IGNORE`(spec/test/stories/e2e/cy + `__snapshots__`/`__tests__`)を共有し、ビルド成果物とテストフィクスチャがドメインごとのファイル数を膨張させないようにします。
|
|
169
|
-
|
|
170
|
-
### スキャナオーバーライド (v2.0.0)
|
|
171
|
-
|
|
172
|
-
プロジェクトルートにオプションの `.claudeos-scan.json` を配置すると、ツールキットを編集せずにスキャナのデフォルトを拡張できます。すべてのフィールドは**加算的** — ユーザーエントリはデフォルトを置き換えず、拡張します:
|
|
173
|
-
|
|
174
|
-
```json
|
|
175
|
-
{
|
|
176
|
-
"frontendScan": {
|
|
177
|
-
"platformKeywords": ["kiosk"],
|
|
178
|
-
"skipSubappNames": ["legacy"],
|
|
179
|
-
"minSubappFiles": 3
|
|
180
|
-
}
|
|
181
|
-
}
|
|
46
|
+
Before: あなた → Claude Code → 「概ね良い」コード → 毎回手作業で修正
|
|
47
|
+
After: あなた → Claude Code → あなたのプロジェクトに一致するコード → そのまま使える
|
|
182
48
|
```
|
|
183
49
|
|
|
184
|
-
| フィールド | デフォルト | 用途 |
|
|
185
|
-
|---|---|---|
|
|
186
|
-
| `platformKeywords` | 上記の組み込みリスト | プラットフォームスキャン用の追加 `{platform}` キーワード(例:`kiosk`、`vr`、`embedded`) |
|
|
187
|
-
| `skipSubappNames` | 構造的ディレクトリのみ | プラットフォームスキャンのドメイン生成から除外する追加 subapp 名 |
|
|
188
|
-
| `minSubappFiles` | `2` | subapp がドメインになるために必要な最小ファイル数の上書き |
|
|
189
|
-
|
|
190
|
-
ファイル欠損または JSON 不正 → 静かにデフォルトにフォールバック(クラッシュなし)。典型的な用途:組み込みリストが曖昧すぎるとして除外する短縮形(`adm`、`bo`)を opt-in する、またはノイジーなモノレポで `minSubappFiles` を引き上げる。
|
|
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
|
+
## 実際のプロジェクトでのデモ
|
|
53
|
+
|
|
54
|
+
[`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app) で実行 — Java 11 · Spring Boot 2.6 · MyBatis · SQLite · 187 source files。結果: **75 generated files**、合計時間 **53 分**、すべての validator ✅。
|
|
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>📺 ターミナル出力 (テキスト版、検索・コピー用)</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>📄 生成された <code>CLAUDE.md</code> の抜粋 (実際の出力 — 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
|
+
上の値はすべて — 正確な依存関係の coordinates、`dev.db` のファイル名、`V1__create_tables.sql` のマイグレーション名、「no JPA」まで — Claude がファイルを書く前に scanner が `build.gradle` / `application.properties` / ソースツリーから抽出したものです。何一つ推測されていません。
|
|
228
170
|
|
|
229
|
-
|
|
171
|
+
</details>
|
|
230
172
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
║ Select generated document language (required) ║
|
|
234
|
-
╚══════════════════════════════════════════════════╝
|
|
235
|
-
|
|
236
|
-
生成されるファイル(CLAUDE.md、Standards、Rules、
|
|
237
|
-
Skills、Guides)は日本語で記述されます。
|
|
238
|
-
|
|
239
|
-
1. en — English
|
|
240
|
-
2. ko — 한국어 (Korean)
|
|
241
|
-
3. zh-CN — 简体中文 (Chinese Simplified)
|
|
242
|
-
❯ 4. ja — 日本語 (Japanese)
|
|
243
|
-
5. es — Español (Spanish)
|
|
244
|
-
6. vi — Tiếng Việt (Vietnamese)
|
|
245
|
-
7. hi — हिन्दी (Hindi)
|
|
246
|
-
8. ru — Русский (Russian)
|
|
247
|
-
9. fr — Français (French)
|
|
248
|
-
10. de — Deutsch (German)
|
|
249
|
-
|
|
250
|
-
↑↓ Move 1-0 Jump Enter Select ESC Cancel
|
|
251
|
-
```
|
|
173
|
+
<details>
|
|
174
|
+
<summary><strong>🛡️ 自動ロードされる実際の rule ファイル (<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
|
+
`paths: ["**/*"]` の glob は、プロジェクト内のいずれかのファイルを編集するたびに Claude Code がこの rule を自動ロードすることを意味します。rule 内のクラス名、パッケージパス、exception handler はすべて scan されたソースから直接抽出されています — プロジェクトの実際の `CustomizeExceptionHandler` と `JacksonCustomizations` を含めて。
|
|
279
232
|
|
|
280
|
-
|
|
281
|
-
# Rules(v2.0.0:60.memory を追加)
|
|
282
|
-
mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync,60.memory}
|
|
233
|
+
</details>
|
|
283
234
|
|
|
284
|
-
|
|
285
|
-
|
|
235
|
+
<details>
|
|
236
|
+
<summary><strong>🧠 自動生成された <code>decision-log.md</code> シード (実際の出力)</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:plan-installer の実行(プロジェクト分析)
|
|
298
|
-
|
|
299
|
-
プロジェクトをスキャンし、スタックを検出し、ドメインを見つけ、グループに分割し、プロンプトを生成します。
|
|
300
|
-
|
|
301
|
-
```bash
|
|
302
|
-
node claudeos-core-tools/plan-installer/index.js
|
|
303
|
-
```
|
|
258
|
+
Pass 4 は `pass2-merged.json` から抽出したアーキテクチャ上の決定事項で `decision-log.md` を seed します — その後のセッションでもコードベースが _このように見える_ という事実だけでなく、_なぜ_ そう見えるのかも記憶できるように。すべての選択肢 (「JPA/Hibernate」「MyBatis-Plus」) と帰結は実際の `build.gradle` の dependency ブロックに基づいています。
|
|
304
259
|
|
|
305
|
-
|
|
306
|
-
- `project-analysis.json` — 検出されたスタック、ドメイン、フロントエンド情報
|
|
307
|
-
- `domain-groups.json` — Pass 1 用ドメイングループ
|
|
308
|
-
- `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — 分析プロンプト
|
|
309
|
-
- `pass2-prompt.md` — マージプロンプト
|
|
310
|
-
- `pass3-prompt.md` — Phase 1 "Read Once, Extract Facts" ブロック(Rule A–E)が先頭に追加された Pass 3 プロンプトテンプレート。自動化パイプラインはランタイムで Pass 3 を複数ステージに分割し、このテンプレートが各ステージに供給されます。
|
|
311
|
-
- `pass3-context.json` — Pass 2 後に生成されるスリムなプロジェクト要約(< 5 KB)。Pass 3 プロンプトは完全な `pass2-merged.json` よりこちらを優先して参照します(v2.1.0)
|
|
312
|
-
- `pass4-prompt.md` — L4 メモリスキャフォールディングプロンプト(v2.0.0;`60.memory/` ルール書き込みにも同じ `staging-override.md` を使用)
|
|
260
|
+
</details>
|
|
313
261
|
|
|
314
|
-
|
|
262
|
+
---
|
|
315
263
|
|
|
316
|
-
|
|
264
|
+
## Quick Start
|
|
317
265
|
|
|
318
|
-
|
|
266
|
+
**前提条件:** Node.js 18+、[Claude Code](https://docs.anthropic.com/en/docs/claude-code) がインストール済みかつ認証済み。
|
|
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
|
-
# 各グループに対して Pass 1 を実行(ドメインとグループ番号を置き換え)
|
|
328
|
-
# 注:v1.6.1+ は perl の代わりに Node.js の String.replace() を使用 — perl は
|
|
329
|
-
# 不要になり、replacement-function セマンティクスにより、ドメイン名に現れる可能性のある
|
|
330
|
-
# $/&/$1 文字からの regex インジェクションを防止。
|
|
331
|
-
#
|
|
332
|
-
# Group 1:
|
|
333
|
-
DOMAIN_LIST="user, order, product" PASS_NUM=1 node -e "
|
|
334
|
-
const fs = require('fs');
|
|
335
|
-
const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
|
|
336
|
-
const out = tpl
|
|
337
|
-
.replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
|
|
338
|
-
.replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
|
|
339
|
-
process.stdout.write(out);
|
|
340
|
-
" | claude -p --dangerously-skip-permissions
|
|
341
|
-
|
|
342
|
-
# Group 2(存在する場合):
|
|
343
|
-
DOMAIN_LIST="payment, system, delivery" PASS_NUM=2 node -e "
|
|
344
|
-
const fs = require('fs');
|
|
345
|
-
const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
|
|
346
|
-
const out = tpl
|
|
347
|
-
.replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
|
|
348
|
-
.replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
|
|
349
|
-
process.stdout.write(out);
|
|
350
|
-
" | claude -p --dangerously-skip-permissions
|
|
351
|
-
|
|
352
|
-
# フロントエンドグループの場合、pass1-backend-prompt.md → pass1-frontend-prompt.md に置き換え
|
|
353
|
-
```
|
|
269
|
+
# 1. プロジェクトのルートに移動
|
|
270
|
+
cd my-spring-boot-project
|
|
354
271
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
#### Step 5:Pass 2 — 分析結果のマージ
|
|
272
|
+
# 2. init を実行 (コードを解析し、Claude にルール作成を依頼します)
|
|
273
|
+
npx claudeos-core init
|
|
358
274
|
|
|
359
|
-
|
|
360
|
-
cat claudeos-core/generated/pass2-prompt.md \
|
|
361
|
-
| claude -p --dangerously-skip-permissions
|
|
275
|
+
# 3. 完了。Claude Code を開いてコーディングを開始 — ルールは既にロード済みです。
|
|
362
276
|
```
|
|
363
277
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
#### Step 6:Pass 3 — すべてのドキュメントを生成(複数ステージに分割)
|
|
367
|
-
|
|
368
|
-
**v2.1.0 注意:** Pass 3 は自動化パイプラインで**常に split モードで実行**されます。各ステージはフレッシュなコンテキストウィンドウを持つ独立した `claude -p` 呼び出しであるため、プロジェクトの規模にかかわらず出力累積によるオーバーフローは構造的に発生しません。`pass3-prompt.md` テンプレートはステージごとに `STAGE:` ディレクティブと共に組み立てられ、どのサブセットのファイルを出力するかを Claude に伝えます。手動モードでは、完全なテンプレートを投入して 1 回の呼び出しで Claude にすべて生成させるのが最もシンプルですが、これは小規模プロジェクト(≤5 ドメイン)でのみ信頼できます。それより大きいプロジェクトでは `npx claudeos-core init` を使用し、split ランナーにステージオーケストレーションを任せてください。
|
|
278
|
+
`init` 完了後に **得られるもの**:
|
|
369
279
|
|
|
370
|
-
**単一呼び出しモード(小規模プロジェクト専用、≤5 ドメイン):**
|
|
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/ ← Claude Code が自動ロード
|
|
284
|
+
│ ├── 00.core/ (共通ルール — 命名、アーキテクチャ)
|
|
285
|
+
│ ├── 10.backend/ (バックエンドスタックのルール、該当する場合)
|
|
286
|
+
│ ├── 20.frontend/ (フロントエンドスタックのルール、該当する場合)
|
|
287
|
+
│ ├── 30.security-db/ (セキュリティ & DB のコンベンション)
|
|
288
|
+
│ ├── 40.infra/ (env、ロギング、CI/CD)
|
|
289
|
+
│ ├── 50.sync/ (ドキュメント同期のリマインダ — rules only)
|
|
290
|
+
│ ├── 60.memory/ (memory rules — Pass 4、rules only)
|
|
291
|
+
│ ├── 70.domains/{type}/ (ドメイン別ルール、type = backend|frontend)
|
|
292
|
+
│ └── 80.verification/ (テスト戦略 + ビルド検証のリマインダ)
|
|
293
|
+
├── claudeos-core/
|
|
294
|
+
│ ├── standard/ ← 参照ドキュメント (カテゴリ構造をミラー)
|
|
295
|
+
│ │ ├── 00.core/ (プロジェクト概要、アーキテクチャ、命名)
|
|
296
|
+
│ │ ├── 10.backend/ (バックエンド reference — バックエンドスタック時)
|
|
297
|
+
│ │ ├── 20.frontend/ (フロントエンド reference — フロントエンドスタック時)
|
|
298
|
+
│ │ ├── 30.security-db/ (セキュリティ & DB の reference)
|
|
299
|
+
│ │ ├── 40.infra/ (env / ロギング / CI-CD の reference)
|
|
300
|
+
│ │ ├── 70.domains/{type}/ (ドメイン別 reference)
|
|
301
|
+
│ │ ├── 80.verification/ (ビルド / 起動 / テスト reference — standard only)
|
|
302
|
+
│ │ └── 90.optional/ (スタック固有の追加 — standard only)
|
|
303
|
+
│ ├── skills/ (Claude が適用可能な再利用パターン)
|
|
304
|
+
│ ├── guide/ (一般的なタスク用 how-to ガイド)
|
|
305
|
+
│ ├── database/ (スキーマ概要、マイグレーションガイド)
|
|
306
|
+
│ ├── mcp-guide/ (MCP 統合のメモ)
|
|
307
|
+
│ └── memory/ (decision log、failure patterns、compaction)
|
|
308
|
+
└── CLAUDE.md (Claude が最初に読むインデックス)
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
`rules/` と `standard/` で同じ番号 prefix を共有するカテゴリは、同一の概念領域を表します (例: `10.backend` rules ↔ `10.backend` standards)。Rules-only カテゴリ: `50.sync` (ドキュメント同期リマインダ)、`60.memory` (Pass 4 memory)。Standard-only カテゴリ: `90.optional` (強制力のないスタック固有の追加)。それ以外の prefix (`00`、`10`、`20`、`30`、`40`、`70`、`80`) は `rules/` と `standard/` の **両方** に存在します。これで Claude Code はあなたのプロジェクトを把握できます。
|
|
376
312
|
|
|
377
|
-
|
|
313
|
+
---
|
|
378
314
|
|
|
379
|
-
|
|
315
|
+
## 誰のためのツールですか?
|
|
380
316
|
|
|
381
|
-
|
|
|
382
|
-
|
|
383
|
-
|
|
|
384
|
-
|
|
|
385
|
-
|
|
|
386
|
-
|
|
|
387
|
-
|
|
|
388
|
-
|
|
|
317
|
+
| あなたが... | このツールが取り除く pain |
|
|
318
|
+
|---|---|
|
|
319
|
+
| **Claude Code で新規プロジェクトを始めるソロ開発者** | 「毎セッション Claude にコンベンションを教える」が消える。`CLAUDE.md` + 8 カテゴリの `.claude/rules/` が一回の pass で生成される。 |
|
|
320
|
+
| **複数 repo にまたがる共有標準を維持するチームリード** | パッケージ名変更、ORM 切り替え、response wrapper 変更で `.claude/rules/` が drift。ClaudeOS-Core は deterministic に再同期 — 同じ入力 → byte-identical な出力、diff noise なし。 |
|
|
321
|
+
| **既に Claude Code を使っているが生成コードの修正に疲れた人** | 間違った response wrapper、間違ったパッケージ layout、MyBatis を使っているのに JPA、centralized middleware なのに `try/catch` 撒き散らし。scanner が本物のコンベンションを抽出し、すべての Claude pass が明示的な path allowlist に対して走ります。 |
|
|
322
|
+
| **新しい repo への onboarding** (既存プロジェクト、チームに参加) | repo で `init` を実行するだけで、生きた architecture map が手に入る: CLAUDE.md のスタック表、レイヤごとのルール (✅/❌ 例つき)、主要な選択 ("なぜ") を seed した decision log (JPA vs MyBatis、REST vs GraphQL など)。5 ファイルを読む方が 5,000 ソースファイルを読むより速い。 |
|
|
323
|
+
| **日本語 / 韓国語 / 中国語 / 他 7 言語で作業** | 大半の Claude Code rule generator は英語のみ。ClaudeOS-Core は **10 言語** (`en/ko/ja/zh-CN/es/vi/hi/ru/fr/de`) で完全なセットを書き、**byte-identical な構造検証** — 出力言語に関係なく同じ `claude-md-validator` の verdict。 |
|
|
324
|
+
| **monorepo で作業** (Turborepo、pnpm/yarn workspaces、Lerna) | 1 回の実行で backend + frontend のドメインが個別 prompt で解析される。`apps/*/` と `packages/*/` は自動的に walk され、スタック別のルールが `70.domains/{type}/` 配下に emit される。 |
|
|
325
|
+
| **OSS 貢献または実験** | 出力は gitignore-friendly — `claudeos-core/` はローカル作業ディレクトリ、ship が必要なのは `CLAUDE.md` + `.claude/` のみ。中断時 resume-safe、再実行 idempotent (`--force` なしなら手動編集は保持される)。 |
|
|
389
326
|
|
|
390
|
-
|
|
327
|
+
**適していないケース:** scan 段階を経ずに day-one から動く agents/skills/rules の one-size-fits-all なプリセットバンドルが欲しい場合 (どのツールがどこに適しているかは [docs/comparison.md](docs/ja/comparison.md) を参照)、もしくはプロジェクトが [サポート対象スタック](#supported-stacks) のいずれにもまだ該当しない場合、または単一の `CLAUDE.md` だけ欲しい場合 (ビルトインの `claude /init` で十分 — 別ツールを入れる必要はありません)。
|
|
391
328
|
|
|
392
|
-
|
|
329
|
+
---
|
|
393
330
|
|
|
394
|
-
|
|
331
|
+
## どのように動作しますか?
|
|
395
332
|
|
|
396
|
-
|
|
333
|
+
ClaudeOS-Core は通常の Claude Code ワークフローを反転させます:
|
|
397
334
|
|
|
398
|
-
```bash
|
|
399
|
-
cat claudeos-core/generated/pass4-prompt.md \
|
|
400
|
-
| claude -p --dangerously-skip-permissions
|
|
401
335
|
```
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
> **v2.1.0 gap-fill:** Pass 4 は `claudeos-core/skills/00.shared/MANIFEST.md` の存在も保証します。Pass 3c がこれを省略した場合(スキルが少ないプロジェクトで、スタックの `pass3.md` テンプレートは `MANIFEST.md` を生成ターゲットに挙げているものの REQUIRED としてマークしていないため起こり得ます)、gap-fill が最小限のスタブを作成し、`.claude/rules/50.sync/02.skills-sync.md`(v2.2.0 パス — sync ルール数が 3 個から 2 個に削減され、`03` が `02` になりました)の参照ターゲットが常に有効である状態を保ちます。冪等:ファイルがすでに実体のある内容(>20 文字)を持っている場合はスキップします。
|
|
406
|
-
|
|
407
|
-
> **注意:** `claude -p` が失敗したり `pass4-prompt.md` が欠損している場合、自動化パイプラインは `lib/memory-scaffold.js` を経由した静的スキャフォールドにフォールバックします(`--lang` が非英語の場合は Claude 主導の翻訳付き)。静的フォールバックは `npx claudeos-core init` 内でのみ実行されます — 手動モードでは Pass 4 が成功する必要があります。
|
|
408
|
-
|
|
409
|
-
#### Step 8:検証ツールの実行
|
|
410
|
-
|
|
411
|
-
```bash
|
|
412
|
-
# メタデータを生成(他のチェック前に必須)
|
|
413
|
-
node claudeos-core-tools/manifest-generator/index.js
|
|
414
|
-
|
|
415
|
-
# すべてのチェックを実行
|
|
416
|
-
node claudeos-core-tools/health-checker/index.js
|
|
417
|
-
|
|
418
|
-
# または個別にチェックを実行:
|
|
419
|
-
node claudeos-core-tools/plan-validator/index.js --check # Plan ↔ disk 整合性
|
|
420
|
-
node claudeos-core-tools/sync-checker/index.js # 未登録/孤児ファイル
|
|
421
|
-
node claudeos-core-tools/content-validator/index.js # ファイル品質チェック(memory/ セクション [9/9] を含む)
|
|
422
|
-
node claudeos-core-tools/pass-json-validator/index.js # Pass 1–4 JSON + 完了マーカーチェック
|
|
336
|
+
通常: 人がプロジェクトを説明 → Claude がスタックを推測 → Claude が docs を作成
|
|
337
|
+
このツール: コードがスタックを読む → コードが確定した事実を Claude に渡す → Claude が事実から docs を作成
|
|
423
338
|
```
|
|
424
339
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
```bash
|
|
428
|
-
# 生成されたファイル数をカウント
|
|
429
|
-
find .claude claudeos-core -type f | grep -v node_modules | grep -v '/generated/' | wc -l
|
|
430
|
-
|
|
431
|
-
# CLAUDE.md を確認
|
|
432
|
-
head -30 CLAUDE.md
|
|
340
|
+
パイプラインは **3 段階** で実行され、LLM 呼び出しの両側にコードがあります:
|
|
433
341
|
|
|
434
|
-
|
|
435
|
-
cat claudeos-core/standard/00.core/01.project-overview.md | head -20
|
|
342
|
+
**1. Step A — Scanner (deterministic、LLM なし)。** Node.js scanner がプロジェクトルートを walk し、`package.json` / `build.gradle` / `pom.xml` / `pyproject.toml` を読み、`.env*` ファイルをパースし (`PASSWORD/SECRET/TOKEN/JWT_SECRET/...` のような sensitive な変数は redaction)、architecture pattern を分類し (Java の 5 パターン A/B/C/D/E、Kotlin CQRS / multi-module、Next.js App vs Pages Router、FSD、components-pattern)、ドメインを発見し、存在するすべてのソースファイルパスの明示的 allowlist を構築します。出力: `project-analysis.json` — 以降のすべての段階の単一の source of truth です。
|
|
436
343
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
344
|
+
**2. Step B — 4-Pass Claude パイプライン (Step A の事実によって制約される)。**
|
|
345
|
+
- **Pass 1** はドメイングループごとに代表ファイルを読み、ドメインあたり ~50–100 のコンベンションを抽出します — response wrapper、logging library、error handling、naming convention、test pattern。ドメイングループごとに 1 回実行される (`max 4 domains, 40 files per group`) ため context が overflow しません。
|
|
346
|
+
- **Pass 2** はドメインごとの解析をすべてプロジェクト全体の像にマージし、ドメイン間で意見が割れたときは支配的なコンベンションを選びます。
|
|
347
|
+
- **Pass 3** は `CLAUDE.md` + `.claude/rules/` + `claudeos-core/standard/` + skills + guides を書きます — stage に分割 (`3a` facts → `3b-core/3b-N` rules+standards → `3c-core/3c-N` skills+guides → `3d-aux` database+mcp-guide) されるため、`pass2-merged.json` が大きい場合でも各 stage の prompt が LLM の context window に収まります。≥16 ドメインのプロジェクトでは 3b/3c を ≤15 ドメインの batch に sub-divide します。
|
|
348
|
+
- **Pass 4** は L4 memory layer (`decision-log.md`、`failure-patterns.md`、`compaction.md`、`auto-rule-update.md`) を seed し、universal な scaffold rules を追加します。Pass 4 は **`CLAUDE.md` の修正を禁止** されています — Pass 3 の Section 8 が authoritative です。
|
|
440
349
|
|
|
441
|
-
|
|
350
|
+
**3. Step C — Verification (deterministic、LLM なし)。** 5 つの validator が出力を検査します:
|
|
351
|
+
- `claude-md-validator` — `CLAUDE.md` に対する 25 個の構造チェック (8 sections、H3/H4 count、memory file uniqueness、T1 canonical heading invariant)。Language-invariant: `--lang` に関係なく同じ verdict。
|
|
352
|
+
- `content-validator` — 10 個の content チェック。path-claim 検証 (`STALE_PATH` が捏造された `src/...` 参照を検出) と MANIFEST drift 検出を含む。
|
|
353
|
+
- `pass-json-validator` — Pass 1/2/3/4 JSON well-formedness + stack-aware section count。
|
|
354
|
+
- `plan-validator` — plan ↔ disk の整合性 (legacy、v2.1.0 以降ほぼ no-op)。
|
|
355
|
+
- `sync-checker` — 7 個の追跡対象ディレクトリにわたる disk ↔ `sync-map.json` 登録の整合性。
|
|
442
356
|
|
|
443
|
-
|
|
357
|
+
3-tier severity (`fail` / `warn` / `advisory`) なので、ユーザが手動で直せる LLM hallucination について warning が CI を deadlock させることはありません。
|
|
444
358
|
|
|
445
|
-
|
|
446
|
-
# Claude Code で — 自然に依頼するだけ:
|
|
447
|
-
"order ドメインの CRUD を作成して"
|
|
448
|
-
"ユーザー認証 API を追加して"
|
|
449
|
-
"このコードをプロジェクトのパターンに合わせてリファクタリングして"
|
|
359
|
+
すべてを結びつける invariant: **Claude はコードに実在するパスしか引用できない** — Step A が finite な allowlist を渡しているからです。それでも LLM が何かをでっち上げようとしたら (まれですが特定の seed で起きます)、Step C が docs を ship する前に捕まえます。
|
|
450
360
|
|
|
451
|
-
|
|
452
|
-
```
|
|
361
|
+
per-pass の詳細、marker ベースの resume、Claude Code の `.claude/` sensitive-path block を回避する staged-rules の仕組み、stack 検出の internals は [docs/architecture.md](docs/ja/architecture.md) を参照。
|
|
453
362
|
|
|
454
363
|
---
|
|
455
364
|
|
|
456
|
-
##
|
|
457
|
-
|
|
458
|
-
```
|
|
459
|
-
npx claudeos-core init
|
|
460
|
-
│
|
|
461
|
-
├── [1] npm install ← 依存関係(~10 秒)
|
|
462
|
-
├── [2] ディレクトリ構造 ← フォルダ作成(~1 秒)
|
|
463
|
-
├── [3] plan-installer (Node.js) ← プロジェクトスキャン(~5 秒)
|
|
464
|
-
│ ├── スタック自動検出(マルチスタック対応)
|
|
465
|
-
│ ├── ドメインリスト抽出(タグ付け:backend/frontend)
|
|
466
|
-
│ ├── ドメイングループに分割(タイプ別)
|
|
467
|
-
│ ├── pass3-context.json をビルド(スリム要約、v2.1.0)
|
|
468
|
-
│ └── スタック固有のプロンプトを選択(タイプ別)
|
|
469
|
-
│
|
|
470
|
-
├── [4] Pass 1 × N (claude -p) ← 深層コード分析(~2-8 分)
|
|
471
|
-
│ ├── ⚙️ バックエンドグループ → バックエンド固有プロンプト
|
|
472
|
-
│ └── 🎨 フロントエンドグループ → フロントエンド固有プロンプト
|
|
473
|
-
│
|
|
474
|
-
├── [5] Pass 2 × 1 (claude -p) ← 分析マージ(~1 分)
|
|
475
|
-
│ └── すべての Pass 1 結果を pass2-merged.json に統合
|
|
476
|
-
│
|
|
477
|
-
├── [6] Pass 3(split モード、v2.1.0) ← すべてを生成
|
|
478
|
-
│ │
|
|
479
|
-
│ ├── 3a × 1 (claude -p) ← ファクト抽出(~5-10 分)
|
|
480
|
-
│ │ └── pass2-merged.json を一度読んで → pass3a-facts.md
|
|
481
|
-
│ │
|
|
482
|
-
│ ├── 3b-core × 1 (claude -p) ← CLAUDE.md + 共通 standard/rules
|
|
483
|
-
│ ├── 3b-1..N × N (claude -p) ← ドメイン standard/rules(≤15 ドメイン/バッチ)
|
|
484
|
-
│ │
|
|
485
|
-
│ ├── 3c-core × 1 (claude -p) ← Guides + 共有 skills + MANIFEST.md
|
|
486
|
-
│ ├── 3c-1..N × N (claude -p) ← ドメインサブスキル(≤15 ドメイン/バッチ)
|
|
487
|
-
│ │
|
|
488
|
-
│ └── 3d-aux × 1 (claude -p) ← database/ + mcp-guide/ スタブ
|
|
489
|
-
│
|
|
490
|
-
├── [7] Pass 4 × 1 (claude -p) ← メモリスキャフォールディング(~30 秒-5 分)
|
|
491
|
-
│ ├── memory/ をシード(decision-log、failure-patterns、…)
|
|
492
|
-
│ ├── 60.memory/ ルールを生成
|
|
493
|
-
│ ├── CLAUDE.md に "Memory (L4)" セクションを追加
|
|
494
|
-
│ └── Gap-fill:skills/00.shared/MANIFEST.md の存在を保証(v2.1.0)
|
|
495
|
-
│
|
|
496
|
-
└── [8] 検証 ← health checker を自動実行
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
### なぜ 4 Pass なのか?
|
|
500
|
-
|
|
501
|
-
**Pass 1** はソースコードを読む唯一の Pass です。ドメインごとに代表ファイルを選択し、55–95 分析カテゴリ(スタック別)全体でパターンを抽出します。大規模プロジェクトでは、Pass 1 はドメイングループごとに 1 回ずつ複数回実行されます。マルチスタックプロジェクト(例:Java backend + React frontend)では、backend と frontend のドメインは各スタックに合わせた**異なる分析プロンプト**を使用します。
|
|
502
|
-
|
|
503
|
-
**Pass 2** はすべての Pass 1 結果を統一された分析にマージします:共通パターン(100% 共有)、多数派パターン(50%+ 共有)、ドメイン固有パターン、重大度別のアンチパターン、横断的関心事(命名、セキュリティ、DB、テスト、ロギング、パフォーマンス)。backend と frontend の結果は一緒にマージされます。
|
|
365
|
+
## Supported Stacks
|
|
504
366
|
|
|
505
|
-
|
|
367
|
+
12 種のスタック、プロジェクトファイルから自動検出:
|
|
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** — 冪等なファイル書き込み(ターゲットが実体のある内容で存在する場合はスキップ)により、Pass 3 は中断後も安全に再実行できます。
|
|
511
|
-
- **Rule C** — ファクトテーブルを単一の真実の源として、ファイル間の整合性を強制。
|
|
512
|
-
- **Rule D** — 出力の簡潔さ:ファイル書き込みの合間は 1 行(`[WRITE]`/`[SKIP]`)のみ、ファクトテーブルの再掲やファイル内容のエコーをしない。
|
|
513
|
-
- **Rule E** — バッチ冪等チェック:ターゲットごとの `Read` 呼び出しの代わりに、PHASE 2 開始時に `Glob` を 1 回だけ実行。
|
|
371
|
+
**Frontend:** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
|
|
514
372
|
|
|
515
|
-
|
|
373
|
+
マルチスタックのプロジェクト (例: Spring Boot バックエンド + Next.js フロントエンド) もそのまま動作します。
|
|
516
374
|
|
|
517
|
-
|
|
375
|
+
検出ルールと各 scanner が抽出する内容は [docs/ja/stacks.md](docs/ja/stacks.md) を参照。
|
|
518
376
|
|
|
519
377
|
---
|
|
520
378
|
|
|
521
|
-
##
|
|
522
|
-
|
|
523
|
-
```
|
|
524
|
-
your-project/
|
|
525
|
-
│
|
|
526
|
-
├── CLAUDE.md ← Claude Code エントリーポイント(8セクション決定的構造、v2.2.0)
|
|
527
|
-
│
|
|
528
|
-
├── .claude/
|
|
529
|
-
│ └── rules/ ← Glob トリガールール
|
|
530
|
-
│ ├── 00.core/
|
|
531
|
-
│ ├── 10.backend/
|
|
532
|
-
│ ├── 20.frontend/
|
|
533
|
-
│ ├── 30.security-db/
|
|
534
|
-
│ ├── 40.infra/
|
|
535
|
-
│ ├── 50.sync/ ← 同期リマインダールール
|
|
536
|
-
│ └── 60.memory/ ← L4 メモリオンデマンドスコープルール(v2.0.0)
|
|
537
|
-
│
|
|
538
|
-
├── claudeos-core/ ← メイン出力ディレクトリ
|
|
539
|
-
│ ├── generated/ ← 分析 JSON + 動的プロンプト + Pass マーカー(gitignore 対象)
|
|
540
|
-
│ │ ├── project-analysis.json ← スタック情報(マルチスタック対応)
|
|
541
|
-
│ │ ├── domain-groups.json ← type: backend/frontend 付きグループ
|
|
542
|
-
│ │ ├── pass1-backend-prompt.md ← バックエンド分析プロンプト
|
|
543
|
-
│ │ ├── pass1-frontend-prompt.md ← フロントエンド分析プロンプト(検出時)
|
|
544
|
-
│ │ ├── pass2-prompt.md ← マージプロンプト
|
|
545
|
-
│ │ ├── pass2-merged.json ← Pass 2 出力(Pass 3a のみが消費)
|
|
546
|
-
│ │ ├── pass3-context.json ← Pass 3 用のスリム要約(< 5 KB、v2.1.0)
|
|
547
|
-
│ │ ├── pass3-prompt.md ← Pass 3 プロンプトテンプレート(Phase 1 ブロック先頭追加)
|
|
548
|
-
│ │ ├── pass3a-facts.md ← Pass 3a が書き、3b/3c/3d が読むファクトシート(v2.1.0)
|
|
549
|
-
│ │ ├── pass4-prompt.md ← メモリスキャフォールディングプロンプト(v2.0.0)
|
|
550
|
-
│ │ ├── pass3-complete.json ← Pass 3 完了マーカー(split モード:groupsCompleted を含む、v2.1.0)
|
|
551
|
-
│ │ ├── pass4-memory.json ← Pass 4 完了マーカー(再実行時スキップ)
|
|
552
|
-
│ │ ├── rule-manifest.json ← 検証ツール用ファイルインデックス
|
|
553
|
-
│ │ ├── sync-map.json ← Plan ↔ disk マッピング(v2.1.0 では空;sync-checker 互換のため保持)
|
|
554
|
-
│ │ ├── stale-report.json ← 統合検証結果
|
|
555
|
-
│ │ ├── .i18n-cache-<lang>.json ← 翻訳キャッシュ(非英語 `--lang`)
|
|
556
|
-
│ │ └── .staged-rules/ ← `.claude/rules/` 書き込み用一時ステージングディレクトリ(自動移動 + クリーン)
|
|
557
|
-
│ ├── standard/ ← コーディングスタンダード(15-19 ファイル + 60.domains/ 内のドメイン別)
|
|
558
|
-
│ │ ├── 00.core/ ← 概要、アーキテクチャ、命名
|
|
559
|
-
│ │ ├── 10.backend-api/ ← API パターン(スタック固有)
|
|
560
|
-
│ │ ├── 20.frontend-ui/ ← フロントエンドパターン(検出時)
|
|
561
|
-
│ │ ├── 30.security-db/ ← セキュリティ、DB スキーマ、ユーティリティ
|
|
562
|
-
│ │ ├── 40.infra/ ← 設定、ロギング、CI/CD
|
|
563
|
-
│ │ ├── 50.verification/ ← ビルド検証、テスト
|
|
564
|
-
│ │ ├── 60.domains/ ← ドメイン別スタンダード(Pass 3b-N が書き込む、v2.1.0)
|
|
565
|
-
│ │ └── 90.optional/ ← オプション規約(スタック固有エクストラ)
|
|
566
|
-
│ ├── skills/ ← CRUD/ページスキャフォールディングスキル
|
|
567
|
-
│ │ └── 00.shared/MANIFEST.md ← 登録済みスキルの単一の真実の源
|
|
568
|
-
│ ├── guide/ ← オンボーディング、FAQ、トラブルシューティング(9 ファイル)
|
|
569
|
-
│ ├── database/ ← DB スキーマ、マイグレーションガイド
|
|
570
|
-
│ ├── mcp-guide/ ← MCP サーバ統合ガイド
|
|
571
|
-
│ └── memory/ ← L4:チーム知識(4 ファイル)— コミットする
|
|
572
|
-
│ ├── decision-log.md ← 設計決定の「なぜ」
|
|
573
|
-
│ ├── failure-patterns.md ← 再発エラー & 修正(自動スコアリング — `npx claudeos-core memory score`)
|
|
574
|
-
│ ├── compaction.md ← 4 ステージコンパクション戦略(`npx claudeos-core memory compact` で実行)
|
|
575
|
-
│ └── auto-rule-update.md ← ルール改善提案(`npx claudeos-core memory propose-rules`)
|
|
576
|
-
│
|
|
577
|
-
└── claudeos-core-tools/ ← このツールキット(変更しない)
|
|
578
|
-
```
|
|
579
|
-
|
|
580
|
-
すべての standard ファイルは ✅ 正しい例、❌ 間違った例、ルール要約テーブルを含みます — すべて汎用テンプレートではなく、実際のコードパターンから導出されます。
|
|
581
|
-
|
|
582
|
-
> **v2.1.0 注意:** `claudeos-core/plan/` はもう生成されません。Master plan は Claude Code がランタイムで消費しない内部バックアップで、それらを Pass 3 で集約することが出力累積オーバーフローの主要因でした。バックアップ/復元には `git` を使用してください。v2.0.x からアップグレードするプロジェクトは、既存の `claudeos-core/plan/` ディレクトリを安全に削除できます。
|
|
379
|
+
## 日常のワークフロー
|
|
583
380
|
|
|
584
|
-
|
|
381
|
+
3 つのコマンドで使用量の約 95% をカバーします:
|
|
585
382
|
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
-
|
|
589
|
-
- `claudeos-core/standard/**`、`skills/**`、`guide/**`、`database/**`、`mcp-guide/**`、`plan/**` — 生成されたドキュメント
|
|
590
|
-
- `claudeos-core/memory/**` — 決定履歴、失敗パターン、ルール提案
|
|
383
|
+
```bash
|
|
384
|
+
# プロジェクトでの初回実行
|
|
385
|
+
npx claudeos-core init
|
|
591
386
|
|
|
592
|
-
|
|
387
|
+
# standards や rules を手動編集した後
|
|
388
|
+
npx claudeos-core lint
|
|
593
389
|
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
claudeos-core/generated/
|
|
390
|
+
# ヘルスチェック (コミット前または CI で実行)
|
|
391
|
+
npx claudeos-core health
|
|
597
392
|
```
|
|
598
393
|
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
---
|
|
602
|
-
|
|
603
|
-
## プロジェクトサイズによる自動スケーリング
|
|
604
|
-
|
|
605
|
-
Pass 3 の split モードはステージ数をドメイン数に応じてスケールさせます。バッチのサブ分割は 16 ドメインから発動し、各ステージの出力を ~50 ファイル以下に抑えます。これは出力累積オーバーフローが始まる前の、`claude -p` にとって経験的に安全な範囲です。
|
|
606
|
-
|
|
607
|
-
| プロジェクトサイズ | ドメイン | Pass 3 ステージ数 | 合計 `claude -p` | 推定時間 |
|
|
608
|
-
|---|---|---|---|---|
|
|
609
|
-
| 小規模 | 1–4 | 4(`3a`、`3b-core`、`3c-core`、`3d-aux`) | 7(Pass 1 + 2 + Pass 3 4 ステージ + Pass 4) | ~10–15 分 |
|
|
610
|
-
| 中規模 | 5–15 | 4 | 8–9 | ~25–45 分 |
|
|
611
|
-
| 大規模 | 16–30 | **8**(3b、3c がそれぞれ 2 バッチに分割) | 11–12 | **~60–105 分** |
|
|
612
|
-
| 超大規模 | 31–45 | 10 | 13–14 | ~100–150 分 |
|
|
613
|
-
| 超超大規模 | 46–60 | 12 | 15–16 | ~150–200 分 |
|
|
614
|
-
| 超超超大規模 | 61+ | 14+ | 17+ | 200 分+ |
|
|
615
|
-
|
|
616
|
-
バッチ分割時のステージ数公式:`1 (3a) + 1 (3b-core) + N (3b-1..N) + 1 (3c-core) + N (3c-1..N) + 1 (3d-aux) = 2N + 4`(`N = ceil(totalDomains / 15)`)。
|
|
617
|
-
|
|
618
|
-
Pass 4(メモリスキャフォールディング)は、Claude 主導の生成または静的フォールバックのいずれが走るかによって、上に ~30 秒〜5 分を追加します。マルチスタックプロジェクト(例:Java + React)では、backend と frontend のドメインが合算されます。backend 6 + frontend 4 ドメイン = 合計 10 で中規模ティアになります。
|
|
619
|
-
|
|
620
|
-
---
|
|
621
|
-
|
|
622
|
-
## 検証ツール
|
|
623
|
-
|
|
624
|
-
ClaudeOS-Core には生成後に自動的に実行される 5 つの組み込み検証ツールが含まれています:
|
|
394
|
+
memory layer のメンテナンス用にもう 2 つ:
|
|
625
395
|
|
|
626
396
|
```bash
|
|
627
|
-
#
|
|
628
|
-
npx claudeos-core
|
|
629
|
-
|
|
630
|
-
# 個別コマンド
|
|
631
|
-
npx claudeos-core validate # Plan ↔ disk 比較
|
|
632
|
-
npx claudeos-core refresh # Disk → Plan 同期
|
|
633
|
-
npx claudeos-core restore # Plan → Disk リストア
|
|
397
|
+
# failure-patterns ログのコンパクション (定期的に実行)
|
|
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
|
+
# 頻発する failure pattern を提案ルールへ昇格
|
|
401
|
+
npx claudeos-core memory propose-rules
|
|
640
402
|
```
|
|
641
403
|
|
|
642
|
-
|
|
643
|
-
|---|---|
|
|
644
|
-
| **manifest-generator** | メタデータ JSON を構築(`rule-manifest.json`、`sync-map.json`、`stale-report.json` を初期化);`memory/` を含む 7 ディレクトリをインデックス化(要約の `totalMemory`)。v2.1.0:master plan が廃止されたため `plan-manifest.json` は生成されなくなりました。 |
|
|
645
|
-
| **plan-validator** | 依然として `claudeos-core/plan/` を持つプロジェクト(レガシーアップグレードケース)向けに、master plan の `<file>` ブロックを disk と照合します。v2.1.0:`plan/` が存在しないか空の場合は `plan-sync-status.json` の出力をスキップします — `stale-report.json` はパスする no-op を引き続き記録します。 |
|
|
646
|
-
| **sync-checker** | 未登録ファイル(disk 上にあるが plan にない)と孤児エントリを検出 — 7 ディレクトリをカバー(v2.0.0 で `memory/` を追加)。`sync-map.json` にマッピングがない場合(v2.1.0 のデフォルト状態)でもクリーンに終了します。 |
|
|
647
|
-
| **content-validator** | 9 セクションの品質チェック — 空ファイル、✅/❌ 例の欠損、必須セクション、加えて L4 メモリスキャフォールドの整合性(decision-log 見出し日付、failure-pattern 必須フィールド、フェンス認識パース) |
|
|
648
|
-
| **pass-json-validator** | Pass 1–4 JSON 構造に加えて `pass3-complete.json`(split モード形状、v2.1.0)と `pass4-memory.json` 完了マーカーを検証 |
|
|
404
|
+
各コマンドの全オプションは [docs/ja/commands.md](docs/ja/commands.md) を参照。
|
|
649
405
|
|
|
650
406
|
---
|
|
651
407
|
|
|
652
|
-
##
|
|
653
|
-
|
|
654
|
-
ClaudeOS-Core が生成するドキュメントは、Claude Code が実際に読み取るドキュメントです — その方法は以下のとおりです:
|
|
655
|
-
|
|
656
|
-
### Claude Code が自動的に読むファイル
|
|
657
|
-
|
|
658
|
-
| ファイル | タイミング | 保証 |
|
|
659
|
-
|---|---|---|
|
|
660
|
-
| `CLAUDE.md` | すべての会話開始時 | 常時 |
|
|
661
|
-
| `.claude/rules/00.core/*` | 任意のファイル編集時(`paths: ["**/*"]`) | 常時 |
|
|
662
|
-
| `.claude/rules/10.backend/*` | 任意のファイル編集時(`paths: ["**/*"]`) | 常時 |
|
|
663
|
-
| `.claude/rules/20.frontend/*` | フロントエンドファイル編集時(component/page/style パスにスコープ) | 条件付き |
|
|
664
|
-
| `.claude/rules/30.security-db/*` | 任意のファイル編集時(`paths: ["**/*"]`) | 常時 |
|
|
665
|
-
| `.claude/rules/40.infra/*` | config/infra ファイル編集時のみ(スコープ付き paths) | 条件付き |
|
|
666
|
-
| `.claude/rules/50.sync/*` | claudeos-core ファイル編集時のみ(スコープ付き paths) | 条件付き |
|
|
667
|
-
| `.claude/rules/60.memory/*` | `claudeos-core/memory/*` 編集時(memory パスにスコープ) — オンデマンドメモリレイヤを**どのように**読み書きするかを指示 | 条件付き(v2.0.0) |
|
|
668
|
-
|
|
669
|
-
### Claude Code がルール参照経由でオンデマンドで読むもの
|
|
670
|
-
|
|
671
|
-
各ルールファイルは `## Reference` セクションを通じて対応する standard にリンクします。Claude は現在のタスクに関連する standard のみを読みます:
|
|
672
|
-
|
|
673
|
-
- `claudeos-core/standard/**` — コーディングパターン、✅/❌ 例、命名規約
|
|
674
|
-
- `claudeos-core/database/**` — DB スキーマ(クエリ、マッパー、マイグレーション用)
|
|
675
|
-
- `claudeos-core/memory/**`(v2.0.0)— L4 チーム知識レイヤ;**自動ロードされない**(すべての会話でノイジーになりすぎる)。代わりに、`60.memory/*` ルールが Claude にこれらのファイルを*いつ* Read するかを指示:セッション開始時(最近の `decision-log.md` + 重要度の高い `failure-patterns.md` をスキム)、決定を下すか再発エラーに遭遇したときにオンデマンドで追記。
|
|
408
|
+
## 何が違うのか
|
|
676
409
|
|
|
677
|
-
|
|
410
|
+
ほとんどの Claude Code ドキュメント生成ツールは「説明」から始まります (人がツールに伝え、ツールが Claude に伝える)。ClaudeOS-Core は「実際のソースコード」から始まります (ツールが読み、確定した事実を Claude に伝え、Claude は確定した内容だけを書く)。
|
|
678
411
|
|
|
679
|
-
|
|
412
|
+
具体的な 3 つの帰結:
|
|
680
413
|
|
|
681
|
-
|
|
414
|
+
1. **Deterministic stack detection.** 同じプロジェクト + 同じコード = 同じ出力。「今回は Claude のサイコロが違った」現象がない。
|
|
415
|
+
2. **No invented paths.** Pass 3 のプロンプトは許可されたソースパスをすべて明示的に列挙 — Claude は存在しないパスを引用できない。
|
|
416
|
+
3. **Multi-stack aware.** バックエンドとフロントエンドのドメインが同一実行内でそれぞれ異なる解析プロンプトを使用。
|
|
682
417
|
|
|
683
|
-
|
|
684
|
-
|---|---|
|
|
685
|
-
| `claudeos-core/plan/` | レガシープロジェクト(v2.0.x 以前)の master plan バックアップ。v2.1.0 では生成されません。存在しても Claude Code は自動ロードしません — オンデマンド読み込みのみ。 |
|
|
686
|
-
| `claudeos-core/generated/` | ビルドメタデータ JSON、プロンプト、Pass マーカー、翻訳キャッシュ、`.staged-rules/`。コーディング用ではありません。 |
|
|
687
|
-
| `claudeos-core/guide/` | 人間向けオンボーディングガイド。 |
|
|
688
|
-
| `claudeos-core/mcp-guide/` | MCP サーバドキュメント。コーディング用ではありません。 |
|
|
689
|
-
| `claudeos-core/memory/`(自動ロード) | **自動ロード無効化**設計 — すべての会話でコンテキストが肥大化。代わりに `60.memory/*` ルール経由でオンデマンド読み込み(例:セッション開始時の `failure-patterns.md` スキャン)。常にコミットする。 |
|
|
418
|
+
他ツールとの scope 比較は [docs/ja/comparison.md](docs/ja/comparison.md) を参照。比較は **各ツールが何をするか** に関するもので、**どれが優れているか** ではありません — ほとんどは相補的です。
|
|
690
419
|
|
|
691
420
|
---
|
|
692
421
|
|
|
693
|
-
##
|
|
422
|
+
## 検証 (post-generation)
|
|
694
423
|
|
|
695
|
-
|
|
424
|
+
Claude が docs を書いた後、コードがそれを検証します。5 つの独立した validator:
|
|
696
425
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
426
|
+
| Validator | 検査内容 | 実行元 |
|
|
427
|
+
|---|---|---|
|
|
428
|
+
| `claude-md-validator` | CLAUDE.md の構造的不変条件 (8 sections、language-invariant) | `claudeos-core lint` |
|
|
429
|
+
| `content-validator` | パスクレームが実在するか、manifest の整合性 | `health` (advisory) |
|
|
430
|
+
| `pass-json-validator` | Pass 1 / 2 / 3 / 4 の出力が well-formed JSON か | `health` (warn) |
|
|
431
|
+
| `plan-validator` | 保存された plan がディスクと一致するか | `health` (fail-on-error) |
|
|
432
|
+
| `sync-checker` | ディスク上のファイルが `sync-map.json` の登録と一致するか (orphaned/unregistered の検出) | `health` (fail-on-error) |
|
|
703
433
|
|
|
704
|
-
|
|
434
|
+
`health-checker` が 4 つのランタイム validator を 3 段階の severity (fail / warn / advisory) でオーケストレーションし、CI に適した exit code で終了します。`claude-md-validator` は構造的な drift が soft warning ではなく re-init のシグナルなので、`lint` コマンドで個別に実行されます。いつでも実行可能:
|
|
705
435
|
|
|
706
436
|
```bash
|
|
707
|
-
# standard や rules ファイルを編集した後:
|
|
708
|
-
npx claudeos-core refresh
|
|
709
|
-
|
|
710
|
-
# すべての整合性を確認
|
|
711
437
|
npx claudeos-core health
|
|
712
438
|
```
|
|
713
439
|
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
```bash
|
|
717
|
-
# v2.1.0 推奨:master plan が生成されなくなったため、git を使って復元します。
|
|
718
|
-
# 生成ドキュメントを定期的にコミットしておけば、再生成せずに特定ファイルだけ
|
|
719
|
-
# ロールバックできます:
|
|
720
|
-
git checkout HEAD -- .claude/rules/ claudeos-core/
|
|
721
|
-
|
|
722
|
-
# レガシー(claudeos-core/plan/ が残っている v2.0.x プロジェクト):
|
|
723
|
-
npx claudeos-core restore
|
|
724
|
-
```
|
|
725
|
-
|
|
726
|
-
### メモリレイヤメンテナンス(v2.0.0)
|
|
727
|
-
|
|
728
|
-
L4 メモリレイヤ(`claudeos-core/memory/`)はセッション間でチーム知識を蓄積します。3 つの CLI サブコマンドが健全性を維持します:
|
|
729
|
-
|
|
730
|
-
```bash
|
|
731
|
-
# Compact:4 ステージコンパクションポリシーを適用(定期的 — 例:月次)
|
|
732
|
-
npx claudeos-core memory compact
|
|
733
|
-
# Stage 1:古いエントリを要約(>30 日、本文 → 一行)
|
|
734
|
-
# Stage 2:重複見出しをマージ(frequency 合算、最新の fix を保持)
|
|
735
|
-
# Stage 3:低重要度 + 古いものをドロップ(importance <3 AND lastSeen >60 日)
|
|
736
|
-
# Stage 4:ファイルあたり 400 行の上限を強制(最も古い低重要度から先にドロップ)
|
|
737
|
-
|
|
738
|
-
# Score:failure-patterns.md エントリを重要度で再ランク付け
|
|
739
|
-
npx claudeos-core memory score
|
|
740
|
-
# importance = round(frequency × 1.5 + recency × 5)、最大 10
|
|
741
|
-
# 複数の新しい失敗パターンを追加後に実行
|
|
742
|
-
|
|
743
|
-
# Propose-rules:再発する失敗から候補ルール追加を提示
|
|
744
|
-
npx claudeos-core memory propose-rules
|
|
745
|
-
# frequency ≥ 3 の failure-patterns.md エントリを読み込み
|
|
746
|
-
# confidence を計算(重み付けエビデンスに sigmoid × アンカー倍率)
|
|
747
|
-
# memory/auto-rule-update.md に提案を書き込み(自動適用されない)
|
|
748
|
-
# Confidence ≥ 0.70 は真剣な検討に値する;受諾 → ルール編集 + 決定を記録
|
|
749
|
-
|
|
750
|
-
# v2.1.0:`memory --help` はサブコマンドのヘルプを表示するようになりました(以前はトップレベルが表示されていました)
|
|
751
|
-
npx claudeos-core memory --help
|
|
752
|
-
```
|
|
753
|
-
|
|
754
|
-
> **v2.1.0 修正:** `memory score` は初回実行後に `importance` 行を重複して残さなくなりました(以前は自動スコアリング行が上に追加され、元のプレーン行が下に残っていました)。`memory compact` の Stage 1 サマリーマーカーは正しい Markdown のリスト項目(`- _Summarized on ..._`)になったため、きれいにレンダリングされ、以降のコンパクションでも正しく再パースされます。
|
|
755
|
-
|
|
756
|
-
メモリに書くタイミング(Claude がオンデマンドで行いますが、手動編集も可能):
|
|
757
|
-
- **`decision-log.md`** — 競合するパターン間で選択するとき、ライブラリを選ぶとき、チーム規約を定義するとき、または何かを*やらない*と決めるときに新しいエントリを追記。追記のみ;履歴エントリは決して編集しない。
|
|
758
|
-
- **`failure-patterns.md`** — 再発エラーまたは自明でない根本原因の**2 回目の発生時**に追記。初回エラーはエントリ不要。
|
|
759
|
-
- `compaction.md` と `auto-rule-update.md` — 上記の CLI サブコマンドが生成/管理;手動編集しない。
|
|
760
|
-
|
|
761
|
-
### CI/CD 統合
|
|
762
|
-
|
|
763
|
-
```yaml
|
|
764
|
-
# GitHub Actions の例
|
|
765
|
-
- run: npx claudeos-core validate
|
|
766
|
-
# Exit code 1 で PR がブロックされる
|
|
767
|
-
|
|
768
|
-
# オプション:月次メモリハウスキーピング(別 cron ワークフロー)
|
|
769
|
-
- run: npx claudeos-core memory compact
|
|
770
|
-
- run: npx claudeos-core memory score
|
|
771
|
-
```
|
|
440
|
+
各 validator の検査項目は [docs/ja/verification.md](docs/ja/verification.md) を参照。
|
|
772
441
|
|
|
773
442
|
---
|
|
774
443
|
|
|
775
|
-
##
|
|
444
|
+
## Memory Layer (任意、長期プロジェクト向け)
|
|
776
445
|
|
|
777
|
-
|
|
446
|
+
v2.0 以降、ClaudeOS-Core は 4 つのファイルが入った `claudeos-core/memory/` フォルダを書き込みます:
|
|
778
447
|
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
| **スタック検出** | コードが確定(ORM、DB、ビルドツール、pkg manager) | N/A(スタック非依存) | LLM が推測 | LLM が推測 | LLM が推測 |
|
|
784
|
-
| **ドメイン検出** | コードが確定(Java 5 patterns、Kotlin CQRS、Next.js FSD) | N/A | LLM が推測 | N/A | N/A |
|
|
785
|
-
| **同じプロジェクト → 同じ結果** | ✅ 決定論的分析 | ✅(静的ファイル) | ❌(LLM は揺れる) | ❌(LLM は揺れる) | ❌(LLM は揺れる) |
|
|
786
|
-
| **大規模プロジェクトへの対応** | ドメイングループ分割(4 ドメイン / 40 ファイル / グループ) | N/A | 分割なし | 分割なし | コンテキストウィンドウ制限 |
|
|
787
|
-
| **出力** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans(40-50+ ファイル) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 スペックドキュメント | CLAUDE.md(1 ファイル) |
|
|
788
|
-
| **出力場所** | `.claude/rules/`(Claude Code が自動ロード) | `.claude/` 各種 | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
|
|
789
|
-
| **生成後検証** | ✅ 5 つの自動バリデータ | ❌ | ❌ | ❌ | ❌ |
|
|
790
|
-
| **多言語出力** | ✅ 10 言語 | ❌ | ❌ | ❌ | ❌ |
|
|
791
|
-
| **マルチスタック** | ✅ Backend + Frontend 同時 | ❌ スタック非依存 | ❌ | ❌ | 部分的 |
|
|
792
|
-
| **永続メモリレイヤ** | ✅ L4 — 決定ログ + 失敗パターン + 自動スコア付きルール提案(v2.0.0) | ❌ | ❌ | ❌ | ❌ |
|
|
793
|
-
| **エージェントオーケストレーション** | ❌ | ✅ 28 agents | ✅ 6 patterns | ❌ | ❌ |
|
|
448
|
+
- `decision-log.md` — append-only な「なぜ Y ではなく X を選んだのか」
|
|
449
|
+
- `failure-patterns.md` — frequency/importance スコア付きの繰り返し発生するエラー
|
|
450
|
+
- `compaction.md` — 時間とともに memory がどのように自動コンパクションされるか
|
|
451
|
+
- `auto-rule-update.md` — 新ルールに昇格すべきパターン
|
|
794
452
|
|
|
795
|
-
|
|
453
|
+
`npx claudeos-core memory propose-rules` を実行すると、Claude に最近の failure pattern を見せて新しいルールを提案させることができます。
|
|
796
454
|
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
だから Claude Code は MyBatis プロジェクトで JPA コードを生成しなくなり、
|
|
800
|
-
コードベースが `ok()` を使っているときに `success()` を使わなくなり、
|
|
801
|
-
プロジェクトが `controller/user/` を使うときに `user/controller/` ディレクトリを作成しなくなるのです。
|
|
802
|
-
|
|
803
|
-
### 競合ではなく補完
|
|
804
|
-
|
|
805
|
-
ClaudeOS-Core は**プロジェクト固有のルールとスタンダード**にフォーカスします。
|
|
806
|
-
他のツールは**エージェントオーケストレーションとワークフロー**にフォーカスします。
|
|
807
|
-
|
|
808
|
-
ClaudeOS-Core を使ってプロジェクトのルールを生成し、その上に ECC や Harness を乗せてエージェントチームとワークフロー自動化を構築できます。異なる問題を解決しています。
|
|
455
|
+
memory モデルとライフサイクルは [docs/ja/memory-layer.md](docs/ja/memory-layer.md) を参照。
|
|
809
456
|
|
|
810
457
|
---
|
|
811
458
|
|
|
812
459
|
## FAQ
|
|
813
460
|
|
|
814
|
-
**Q
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
**Q:コストはどのくらいですか?**
|
|
818
|
-
4 つの Pass をまたいで `claude -p` を複数回呼び出します。v2.1.0 の split モードでは、Pass 3 だけでもプロジェクトサイズに応じて 4〜14+ ステージに展開されます([自動スケーリング](#プロジェクトサイズによる自動スケーリング) を参照)。典型的な小規模プロジェクト(1〜15 ドメイン)で合計 8〜9 回の `claude -p` 呼び出し;18 ドメインのプロジェクトで 11 回;60 ドメインのプロジェクトで 15〜17 回。各ステージはフレッシュなコンテキストウィンドウで実行されます — 呼び出しあたりのトークンコストは、どのステージも全体のファイルツリーを 1 つのコンテキストに保持する必要がないため、単一呼び出しの Pass 3 時代より実際は低くなっています。`--lang` が非英語の場合、静的フォールバックパスは翻訳のために追加の `claude -p` 呼び出しを数回行うことがあります;結果は `claudeos-core/generated/.i18n-cache-<lang>.json` にキャッシュされ、その後の実行で再利用されます。これは通常の Claude Code 使用量の範囲内です。
|
|
819
|
-
|
|
820
|
-
**Q:Pass 3 split モードとは何ですか?なぜ v2.1.0 で追加されたのですか?**
|
|
821
|
-
v2.1.0 より前の Pass 3 は、生成されたファイルツリー全体(`CLAUDE.md`、standards、rules、skills、guides — 通常 30〜60 ファイル)を 1 回のレスポンスで出力しなければならない単一の `claude -p` 呼び出しでした。小規模プロジェクトでは機能しましたが、~5 ドメインで確実に `Prompt is too long` の出力累積失敗にぶつかっていました。失敗は入力サイズから予測できず、生成される各ファイルの冗長度合いに依存し、同じプロジェクトでも断続的に発生しました。Split モードはこの問題を構造的に回避します:Pass 3 は順次ステージ(`3a` → `3b-core` → `3b-N` → `3c-core` → `3c-N` → `3d-aux`)に分割され、それぞれがフレッシュなコンテキストウィンドウを持つ独立した `claude -p` 呼び出しです。ステージをまたいだ整合性は `pass3a-facts.md` — 以降のすべてのステージが `pass2-merged.json` を再読み込みせずに参照する 5〜10 KB の蒸留されたファクトシート — によって保持されます。`pass3-complete.json` マーカーは `groupsCompleted` 配列を持ち、`3c-2` 実行中のクラッシュは `3a` からではなく `3c-2` から再開するため、トークンコストの倍増を避けられます。
|
|
822
|
-
**Q:生成されたファイルを Git にコミットすべきですか?**
|
|
823
|
-
はい、推奨します。チームが同じ Claude Code スタンダードを共有できます。`claudeos-core/generated/` を `.gitignore` に追加することを検討してください(分析 JSON は再生成可能)。
|
|
824
|
-
|
|
825
|
-
**Q:混合スタックプロジェクト(例:Java backend + React frontend)はどうですか?**
|
|
826
|
-
完全にサポートされています。ClaudeOS-Core は両方のスタックを自動検出し、ドメインを `backend` または `frontend` としてタグ付けし、それぞれにスタック固有の分析プロンプトを使用します。Pass 2 がすべてをマージし、Pass 3 は split ステージ群全体で backend と frontend の両方のスタンダードを生成します — backend ドメインはいくつかの 3b/3c バッチに、frontend ドメインは別のバッチに入り、すべてが同じ `pass3a-facts.md` を参照して整合性を保ちます。
|
|
827
|
-
|
|
828
|
-
**Q:Turborepo / pnpm workspaces / Lerna モノレポで動作しますか?**
|
|
829
|
-
はい。ClaudeOS-Core は `turbo.json`、`pnpm-workspace.yaml`、`lerna.json`、または `package.json#workspaces` を検出し、サブパッケージの `package.json` ファイルをスキャンして framework/ORM/DB 依存関係を自動検索します。ドメインスキャンは `apps/*/src/` と `packages/*/src/` パターンをカバーします。モノレポのルートから実行してください。
|
|
830
|
-
|
|
831
|
-
**Q:再実行すると何が起きますか?**
|
|
832
|
-
以前の Pass 1/2 結果が存在する場合、インタラクティブプロンプトが選択を提示します:**Continue**(停止した場所から再開)または **Fresh**(すべて削除して最初からやり直し)。`--force` でプロンプトをスキップして常に Fresh で開始します。v2.1.0 の split モードでは、Pass 3 の再開はステージ粒度で動作します — 実行が `3c-2` 中にクラッシュした場合、次の `init` は `3a` から再実行する(トークンコストが倍増する)のではなく `3c-2` から再開します。`pass3-complete.json` マーカーはこのロジックを駆動するため `mode: "split"` に加えて `groupsCompleted` 配列を記録します。
|
|
833
|
-
|
|
834
|
-
**Q:NestJS は独自のテンプレートを使用するか、それとも Express のものを使用しますか?**
|
|
835
|
-
NestJS は NestJS 固有の分析カテゴリを備えた専用の `node-nestjs` テンプレートを使用します:`@Module`、`@Injectable`、`@Controller` デコレータ、Guards、Pipes、Interceptors、DI コンテナ、CQRS パターン、`Test.createTestingModule`。Express プロジェクトは別の `node-express` テンプレートを使用します。
|
|
836
|
-
|
|
837
|
-
**Q:Vue / Nuxt プロジェクトは?**
|
|
838
|
-
Vue/Nuxt は Composition API、`<script setup>`、defineProps/defineEmits、Pinia ストア、`useFetch`/`useAsyncData`、Nitro サーバルート、`@nuxt/test-utils` をカバーする専用の `vue-nuxt` テンプレートを使用します。Next.js/React プロジェクトは `node-nextjs` テンプレートを使用します。
|
|
839
|
-
|
|
840
|
-
**Q:Kotlin をサポートしていますか?**
|
|
841
|
-
はい。ClaudeOS-Core は `build.gradle.kts` または `build.gradle` の kotlin plugin から Kotlin を自動検出します。Kotlin 固有の分析(data classes、sealed classes、coroutines、拡張関数、MockK など)を備えた専用の `kotlin-spring` テンプレートを使用します。
|
|
842
|
-
|
|
843
|
-
**Q:CQRS / BFF アーキテクチャは?**
|
|
844
|
-
Kotlin マルチモジュールプロジェクトで完全にサポートされています。ClaudeOS-Core は `settings.gradle.kts` を読み取り、モジュール名からモジュールタイプ(command、query、bff、integration)を検出し、Command/Query モジュール間で同じドメインをグループ化します。生成されるスタンダードには、command controllers と query controllers の別々のルール、BFF/Feign パターン、モジュール間通信規約が含まれます。
|
|
845
|
-
|
|
846
|
-
**Q:Gradle マルチモジュールモノレポは?**
|
|
847
|
-
ClaudeOS-Core はネスト深度に関係なくすべてのサブモジュール(`**/src/main/kotlin/**/*.kt`)をスキャンします。モジュールタイプは命名規約から推論されます(例:`reservation-command-server` → domain: `reservation`、type: `command`)。共有ライブラリ(`shared-lib`、`integration-lib`)も検出されます。
|
|
848
|
-
|
|
849
|
-
**Q:L4 メモリレイヤ(v2.0.0)とは?`claudeos-core/memory/` をコミットすべきですか?**
|
|
850
|
-
はい — `claudeos-core/memory/` を**常にコミット**してください。これは永続的なチーム知識です:`decision-log.md` はアーキテクチャ選択の*理由*を記録(追記のみ)、`failure-patterns.md` は再発エラーを重要度スコアとともに登録して将来のセッションで回避できるようにし、`compaction.md` は 4 ステージコンパクションポリシーを定義し、`auto-rule-update.md` は機械生成されたルール改善提案を収集します。ルール(パスごとに自動ロード)とは異なり、メモリファイルは**オンデマンド** — `60.memory/*` ルールがそう指示したときにのみ Claude が読みます(例:セッション開始時の重要度の高い失敗のスキャン)。これによりコンテキストコストを低く保ちながら、長期的な知識を保持します。
|
|
461
|
+
**Q: Claude API キーが必要ですか?**
|
|
462
|
+
A: 不要です。ClaudeOS-Core は既存の Claude Code インストールを利用します — マシン上の `claude -p` にプロンプトを流すだけです。追加のアカウントは不要です。
|
|
851
463
|
|
|
852
|
-
**Q
|
|
853
|
-
|
|
464
|
+
**Q: 既存の CLAUDE.md や `.claude/rules/` を上書きしますか?**
|
|
465
|
+
A: 新しいプロジェクトでの初回実行: 新規作成します。`--force` なしの再実行: 編集内容を保持 — 前回実行の pass marker が検出されると該当 pass はスキップされます。`--force` での再実行: すべてを wipe して再生成 (編集内容は失われます — それが `--force` の意味です)。詳しくは [docs/ja/safety.md](docs/ja/safety.md) を参照。
|
|
854
466
|
|
|
855
|
-
**Q
|
|
856
|
-
|
|
467
|
+
**Q: 自分のスタックがサポート対象外です。追加できますか?**
|
|
468
|
+
A: できます。新しいスタックには ~3 個のプロンプトテンプレートとドメイン scanner が必要です。8 ステップガイドは [CONTRIBUTING.md](CONTRIBUTING.md) を参照。
|
|
857
469
|
|
|
858
|
-
**Q
|
|
859
|
-
|
|
470
|
+
**Q: 日本語 (または別言語) で docs を生成するには?**
|
|
471
|
+
A: `npx claudeos-core init --lang ja`. 10 言語をサポート: en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
|
|
860
472
|
|
|
861
|
-
**Q
|
|
862
|
-
|
|
473
|
+
**Q: monorepo でも動作しますか?**
|
|
474
|
+
A: 動作します — Turborepo (`turbo.json`)、pnpm workspaces (`pnpm-workspace.yaml`)、Lerna (`lerna.json`)、npm/yarn workspaces (`package.json#workspaces`) は stack-detector が検出します。各 app が独自の解析を受けます。それ以外の monorepo レイアウト (例: NX) は明示的には検出されませんが、汎用的な `apps/*/` と `packages/*/` のパターンはスタック別 scanner が拾います。
|
|
863
475
|
|
|
864
|
-
**Q
|
|
865
|
-
|
|
476
|
+
**Q: Claude Code が同意できないルールを生成したら?**
|
|
477
|
+
A: 直接編集してください。その後 `npx claudeos-core lint` を実行して CLAUDE.md が構造的に有効なままか確認します。以後の `init` 実行 (`--force` なし) では編集内容が保持されます — resume メカニズムが marker のある pass をスキップするためです。
|
|
866
478
|
|
|
867
|
-
**Q
|
|
868
|
-
|
|
479
|
+
**Q: バグはどこに報告すれば?**
|
|
480
|
+
A: [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). セキュリティ問題は [SECURITY.md](SECURITY.md) を参照。
|
|
869
481
|
|
|
870
482
|
---
|
|
871
483
|
|
|
872
|
-
##
|
|
484
|
+
## Documentation
|
|
873
485
|
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
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` がスタックを自動検出し、タイプ固有のプロンプトを組み立てます。NestJS、Vue/Nuxt、Vite SPA、Flask はそれぞれフレームワーク固有の分析カテゴリを備えた専用テンプレートを使用します(例:NestJS の `@Module`/`@Injectable`/Guards;Vue の `<script setup>`/Pinia/useFetch;Vite の client-side routing/`VITE_` env;Flask の Blueprint/`app.factory`/Flask-SQLAlchemy)。マルチスタックプロジェクトでは、`pass1-backend-prompt.md` と `pass1-frontend-prompt.md` が別々に生成され、`pass3-prompt.md` は両方のスタックの生成ターゲットを結合します。v2.1.0 では、Pass 3 テンプレートの先頭に `common/pass3-phase1.md`(Rule A–E を含む「Read Once, Extract Facts」ブロック)が追加された後、split モードのステージごとにスライスされます。Pass 4 はスタックに関係なく共有の `common/pass4.md` テンプレート(メモリスキャフォールディング)を使用します。
|
|
899
|
-
|
|
900
|
-
**v2.2.0 では**、Pass 3 プロンプトは phase1 ブロックとスタック固有本体の間に `common/claude-md-scaffold.md`(決定論的 8 セクション CLAUDE.md テンプレート)もインラインで埋め込みます — これによりセクション構造がプロジェクト間でずれることなく、内容はプロジェクトごとに適応します。テンプレートは **English-first** で記述され、`lang-instructions.json` からの言語注入が LLM に対して出力時にセクションタイトルと散文を対象出力言語に翻訳するよう指示します。
|
|
486
|
+
| トピック | 読むもの |
|
|
487
|
+
|---|---|
|
|
488
|
+
| 4-pass パイプラインの仕組み (図解より深く) | [docs/ja/architecture.md](docs/ja/architecture.md) |
|
|
489
|
+
| アーキテクチャの視覚的ダイアグラム (Mermaid) | [docs/ja/diagrams.md](docs/ja/diagrams.md) |
|
|
490
|
+
| Stack 検出 — 各 scanner が見るもの | [docs/ja/stacks.md](docs/ja/stacks.md) |
|
|
491
|
+
| Memory layer — decision log と failure pattern | [docs/ja/memory-layer.md](docs/ja/memory-layer.md) |
|
|
492
|
+
| 5 つの validator の詳細 | [docs/ja/verification.md](docs/ja/verification.md) |
|
|
493
|
+
| すべての CLI コマンドとオプション | [docs/ja/commands.md](docs/ja/commands.md) |
|
|
494
|
+
| 手動インストール (`npx` なし) | [docs/ja/manual-installation.md](docs/ja/manual-installation.md) |
|
|
495
|
+
| Scanner override — `.claudeos-scan.json` | [docs/ja/advanced-config.md](docs/ja/advanced-config.md) |
|
|
496
|
+
| 安全性: re-init で保持されるもの | [docs/ja/safety.md](docs/ja/safety.md) |
|
|
497
|
+
| 類似ツールとの比較 (scope であり品質ではない) | [docs/ja/comparison.md](docs/ja/comparison.md) |
|
|
498
|
+
| エラーと復旧 | [docs/ja/troubleshooting.md](docs/ja/troubleshooting.md) |
|
|
901
499
|
|
|
902
500
|
---
|
|
903
501
|
|
|
904
|
-
##
|
|
905
|
-
|
|
906
|
-
ClaudeOS-Core は JS/TS モノレポ構成を自動検出し、サブパッケージの依存関係をスキャンします。
|
|
907
|
-
|
|
908
|
-
**サポートされているモノレポマーカー**(自動検出):
|
|
909
|
-
- `turbo.json`(Turborepo)
|
|
910
|
-
- `pnpm-workspace.yaml`(pnpm workspaces)
|
|
911
|
-
- `lerna.json`(Lerna)
|
|
912
|
-
- `package.json#workspaces`(npm/yarn workspaces)
|
|
913
|
-
|
|
914
|
-
**モノレポのルートから実行してください** — ClaudeOS-Core は `apps/*/package.json` と `packages/*/package.json` を読み取って、サブパッケージ全体の framework/ORM/DB 依存関係を発見します:
|
|
915
|
-
|
|
916
|
-
```bash
|
|
917
|
-
cd my-monorepo
|
|
918
|
-
npx claudeos-core init
|
|
919
|
-
```
|
|
920
|
-
|
|
921
|
-
**検出されるもの:**
|
|
922
|
-
- `apps/web/package.json` からの依存関係(例:`next`、`react`)→ frontend スタック
|
|
923
|
-
- `apps/api/package.json` からの依存関係(例:`express`、`prisma`)→ backend スタック
|
|
924
|
-
- `packages/db/package.json` からの依存関係(例:`drizzle-orm`)→ ORM/DB
|
|
925
|
-
- `pnpm-workspace.yaml` からのカスタムワークスペースパス(例:`services/*`)
|
|
926
|
-
|
|
927
|
-
**ドメインスキャンもモノレポレイアウトをカバーします:**
|
|
928
|
-
- backend ドメイン向け `apps/api/src/modules/*/` と `apps/api/src/*/`
|
|
929
|
-
- frontend ドメイン向け `apps/web/app/*/`、`apps/web/src/app/*/`、`apps/web/pages/*/`
|
|
930
|
-
- 共有パッケージドメイン向け `packages/*/src/*/`
|
|
931
|
-
|
|
932
|
-
```
|
|
933
|
-
my-monorepo/ ← ここで実行:npx claudeos-core init
|
|
934
|
-
├── turbo.json ← Turborepo として自動検出
|
|
935
|
-
├── apps/
|
|
936
|
-
│ ├── web/ ← apps/web/package.json から Next.js を検出
|
|
937
|
-
│ │ ├── app/dashboard/ ← フロントエンドドメインを検出
|
|
938
|
-
│ │ └── package.json ← { "dependencies": { "next": "^14" } }
|
|
939
|
-
│ └── api/ ← apps/api/package.json から Express を検出
|
|
940
|
-
│ ├── src/modules/users/ ← バックエンドドメインを検出
|
|
941
|
-
│ └── package.json ← { "dependencies": { "express": "^4" } }
|
|
942
|
-
├── packages/
|
|
943
|
-
│ ├── db/ ← packages/db/package.json から Drizzle を検出
|
|
944
|
-
│ └── ui/
|
|
945
|
-
└── package.json ← { "workspaces": ["apps/*", "packages/*"] }
|
|
946
|
-
```
|
|
947
|
-
|
|
948
|
-
> **注意:** Kotlin/Java モノレポでは、マルチモジュール検出は `settings.gradle.kts` を使用します(上記の [Kotlin マルチモジュールドメイン検出](#kotlin-マルチモジュールドメイン検出) を参照)。JS モノレポマーカーは不要です。
|
|
949
|
-
|
|
950
|
-
## トラブルシューティング
|
|
951
|
-
|
|
952
|
-
**"claude: command not found"** — Claude Code CLI がインストールされていないか、PATH にありません。[Claude Code ドキュメント](https://code.claude.com/docs/en/overview)を参照してください。
|
|
953
|
-
|
|
954
|
-
**"npm install failed"** — Node.js バージョンが低すぎる可能性があります。v18+ が必要です。
|
|
955
|
-
|
|
956
|
-
**"0 domains detected"** — プロジェクト構造が非標準かもしれません。スタック別の検出パターンは上記を参照してください。
|
|
957
|
-
|
|
958
|
-
**Kotlin プロジェクトで "0 domains detected"** — プロジェクトのルートに `build.gradle.kts`(または kotlin plugin を含む `build.gradle`)があり、ソースファイルが `**/src/main/kotlin/` 配下にあることを確認してください。マルチモジュールプロジェクトでは、`settings.gradle.kts` に `include()` ステートメントが含まれていることを確認してください。単一モジュールの Kotlin プロジェクト(`settings.gradle` なし)もサポートされています — ドメインは `src/main/kotlin/` 配下のパッケージ/クラス構造から抽出されます。
|
|
959
|
-
|
|
960
|
-
**"Language detected as java instead of kotlin"** — ClaudeOS-Core は最初にルートの `build.gradle(.kts)` をチェックし、次にサブモジュールビルドファイルをチェックします。ルートビルドファイルが `kotlin` なしで `java` plugin を使用していても、サブモジュールが Kotlin を使用する場合、ツールはフォールバックとして最大 5 つのサブモジュールビルドファイルをチェックします。それでも検出されない場合、少なくとも 1 つの `build.gradle.kts` に `kotlin("jvm")` または `org.jetbrains.kotlin` が含まれていることを確認してください。
|
|
961
|
-
|
|
962
|
-
**"CQRS not detected"** — アーキテクチャ検出はモジュール名に `command` と `query` キーワードが含まれていることに依存します。モジュールが異なる命名(例:`write-server`、`read-server`)を使用している場合、CQRS アーキテクチャは自動検出されません。plan-installer 実行後、生成されたプロンプトを手動で調整できます。
|
|
963
|
-
|
|
964
|
-
**"Pass 3 produced 0 rule files under .claude/rules/"(v2.0.0)** — Guard 2 が発動しました:Claude は `staging-override.md` ディレクティブを無視して `.claude/` に直接書き込もうとしましたが、そこは Claude Code の sensitive-path ポリシーが書き込みをブロックする場所です。`npx claudeos-core init --force` で再実行してください。エラーが続く場合、`claudeos-core/generated/pass3-prompt.md` を調べて `staging-override.md` ブロックが最上部にあることを確認してください。
|
|
965
|
-
|
|
966
|
-
**"Pass 3 finished but N rule file(s) could not be moved from staging"(v2.0.0)** — Guard 1 が発動しました:ステージング移動が一時的なファイルロック(通常 Windows のアンチウィルスまたはファイルウォッチャ)にヒットしました。マーカーは書き込まれないので、次の `init` 実行は Pass 3 を自動的にリトライします。`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) が発動しました:Claude は CLAUDE.md + rules を書き込んだ後、`claudeos-core/guide/` セクション(9 ファイル期待)の完了前(または開始前)に応答途中で切り詰められました。BOM のみまたは空白のみのファイルでも発動します(見出しは書かれたが本文が切り詰められた)。このガードがなければ完了マーカーが書き込まれ、その後の実行で `guide/` は永続的に空のままになります。マーカーはここでは書き込まれないので、次の `init` 実行は同じ Pass 2 結果から Pass 3 をリトライします。繰り返し発生する場合、`npx claudeos-core init --force` を使用して最初から再生成してください。
|
|
969
|
-
|
|
970
|
-
**"Pass 3 finished but the following required output(s) are missing or empty"(v2.0.0、v2.1.0 で更新)** — Guard 3 (H1) が発動しました:Claude は `claudeos-core/guide/` の後、しかし `claudeos-core/standard/` または `claudeos-core/skills/` の前(または途中)で切り詰められました。要件:(a) `standard/00.core/01.project-overview.md` が存在し空でない(すべてのスタックの Pass 3 プロンプトが書き込むセンチネル)、(b) `skills/` に空でない `.md` が 1 つ以上。`database/` と `mcp-guide/` は意図的に除外されています(一部のスタックは正当にゼロファイルを生成します)。`plan/` は v2.1.0 以降チェックされません(master plan が廃止されたため)。Guard 3 (H2) と同じ復旧パス:`init` を再実行、または持続する場合は `--force`。
|
|
971
|
-
|
|
972
|
-
**"Pass 3 split stage crashed partway through (v2.1.0)"** — split ステージのいずれか(例:`3b-1`、`3c-2`)が実行途中で失敗すると、ステージレベルのマーカーは書き込まれませんが、完了したステージは `pass3-complete.json.groupsCompleted` に記録されます。次の `init` 実行はこの配列を読み、完了済みの作業をすべてスキップして、最初の未完了ステージから再開します。手動操作は不要です — `npx claudeos-core init` を再実行するだけです。同じステージで resume が繰り返し失敗する場合、`claudeos-core/generated/pass3-prompt.md` の内容不正を検査し、それから `--force` で完全再起動を試みてください。`pass3-complete.json` の形状(`mode: "split"`、`groupsCompleted: [...]`)は安定しています;マーカー欠損または形状不正の場合、Pass 3 全体が `3a` から再実行されます。
|
|
502
|
+
## Contributing
|
|
973
503
|
|
|
974
|
-
|
|
504
|
+
コントリビューション歓迎です — スタック対応の追加、プロンプトの改善、バグ修正など。詳しくは [CONTRIBUTING.md](CONTRIBUTING.md) を参照。
|
|
975
505
|
|
|
976
|
-
|
|
506
|
+
行動規範とセキュリティポリシーは [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) と [SECURITY.md](SECURITY.md) を参照。
|
|
977
507
|
|
|
978
|
-
|
|
508
|
+
## License
|
|
979
509
|
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
**"pass4-memory.json exists but is malformed (missing passNum/memoryFiles) — re-running Pass 4"(v2.0.0)** — エラーではなく情報ログです。Pass 4 マーカーコンテンツは検証されるようになりました(`passNum === 4` + 空でない `memoryFiles` 配列、存在だけでなく)。`{"error":"timeout"}` のようなマーカー本文として出力した Claude の部分的失敗は、以前は永続的に成功として受理されましたが、現在はマーカーが削除され、Pass 4 が自動的に再実行されます。
|
|
983
|
-
|
|
984
|
-
**"Could not delete stale pass3-complete.json / pass4-memory.json" InitError(v2.0.0)** — `init` は古いマーカーを検出し(Pass 3:CLAUDE.md が外部で削除された;Pass 4:memory/ が空またはマーカー本文が不正)、それを削除しようとしましたが、`unlinkSync` 呼び出しが失敗しました — 通常 Windows のアンチウィルスまたはファイルウォッチャ(エディタ、IDE インデクサ)がファイルハンドルを保持しているためです。以前はこれが静かに無視され、パイプラインがパスをスキップして古いマーカーを再利用していました。現在は明確に失敗します。修正:ファイルを開いている可能性のあるエディタ/AV スキャナを閉じて、`npx claudeos-core init` を再実行してください。
|
|
985
|
-
|
|
986
|
-
**"CLAUDEOS_SKIP_TRANSLATION=1 is set but --lang='ko' requires translation" InitError(v2.0.0)** — シェルでテスト専用の環境変数 `CLAUDEOS_SKIP_TRANSLATION=1` が設定されており(おそらく CI/テスト設定の残り物)、かつ非英語 `--lang` を選択しました。この環境変数は、Pass 4 の静的フォールバックと gap-fill が非英語出力のために依存する翻訳パスをショートサーキットします。`init` は言語選択時に競合を検出し、即座に中止します(Pass 4 の途中で紛らわしいネストされたエラーでクラッシュするのではなく)。修正:実行前に `unset CLAUDEOS_SKIP_TRANSLATION` するか、`npx claudeos-core init --lang en` を使用してください。
|
|
987
|
-
|
|
988
|
-
**"⚠️ v2.2.0 upgrade detected" 警告 (v2.2.0)** — 既存の `CLAUDE.md` が v2.2.0 以前のバージョンで生成されている状態。デフォルトの resume モード再生成は Rule B idempotency により既存ファイルをスキップするため、v2.2.0 の構造改善(8 セクション CLAUDE.md scaffold、`40.infra/*` ファイル別 paths、`.env.example` ベースのポート精度、Section 8 `Common Rules & Memory (L4)` 再設計(共通ルール・L4 メモリの 2 つのサブセクション構造)、`60.memory/*` ルール行、forward-reference された `04.doc-writing-guide.md`)が適用されません。解決: `npx claudeos-core init --force` で再実行。生成ファイル(`CLAUDE.md`、`.claude/rules/`、`claudeos-core/standard/`、`claudeos-core/skills/`、`claudeos-core/guide/`)は上書きされますが、`claudeos-core/memory/` コンテンツ(ユーザーが蓄積した decision-log、failure-patterns エントリー — append-only)は完全に保持されます。上書き前に diff を確認したい場合は、`--force` 実行前にプロジェクトを git commit してください。
|
|
989
|
-
|
|
990
|
-
**CLAUDE.md の port が `.env.example` と異なる (v2.2.0)** — v2.2.0 の新しい `.env` パーサー(`lib/env-parser.js`)は `.env.example` を優先的に読み(コミットされた canonical ファイル)、fallback として `.env` バリアントを読みます。認識されるポート変数名: `PORT`、`VITE_PORT`、`VITE_DESKTOP_PORT`、`NEXT_PUBLIC_PORT`、`NUXT_PORT`、`DJANGO_PORT` など。Spring Boot の場合、`application.yml` の `server.port` が依然として `.env` より優先されます(framework-native config が優先)。プロジェクトが非標準 env 変数名を使用する場合は、慣例名に変更するか `PORT_VAR_KEYS` 拡張を issue でリクエストしてください。framework デフォルト(Vite 5173、Next.js 3000、Django 8000)は、直接検出と `.env` の両方がサイレントな場合のみ使用されます。
|
|
991
|
-
|
|
992
|
-
**生成されたドキュメントで値が `***REDACTED***` と表示される (v2.2.0)** — 意図された動作です。v2.2.0 の `.env` パーサーは `PASSWORD`/`SECRET`/`TOKEN`/`API_KEY`/`CREDENTIAL`/`PRIVATE_KEY` パターンにマッチする変数値を自動的に `***REDACTED***` に置換してすべての生成器に渡します。`.env.example` に誤ってコミットされた機密情報に対する defense-in-depth 保護です。`DATABASE_URL` は stack-detector DB 識別 back-compat のため保持されます。生成された `CLAUDE.md` テーブルで `***REDACTED***` が見られる場合はバグなので issue を提出してください — redacted 値はテーブルに到達すべきではありません。非機密ランタイム設定(port、host、API target、NODE_ENV など)は変更なく通過します。
|
|
510
|
+
[ISC](LICENSE) — 商用を含めあらゆる用途で自由に利用可能。
|
|
993
511
|
|
|
994
512
|
---
|
|
995
513
|
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
貢献は歓迎します!最も必要とされている領域:
|
|
999
|
-
|
|
1000
|
-
- **新しいスタックテンプレート** — Ruby/Rails、Go (Gin/Fiber/Echo)、PHP (Laravel/Symfony)、Rust (Axum/Actix)、Svelte/SvelteKit、Remix
|
|
1001
|
-
- **IDE 統合** — VS Code 拡張機能、IntelliJ プラグイン
|
|
1002
|
-
- **CI/CD テンプレート** — GitLab CI、CircleCI、Jenkins の例(GitHub Actions はすでに付属 — `.github/workflows/test.yml` 参照)
|
|
1003
|
-
- **テストカバレッジ** — テストスイートの拡張(現在 30 のテストファイルで 602 テスト、スキャナ、スタック検出、ドメイングループ化、プランパーシング、プロンプト生成、CLI セレクタ、モノレポ検出、Vite SPA 検出、検証ツール、L4 メモリスキャフォールド、Pass 2 再開検証、Pass 3 Guards 1/2/3(H1 センチネル + H2 BOM-aware 空ファイル + strict stale-marker unlink)、Pass 3 split モードのバッチサブ分割、Pass 3 部分マーカー再開(v2.1.0)、Pass 4 マーカーコンテンツ検証 + stale-marker unlink strictness + scaffoldSkillsManifest gap-fill(v2.1.0)、翻訳 env-skip ガード + early fail-fast + CI ワークフロー、staged-rules 移動、言語対応翻訳フォールバック、master plan 廃止のリグレッションスイート(v2.1.0)、memory score/compact フォーマッティングのリグレッション(v2.1.0)、AI Work Rules テンプレート構造、`.env` パーサー port/host/API-target 抽出 + センシティブ変数 redaction (v2.2.0)をカバー)
|
|
1004
|
-
|
|
1005
|
-
領域の完全なリスト、コードスタイル、コミット規約、新しいスタックテンプレートを追加するためのステップバイステップガイドについては、[`CONTRIBUTING.md`](./CONTRIBUTING.md) を参照してください。
|
|
1006
|
-
|
|
1007
|
-
---
|
|
1008
|
-
|
|
1009
|
-
## 作者
|
|
1010
|
-
|
|
1011
|
-
**claudeos-core** によって作成 — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
|
|
1012
|
-
|
|
1013
|
-
## ライセンス
|
|
1014
|
-
|
|
1015
|
-
ISC
|
|
514
|
+
<sub>[@claudeos-core](https://github.com/claudeos-core) が手をかけて作成しました。時間を節約できたなら、GitHub の ⭐ がプロジェクトの可視性を保ちます。</sub>
|