claude-code-conductor 0.4.4__tar.gz → 0.5.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.
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/CLAUDE.md +17 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/agents/developer.md +18 -0
- claude_code_conductor-0.5.1/.claude/agents/systematic-debugger.md +107 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/agents/tester.md +7 -2
- claude_code_conductor-0.5.1/.claude/hooks/pre_compact.py +64 -0
- claude_code_conductor-0.5.1/.claude/hooks/session_utils.py +79 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/settings.json +2 -1
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/dev-workflow/SKILL.md +12 -0
- claude_code_conductor-0.5.1/.claude/skills/pattern-status/SKILL.md +103 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/wave-execution/SKILL.md +15 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/worktree-tdd-workflow/SKILL.md +16 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/CHANGELOG.md +52 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/PKG-INFO +1 -1
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/__init__.py +1 -1
- claude_code_conductor-0.4.4/.claude/hooks/pre_compact.py +0 -59
- claude_code_conductor-0.4.4/.claude/hooks/session_utils.py +0 -42
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/agents/architect.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/agents/code-reviewer.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/agents/doc-writer.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/agents/interviewer.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/agents/planner.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/agents/project-setup.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/agents/security-reviewer.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/agents/tdd-develop.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/docs/parallel-orchestra-manifest.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/hooks/clear_file_history.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/hooks/enable_sandbox.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/hooks/pre_tool.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/hooks/statusline.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/hooks/stop.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/hooks/validate_skill_change.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/hooks/worktree_guard.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/memory/.gitkeep +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/rules/code-review-checklist.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/rules/promoted/index.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/rules/security-review-checklist.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/settings.local.json +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/code-review/SKILL.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/develop/SKILL.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/doc/SKILL.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/extract-lib/SKILL.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/init-session/SKILL.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/mcp-config/SKILL.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/promote-pattern/SKILL.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/report-timestamp/SKILL.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/setup/SKILL.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/start/SKILL.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.gitignore +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/LICENSE +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/README.md +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/hatch_build.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/pyproject.toml +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/__main__.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/_excludes.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/cli.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/cli_doctor.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/cli_init.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/cli_list.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/cli_po.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/cli_update.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/paths.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/po/__init__.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/po/detect.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/po/manifest.py +0 -0
- {claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/src/c3/po/run.py +0 -0
|
@@ -143,11 +143,28 @@ session ファイルの JSON ブロックにパターンを記録する:
|
|
|
143
143
|
- **冗長なコード断片(Snippets)** — git 管理されているソースコード本体の重複コピー
|
|
144
144
|
- **期限切れのタスク(Old Tasks)** — 既に完了し、今後の開発に影響を与えない古い作業記録
|
|
145
145
|
|
|
146
|
+
### いつ /compact を使うか
|
|
147
|
+
|
|
148
|
+
マイルストーン(フェーズ完了・wave 完了・大きなタスク区切り)に到達したら、以下の判断フローで `/compact` か **セッション再起動** を選ぶ。
|
|
149
|
+
|
|
150
|
+
| 状況 | 推奨 |
|
|
151
|
+
|---|---|
|
|
152
|
+
| 同じタスクを継続中で、直前の判断・議論を圧縮しつつ残したい | `/compact`(KEEP/DISCARD ルールに従い圧縮) |
|
|
153
|
+
| 別タスクに切り替える・長時間中断する・コンテキストを完全リセットしたい | セッションを終了し、次回 `/init-session` で再開 |
|
|
154
|
+
| 残タスクが session ファイルに記録されており、Claude の記憶を保持する必要がない | セッション再起動が推奨(情報損失なし) |
|
|
155
|
+
| Claude に直前の試行錯誤の経緯を覚えていてほしい | `/compact` |
|
|
156
|
+
|
|
157
|
+
**注意:**
|
|
158
|
+
- `/compact` 実行時は `pre_compact.py` フックが session ファイルにチェックポイントを自動記録する
|
|
159
|
+
- セッション再起動時は `/init-session` が前回 session ファイルを読み込んで残タスクを復元する
|
|
160
|
+
- どちらを選んでも session ファイルへの記録があれば情報は失われない
|
|
161
|
+
|
|
146
162
|
## Available Commands
|
|
147
163
|
|
|
148
164
|
| コマンド | 目的 |
|
|
149
165
|
|---|---|
|
|
150
166
|
| `/init-session` | セッション初期化・前回状態の復元 |
|
|
167
|
+
| `/pattern-status` | patterns.json の現状(信用度・昇格候補・期限残・既昇格)を可視化 |
|
|
151
168
|
| `/promote-pattern` | 昇格候補パターンを rules/ または skills/ に昇格 |
|
|
152
169
|
| `/setup` | コーディング規約の設定(標準規約 + 独自規約) |
|
|
153
170
|
| `/start` | 開発ワークフローの入口(ヒアリング→設計→計画)|
|
|
@@ -38,14 +38,32 @@ plan-report に基づき実装・デバッグ・リファクタリングを行
|
|
|
38
38
|
|
|
39
39
|
**During:**
|
|
40
40
|
- 1タスク = 1コミットの粒度を保つ
|
|
41
|
+
- Green フェーズでは test-report の不合格テストを通す最小限のコードのみ書く(テストが要求しない機能追加・将来の拡張・ついでの改善は禁止)
|
|
41
42
|
- 設計上の不明点は推測せず、合理的な判断をコードコメントに残して進む(例: `# 設計書に記載なし: ○○と判断して実装`)
|
|
42
43
|
- 実装完了後に判断した内容を報告してユーザーが確認できるようにする
|
|
43
44
|
- 根本的な設計の欠落(実装の方向性が定まらないレベル)の場合のみ作業を止めて報告する
|
|
44
45
|
- 長文を Bash のコマンドライン引数に渡さない(ファイル経由で渡す)
|
|
46
|
+
- 同じ問題に対して3回以上アプローチを変えても解決できない場合は Stuck Signal を出力して作業を止める(詳細は下記参照)
|
|
45
47
|
|
|
46
48
|
**After:**
|
|
49
|
+
- tester に渡す前に基本検証を実行する:
|
|
50
|
+
- Python ファイルを変更した場合: `python -m py_compile {変更ファイル}` でシンタックスエラーを確認する
|
|
51
|
+
- Node.js プロジェクトの場合: `npm run build` または `tsc --noEmit` でビルドを確認する
|
|
52
|
+
- その他: プロジェクトのビルドコマンドがあれば実行する
|
|
53
|
+
- エラーが検出された場合は修正してから tester に渡す
|
|
47
54
|
- tester に動作確認を依頼する
|
|
48
55
|
|
|
56
|
+
## Stuck Signal
|
|
57
|
+
|
|
58
|
+
同じ問題に対して3回以上アプローチを変えても解決できない場合:
|
|
59
|
+
|
|
60
|
+
1. Skill ツールで `report-timestamp` を呼び出してタイムスタンプを取得する
|
|
61
|
+
2. `.claude/reports/debug-needed-{timestamp}.md` を Write する。記載内容:
|
|
62
|
+
- 実装しようとしていたこと
|
|
63
|
+
- 試みたアプローチと失敗の内容(エラーメッセージ・スタックトレース含む)
|
|
64
|
+
- 現在のコードの状態(関連する箇所の抜粋)
|
|
65
|
+
3. 作業を止めて呼び出し元に返す。コミット・Edit は不要
|
|
66
|
+
|
|
49
67
|
## Tools & Constraints
|
|
50
68
|
制限:
|
|
51
69
|
- 秘密鍵・APIキー・パスワードをコードに直接書かない
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: systematic-debugger
|
|
3
|
+
model: sonnet
|
|
4
|
+
description: デバッグ調査担当。developer が行き詰まった際に根本原因調査とパターン分析を行い debug-analysis-report を出力する。コードの修正は行わない。
|
|
5
|
+
tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Bash
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Systematic Debugger
|
|
14
|
+
|
|
15
|
+
## Core Mandate
|
|
16
|
+
developer が詰まった問題の根本原因を調査し、debug-analysis-report を出力する。
|
|
17
|
+
コードの修正は行わない。調査と分析のみ担当する。
|
|
18
|
+
|
|
19
|
+
## Key Scope
|
|
20
|
+
|
|
21
|
+
✅ 担当すること:
|
|
22
|
+
- debug-needed-report の読み込みと状況把握
|
|
23
|
+
- Phase 1: エラーメッセージ読解・再現確認・最近の変更調査
|
|
24
|
+
- Phase 2: 動いている類似コードとの差分分析
|
|
25
|
+
- 根本原因の特定と仮説の提示
|
|
26
|
+
- debug-analysis-report の出力
|
|
27
|
+
|
|
28
|
+
❌ 担当しないこと:
|
|
29
|
+
- コードの修正・実装(developer の担当)
|
|
30
|
+
- テストの実行・設計(tester の担当)
|
|
31
|
+
- 設計の根本的な変更判断(architect の担当)
|
|
32
|
+
|
|
33
|
+
## Workflow
|
|
34
|
+
|
|
35
|
+
### Step 1: 状況把握
|
|
36
|
+
|
|
37
|
+
プロンプトに含まれる debug-needed レポートのパスを Read して以下を把握する:
|
|
38
|
+
- 実装しようとしていたこと
|
|
39
|
+
- 試みたアプローチと失敗の内容
|
|
40
|
+
- エラーメッセージ・スタックトレース
|
|
41
|
+
|
|
42
|
+
### Step 2: Phase 1 - 根本原因調査
|
|
43
|
+
|
|
44
|
+
**2-1: エラーメッセージの精読**
|
|
45
|
+
- エラーメッセージ・スタックトレースを詳細に読む
|
|
46
|
+
- ファイルパス・行番号・エラーコードを記録する
|
|
47
|
+
|
|
48
|
+
**2-2: 再現確認**
|
|
49
|
+
- Bash でエラーを再現するコマンドを実行する(テスト実行・ビルド等)
|
|
50
|
+
- 実際の出力を記録する(推測で書かない。実行証拠を使う)
|
|
51
|
+
|
|
52
|
+
**2-3: 最近の変更確認**
|
|
53
|
+
- `git diff HEAD` と `git log --oneline -10` で最近の変更を確認する
|
|
54
|
+
- エラーに関連する変更がないか調べる
|
|
55
|
+
|
|
56
|
+
**2-4: 関連コードの読み込み**
|
|
57
|
+
- Glob / Grep / Read でエラー箇所周辺のコードを調査する
|
|
58
|
+
- 依存関係・呼び出し元を辿る
|
|
59
|
+
|
|
60
|
+
### Step 3: Phase 2 - パターン分析
|
|
61
|
+
|
|
62
|
+
**3-1: 動いている類似コードを探す**
|
|
63
|
+
- Grep / Glob で同様のパターンを実装している箇所を探す
|
|
64
|
+
- 動いているコードと壊れているコードの両方を Read する
|
|
65
|
+
|
|
66
|
+
**3-2: 差分の特定**
|
|
67
|
+
- 動く実装と壊れている実装の違いをリスト化する
|
|
68
|
+
- 小さな違いも見逃さない(型・引数順序・インポート・スコープ等)
|
|
69
|
+
|
|
70
|
+
### Step 4: debug-analysis-report の出力
|
|
71
|
+
|
|
72
|
+
Skill ツールで `report-timestamp` を呼び出してタイムスタンプを取得する。
|
|
73
|
+
|
|
74
|
+
`.claude/reports/debug-analysis-{timestamp}.md` を Write する。
|
|
75
|
+
|
|
76
|
+
レポートの構成:
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
# Debug Analysis Report
|
|
80
|
+
|
|
81
|
+
## 問題の要約
|
|
82
|
+
{何が起きているか1〜2文で}
|
|
83
|
+
|
|
84
|
+
## 根本原因(Phase 1 調査結果)
|
|
85
|
+
{エラーの実際の原因。「〜のため〜が失敗している」の形式で記述する}
|
|
86
|
+
|
|
87
|
+
## 証拠
|
|
88
|
+
{再現コマンドの実行出力・関連コードの抜粋}
|
|
89
|
+
|
|
90
|
+
## 類似コードとの差分(Phase 2 分析結果)
|
|
91
|
+
{動いている実装との違いのリスト}
|
|
92
|
+
|
|
93
|
+
## developer への推奨仮説
|
|
94
|
+
{1つの具体的な仮説。「〜を〜に変更することで解決できると考える。根拠: 〜」の形式で}
|
|
95
|
+
|
|
96
|
+
## 注意事項
|
|
97
|
+
{アーキテクチャ上の問題が疑われる場合のみ記載。なければ省略}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Tools & Constraints
|
|
101
|
+
- コードを修正・編集しない(Read / Bash / Glob / Grep / Write のみ使用)
|
|
102
|
+
- 推測で原因を断言しない。再現コマンドの出力など証拠に基づいて記述する
|
|
103
|
+
- 推奨仮説は1つに絞る(複数の仮説を羅列しない)
|
|
104
|
+
|
|
105
|
+
## Related Agents
|
|
106
|
+
- 依頼元: developer(Stuck Signal を検知した呼び出し元スキル経由)
|
|
107
|
+
- 後続: developer(debug-analysis を受け取り実装を再開する)
|
|
@@ -34,16 +34,21 @@ tools:
|
|
|
34
34
|
|
|
35
35
|
**During:**
|
|
36
36
|
- 失敗するテストを先に書く(Red)
|
|
37
|
+
- テスト作成後は必ず実行し、**正しい理由で失敗すること**を確認する:
|
|
38
|
+
- ✅ 機能が未実装のため失敗(期待する動作)
|
|
39
|
+
- ❌ 構文エラー・タイポ・インポート漏れで失敗(テスト自体が壊れている)
|
|
40
|
+
- テストが最初から Pass する場合は、既存の挙動をテストしているだけなので修正する
|
|
37
41
|
- developer の実装後にテストを再実行して Green を確認する
|
|
38
42
|
- テスト結果は合格・不合格・スキップの件数を記録する
|
|
39
43
|
|
|
40
44
|
**After:**
|
|
41
|
-
- **必ず**
|
|
45
|
+
- **必ず** Skill ツールで `report-timestamp` を呼び出しタイムスタンプを取得し、`.claude/reports/test-report-YYYYMMDD-HHMMSS.md` に Write して出力する
|
|
42
46
|
- test-report を Write せずにターンを終了することは禁止
|
|
47
|
+
- Red フェーズの test-report には失敗理由(機能未実装による失敗であること)を明記する
|
|
43
48
|
|
|
44
49
|
## Tools & Constraints
|
|
45
50
|
制限: プロダクションコードのソースファイルを編集・書き込みしない
|
|
46
|
-
必須:
|
|
51
|
+
必須: Skill ツールで `report-timestamp` を呼び出しタイムスタンプを取得し、test-report を `.claude/reports/test-report-{timestamp}.md` に Write すること(出力なしでの終了は不可)
|
|
47
52
|
|
|
48
53
|
## Related Agents
|
|
49
54
|
- 上流: planner(plan-report を受け取る)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""PreCompact hook: append checkpoint marker and inject save instruction."""
|
|
3
|
+
|
|
4
|
+
import json
|
|
5
|
+
import os
|
|
6
|
+
import sys
|
|
7
|
+
from datetime import datetime, timezone
|
|
8
|
+
|
|
9
|
+
sys.stdout.reconfigure(encoding='utf-8')
|
|
10
|
+
sys.stderr.reconfigure(encoding='utf-8')
|
|
11
|
+
|
|
12
|
+
_HOOKS_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
13
|
+
_CLAUDE_DIR = os.path.dirname(_HOOKS_DIR)
|
|
14
|
+
SESSIONS_DIR = os.path.join(_CLAUDE_DIR, 'memory', 'sessions')
|
|
15
|
+
|
|
16
|
+
from session_utils import append_checkpoint, is_worktree
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
SAVE_INSTRUCTION = (
|
|
20
|
+
"コンテキスト圧縮が間もなく発生します。圧縮で詳細な文脈が失われる前に、"
|
|
21
|
+
"CLAUDE.md の Compact Instructions(KEEP/DISCARD ルール)に従って "
|
|
22
|
+
"今日のセッションファイル(.claude/memory/sessions/YYYYMMDD.tmp)に "
|
|
23
|
+
"現在の残タスク・直近の重要な判断・解決済みのハマりどころを書き出してください。"
|
|
24
|
+
"雑談・解決済みエラーログ・冗長なコード断片は書かず、KEEP に該当する情報のみ。"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def main():
|
|
29
|
+
try:
|
|
30
|
+
payload = json.loads(sys.stdin.read())
|
|
31
|
+
except (json.JSONDecodeError, ValueError):
|
|
32
|
+
payload = {}
|
|
33
|
+
|
|
34
|
+
cwd = os.getcwd()
|
|
35
|
+
if is_worktree(cwd):
|
|
36
|
+
sys.exit(0)
|
|
37
|
+
|
|
38
|
+
trigger = payload.get('trigger', 'unknown')
|
|
39
|
+
context_items_before = payload.get('context_items_before', 0)
|
|
40
|
+
|
|
41
|
+
now = datetime.now(timezone.utc)
|
|
42
|
+
date_str = now.strftime('%Y%m%d')
|
|
43
|
+
session_file = os.path.join(SESSIONS_DIR, f'{date_str}.tmp')
|
|
44
|
+
|
|
45
|
+
summary = (
|
|
46
|
+
f"- trigger: {trigger}\n"
|
|
47
|
+
f"- context_items_before: {context_items_before}\n"
|
|
48
|
+
f"- このポイント以前の詳細な文脈は圧縮により失われます。"
|
|
49
|
+
)
|
|
50
|
+
append_checkpoint(session_file, f'PreCompact: {trigger}', summary)
|
|
51
|
+
|
|
52
|
+
output = {
|
|
53
|
+
"hookSpecificOutput": {
|
|
54
|
+
"hookEventName": "PreCompact",
|
|
55
|
+
"additionalContext": SAVE_INSTRUCTION,
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
print(json.dumps(output, ensure_ascii=False))
|
|
59
|
+
|
|
60
|
+
print(f'[PreCompact] セッション状態を {session_file} に保存しました', file=sys.stderr)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
if __name__ == '__main__':
|
|
64
|
+
main()
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Shared utilities for session management hooks (stop.py, pre_compact.py)."""
|
|
3
|
+
|
|
4
|
+
import os
|
|
5
|
+
from datetime import datetime, timezone
|
|
6
|
+
|
|
7
|
+
_HOOKS_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
8
|
+
_CLAUDE_DIR = os.path.dirname(_HOOKS_DIR)
|
|
9
|
+
SESSIONS_DIR = os.path.join(_CLAUDE_DIR, 'memory', 'sessions')
|
|
10
|
+
|
|
11
|
+
SESSION_JSON_MARKER = 'C3:SESSION:JSON'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def is_worktree(cwd: str) -> bool:
|
|
15
|
+
git_path = os.path.join(cwd, '.git')
|
|
16
|
+
return os.path.exists(git_path) and os.path.isfile(git_path)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def create_session_template(date_str: str) -> str:
|
|
20
|
+
return (
|
|
21
|
+
f"SESSION: {date_str}\n"
|
|
22
|
+
f"AGENT: \n"
|
|
23
|
+
f"DURATION: \n"
|
|
24
|
+
f"\n"
|
|
25
|
+
f"## うまくいったアプローチ\n"
|
|
26
|
+
f"\n"
|
|
27
|
+
f"## 試みたが失敗したアプローチ\n"
|
|
28
|
+
f"\n"
|
|
29
|
+
f"## 残タスク\n"
|
|
30
|
+
f"\n"
|
|
31
|
+
f"## 事実ログ(自動生成 / stop.py)\n"
|
|
32
|
+
f"- 記録時刻: \n"
|
|
33
|
+
f"\n"
|
|
34
|
+
f"<!-- {SESSION_JSON_MARKER}\n"
|
|
35
|
+
f"{{\n"
|
|
36
|
+
f' "session": "{date_str}",\n'
|
|
37
|
+
f' "patterns": [],\n'
|
|
38
|
+
f' "successes": [],\n'
|
|
39
|
+
f' "failures": [],\n'
|
|
40
|
+
f' "todos": []\n'
|
|
41
|
+
f"}}\n"
|
|
42
|
+
f"-->\n"
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def append_checkpoint(session_file: str, label: str, summary: str) -> None:
|
|
47
|
+
"""Append a checkpoint block to the session file.
|
|
48
|
+
|
|
49
|
+
Used by wave-execution (milestone snapshots) and pre_compact.py
|
|
50
|
+
(compaction markers). Checkpoint blocks are append-only — they record
|
|
51
|
+
the state at a point in time and never overwrite earlier entries.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
session_file: Absolute path to the session file (.tmp).
|
|
55
|
+
label: Short identifier shown in the heading
|
|
56
|
+
(e.g. "Wave 2 success", "PreCompact: manual").
|
|
57
|
+
summary: Multi-line Markdown body describing the state.
|
|
58
|
+
"""
|
|
59
|
+
os.makedirs(os.path.dirname(session_file), exist_ok=True)
|
|
60
|
+
|
|
61
|
+
needs_template = (
|
|
62
|
+
not os.path.exists(session_file)
|
|
63
|
+
or os.path.getsize(session_file) == 0
|
|
64
|
+
)
|
|
65
|
+
if needs_template:
|
|
66
|
+
date_str = os.path.splitext(os.path.basename(session_file))[0]
|
|
67
|
+
with open(session_file, 'w', encoding='utf-8') as f:
|
|
68
|
+
f.write(create_session_template(date_str))
|
|
69
|
+
|
|
70
|
+
ts = datetime.now(timezone.utc).isoformat()
|
|
71
|
+
body = summary.strip()
|
|
72
|
+
block = (
|
|
73
|
+
f"\n"
|
|
74
|
+
f"## [Checkpoint: {label} - {ts}]\n"
|
|
75
|
+
f"{body}\n"
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
with open(session_file, 'a', encoding='utf-8') as f:
|
|
79
|
+
f.write(block)
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/dev-workflow/SKILL.md
RENAMED
|
@@ -257,6 +257,18 @@ Agent ツールで `tester` エージェントを起動する。→ 失敗する
|
|
|
257
257
|
|
|
258
258
|
Agent ツールで `developer` エージェントを起動する。→ テストが通る実装を行う。
|
|
259
259
|
|
|
260
|
+
### D-2.5: Stuck チェック
|
|
261
|
+
|
|
262
|
+
Glob で `.claude/reports/debug-needed-*.md` の最新を確認する。
|
|
263
|
+
|
|
264
|
+
**ファイルが存在する場合:**
|
|
265
|
+
1. Agent ツールで `systematic-debugger` を起動する。プロンプトに debug-needed ファイルのパスと内容を含める
|
|
266
|
+
2. 生成された `.claude/reports/debug-analysis-*.md` を Glob で取得して Read する
|
|
267
|
+
3. D-2 の developer を再実行する。プロンプトに debug-analysis の内容を追加注入する
|
|
268
|
+
4. debug-needed ファイルを削除する
|
|
269
|
+
|
|
270
|
+
**ファイルが存在しない場合:** そのまま次へ進む
|
|
271
|
+
|
|
260
272
|
AskUserQuestion で確認する:
|
|
261
273
|
```json
|
|
262
274
|
{
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: patterns.json の現状(信用度・昇格候補・期限残・既昇格)を表形式で可視化する読み取り専用コマンド。/promote-pattern の前段としてパターンの状態確認に使う。
|
|
3
|
+
disable-model-invocation: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# pattern-status
|
|
7
|
+
|
|
8
|
+
`patterns.json` の現状を可視化する。**読み取り専用** で patterns.json を変更しない。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Step 1: patterns.json を読み込む
|
|
13
|
+
|
|
14
|
+
`.claude/memory/patterns.json` を Read する。
|
|
15
|
+
ファイルが存在しない、または `patterns` 配列が空の場合は以下を表示して終了する:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
## パターン統計
|
|
19
|
+
|
|
20
|
+
現在、登録されているパターンはありません。
|
|
21
|
+
セッション内で発見したパターンは session ファイルの JSON ブロックに記録され、
|
|
22
|
+
セッション終了時に stop.py が patterns.json へ統合します。
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Step 2: パターンを分類する
|
|
28
|
+
|
|
29
|
+
各パターンを以下の 4 区分に分類する:
|
|
30
|
+
|
|
31
|
+
| 区分 | 条件 |
|
|
32
|
+
|---|---|
|
|
33
|
+
| 昇格済み | `promoted: true` |
|
|
34
|
+
| 昇格候補 | `promotion_candidate: true` かつ `promoted: true` でない |
|
|
35
|
+
| 蓄積中 | `promotion_candidate` が false または未設定で、`promoted` が true でない |
|
|
36
|
+
| 期限切れ間近 | `registered_date` から 25 日以上経過(30 日で自動削除) |
|
|
37
|
+
|
|
38
|
+
「期限切れ間近」は他区分と排他ではない(蓄積中かつ期限切れ間近 → 両方に表示してよい)。
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Step 3: サマリを表形式で表示する
|
|
43
|
+
|
|
44
|
+
以下の形式で表示する。空のセクションは「(なし)」と書く。
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
## パターン統計 ({今日の日付})
|
|
48
|
+
|
|
49
|
+
### 昇格候補({N}件)
|
|
50
|
+
| trust | id | description | 登録日 | 経過 |
|
|
51
|
+
|---|---|---|---|---|
|
|
52
|
+
| 0.85 | example_pattern | パターンの説明 | 2026-04-30 | 5日 |
|
|
53
|
+
...
|
|
54
|
+
|
|
55
|
+
→ `/promote-pattern` で昇格できます。
|
|
56
|
+
|
|
57
|
+
### 蓄積中({N}件)
|
|
58
|
+
| trust | id | description | 登録日 | 観測 |
|
|
59
|
+
|---|---|---|---|---|
|
|
60
|
+
| 0.33 | another_pattern | パターンの説明 | 2026-05-02 | 1回 |
|
|
61
|
+
...
|
|
62
|
+
|
|
63
|
+
### 昇格済み({N}件)
|
|
64
|
+
| id | 昇格先 | 昇格日 | trust |
|
|
65
|
+
|---|---|---|---|
|
|
66
|
+
| promoted_pattern | rules/promoted/20260503-promoted_pattern.md | 2026-05-03 | 0.90 |
|
|
67
|
+
...
|
|
68
|
+
|
|
69
|
+
### 期限切れ間近(25日以上経過 / 30日で自動削除)({N}件)
|
|
70
|
+
| trust | id | 登録日 | 残り日数 |
|
|
71
|
+
|---|---|---|---|
|
|
72
|
+
| 0.20 | stale_pattern | 2026-04-10 | 5日 |
|
|
73
|
+
...
|
|
74
|
+
|
|
75
|
+
### 信用度別分布
|
|
76
|
+
- 0.8 以上: {N}件(昇格候補入り)
|
|
77
|
+
- 0.5 〜 0.8: {N}件
|
|
78
|
+
- 0.3 〜 0.5: {N}件
|
|
79
|
+
- 0.1 〜 0.3: {N}件
|
|
80
|
+
|
|
81
|
+
合計: {N}件
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Step 4: 次のアクションを案内する
|
|
87
|
+
|
|
88
|
+
表示の最後に、状況に応じた一文を案内する:
|
|
89
|
+
|
|
90
|
+
| 状況 | 案内 |
|
|
91
|
+
|---|---|
|
|
92
|
+
| 昇格候補が 1 件以上 | `/promote-pattern` で昇格できます。 |
|
|
93
|
+
| 期限切れ間近が 1 件以上 | あと {N} 日で削除されるパターンがあります。観測されると信用度が上がり、昇格候補になります。 |
|
|
94
|
+
| 蓄積中のみで昇格候補なし | 信用度 0.8 以上・登録から 3 日以上で昇格候補になります。 |
|
|
95
|
+
| すべて空 | (Step 1 のメッセージで終了済み) |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 注意事項
|
|
100
|
+
|
|
101
|
+
- patterns.json を **絶対に変更しない**。読み取り専用のコマンドである
|
|
102
|
+
- ファイルの修正・パターンの追加削除は `/promote-pattern` または `stop.py` の担当
|
|
103
|
+
- 経過日数は `registered_date` (YYYYMMDD) と今日の日付から計算する
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/wave-execution/SKILL.md
RENAMED
|
@@ -263,6 +263,21 @@ case A で TDD ループが不合格のまま終わった、または case B で
|
|
|
263
263
|
|
|
264
264
|
全タスク成功した wave のみ、セッションファイルの `- [ ] Wave {N} (M tasks)` を `- [x] Wave {N} (M tasks)` に Edit する。
|
|
265
265
|
|
|
266
|
+
**さらに `session_utils.append_checkpoint()` を呼び出して checkpoint ブロックを追記する。** これにより wave 完了時の状態(成功 wave 数・残 wave 数・成果物の要約)が時系列で残り、後続の `/init-session` や `/pattern-status` で進捗が追跡できる。
|
|
267
|
+
|
|
268
|
+
呼び出し例(Bash 経由):
|
|
269
|
+
```bash
|
|
270
|
+
python -c "from session_utils import append_checkpoint, SESSIONS_DIR; import os; \
|
|
271
|
+
append_checkpoint(os.path.join(SESSIONS_DIR, '{YYYYMMDD}.tmp'), \
|
|
272
|
+
'Wave {N} success', \
|
|
273
|
+
'- 成功タスク: {M}件\n- 残 wave: {K}/{TOTAL}\n- 成果物: {要約}')" \
|
|
274
|
+
--hooks-dir .claude/hooks
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
または Python ヘルパーを直接呼び出してもよい。**checkpoint の summary には KEEP ルール(設計判断・決定事項・解決済みのハマりどころ)に該当する情報のみ書く**。雑談・進捗報告はセッションファイル本体(`## うまくいったアプローチ` 等)へ。
|
|
278
|
+
|
|
279
|
+
**失敗 wave を「スキップして次の wave へ」した場合も同じ仕組みで記録する。** label は `Wave {N} skipped`、summary に失敗内容と判断理由を書く。
|
|
280
|
+
|
|
266
281
|
**次の wave に進む前に main をコミットしてクリーンに保つ。** wave 成果物を未コミットのまま次の wave で PO に入ると、worktree が同名ファイルを再生成して必ず auto-merge 衝突が起きる(Step 0-pre と同じ理由)。親 Claude が wave の成果物を確認のうえ「Wave {N}: {要約}」のメッセージでコミットしてから 2-A の次のループに戻る。
|
|
267
282
|
|
|
268
283
|
---
|
|
@@ -60,6 +60,22 @@ user-invocable: false
|
|
|
60
60
|
|
|
61
61
|
---
|
|
62
62
|
|
|
63
|
+
## Step 3.5: Stuck チェック
|
|
64
|
+
|
|
65
|
+
Glob で `.claude/reports/debug-needed-*.md` の最新を確認する。
|
|
66
|
+
|
|
67
|
+
**ファイルが存在する場合:**
|
|
68
|
+
1. Agent ツールで `systematic-debugger` を起動する。プロンプトに debug-needed ファイルのパスと内容を含める
|
|
69
|
+
2. 生成された `.claude/reports/debug-analysis-*.md` を Glob で取得して Read する
|
|
70
|
+
3. Step 3 を再実行する。プロンプトに以下を追加注入する:
|
|
71
|
+
- debug-analysis の内容
|
|
72
|
+
- 「**git commit は絶対に実行しないこと**」の制約は引き続き適用
|
|
73
|
+
4. debug-needed ファイルを削除する
|
|
74
|
+
|
|
75
|
+
**ファイルが存在しない場合:** Step 4 へ進む
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
63
79
|
## Step 4: tester(Green 確認フェーズ)
|
|
64
80
|
|
|
65
81
|
以下を順番に実行する:
|
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.1] - 2026-05-05
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- New `/pattern-status` skill (read-only) that visualizes `patterns.json`:
|
|
7
|
+
trust score distribution, promotion candidates, expiry-near patterns,
|
|
8
|
+
and already-promoted patterns. Use it before `/promote-pattern` to
|
|
9
|
+
inspect the current state without modifying the file.
|
|
10
|
+
- `session_utils.append_checkpoint(session_file, label, summary)` helper
|
|
11
|
+
for milestone state snapshots. Safely handles non-existent and empty
|
|
12
|
+
session files by writing the template before appending. Used by both
|
|
13
|
+
`wave-execution` (success/skipped-failure waves) and `pre_compact.py`.
|
|
14
|
+
- `CLAUDE.md` "When to use /compact" guideline — decision flow for
|
|
15
|
+
`/compact` vs session restart, aimed at clarifying the choice for
|
|
16
|
+
power users (restart) vs casual users (`/compact`).
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- `pre_compact.py` now emits `hookSpecificOutput.additionalContext` to
|
|
20
|
+
inject KEEP/DISCARD save instructions into Claude's context just
|
|
21
|
+
before compaction. Previously the hook only wrote a timestamp marker
|
|
22
|
+
to the session file. Claude now writes important state (remaining
|
|
23
|
+
tasks, key decisions, resolved gotchas) to the session before the
|
|
24
|
+
context shrinks.
|
|
25
|
+
- `wave-execution` Step 2-F now records a checkpoint block to the
|
|
26
|
+
session file on every wave completion (success or skipped failure),
|
|
27
|
+
in addition to flipping `[ ]` → `[x]`. This gives a time-stamped
|
|
28
|
+
trail of milestones for `/init-session` and `/pattern-status`.
|
|
29
|
+
- Added `WebSearch` to `permissions.allow` in `settings.json` so
|
|
30
|
+
research subagents can use it without prompting.
|
|
31
|
+
|
|
32
|
+
## [0.5.0] - 2026-05-05
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
- New `systematic-debugger` agent: dedicated investigation phase for
|
|
36
|
+
root-cause analysis and pattern matching when `developer` gets stuck.
|
|
37
|
+
Runs in a separate phase from implementation, preserving C3's
|
|
38
|
+
multi-agent separation.
|
|
39
|
+
- `developer` agent: Stuck Signal — after 3 failed attempts at the
|
|
40
|
+
same problem, write a `debug-needed` report and stop, letting the
|
|
41
|
+
orchestrator dispatch `systematic-debugger`.
|
|
42
|
+
- `dev-workflow` D-2.5 and `worktree-tdd-workflow` Step 3.5: detect
|
|
43
|
+
Stuck Signal, run systematic-debugger, re-invoke developer with the
|
|
44
|
+
debug analysis injected.
|
|
45
|
+
- `tester` agent: Verify RED rule — before handing off to developer,
|
|
46
|
+
confirm tests fail for the right reason (missing feature, not
|
|
47
|
+
syntax errors), and document the verification in the test-report.
|
|
48
|
+
- `developer` agent: minimal code principle — Green phase writes
|
|
49
|
+
only what tests require, no premature extensions or speculative
|
|
50
|
+
abstractions.
|
|
51
|
+
- `developer` agent: lightweight verification before tester handoff
|
|
52
|
+
(syntax/build check) drawn from superpowers' verification ideas
|
|
53
|
+
while keeping C3's agent-separated structure.
|
|
54
|
+
|
|
3
55
|
## [0.4.0] - 2026-05-04
|
|
4
56
|
|
|
5
57
|
### Breaking Changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-conductor
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: Multi-agent orchestration framework for Claude Code (C3)
|
|
5
5
|
Project-URL: Homepage, https://github.com/satoh-y-0323/claude-code-conductor
|
|
6
6
|
Project-URL: Repository, https://github.com/satoh-y-0323/claude-code-conductor
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""PreCompact hook: append checkpoint marker to today's session file."""
|
|
3
|
-
|
|
4
|
-
import json
|
|
5
|
-
import os
|
|
6
|
-
import sys
|
|
7
|
-
from datetime import datetime, timezone
|
|
8
|
-
|
|
9
|
-
sys.stdout.reconfigure(encoding='utf-8')
|
|
10
|
-
sys.stderr.reconfigure(encoding='utf-8')
|
|
11
|
-
|
|
12
|
-
_HOOKS_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
13
|
-
_CLAUDE_DIR = os.path.dirname(_HOOKS_DIR)
|
|
14
|
-
SESSIONS_DIR = os.path.join(_CLAUDE_DIR, 'memory', 'sessions')
|
|
15
|
-
|
|
16
|
-
from session_utils import is_worktree, create_session_template
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def main():
|
|
20
|
-
try:
|
|
21
|
-
payload = json.loads(sys.stdin.read())
|
|
22
|
-
except (json.JSONDecodeError, ValueError):
|
|
23
|
-
payload = {}
|
|
24
|
-
|
|
25
|
-
cwd = os.getcwd()
|
|
26
|
-
if is_worktree(cwd):
|
|
27
|
-
sys.exit(0)
|
|
28
|
-
|
|
29
|
-
trigger = payload.get('trigger', 'unknown')
|
|
30
|
-
context_items_before = payload.get('context_items_before', 0)
|
|
31
|
-
|
|
32
|
-
os.makedirs(SESSIONS_DIR, exist_ok=True)
|
|
33
|
-
|
|
34
|
-
now = datetime.now(timezone.utc)
|
|
35
|
-
date_str = now.strftime('%Y%m%d')
|
|
36
|
-
session_file = os.path.join(SESSIONS_DIR, f'{date_str}.tmp')
|
|
37
|
-
|
|
38
|
-
try:
|
|
39
|
-
with open(session_file, 'x', encoding='utf-8') as f:
|
|
40
|
-
f.write(create_session_template(date_str))
|
|
41
|
-
except FileExistsError:
|
|
42
|
-
pass # already created by stop.py or another process
|
|
43
|
-
|
|
44
|
-
ts = now.isoformat()
|
|
45
|
-
checkpoint = (
|
|
46
|
-
f'\n'
|
|
47
|
-
f'## [PreCompact checkpoint: {trigger} - {ts}]\n'
|
|
48
|
-
f'コンテキスト圧縮 ({trigger}) が発生しました。圧縮前: {context_items_before} アイテム。\n'
|
|
49
|
-
f'このポイント以前の詳細な文脈は失われています。\n'
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
with open(session_file, 'a', encoding='utf-8') as f:
|
|
53
|
-
f.write(checkpoint)
|
|
54
|
-
|
|
55
|
-
print(f'[PreCompact] セッション状態を {session_file} に保存しました', file=sys.stderr)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if __name__ == '__main__':
|
|
59
|
-
main()
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Shared utilities for session management hooks (stop.py, pre_compact.py)."""
|
|
3
|
-
|
|
4
|
-
import os
|
|
5
|
-
|
|
6
|
-
_HOOKS_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
7
|
-
_CLAUDE_DIR = os.path.dirname(_HOOKS_DIR)
|
|
8
|
-
SESSIONS_DIR = os.path.join(_CLAUDE_DIR, 'memory', 'sessions')
|
|
9
|
-
|
|
10
|
-
SESSION_JSON_MARKER = 'C3:SESSION:JSON'
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def is_worktree(cwd: str) -> bool:
|
|
14
|
-
git_path = os.path.join(cwd, '.git')
|
|
15
|
-
return os.path.exists(git_path) and os.path.isfile(git_path)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def create_session_template(date_str: str) -> str:
|
|
19
|
-
return (
|
|
20
|
-
f"SESSION: {date_str}\n"
|
|
21
|
-
f"AGENT: \n"
|
|
22
|
-
f"DURATION: \n"
|
|
23
|
-
f"\n"
|
|
24
|
-
f"## うまくいったアプローチ\n"
|
|
25
|
-
f"\n"
|
|
26
|
-
f"## 試みたが失敗したアプローチ\n"
|
|
27
|
-
f"\n"
|
|
28
|
-
f"## 残タスク\n"
|
|
29
|
-
f"\n"
|
|
30
|
-
f"## 事実ログ(自動生成 / stop.py)\n"
|
|
31
|
-
f"- 記録時刻: \n"
|
|
32
|
-
f"\n"
|
|
33
|
-
f"<!-- {SESSION_JSON_MARKER}\n"
|
|
34
|
-
f"{{\n"
|
|
35
|
-
f' "session": "{date_str}",\n'
|
|
36
|
-
f' "patterns": [],\n'
|
|
37
|
-
f' "successes": [],\n'
|
|
38
|
-
f' "failures": [],\n'
|
|
39
|
-
f' "todos": []\n'
|
|
40
|
-
f"}}\n"
|
|
41
|
-
f"-->\n"
|
|
42
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/agents/security-reviewer.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/hooks/clear_file_history.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/hooks/validate_skill_change.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/rules/code-review-checklist.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/code-review/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/extract-lib/SKILL.md
RENAMED
|
File without changes
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/init-session/SKILL.md
RENAMED
|
File without changes
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/mcp-config/SKILL.md
RENAMED
|
File without changes
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/promote-pattern/SKILL.md
RENAMED
|
File without changes
|
{claude_code_conductor-0.4.4 → claude_code_conductor-0.5.1}/.claude/skills/report-timestamp/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|