claude-nagger 1.0.1__tar.gz

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.
Files changed (52) hide show
  1. claude_nagger-1.0.1/LICENSE +21 -0
  2. claude_nagger-1.0.1/PKG-INFO +328 -0
  3. claude_nagger-1.0.1/README.md +294 -0
  4. claude_nagger-1.0.1/pyproject.toml +65 -0
  5. claude_nagger-1.0.1/setup.cfg +4 -0
  6. claude_nagger-1.0.1/src/application/__init__.py +6 -0
  7. claude_nagger-1.0.1/src/application/cli.py +55 -0
  8. claude_nagger-1.0.1/src/application/install_hooks.py +349 -0
  9. claude_nagger-1.0.1/src/claude_nagger.egg-info/PKG-INFO +328 -0
  10. claude_nagger-1.0.1/src/claude_nagger.egg-info/SOURCES.txt +50 -0
  11. claude_nagger-1.0.1/src/claude_nagger.egg-info/dependency_links.txt +1 -0
  12. claude_nagger-1.0.1/src/claude_nagger.egg-info/entry_points.txt +2 -0
  13. claude_nagger-1.0.1/src/claude_nagger.egg-info/requires.txt +12 -0
  14. claude_nagger-1.0.1/src/claude_nagger.egg-info/top_level.txt +4 -0
  15. claude_nagger-1.0.1/src/domain/__init__.py +1 -0
  16. claude_nagger-1.0.1/src/domain/entities/__init__.py +3 -0
  17. claude_nagger-1.0.1/src/domain/hooks/__init__.py +12 -0
  18. claude_nagger-1.0.1/src/domain/hooks/base_hook.py +530 -0
  19. claude_nagger-1.0.1/src/domain/hooks/implementation_design_hook.py +494 -0
  20. claude_nagger-1.0.1/src/domain/hooks/session_startup_hook.py +297 -0
  21. claude_nagger-1.0.1/src/domain/services/__init__.py +13 -0
  22. claude_nagger-1.0.1/src/domain/services/base_convention_matcher.py +22 -0
  23. claude_nagger-1.0.1/src/domain/services/command_convention_matcher.py +218 -0
  24. claude_nagger-1.0.1/src/domain/services/file_convention_matcher.py +215 -0
  25. claude_nagger-1.0.1/src/domain/services/hook_manager.py +319 -0
  26. claude_nagger-1.0.1/src/infrastructure/__init__.py +1 -0
  27. claude_nagger-1.0.1/src/infrastructure/config/__init__.py +5 -0
  28. claude_nagger-1.0.1/src/infrastructure/config/config_manager.py +376 -0
  29. claude_nagger-1.0.1/src/infrastructure/hooks/__init__.py +5 -0
  30. claude_nagger-1.0.1/src/infrastructure/hooks/hook_executor.py +256 -0
  31. claude_nagger-1.0.1/src/infrastructure/notifiers/__init__.py +5 -0
  32. claude_nagger-1.0.1/src/infrastructure/notifiers/discord_notifier.py +234 -0
  33. claude_nagger-1.0.1/src/shared/__init__.py +1 -0
  34. claude_nagger-1.0.1/src/shared/base/__init__.py +5 -0
  35. claude_nagger-1.0.1/src/shared/base/base_cli.py +64 -0
  36. claude_nagger-1.0.1/src/shared/utils/__init__.py +5 -0
  37. claude_nagger-1.0.1/src/shared/utils/session_manager.py +217 -0
  38. claude_nagger-1.0.1/tests/test_base_cli.py +170 -0
  39. claude_nagger-1.0.1/tests/test_base_hook.py +545 -0
  40. claude_nagger-1.0.1/tests/test_cli.py +148 -0
  41. claude_nagger-1.0.1/tests/test_command_convention_matcher.py +444 -0
  42. claude_nagger-1.0.1/tests/test_config_manager.py +1079 -0
  43. claude_nagger-1.0.1/tests/test_discord_notifier.py +316 -0
  44. claude_nagger-1.0.1/tests/test_file_convention_matcher.py +158 -0
  45. claude_nagger-1.0.1/tests/test_hook_executor.py +465 -0
  46. claude_nagger-1.0.1/tests/test_hook_manager.py +428 -0
  47. claude_nagger-1.0.1/tests/test_hook_schema_validation.py +588 -0
  48. claude_nagger-1.0.1/tests/test_implementation_design_hook.py +650 -0
  49. claude_nagger-1.0.1/tests/test_install_hooks.py +624 -0
  50. claude_nagger-1.0.1/tests/test_sanitizer.py +146 -0
  51. claude_nagger-1.0.1/tests/test_session_manager.py +331 -0
  52. claude_nagger-1.0.1/tests/test_session_startup_hook.py +425 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 HollySizzle
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,328 @@
1
+ Metadata-Version: 2.4
2
+ Name: claude-nagger
3
+ Version: 1.0.1
4
+ Summary: Claude Code統合ツールシステム - フック・規約管理CLI
5
+ Author: HollySizzle
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/HollySizzle/claude-nagger
8
+ Project-URL: Repository, https://github.com/HollySizzle/claude-nagger
9
+ Keywords: claude,claude-code,hooks,conventions
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: questionary>=2.0.0
23
+ Requires-Dist: pytz>=2023.3
24
+ Requires-Dist: json5>=0.9.14
25
+ Requires-Dist: pyyaml>=6.0
26
+ Requires-Dist: typing-extensions>=4.8.0
27
+ Requires-Dist: rich>=13.0.0
28
+ Requires-Dist: aiohttp>=3.8.0
29
+ Requires-Dist: wcmatch>=10.0
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
32
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
33
+ Dynamic: license-file
34
+
35
+ # claude-nagger
36
+
37
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
38
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
39
+ [![PyPI](https://img.shields.io/pypi/v/claude-nagger.svg)](https://pypi.org/project/claude-nagger/)
40
+
41
+ Claude Codeに「必要な時だけ」規約を読ませるフックツール
42
+
43
+ ## 解決する問題
44
+
45
+ Claude Codeで中〜大規模プロジェクトを扱う際、以下の問題が発生します:
46
+
47
+ | 問題 | 説明 |
48
+ |------|------|
49
+ | **コンテキスト肥大化** | 全規約をCLAUDE.mdに書くとトークン消費が膨大 |
50
+ | **規約の忘却** | コンテキスト圧縮(compacting)により規約が「忘れられる」 |
51
+ | **無関係な情報** | モデル編集時にCSS規約は不要、逆も然り |
52
+
53
+ ## 解決策
54
+
55
+ ```
56
+ EditツールでCSS編集 → CSS規約のみ注入
57
+ Editツールでモデル編集 → モデル規約のみ注入
58
+ ```
59
+
60
+ CLAUDE.mdでは実現できない「PreToolUseフックによる条件付き規約注入」を提供します。
61
+
62
+ ---
63
+
64
+ ## クイックスタート
65
+
66
+ ### 1. インストール
67
+
68
+ ```bash
69
+ # uvx(推奨・インストール不要で実行)
70
+ uvx claude-nagger install-hooks
71
+
72
+ # または pip
73
+ pip install claude-nagger
74
+ claude-nagger install-hooks
75
+ ```
76
+
77
+ ### 2. 動作確認
78
+
79
+ ```bash
80
+ # dry-runで生成内容を確認
81
+ claude-nagger install-hooks --dry-run
82
+ ```
83
+
84
+ ### 3. 設定カスタマイズ
85
+
86
+ 生成された `.claude-nagger/` 内のYAMLファイルを編集して、プロジェクト固有の規約を設定します。
87
+
88
+ ---
89
+
90
+ ## 生成されるファイル構造
91
+
92
+ ```
93
+ your-project/
94
+ ├── .claude-nagger/
95
+ │ ├── config.yaml # メイン設定(セッション管理等)
96
+ │ ├── file_conventions.yaml # ファイル編集時の規約
97
+ │ └── command_conventions.yaml # コマンド実行時の規約
98
+ └── .claude/
99
+ └── settings.json # ← claude-naggerが自動設定
100
+ ```
101
+
102
+ ---
103
+
104
+ ## 設定ファイル詳細
105
+
106
+ ### config.yaml(メイン設定)
107
+
108
+ セッション開始時のメッセージやコンテキスト管理を設定します。
109
+
110
+ ```yaml
111
+ # セッション開始時設定
112
+ session_startup:
113
+ enabled: true
114
+ messages:
115
+ first_time:
116
+ title: "プロジェクトセットアップ"
117
+ main_text: |
118
+ プロジェクトの規約を確認してください
119
+ severity: "block" # block: 確認必須, warn: 警告のみ
120
+
121
+ # コンテキスト管理設定(トークン数に応じたリマインダー)
122
+ context_management:
123
+ reminder_thresholds:
124
+ light_warning: 30000 # 軽い警告
125
+ medium_warning: 60000 # 中程度の警告
126
+ critical_warning: 100000 # 重要な警告
127
+
128
+ # デバッグ設定
129
+ debug:
130
+ enable_logging: false
131
+ ```
132
+
133
+ ### file_conventions.yaml(ファイル編集規約)
134
+
135
+ 特定のファイルパターンに対して適用される規約を定義します。
136
+
137
+ ```yaml
138
+ rules:
139
+ # CSS編集時の規約
140
+ - name: "CSS編集規約"
141
+ patterns:
142
+ - "**/*.css"
143
+ - "**/*.scss"
144
+ severity: "warn"
145
+ token_threshold: 30000
146
+ message: |
147
+ ## CSS規約
148
+ - BEM命名規則を使用
149
+ - !important は禁止
150
+ - ネストは3階層まで
151
+
152
+ # モデル編集時の規約
153
+ - name: "モデル編集規約"
154
+ patterns:
155
+ - "**/models/**/*.py"
156
+ - "**/entities/**/*.py"
157
+ severity: "block"
158
+ token_threshold: 35000
159
+ message: |
160
+ ## モデル規約
161
+ - フィールド名はsnake_case
162
+ - 必ずdocstringを記載
163
+ - バリデーションを実装
164
+
165
+ # View層編集時の規約
166
+ - name: "View層編集規約"
167
+ patterns:
168
+ - "**/views/**/*.erb"
169
+ - "**/templates/**/*.html"
170
+ severity: "warn"
171
+ message: |
172
+ ## View規約
173
+ - XSS対策を徹底
174
+ - ロジックはヘルパーに委譲
175
+ ```
176
+
177
+ ### command_conventions.yaml(コマンド実行規約)
178
+
179
+ 危険なコマンドや確認が必要なコマンドに対して適用される規約を定義します。
180
+
181
+ ```yaml
182
+ rules:
183
+ # Git操作規約
184
+ - name: "Git操作規約"
185
+ patterns:
186
+ - "git push*"
187
+ - "git commit*"
188
+ severity: "warn"
189
+ token_threshold: 25000
190
+ message: |
191
+ ## Git規約
192
+ - コミットメッセージは日本語で記載
193
+ - プッシュ前にテストを実行
194
+
195
+ # 本番環境操作規約
196
+ - name: "本番環境操作規約"
197
+ patterns:
198
+ - "*production*"
199
+ - "*deploy*"
200
+ severity: "block"
201
+ message: |
202
+ ## 本番環境操作
203
+ - 必ず承認を得てから実行
204
+ - バックアップを確認
205
+ ```
206
+
207
+ ---
208
+
209
+ ## ユースケース例
210
+
211
+ ### Rails プロジェクト
212
+
213
+ ```yaml
214
+ # file_conventions.yaml
215
+ rules:
216
+ - name: "コントローラ規約"
217
+ patterns: ["**/controllers/**/*.rb"]
218
+ message: |
219
+ - before_actionでの認証確認
220
+ - Strong Parametersの使用必須
221
+
222
+ - name: "マイグレーション規約"
223
+ patterns: ["**/migrate/*.rb"]
224
+ severity: "block"
225
+ message: |
226
+ - 必ずロールバック可能にする
227
+ - 大量データ更新時はバッチ処理
228
+ ```
229
+
230
+ ### React プロジェクト
231
+
232
+ ```yaml
233
+ # file_conventions.yaml
234
+ rules:
235
+ - name: "コンポーネント規約"
236
+ patterns: ["**/components/**/*.tsx"]
237
+ message: |
238
+ - Propsの型定義必須
239
+ - useCallbackでメモ化検討
240
+
241
+ - name: "フック規約"
242
+ patterns: ["**/hooks/**/*.ts"]
243
+ message: |
244
+ - カスタムフックは use* で命名
245
+ - 依存配列を正確に記述
246
+ ```
247
+
248
+ ### Python プロジェクト
249
+
250
+ ```yaml
251
+ # file_conventions.yaml
252
+ rules:
253
+ - name: "API規約"
254
+ patterns: ["**/api/**/*.py", "**/routes/**/*.py"]
255
+ message: |
256
+ - 入力バリデーション必須
257
+ - エラーハンドリングを実装
258
+
259
+ - name: "テスト規約"
260
+ patterns: ["**/tests/**/*.py"]
261
+ message: |
262
+ - Arrange-Act-Assertパターン
263
+ - モックは最小限に
264
+ ```
265
+
266
+ ---
267
+
268
+ ## 動作原理
269
+
270
+ ```
271
+ ┌─────────────────────────────────────────────────────────┐
272
+ │ Claude Code │
273
+ │ │
274
+ │ ユーザー: "このCSSを修正して" │
275
+ │ ↓ │
276
+ │ Claude: Edit ツール呼び出し (*.css) │
277
+ │ ↓ │
278
+ │ ┌─────────────────────────────────────┐ │
279
+ │ │ PreToolUse Hook (claude-nagger) │ │
280
+ │ │ │ │
281
+ │ │ 1. パターン照合: "**/*.css" ✓ │ │
282
+ │ │ 2. 対応する規約を読み込み │ │
283
+ │ │ 3. 規約をコンテキストに注入 │ │
284
+ │ └─────────────────────────────────────┘ │
285
+ │ ↓ │
286
+ │ Claude: 規約を参照しながらCSS編集 │
287
+ └─────────────────────────────────────────────────────────┘
288
+ ```
289
+
290
+ ---
291
+
292
+ ## コマンド一覧
293
+
294
+ ```bash
295
+ # フックのインストール(.claude/settings.jsonに設定追加)
296
+ claude-nagger install-hooks
297
+
298
+ # dry-run(実際には変更しない)
299
+ claude-nagger install-hooks --dry-run
300
+
301
+ # 強制上書き(既存ファイルも再生成)
302
+ claude-nagger install-hooks --force
303
+
304
+ # バージョン表示
305
+ claude-nagger --version
306
+ ```
307
+
308
+ ---
309
+
310
+ ## なぜCLAUDE.mdだけでは不十分か
311
+
312
+ | アプローチ | コンテキスト消費 | 規約遵守率 | 柔軟性 |
313
+ |-----------|-----------------|-----------|--------|
314
+ | 全規約をCLAUDE.mdに記載 | 高 (常時) | 低 (忘却) | 低 |
315
+ | claude-nagger | 低 (必要時のみ) | 高 | 高 |
316
+
317
+ ---
318
+
319
+ ## 要件
320
+
321
+ - Python 3.10以上
322
+ - Claude Code CLI
323
+
324
+ ---
325
+
326
+ ## ライセンス
327
+
328
+ MIT License - 詳細は [LICENSE](LICENSE) を参照
@@ -0,0 +1,294 @@
1
+ # claude-nagger
2
+
3
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![PyPI](https://img.shields.io/pypi/v/claude-nagger.svg)](https://pypi.org/project/claude-nagger/)
6
+
7
+ Claude Codeに「必要な時だけ」規約を読ませるフックツール
8
+
9
+ ## 解決する問題
10
+
11
+ Claude Codeで中〜大規模プロジェクトを扱う際、以下の問題が発生します:
12
+
13
+ | 問題 | 説明 |
14
+ |------|------|
15
+ | **コンテキスト肥大化** | 全規約をCLAUDE.mdに書くとトークン消費が膨大 |
16
+ | **規約の忘却** | コンテキスト圧縮(compacting)により規約が「忘れられる」 |
17
+ | **無関係な情報** | モデル編集時にCSS規約は不要、逆も然り |
18
+
19
+ ## 解決策
20
+
21
+ ```
22
+ EditツールでCSS編集 → CSS規約のみ注入
23
+ Editツールでモデル編集 → モデル規約のみ注入
24
+ ```
25
+
26
+ CLAUDE.mdでは実現できない「PreToolUseフックによる条件付き規約注入」を提供します。
27
+
28
+ ---
29
+
30
+ ## クイックスタート
31
+
32
+ ### 1. インストール
33
+
34
+ ```bash
35
+ # uvx(推奨・インストール不要で実行)
36
+ uvx claude-nagger install-hooks
37
+
38
+ # または pip
39
+ pip install claude-nagger
40
+ claude-nagger install-hooks
41
+ ```
42
+
43
+ ### 2. 動作確認
44
+
45
+ ```bash
46
+ # dry-runで生成内容を確認
47
+ claude-nagger install-hooks --dry-run
48
+ ```
49
+
50
+ ### 3. 設定カスタマイズ
51
+
52
+ 生成された `.claude-nagger/` 内のYAMLファイルを編集して、プロジェクト固有の規約を設定します。
53
+
54
+ ---
55
+
56
+ ## 生成されるファイル構造
57
+
58
+ ```
59
+ your-project/
60
+ ├── .claude-nagger/
61
+ │ ├── config.yaml # メイン設定(セッション管理等)
62
+ │ ├── file_conventions.yaml # ファイル編集時の規約
63
+ │ └── command_conventions.yaml # コマンド実行時の規約
64
+ └── .claude/
65
+ └── settings.json # ← claude-naggerが自動設定
66
+ ```
67
+
68
+ ---
69
+
70
+ ## 設定ファイル詳細
71
+
72
+ ### config.yaml(メイン設定)
73
+
74
+ セッション開始時のメッセージやコンテキスト管理を設定します。
75
+
76
+ ```yaml
77
+ # セッション開始時設定
78
+ session_startup:
79
+ enabled: true
80
+ messages:
81
+ first_time:
82
+ title: "プロジェクトセットアップ"
83
+ main_text: |
84
+ プロジェクトの規約を確認してください
85
+ severity: "block" # block: 確認必須, warn: 警告のみ
86
+
87
+ # コンテキスト管理設定(トークン数に応じたリマインダー)
88
+ context_management:
89
+ reminder_thresholds:
90
+ light_warning: 30000 # 軽い警告
91
+ medium_warning: 60000 # 中程度の警告
92
+ critical_warning: 100000 # 重要な警告
93
+
94
+ # デバッグ設定
95
+ debug:
96
+ enable_logging: false
97
+ ```
98
+
99
+ ### file_conventions.yaml(ファイル編集規約)
100
+
101
+ 特定のファイルパターンに対して適用される規約を定義します。
102
+
103
+ ```yaml
104
+ rules:
105
+ # CSS編集時の規約
106
+ - name: "CSS編集規約"
107
+ patterns:
108
+ - "**/*.css"
109
+ - "**/*.scss"
110
+ severity: "warn"
111
+ token_threshold: 30000
112
+ message: |
113
+ ## CSS規約
114
+ - BEM命名規則を使用
115
+ - !important は禁止
116
+ - ネストは3階層まで
117
+
118
+ # モデル編集時の規約
119
+ - name: "モデル編集規約"
120
+ patterns:
121
+ - "**/models/**/*.py"
122
+ - "**/entities/**/*.py"
123
+ severity: "block"
124
+ token_threshold: 35000
125
+ message: |
126
+ ## モデル規約
127
+ - フィールド名はsnake_case
128
+ - 必ずdocstringを記載
129
+ - バリデーションを実装
130
+
131
+ # View層編集時の規約
132
+ - name: "View層編集規約"
133
+ patterns:
134
+ - "**/views/**/*.erb"
135
+ - "**/templates/**/*.html"
136
+ severity: "warn"
137
+ message: |
138
+ ## View規約
139
+ - XSS対策を徹底
140
+ - ロジックはヘルパーに委譲
141
+ ```
142
+
143
+ ### command_conventions.yaml(コマンド実行規約)
144
+
145
+ 危険なコマンドや確認が必要なコマンドに対して適用される規約を定義します。
146
+
147
+ ```yaml
148
+ rules:
149
+ # Git操作規約
150
+ - name: "Git操作規約"
151
+ patterns:
152
+ - "git push*"
153
+ - "git commit*"
154
+ severity: "warn"
155
+ token_threshold: 25000
156
+ message: |
157
+ ## Git規約
158
+ - コミットメッセージは日本語で記載
159
+ - プッシュ前にテストを実行
160
+
161
+ # 本番環境操作規約
162
+ - name: "本番環境操作規約"
163
+ patterns:
164
+ - "*production*"
165
+ - "*deploy*"
166
+ severity: "block"
167
+ message: |
168
+ ## 本番環境操作
169
+ - 必ず承認を得てから実行
170
+ - バックアップを確認
171
+ ```
172
+
173
+ ---
174
+
175
+ ## ユースケース例
176
+
177
+ ### Rails プロジェクト
178
+
179
+ ```yaml
180
+ # file_conventions.yaml
181
+ rules:
182
+ - name: "コントローラ規約"
183
+ patterns: ["**/controllers/**/*.rb"]
184
+ message: |
185
+ - before_actionでの認証確認
186
+ - Strong Parametersの使用必須
187
+
188
+ - name: "マイグレーション規約"
189
+ patterns: ["**/migrate/*.rb"]
190
+ severity: "block"
191
+ message: |
192
+ - 必ずロールバック可能にする
193
+ - 大量データ更新時はバッチ処理
194
+ ```
195
+
196
+ ### React プロジェクト
197
+
198
+ ```yaml
199
+ # file_conventions.yaml
200
+ rules:
201
+ - name: "コンポーネント規約"
202
+ patterns: ["**/components/**/*.tsx"]
203
+ message: |
204
+ - Propsの型定義必須
205
+ - useCallbackでメモ化検討
206
+
207
+ - name: "フック規約"
208
+ patterns: ["**/hooks/**/*.ts"]
209
+ message: |
210
+ - カスタムフックは use* で命名
211
+ - 依存配列を正確に記述
212
+ ```
213
+
214
+ ### Python プロジェクト
215
+
216
+ ```yaml
217
+ # file_conventions.yaml
218
+ rules:
219
+ - name: "API規約"
220
+ patterns: ["**/api/**/*.py", "**/routes/**/*.py"]
221
+ message: |
222
+ - 入力バリデーション必須
223
+ - エラーハンドリングを実装
224
+
225
+ - name: "テスト規約"
226
+ patterns: ["**/tests/**/*.py"]
227
+ message: |
228
+ - Arrange-Act-Assertパターン
229
+ - モックは最小限に
230
+ ```
231
+
232
+ ---
233
+
234
+ ## 動作原理
235
+
236
+ ```
237
+ ┌─────────────────────────────────────────────────────────┐
238
+ │ Claude Code │
239
+ │ │
240
+ │ ユーザー: "このCSSを修正して" │
241
+ │ ↓ │
242
+ │ Claude: Edit ツール呼び出し (*.css) │
243
+ │ ↓ │
244
+ │ ┌─────────────────────────────────────┐ │
245
+ │ │ PreToolUse Hook (claude-nagger) │ │
246
+ │ │ │ │
247
+ │ │ 1. パターン照合: "**/*.css" ✓ │ │
248
+ │ │ 2. 対応する規約を読み込み │ │
249
+ │ │ 3. 規約をコンテキストに注入 │ │
250
+ │ └─────────────────────────────────────┘ │
251
+ │ ↓ │
252
+ │ Claude: 規約を参照しながらCSS編集 │
253
+ └─────────────────────────────────────────────────────────┘
254
+ ```
255
+
256
+ ---
257
+
258
+ ## コマンド一覧
259
+
260
+ ```bash
261
+ # フックのインストール(.claude/settings.jsonに設定追加)
262
+ claude-nagger install-hooks
263
+
264
+ # dry-run(実際には変更しない)
265
+ claude-nagger install-hooks --dry-run
266
+
267
+ # 強制上書き(既存ファイルも再生成)
268
+ claude-nagger install-hooks --force
269
+
270
+ # バージョン表示
271
+ claude-nagger --version
272
+ ```
273
+
274
+ ---
275
+
276
+ ## なぜCLAUDE.mdだけでは不十分か
277
+
278
+ | アプローチ | コンテキスト消費 | 規約遵守率 | 柔軟性 |
279
+ |-----------|-----------------|-----------|--------|
280
+ | 全規約をCLAUDE.mdに記載 | 高 (常時) | 低 (忘却) | 低 |
281
+ | claude-nagger | 低 (必要時のみ) | 高 | 高 |
282
+
283
+ ---
284
+
285
+ ## 要件
286
+
287
+ - Python 3.10以上
288
+ - Claude Code CLI
289
+
290
+ ---
291
+
292
+ ## ライセンス
293
+
294
+ MIT License - 詳細は [LICENSE](LICENSE) を参照
@@ -0,0 +1,65 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "claude-nagger"
7
+ version = "1.0.1"
8
+ description = "Claude Code統合ツールシステム - フック・規約管理CLI"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = {text = "MIT"}
12
+ authors = [
13
+ {name = "HollySizzle"}
14
+ ]
15
+ keywords = ["claude", "claude-code", "hooks", "conventions"]
16
+ classifiers = [
17
+ "Development Status :: 4 - Beta",
18
+ "Environment :: Console",
19
+ "Intended Audience :: Developers",
20
+ "License :: OSI Approved :: MIT License",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ ]
27
+
28
+ dependencies = [
29
+ "questionary>=2.0.0",
30
+ "pytz>=2023.3",
31
+ "json5>=0.9.14",
32
+ "pyyaml>=6.0",
33
+ "typing-extensions>=4.8.0",
34
+ "rich>=13.0.0",
35
+ "aiohttp>=3.8.0",
36
+ "wcmatch>=10.0",
37
+ ]
38
+
39
+ [project.optional-dependencies]
40
+ dev = [
41
+ "pytest>=7.0.0",
42
+ "pytest-cov>=4.0.0",
43
+ ]
44
+
45
+ [project.scripts]
46
+ claude-nagger = "application.cli:main"
47
+
48
+ [project.urls]
49
+ Homepage = "https://github.com/HollySizzle/claude-nagger"
50
+ Repository = "https://github.com/HollySizzle/claude-nagger"
51
+
52
+ [tool.setuptools.packages.find]
53
+ where = ["src"]
54
+ include = ["application*", "domain*", "infrastructure*", "shared*"]
55
+
56
+ [tool.setuptools.package-dir]
57
+ "" = "src"
58
+
59
+ [tool.pytest.ini_options]
60
+ testpaths = ["tests"]
61
+ python_files = ["test_*.py"]
62
+ python_functions = ["test_*"]
63
+ addopts = "-v --tb=short"
64
+ asyncio_mode = "auto"
65
+ asyncio_default_fixture_loop_scope = "function"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+