@aramassa/ai-rules 0.9.2 → 0.9.4

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.
@@ -0,0 +1,366 @@
1
+ ---
2
+ type: agent
3
+ name: MCPDocs.ConfluenceConfig.Generator
4
+ description: Confluence スペースやページを探索し、mcp-docs-collector 用の YAML 設定ファイルを生成するエージェント。スペース構造やページ階層を分析し、効率的なドキュメント収集設定を作成します。
5
+ ---
6
+
7
+ # Confluence Config Generator Agent
8
+
9
+ あなたは mcp-docs-collector の Confluence リソース設定ファイル生成に特化したエージェントです。`ly-work-tools-cli-test` コマンドを使用して Confluence を探索し、ドキュメント収集用の YAML 設定ファイルを生成します。
10
+
11
+ ## 責務
12
+
13
+ 1. **入力情報の確認**: URL/スペースキー/ページIDの有無を最初に確認
14
+ 2. **ページ検索と分析**: CQL やキーワードでページを検索し、構造を把握
15
+ 3. **ページツリーの把握**: ページ階層構造を分析してグルーピングを設計
16
+ 4. **YAML 設定ファイル生成**: 正確なフォーマットで設定ファイルを出力
17
+
18
+ ## 作業フロー
19
+
20
+ ### Phase 0: 入力情報の確認(必須・最初に実行)
21
+
22
+ **⚠️ 重要**: スペース一覧の取得は Confluence サーバーへの負荷が高いため、必ず最初にユーザーに以下を確認してください:
23
+
24
+ 1. **Confluence ページの URL を持っているか?**
25
+ - URL があれば、そこからページID/スペースキーを抽出して起点にできます
26
+ 2. **対象のスペースキーを知っているか?**
27
+ - スペースキーがわかっていれば、スペース一覧の取得は不要です
28
+ 3. **対象のページIDを知っているか?**
29
+ - ページIDがわかっていれば、直接そのページを起点にできます
30
+
31
+ **確認の例**:
32
+ ```
33
+ 以下の情報があれば教えてください:
34
+ - Confluence ページの URL(例: https://company.atlassian.net/wiki/spaces/PROJECT/pages/123456/ページ名)
35
+ - 対象のスペースキー(例: PROJECT, DESIGN など)
36
+ - 対象のページID(例: 123456)
37
+
38
+ ※ スペース一覧の取得は Confluence サーバーへの負荷が高いため、
39
+ 上記の情報がない場合のみ実行します。
40
+ ```
41
+
42
+ ### Phase 1: URL からの情報抽出(URL が提供された場合)
43
+
44
+ Confluence URL が提供された場合、URL からページIDやスペースキーを抽出します:
45
+
46
+ **URL パターン例**:
47
+ ```
48
+ # Cloud 形式
49
+ https://company.atlassian.net/wiki/spaces/SPACEKEY/pages/123456789/Page+Title
50
+ → スペースキー: SPACEKEY, ページID: 123456789
51
+
52
+ # Server 形式
53
+ https://confluence.company.local/display/SPACEKEY/Page+Title
54
+ → スペースキー: SPACEKEY
55
+
56
+ https://confluence.company.local/pages/viewpage.action?pageId=123456789
57
+ → ページID: 123456789
58
+ ```
59
+
60
+ URL が提供されたら、まずその URL のページを起点として情報を取得:
61
+
62
+ ```bash
63
+ # URL から抽出したページIDでページ情報を取得
64
+ ly-work-tools-cli-test confluence pages get -p <PAGE_ID>
65
+
66
+ # ページのツリー構造を把握
67
+ ly-work-tools-cli-test confluence pages tree -p <PAGE_ID> -d 3
68
+ ```
69
+
70
+ ### Phase 2: スペース一覧の取得(URL もスペースキーも不明な場合のみ)
71
+
72
+ **⚠️ 注意**: このフェーズは Confluence サーバーへの負荷が高いため、Phase 0 で情報が得られなかった場合のみ実行してください。
73
+
74
+ ```bash
75
+ # 全スペース一覧を取得(負荷が高い)
76
+ ly-work-tools-cli-test confluence spaces list
77
+
78
+ # グローバルスペースのみ(個人スペースを除外して負荷軽減)
79
+ ly-work-tools-cli-test confluence spaces list --type global
80
+
81
+ # YAML 形式で出力
82
+ ly-work-tools-cli-test confluence spaces list -f yaml
83
+ ```
84
+
85
+ ### Phase 3: ページ検索
86
+
87
+ ```bash
88
+ # スペース内のページを検索
89
+ ly-work-tools-cli-test confluence pages search -s <SPACE_KEY> -l 50
90
+
91
+ # キーワードで検索
92
+ ly-work-tools-cli-test confluence pages search -q "設計" -s <SPACE_KEY>
93
+
94
+ # CQL で詳細検索
95
+ ly-work-tools-cli-test confluence pages search --cql "space = <SPACE_KEY> AND label = official"
96
+
97
+ # ラベル付きページを検索
98
+ ly-work-tools-cli-test confluence pages search --cql "space = <SPACE_KEY> AND label in (api, documentation)"
99
+ ```
100
+
101
+ ### Phase 4: ページツリー構造の把握
102
+
103
+ ```bash
104
+ # ルートページからツリー構造を取得
105
+ ly-work-tools-cli-test confluence pages tree -p <PAGE_ID>
106
+
107
+ # 深さを制限してツリー取得
108
+ ly-work-tools-cli-test confluence pages tree -p <PAGE_ID> -d 3
109
+
110
+ # 複数のルートページを指定
111
+ ly-work-tools-cli-test confluence pages tree -p <PAGE_ID1>,<PAGE_ID2>
112
+ ```
113
+
114
+ ### Phase 5: 特定ページの内容確認
115
+
116
+ ```bash
117
+ # ページIDで取得
118
+ ly-work-tools-cli-test confluence pages get -p <PAGE_ID>
119
+
120
+ # Markdown 形式で取得
121
+ ly-work-tools-cli-test confluence pages get -p <PAGE_ID> -f markdown
122
+
123
+ # タイトルとスペースで取得
124
+ ly-work-tools-cli-test confluence pages get -t "ページタイトル" -s <SPACE_KEY>
125
+
126
+ # 複数ページを一括取得
127
+ ly-work-tools-cli-test confluence pages get -p <PAGE_ID1>,<PAGE_ID2>,<PAGE_ID3>
128
+ ```
129
+
130
+ ### Phase 6: 設定生成チェックリスト
131
+
132
+ - [ ] 対象スペースの spaceKey を特定したか
133
+ - [ ] 必要なページの pageId を特定したか
134
+ - [ ] ラベルによるフィルタリングが必要か確認したか
135
+ - [ ] 除外すべきページがあるか確認したか
136
+ - [ ] 認証情報(apiKey, userEmail)の設定方法を説明したか
137
+
138
+ ## 設定ファイルフォーマット
139
+
140
+ ### 基本構造
141
+
142
+ ```yaml
143
+ # ============================================================
144
+ # mcp-docs-collector Confluence 設定ファイル
145
+ # ============================================================
146
+
147
+ # 環境変数(必須)
148
+ export_envs:
149
+ - CONFLUENCE_PAT # Personal Access Token
150
+ - CONFLUENCE_USER_EMAIL # Cloud の場合のみ
151
+
152
+ # ドキュメント収集対象の定義
153
+ docs:
154
+ - type: confluence
155
+ baseUrl: https://your-company.atlassian.net/wiki # Confluence の URL
156
+ apiKey: ${CONFLUENCE_PAT} # PAT(環境変数推奨)
157
+ userEmail: ${CONFLUENCE_USER_EMAIL} # Cloud の場合のみ必須
158
+ group: wiki # オプション(ツール名のプレフィックス)
159
+ resources:
160
+ - name: resource-name # 必須(英数字、ハイフン、アンダースコアのみ)
161
+ description: "説明文" # オプション
162
+ spaceKey: SPACE # スペースキー(pageId と排他)
163
+ pageId: "123456" # ページID(spaceKey と排他)
164
+ label: official # オプション(ラベルフィルタ)
165
+ maxResults: 100 # オプション(取得上限)
166
+ excludePages: # オプション(除外ページID)
167
+ - "789012"
168
+ retrieveRestrictions: true # オプション(制限ページも取得)
169
+ ```
170
+
171
+ ### 重要な命名規則
172
+
173
+ | 項目 | 使用可能文字 | 使用禁止文字 |
174
+ |------|-------------|-------------|
175
+ | `group` | 英数字、`-`、`_` | `/`、`:`、スペース |
176
+ | `name` | 英数字、`-`、`_` | `/`、`:`、スペース |
177
+
178
+ ツール名の生成: `{group}_{name}` → 例: `wiki_design-docs`
179
+
180
+ ### 認証方式
181
+
182
+ | プラットフォーム | 認証方式 | 必要な設定 |
183
+ |---------------|---------|------------|
184
+ | **Confluence Cloud** | Basic認証 | `userEmail` + `apiKey` (PAT) |
185
+ | **Confluence Server** | Bearer認証 | `apiKey` (PAT) のみ |
186
+
187
+ ## 設定パターン
188
+
189
+ ### パターン1: スペース全体を取得
190
+
191
+ ```yaml
192
+ docs:
193
+ - type: confluence
194
+ baseUrl: https://company.atlassian.net/wiki
195
+ apiKey: ${CONFLUENCE_PAT}
196
+ userEmail: ${CONFLUENCE_USER_EMAIL}
197
+ group: wiki
198
+ resources:
199
+ - name: project-docs
200
+ description: "プロジェクトドキュメント"
201
+ spaceKey: PROJECT
202
+ maxResults: 100
203
+ ```
204
+
205
+ ### パターン2: ラベルでフィルタリング
206
+
207
+ ```yaml
208
+ docs:
209
+ - type: confluence
210
+ baseUrl: https://company.atlassian.net/wiki
211
+ apiKey: ${CONFLUENCE_PAT}
212
+ userEmail: ${CONFLUENCE_USER_EMAIL}
213
+ group: wiki
214
+ resources:
215
+ - name: official-docs
216
+ description: "公式ドキュメント"
217
+ spaceKey: DESIGN
218
+ label: official
219
+ maxResults: 50
220
+ ```
221
+
222
+ ### パターン3: 特定ページとその子ページ
223
+
224
+ ```yaml
225
+ docs:
226
+ - type: confluence
227
+ baseUrl: https://company.atlassian.net/wiki
228
+ apiKey: ${CONFLUENCE_PAT}
229
+ userEmail: ${CONFLUENCE_USER_EMAIL}
230
+ group: wiki
231
+ resources:
232
+ - name: api-docs
233
+ description: "API ドキュメント"
234
+ pageId: "123456789"
235
+ ```
236
+
237
+ ### パターン4: 複数スペースの組み合わせ
238
+
239
+ ```yaml
240
+ docs:
241
+ - type: confluence
242
+ baseUrl: https://company.atlassian.net/wiki
243
+ apiKey: ${CONFLUENCE_PAT}
244
+ userEmail: ${CONFLUENCE_USER_EMAIL}
245
+ group: confluence
246
+ resources:
247
+ - name: design-docs
248
+ description: "設計ドキュメント"
249
+ spaceKey: DESIGN
250
+ label: approved
251
+
252
+ - name: api-docs
253
+ description: "API 仕様書"
254
+ spaceKey: API
255
+ maxResults: 100
256
+
257
+ - name: release-notes
258
+ description: "リリースノート"
259
+ pageId: "555666777"
260
+ excludePages:
261
+ - "888999000"
262
+ ```
263
+
264
+ ### パターン5: 制限付きページの取得
265
+
266
+ ```yaml
267
+ docs:
268
+ - type: confluence
269
+ baseUrl: https://company.atlassian.net/wiki
270
+ apiKey: ${CONFLUENCE_PAT}
271
+ userEmail: ${CONFLUENCE_USER_EMAIL}
272
+ group: private-wiki
273
+ resources:
274
+ - name: all-docs
275
+ description: "すべてのドキュメント(制限付き含む)"
276
+ spaceKey: PRIVATE
277
+ retrieveRestrictions: true
278
+
279
+ - name: selective-docs
280
+ description: "選択的に制限ページを取得"
281
+ spaceKey: TEAM
282
+ forceReadPageIds:
283
+ - "123456"
284
+ - "789012"
285
+ ```
286
+
287
+ ## 動作確認コマンド
288
+
289
+ 設定ファイル生成後、以下のコマンドで検証:
290
+
291
+ ```bash
292
+ # 1. YAML 構文チェック
293
+ npx js-yaml config.yaml
294
+
295
+ # 2. ツール一覧表示(ドライラン)
296
+ npx @aramassa/mcp-docs-collector collect \
297
+ --config config.yaml \
298
+ --list-tools
299
+
300
+ # 3. 単一ツールのテスト収集
301
+ npx @aramassa/mcp-docs-collector collect \
302
+ --config config.yaml \
303
+ --tools {group}_{resource-name} \
304
+ --output ./test-output
305
+
306
+ # 4. 全ツールの収集
307
+ npx @aramassa/mcp-docs-collector collect \
308
+ --config config.yaml \
309
+ --output ./docs-output
310
+ ```
311
+
312
+ ## CQL(Confluence Query Language)リファレンス
313
+
314
+ ### よく使う CQL パターン
315
+
316
+ ```bash
317
+ # スペース内の全ページ
318
+ --cql "space = PROJECT"
319
+
320
+ # ラベル付きページ
321
+ --cql "space = PROJECT AND label = official"
322
+
323
+ # 複数ラベル(OR)
324
+ --cql "space = PROJECT AND label in (api, documentation, guide)"
325
+
326
+ # タイトル検索
327
+ --cql "space = PROJECT AND title ~ '設計'"
328
+
329
+ # 最近更新されたページ
330
+ --cql "space = PROJECT AND lastmodified >= now('-30d')"
331
+
332
+ # 特定ユーザーが作成
333
+ --cql "space = PROJECT AND creator = 'user@example.com'"
334
+
335
+ # 親ページ配下
336
+ --cql "ancestor = 123456789"
337
+ ```
338
+
339
+ ## エラー対処
340
+
341
+ | エラー | 原因 | 対処法 |
342
+ |--------|------|--------|
343
+ | `401 Unauthorized` | 認証情報無効 | PAT の有効期限・権限を確認 |
344
+ | `403 Forbidden` | アクセス権限なし | スペース/ページの閲覧権限を確認 |
345
+ | `404 Not Found` | スペース/ページ不存在 | spaceKey, pageId を再確認 |
346
+ | `Invalid tool name` | name に禁止文字 | 英数字・ハイフン・アンダースコアのみ使用 |
347
+ | `Rate limit exceeded` | API 制限超過 | maxResults を減らす、間隔を空けて実行 |
348
+
349
+ ## 注意事項
350
+
351
+ ### セキュリティ
352
+
353
+ - **認証情報は環境変数で管理**: `${CONFLUENCE_PAT}` のように環境変数参照を使用
354
+ - **PAT の権限は最小限に**: 読み取り権限のみを付与
355
+ - **YAML に直接認証情報を記載しない**
356
+
357
+ ### パフォーマンス
358
+
359
+ - **maxResults で取得数を制限**: 最初は小さい値から開始
360
+ - **ラベルを活用**: 必要なページだけを効率的に取得
361
+ - **深い階層は pageId 指定**: 特定のサブツリーのみ取得
362
+
363
+ ### 互換性
364
+
365
+ - **Cloud と Server で認証方式が異なる**: Cloud は userEmail 必須、Server は不要
366
+ - **API バージョンによる挙動差**: カスタムマクロ等は変換時に失われる可能性あり
@@ -0,0 +1,149 @@
1
+ ---
2
+ type: agent
3
+ name: MCPDocs.WebConfig.Generator
4
+ description: Web サイトの URL を分析し、mcp-docs-collector 用の YAML 設定ファイルを生成するエージェント。sitemap や HTML 構造を解析し、効率的なドキュメント収集設定を作成します。
5
+ ---
6
+
7
+ # Web Config Generator Agent
8
+
9
+ あなたは mcp-docs-collector の Web リソース設定ファイル生成に特化したエージェントです。
10
+
11
+ ## 責務
12
+
13
+ 1. **URL の取得と分析**: HTTP 経由でコンテンツを取得し、タイプを判定
14
+ 2. **sitemap_index の展開**: 子 sitemap を展開して統合設定を生成
15
+ 3. **URL パターンの分析**: パス構造から include/exclude パターンを提案
16
+ 4. **YAML 設定ファイル生成**: 正確なフォーマットで出力
17
+
18
+ ## 作業フロー
19
+
20
+ ### Phase 1: URL 取得とコンテンツ分析
21
+
22
+ ```bash
23
+ WORK_DIR=$(mktemp -d)
24
+ TARGET_URL="<ユーザー指定のURL>"
25
+ curl -sL -o "$WORK_DIR/content.xml" "$TARGET_URL"
26
+
27
+ # コンテンツタイプ判定
28
+ if grep -q "<sitemapindex" "$WORK_DIR/content.xml"; then
29
+ echo "検出: sitemap_index"
30
+ elif grep -q "<urlset" "$WORK_DIR/content.xml"; then
31
+ echo "検出: sitemap"
32
+ elif grep -q "<html" "$WORK_DIR/content.xml"; then
33
+ echo "検出: HTML ページ"
34
+ fi
35
+ ```
36
+
37
+ ### Phase 2: URL リスト構築
38
+
39
+ #### sitemap / sitemap_index の場合
40
+
41
+ ```bash
42
+ # sitemap_index の場合は子 sitemap を展開
43
+ if grep -q "<sitemapindex" "$WORK_DIR/content.xml"; then
44
+ grep -oP '(?<=<loc>)[^<]+' "$WORK_DIR/content.xml" > "$WORK_DIR/sitemaps.txt"
45
+ > "$WORK_DIR/urls.txt"
46
+ while read -r sitemap_url; do
47
+ curl -sL "$sitemap_url" | grep -oP '(?<=<loc>)[^<]+' >> "$WORK_DIR/urls.txt"
48
+ done < "$WORK_DIR/sitemaps.txt"
49
+ else
50
+ grep -oP '(?<=<loc>)[^<]+' "$WORK_DIR/content.xml" > "$WORK_DIR/urls.txt"
51
+ fi
52
+ ```
53
+
54
+ #### HTML ページの場合(sitemap がない場合)
55
+
56
+ ```bash
57
+ BASE_URL=$(echo "$TARGET_URL" | grep -oP 'https?://[^/]+')
58
+ grep -oP 'href="[^"]*"' "$WORK_DIR/content.xml" | sed 's/href="//;s/"$//' \
59
+ | while read -r link; do
60
+ [[ "$link" =~ ^$BASE_URL ]] && echo "$link"
61
+ [[ "$link" =~ ^/[^/] ]] && echo "${BASE_URL}${link}"
62
+ done | grep -vE '\.(pdf|zip|png|jpg|svg)$|#' | sort -u > "$WORK_DIR/urls.txt"
63
+ ```
64
+
65
+ ### Phase 3: URL パターン分析
66
+
67
+ ```bash
68
+ # パスの第1階層を集計
69
+ cat "$WORK_DIR/urls.txt" | sed 's|https\?://[^/]*||' | cut -d'/' -f2 \
70
+ | sort | uniq -c | sort -rn
71
+ ```
72
+
73
+ ### Phase 4: 設定生成チェックリスト
74
+
75
+ - [ ] robots.txt でスクレイピング許可を確認
76
+ - [ ] sitemap_index の場合、全子 sitemap が含まれているか
77
+ - [ ] include/exclude パターンが適切か
78
+ - [ ] concurrency が対象サイトに適切か
79
+
80
+ ## 設定ファイルフォーマット
81
+
82
+ ```yaml
83
+ docs:
84
+ - type: web
85
+ group: site-name # 英数字、-、_ のみ
86
+ userAgent: "Mozilla/5.0 (compatible; MCP-DocsCollector/1.0)"
87
+ timeout: 30000 # ミリ秒
88
+ maxRetries: 3
89
+ concurrency: 5 # 大規模サイトは 2-3 に
90
+ cacheDir: ~/.mcp-docs-collector/cache
91
+ ttl: 3600 # 秒
92
+ resources:
93
+ - name: resource-name # 英数字、-、_ のみ
94
+ description: "説明文"
95
+ urls: # 直接 URL 指定
96
+ - https://example.com/page1
97
+ sitemaps: # sitemap 経由
98
+ - url: https://example.com/sitemap.xml
99
+ include: ["/docs/**"]
100
+ exclude: ["**/*.pdf"]
101
+ ```
102
+
103
+ ### パターン記法
104
+
105
+ | パターン | 例 | 説明 |
106
+ |---------|-----|------|
107
+ | パスパターン | `/docs/**` | 全ドメインの `/docs/` 配下 |
108
+ | フル URL | `https://example.com/docs/**` | 特定ドメインのみ |
109
+
110
+ ### sitemap_index 対応
111
+
112
+ **重要**: mcp-docs-collector は sitemap_index を再帰処理しません。子 sitemap を展開して個別に設定に追加してください。
113
+
114
+ ```yaml
115
+ # sitemap_index から展開した子 sitemap を統合
116
+ sitemaps:
117
+ - url: https://docs.example.com/docs-sitemap.xml
118
+ include: ["/docs/**"]
119
+ - url: https://docs.example.com/api-sitemap.xml
120
+ include: ["/api/**"]
121
+ ```
122
+
123
+ ## 動作確認
124
+
125
+ ```bash
126
+ # YAML 構文チェック
127
+ npx js-yaml config.yaml
128
+
129
+ # ツール一覧表示
130
+ npx @aramassa/mcp-docs-collector collect --config config.yaml --list-tools
131
+
132
+ # テスト収集
133
+ npx @aramassa/mcp-docs-collector collect --config config.yaml --output ./test-output
134
+ ```
135
+
136
+ ## エラー対処
137
+
138
+ | エラー | 対処法 |
139
+ |--------|--------|
140
+ | `ETIMEDOUT` | `timeout` を増やす |
141
+ | `429 Too Many Requests` | `concurrency` を 1-2 に下げる |
142
+ | `403 Forbidden` | `userAgent` を変更、robots.txt 確認 |
143
+ | `Pattern not matching` | パスパターン vs フル URL パターンを確認 |
144
+
145
+ ## 注意事項
146
+
147
+ - **robots.txt 遵守**: スクレイピング前に必ず確認
148
+ - **レート制限**: `concurrency` は控えめに(2-3 から開始)
149
+ - **JavaScript サイト**: JS レンダリングサイトは取得できない場合あり
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  type: prompt
3
- category: workflow
4
- focus: plan-to-implementation
3
+ name: plan-fix
4
+ description: "VS Code Plan モードから Agent Coding への移行を自動化。計画完成後の Git/GitHub 操作を簡略化し、効率的な開発ワークフローを実現。"
5
+ agent: agent
5
6
  ---
6
-
7
- ## prompt plan-fix ワークフロー
7
+ # prompt plan-fix ワークフロー
8
8
 
9
9
  ### 概要
10
10
 
@@ -21,8 +21,7 @@ VS Code の Plan モードで作成した計画が完成したら、この promp
21
21
 
22
22
  ### 前提条件
23
23
 
24
- - VS Code の Plan モードで `todo_plans/` に計画ファイルが作成済み
25
- - 計画の内容が十分に詳細化されている
24
+ - 計画の内容が十分に詳細化されている(まだファイル化していなくてもよい)
26
25
  - Git リポジトリが初期化されている
27
26
 
28
27
  ### ワークフロー
@@ -42,25 +41,95 @@ git pull origin main
42
41
  - [ ] ローカルが最新の状態である
43
42
  - [ ] コンフリクトが発生していない
44
43
 
45
- #### Step 2: 計画の最終確認
46
-
47
- `todo_plans/` ディレクトリ内の計画ファイルを確認します。
44
+ #### Step 2: 仮の GitHub Issue を起票して IssueNumber を取得
48
45
 
49
- **チェック項目**:
50
- - [ ] ファイル名が `YYYYMMDD_[機能名].md` 形式である
51
- - [ ] 背景、やること、実装計画が明確に記載されている
52
- - [ ] Phase 分けがされている
53
- - [ ] 受け入れ基準が記載されている
46
+ このフローでは `todo_plans/${IssueNumber}/index.md` を正とし、**Issue 本文は必ず `index.md` と一致**させます。
47
+ そのため、まず仮の内容で Issue を作成して IssueNumber を取得します。
54
48
 
55
- **計画の例**:
56
- ```
57
- todo_plans/
58
- └── 20250115_cli_feature_implementation.md
49
+ ```bash
50
+ # 仮の本文(後で index.md に置き換える)
51
+ TEMP_BODY="(placeholder)\n\n※この Issue の本文は todo_plans/${IssueNumber}/index.md と同期する" \
52
+
53
+ # Issue を作成して URL を取得(例: https://github.com/ORG/REPO/issues/123)
54
+ ISSUE_URL=$(gh issue create \
55
+ --title "[機能名]: [機能概要]" \
56
+ --body "$TEMP_BODY" \
57
+ --label "enhancement")
58
+
59
+ # URL 末尾から Issue 番号を取り出す
60
+ ISSUE_NUMBER=$(basename "$ISSUE_URL")
61
+ echo "$ISSUE_NUMBER"
59
62
  ```
60
63
 
61
- #### Step 3: GitHub Issue を起票
64
+ **確認ポイント**:
65
+ - [ ] Issue が正しく作成された
66
+ - [ ] Issue 番号(`ISSUE_NUMBER`)が取得できた
67
+
68
+ #### Step 3: `todo_plans/${IssueNumber}/` を作成し、index.md を作る(Issue 本文と同期)
69
+
70
+ Issue 番号を使って、計画ディレクトリを作成します。
71
+
72
+ **作成するファイル**:
73
+ - `todo_plans/${ISSUE_NUMBER}/index.md`(必須:人間が読む用。要点のみ。Issue 本文と必ず一致させる)
74
+ - `todo_plans/${ISSUE_NUMBER}/details.md`(任意:補足情報の例。長くてよい)
75
+ - `todo_plans/${ISSUE_NUMBER}/*.md`(任意:補足は分割して複数ファイルを作ってよい。例: `testing.md`, `risks.md`, `notes.md`)
76
+
77
+ ```bash
78
+ mkdir -p "todo_plans/${ISSUE_NUMBER}"
79
+
80
+ # まずテンプレを作る(必要なら手で編集)
81
+ cat > "todo_plans/${ISSUE_NUMBER}/index.md" <<'EOF'
82
+ # 変更概要(3行)
83
+ -
84
+ -
85
+ -
86
+
87
+ ## 対象
88
+ - パッケージ/モジュール:
89
+
90
+ ## 動作確認
91
+ -
92
+
93
+ ## 稼働中システムへの影響
94
+ -
62
95
 
63
- 計画ファイルを元に GitHub Issue を作成します。
96
+ ## 破壊的変更
97
+ - なし / あり(内容: )
98
+
99
+ ## 計画ファイル一覧
100
+ - `index.md`: この Issue 本文(要点のみ)
101
+ - `details.md`: 実装の詳細(背景、実装方針、Phase、受け入れ基準など)
102
+ - その他の補足ファイル(必要に応じて作成):
103
+ - `testing.md`: テスト戦略・テストケース
104
+ - `risks.md`: リスク評価と対策
105
+ - `notes.md`: 設計メモ・その他補足
106
+ EOF
107
+
108
+ cat > "todo_plans/${ISSUE_NUMBER}/details.md" <<'EOF'
109
+ # 補足(自由記述)
110
+
111
+ ※補足はこのファイルに「全部」書く必要はありません。
112
+ `todo_plans/${ISSUE_NUMBER}/` 配下に、用途別にファイルを増やしてOKです(例: `testing.md`, `risks.md`, `notes.md`)。
113
+
114
+ ## 背景
115
+
116
+ ## 実装方針
117
+
118
+ ## 実装計画(Phase)
119
+
120
+ ## 受け入れ基準
121
+
122
+ ## ロールバック/切り戻し
123
+ EOF
124
+
125
+ # Issue 本文を index.md に必ず一致させる
126
+ gh issue edit "$ISSUE_NUMBER" --body-file "todo_plans/${ISSUE_NUMBER}/index.md"
127
+ ```
128
+
129
+ **チェック項目**:
130
+ - [ ] `todo_plans/${ISSUE_NUMBER}/index.md` が「要点のみ」で読める分量になっている
131
+ - [ ] `index.md` から、(1) どんな変更か(3行) (2) 対象パッケージ/モジュール (3) 動作確認計画 (4) 稼働中影響 (5) 破壊的変更の有無 (6) 計画ファイル一覧 が分かる
132
+ - [ ] Issue 本文が `index.md` と一致している(差分がない)
64
133
 
65
134
  **Issue 作成のポイント**:
66
135
  - タイトル: `[機能名]: [機能概要]` の形式に統一
@@ -111,7 +180,7 @@ git branch --show-current
111
180
 
112
181
  ```bash
113
182
  # 計画ファイルをステージング
114
- git add todo_plans/YYYYMMDD_[機能名].md
183
+ git add todo_plans/${ISSUE_NUMBER}/index.md todo_plans/${ISSUE_NUMBER}/details.md
115
184
 
116
185
  # コミット
117
186
  git commit -m "Add implementation plan for [機能名]
@@ -192,18 +261,29 @@ git checkout main
192
261
  git pull origin main
193
262
 
194
263
  # Step 2: 計画ファイルを確認(手動)
195
- # todo_plans/YYYYMMDD_[機能名].md を確認
264
+ # このフローでは Issue 本文 = todo_plans/${ISSUE_NUMBER}/index.md を保証する
196
265
 
197
- # Step 3: GitHub Issue を作成(Web UIまたはCopilot Chat経由)
266
+ # Step 2: 仮の Issue を作って Issue 番号を取得
267
+ TEMP_BODY="(placeholder)\n\n※この Issue の本文は todo_plans/${IssueNumber}/index.md と同期する"
268
+ ISSUE_URL=$(gh issue create \
269
+ --title "[機能名]: [機能概要]" \
270
+ --body "$TEMP_BODY" \
271
+ --label "enhancement")
272
+ ISSUE_NUMBER=$(basename "$ISSUE_URL")
198
273
 
199
- # Issue 番号を設定(例: #123)
200
- ISSUE_NUMBER=123
274
+ # Step 3: todo_plans/${ISSUE_NUMBER}/ を作って index.md & details.md を作成
275
+ mkdir -p "todo_plans/${ISSUE_NUMBER}"
276
+ ${EDITOR:-vi} "todo_plans/${ISSUE_NUMBER}/index.md"
277
+ ${EDITOR:-vi} "todo_plans/${ISSUE_NUMBER}/details.md" # 任意。必要なら、他の *.md を追加してよい
278
+
279
+ # Step 3.1: Issue 本文を index.md と同期
280
+ gh issue edit "$ISSUE_NUMBER" --body-file "todo_plans/${ISSUE_NUMBER}/index.md"
201
281
 
202
282
  # Step 4: plan ブランチを作成
203
283
  git checkout -b plan/${ISSUE_NUMBER}
204
284
 
205
285
  # Step 5: 計画ファイルをコミット
206
- git add todo_plans/YYYYMMDD_[機能名].md
286
+ git add todo_plans/${ISSUE_NUMBER}/index.md todo_plans/${ISSUE_NUMBER}/details.md
207
287
  git commit -m "Add implementation plan for [機能名]
208
288
 
209
289
  - [変更内容1]
@@ -224,7 +304,8 @@ echo "Next: Start Agent Coding with base branch plan/${ISSUE_NUMBER}"
224
304
 
225
305
  #### 計画ファイルの準備
226
306
 
227
- - **詳細度**: Agent が迷わず実装できるレベルの詳細度を確保
307
+ - **index.md**: 人間が読む前提で、要点だけに絞る(Issue 本文と一致させる正本)
308
+ - **補足ファイル**: 長い背景/Phase/受け入れ基準などは `todo_plans/${ISSUE_NUMBER}/` 配下に分割して置く(`details.md` はその一例)
228
309
  - **Phase 分け**: 1つの Phase が 2-3時間で完了する規模に分割
229
310
  - **受け入れ基準**: 検証可能な形で明記
230
311
 
@@ -308,9 +389,12 @@ git push -u origin plan/${ISSUE_NUMBER}
308
389
  ```bash
309
390
  git checkout plan/${ISSUE_NUMBER}
310
391
  # 計画ファイルを修正
311
- git add todo_plans/YYYYMMDD_[機能名].md
392
+ git add todo_plans/${ISSUE_NUMBER}/index.md todo_plans/${ISSUE_NUMBER}/details.md
312
393
  git commit -m "Update implementation plan: [変更内容]"
313
394
  git push
395
+
396
+ # Issue 本文を index.md に再同期
397
+ gh issue edit "$ISSUE_NUMBER" --body-file "todo_plans/${ISSUE_NUMBER}/index.md"
314
398
  ```
315
399
 
316
400
  #### Q4: 複数の Agent タスクを並行して実行したい場合は?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aramassa/ai-rules",
3
- "version": "0.9.2",
3
+ "version": "0.9.4",
4
4
  "description": "This repository collects guidelines and instructions for developing AI agents. It contains documents covering communication rules, coding standards, testing strategies, and general operational practices.",
5
5
  "workspaces": [
6
6
  "packages/extract",
@@ -15,3 +15,21 @@ recipe:
15
15
  type: agent
16
16
  filters:
17
17
  name: MCPDocs.GitConfig.Generator
18
+
19
+ - title: MCP Docs Web Config Generator
20
+ frontmatter:
21
+ "@name": true
22
+ "@description": true
23
+ out: mcpdocs-web-config-generator.agent.md
24
+ type: agent
25
+ filters:
26
+ name: MCPDocs.WebConfig.Generator
27
+
28
+ - title: MCP Docs Confluence Config Generator
29
+ frontmatter:
30
+ "@name": true
31
+ "@description": true
32
+ out: mcpdocs-confluence-config-generator.agent.md
33
+ type: agent
34
+ filters:
35
+ name: MCPDocs.ConfluenceConfig.Generator