Skip to content

Commit d4e7b62

Browse files
committed
feat: エージェント死活監視と安全な蘇生手順を追加
- TCP風返信義務(3分ルール)とtmux監視コマンドを全エージェントに展開 - 安全な生存確認方法(自動返信コマンド)を明記 - Escキー使用権限をPM限定に制限 - 予算閾値を100/500/1000ポイントに緩和 - compact_recovery_hintに行動原則を集約
1 parent b5eb17b commit d4e7b62

File tree

4 files changed

+61
-9
lines changed

4 files changed

+61
-9
lines changed

Agent-shared/budget/budget_termination_criteria.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
## プロジェクト開始時
6262
- UTC時刻: 2025-01-30T10:00:00Z
6363
- 開始時used: 12,345 ポイント
64-
- 最低消費量: 500 ポイント
64+
- 最低消費量: 100 ポイント(従来500→緩和)
6565
- 想定消費量: 1,000 ポイント
6666
- デッドライン: 1,500 ポイント
6767

Agent-shared/budget/budget_tracker.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -354,9 +354,9 @@ def visualize_budget(self, output_path: Path = None, as_of: datetime = None):
354354

355355
# 閾値到達時刻の計算
356356
budget_limits = {
357-
'Minimum (500pt)': 500,
358-
'Expected (1000pt)': 1000,
359-
'Deadline (1500pt)': 1500
357+
'Minimum (100pt)': 100,
358+
'Expected (500pt)': 500,
359+
'Deadline (1000pt)': 1000
360360
}
361361

362362
# 現在のポイント(実行中のジョブがある場合は推定値)
@@ -388,9 +388,9 @@ def visualize_budget(self, output_path: Path = None, as_of: datetime = None):
388388

389389
# 予算閾値の水平線
390390
budget_limits = {
391-
'Minimum (1000pt)': 1000,
392-
'Expected (2000pt)': 2000,
393-
'Deadline (3000pt)': 3000
391+
'Minimum (100pt)': 100,
392+
'Expected (500pt)': 500,
393+
'Deadline (1000pt)': 1000
394394
}
395395

396396
colors = ['green', 'orange', 'red']
@@ -461,7 +461,7 @@ def print_summary(self, as_of: datetime = None):
461461
print(f"ジョブ数: 完了={completed}, 実行中={running}")
462462

463463
# 予算に対する割合(仮定値)
464-
budget_limits = {'最低': 1000, '目安': 2000, '上限': 3000}
464+
budget_limits = {'最低': 100, '目安': 500, '上限': 1000}
465465
for label, limit in budget_limits.items():
466466
percentage = (total / limit * 100) if limit > 0 else 0
467467
print(f"{label}: {percentage:.1f}%")

Agent-shared/strategies/auto_tuning/auto_tuning_config.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,11 @@
170170
"description": "ChangeLog解析テンプレート(長い)"
171171
}
172172
},
173-
"compact_recovery_hint": "⚠️ 記憶が部分的にリセットされた可能性があります。\n作業を再開する前に、以下を実行してください:\n- ls -R Agent-shared/ でファイル構造を確認\n- pwd で現在位置を確認\n- agent_send.sh PM '[{agent_id}] 記憶リセット後の再開' で状況報告"
173+
"compact_recovery_hint": "⚠️ 記憶が部分的にリセットされた可能性があります。\n作業を再開する前に、以下を実行してください:\n- ls -R Agent-shared/ でファイル構造を確認\n- pwd で現在位置を確認\n- agent_send.sh PM '[{agent_id}] 記憶リセット後の再開' で状況報告\n\n【重要な行動原則】\n- sleep後も作業継続(待機やSTOP禁止)\n- sleep最大60秒(長時間は60秒単位で分割)\n- コンテキスト90%でもToDoリスト更新優先(sleep連発禁止)\n- メッセージには3分以内に返信(TCP風返信義務)"
174174
},
175175
"agent_tasks": {
176176
"PG": [
177+
"メッセージ受信後3分以内に返信(TCP風返信義務)",
177178
"ローカルでコード生成・修正 → 即座にChangeLog.mdに追記",
178179
"SSH/SFTPでリモート転送(mcp__desktop-commander使用)",
179180
"コンパイル実行と警告確認",
@@ -190,6 +191,9 @@
190191
"sleep後も作業継続(待機禁止)"
191192
],
192193
"SE": [
194+
"メッセージ受信後3分以内に返信(TCP風返信義務)",
195+
"tmux list-panes -t Team1_Workers1で自チームのエージェント死活監視",
196+
"5分無応答エージェントをPMに報告→蘇生依頼",
193197
"User-shared/以下の既存レポート確認(ls -la User-shared/reports/)",
194198
"重複レポート作成の防止(既存を更新)",
195199
"全PGのChangeLog.md監視(5分以上更新なし→介入)",
@@ -204,6 +208,10 @@
204208
],
205209
"PM": [
206210
"全エージェント巡回(3-5分間隔)",
211+
"tmux list-panes -t Team1_Workers1、Team1_PM等で各セッション監視",
212+
"無応答エージェント確認: !./communication/agent_send.sh [PM宛] '生存確認応答'を送信",
213+
"応答なしの場合のみ蘇生(claude --continue --dangerously-skip-permissions)",
214+
"終盤管理: 必要に応じてEscキーで一時停止制御",
207215
"agent_and_pane_id_table.jsonl確認",
208216
"エージェント間通信ログ確認(communication/logs/send_log.txt)",
209217
"各エージェントの.claude/hooks/stop_count.txt確認",
@@ -218,6 +226,8 @@
218226
"sleep後も作業継続(待機禁止)"
219227
],
220228
"CD": [
229+
"メッセージ受信後3分以内に返信(TCP風返信義務)",
230+
"tmux list-panes -t Team1_Workers1で同セッション内監視",
221231
"GitHub/へのプロジェクトコピー更新",
222232
"SOTA達成コードの定期commit",
223233
"ChangeLog.md更新の同期",

CLAUDE.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,40 @@
2222
- 例: `[報告] コンパイル成功 optimized_code_v1.2.c (ジョブID: 12345)`
2323
- **非同期通信**: 応答を待つ間も、緊急な他タスクは進めること。
2424

25+
### 📡 TCP風返信義務化ルール
26+
- **3分ルール**: メッセージ受信後3分以内に返信(少なくとも「受信確認」を送る)
27+
- **5分ルール**: 5分間ログ出力がない場合、エージェント死亡の疑い
28+
- **死活監視**: `tmux list-panes -t Team1_Workers1` 等でセッション状態を確認
29+
30+
### 🔍 エージェント生存確認手順(重要:Esc送信は厳禁)
31+
32+
#### 安全な生存確認方法
33+
```bash
34+
# 対象エージェントに自動返信コマンドを送信
35+
./communication/agent_send.sh [対象ID] "!./communication/agent_send.sh [自分のID] '[対象ID]生存確認OK'"
36+
37+
# 数秒待って返信を確認
38+
# 返信あり → エージェント生存(入力待ち状態)
39+
# 返信なし → 本当に落ちている可能性
40+
```
41+
42+
#### 蘇生手順(生存確認で応答なしの場合のみ)
43+
1. PMに報告して蘇生依頼(最優先)
44+
```bash
45+
./communication/agent_send.sh PM "[自分のID] [対象ID]が生存確認に無応答"
46+
```
47+
2. PMも無応答なら直接蘇生
48+
```bash
49+
./communication/agent_send.sh [対象ID] "claude --continue --dangerously-skip-permissions"
50+
```
51+
3. 蘇生後、ToDoリストとChangeLog確認を促す
52+
53+
**⚠️ Escキー使用権限**
54+
- **PM専用**: エージェント一時停止制御(特に終盤の管理)
55+
- **他エージェント**: PMが落ちている緊急時のみ使用可
56+
- **効果**: "Interrupted by user"で入力待ち(メッセージで再開可能)
57+
- **注意**: hooksも停止するため、意図的な制御にのみ使用
58+
2559
## 📂ファイルとディレクトリ
2660
- `cd`コマンドでの自主的な移動は禁止。全てのファイルパスはプロジェクトルートからの相対パスで指定する。
2761
- **情報源**:
@@ -97,11 +131,19 @@ PM、SE、PG、CDは以下のタイミングで関連ファイルを再確認:
97131
- ****: PGがジョブ実行後、定期的に結果を確認→次の最適化
98132
- ****: SEが`ChangeLog.md`を定期監視→統計グラフ更新
99133
- ****: PMが全エージェントを巡回監視→リソース再配分
134+
- **sleep制限**: 最大60秒まで(長時間sleepは禁止、60秒単位で刻む)
135+
- ❌ 悪い例: `sleep 180`
136+
- ✅ 良い例: `sleep 60` を3回
100137

101138
### 2. **➡️ フロー駆動型** (PM初期のみ)
102139
- **特徴**: 一連のタスクを順次実行し、各ステップで判断
103140
- ****: 要件定義→環境調査→階層設計→エージェント配置
104141

142+
### 📊 コンテキスト高使用率時の行動指針
143+
- **90%到達時**: sleepで時間稼ぎせず、ToDoリストを更新して優先順位を明確化
144+
- **職務放棄禁止**: sleepよりもauto-compactに入る方が建設的
145+
- **ToDoリスト活用**: 中途半端にならないよう、タスクを明確に記録・管理
146+
105147
## プロジェクトのディレクトリ階層(組織図)
106148
`directory_pane_map.md`を最初に読み込み
107149
pwdなどのコマンドで自分のカレントディレクトリと

0 commit comments

Comments
 (0)