IGNITEシステムでは、すべてのエージェント間通信をMIME形式(RFC 2045準拠)のファイルベースメッセージで行います。メッセージのメタデータ(送信元、送信先、タイプ、優先度等)はMIMEヘッダーに、ペイロードはYAML形式のボディに格納されます。各エージェントは自身のキューディレクトリを監視し、新しいメッセージを処理します。
MIME-Version: 1.0
Message-ID: <{epoch}.{pid}.{hash}@ignite.local>
From: {sender}
To: {receiver}
Date: {RFC 2822 date}
X-IGNITE-Type: {message_type}
X-IGNITE-Priority: {priority_level}
Content-Type: text/x-yaml; charset=utf-8
Content-Transfer-Encoding: 8bit
{YAML body}
ヘッダー部 と ボディ部 は空行で区切られます。ボディはYAML形式で、従来の payload: セクションの内容がそのまま入ります。
| ヘッダー | 必須 | 説明 |
|---|---|---|
MIME-Version |
○ | 常に 1.0 |
Message-ID |
○ | 一意のメッセージID |
From |
○ | 送信元エージェント |
To |
○ | 送信先エージェント(複数はカンマ区切り) |
Cc |
× | CC先エージェント |
Date |
○ | RFC 2822形式の日時 |
Content-Type |
○ | 常に text/x-yaml; charset=utf-8 |
Content-Transfer-Encoding |
○ | 常に 8bit |
| ヘッダー | 必須 | 説明 |
|---|---|---|
X-IGNITE-Type |
○ | メッセージタイプ |
X-IGNITE-Priority |
○ | 優先度(high / normal / low) |
X-IGNITE-Status |
× | 配信状態(queue_monitorが管理) |
X-IGNITE-Thread-ID |
× | スレッドID |
X-IGNITE-Repository |
× | 関連リポジトリ |
X-IGNITE-Issue |
× | 関連Issue番号 |
X-IGNITE-Processed-At |
× | 配信処理日時 |
X-IGNITE-Retry-Count |
× | リトライ回数 |
標準タイプ:
user_goal- ユーザー目標strategy_request- 戦略立案依頼strategy_response- 戦略提案task_list- タスクリストarchitecture_request- 設計判断依頼architecture_response- 設計提案task_assignment- タスク割り当てtask_completed- タスク完了evaluation_request- 評価依頼evaluation_result- 評価結果improvement_request- 改善依頼improvement_suggestion- 改善提案improvement_completed- 改善完了progress_update- 進捗報告github_event- GitHubイベント通知github_task- GitHubタスク(トリガー検出)escalation- エスカレーション通知dead_letter- DLQ(配信不能メッセージ)
user- ユーザーleader- Leaderstrategist- Strategistarchitect- Architectevaluator- Evaluatorcoordinator- Coordinatorinnovator- Innovatorignitian_{n}- IGNITIAN(nは番号)system- システムgithub_watcher- GitHub Watcherqueue_monitor- キューモニター
critical- 緊急(エスカレーション等)high- 高優先度、即座に処理normal- 通常優先度low- 低優先度
メッセージの処理状態は、ファイルの位置と X-IGNITE-Status ヘッダーで管理されます。
| 状態 | 表現 |
|---|---|
| 未処理 | queue/<agent>/ にファイルが存在 |
| 処理中 | queue_monitorが processed/ に移動、X-IGNITE-Status: processing |
| 配信済み | エージェントに通知完了、X-IGNITE-Status: delivered |
| 処理完了 | エージェントがファイルを削除 |
メッセージの作成・パース・更新には scripts/lib/ignite_mime.py を使用します。
python3 scripts/lib/ignite_mime.py build \
--from coordinator --to ignitian_1 \
--type task_assignment --priority high \
--repo owner/repo --issue 42 \
--body "$body_yaml" \
-o "$message_file"python3 scripts/lib/ignite_mime.py parse message.mime
# → JSON出力(ヘッダー + ボディ)python3 scripts/lib/ignite_mime.py extract-body message.mime
# → YAML形式のボディのみ出力python3 scripts/lib/ignite_mime.py update-status message.mime delivered \
--processed-at "$(date -Iseconds)"python3 scripts/lib/ignite_mime.py update-header message.mime X-IGNITE-Retry-Count 3
python3 scripts/lib/ignite_mime.py remove-header message.mime X-IGNITE-Error-Reason以下の例はボディ(YAML)部分のみを示します。実際のメッセージにはMIMEヘッダーが付与されます。
ユーザーからLeaderへの目標設定。
ボディ:
goal: "目標の説明"
context: "追加のコンテキスト(オプション)"作成例:
python3 scripts/lib/ignite_mime.py build \
--from user --to leader --type user_goal --priority high \
--body 'goal: "READMEファイルを作成する"' \
-o "workspace/.ignite/queue/leader/processed/user_goal_$(date +%s%6N).mime"LeaderからStrategistへの戦略立案依頼。
ボディ:
goal: "目標の説明"
requirements:
- "要件1"
- "要件2"
context: "背景情報"StrategistからLeaderへの戦略提案。
ボディ:
goal: "目標の説明"
strategy:
approach: "アプローチ名"
phases:
- phase: 1
name: "フェーズ名"
description: "説明"
task_count: 3
estimated_duration: 300
risks:
- "リスク1"
recommendations:
- "推奨事項1"StrategistからCoordinatorへのタスクリスト。
ボディ:
goal: "目標の説明"
strategy_summary: "戦略の要約"
tasks:
- task_id: "task_001"
title: "タスク名"
description: "タスクの説明"
phase: 1
priority: high
estimated_time: 60
dependencies: []
skills_required:
- "skill1"
deliverables:
- "成果物1"CoordinatorからIGNITIANへのタスク割り当て。
完全なMIMEメッセージ例:
MIME-Version: 1.0
Message-ID: <1770263544.12345.abcdef@ignite.local>
From: coordinator
To: ignitian_1
Date: Mon, 10 Feb 2026 12:00:00 +0900
X-IGNITE-Type: task_assignment
X-IGNITE-Priority: high
X-IGNITE-Repository: owner/repo
X-IGNITE-Issue: 42
Content-Type: text/x-yaml; charset=utf-8
Content-Transfer-Encoding: 8bit
task_id: "task_001"
title: "タスク名"
description: "タスクの説明"
instructions: |
詳細な実行手順
deliverables:
- "成果物1"
skills_required:
- "skill1"
estimated_time: 60
IGNITIANからCoordinatorへの完了報告。
ボディ(成功時):
task_id: "task_001"
title: "タスク名"
status: success
deliverables:
- file: "ファイル名"
description: "説明"
location: "パス"
execution_time: 90
notes: "追加情報"ボディ(エラー時):
task_id: "task_001"
title: "タスク名"
status: error
error:
type: "エラータイプ"
message: "エラーメッセージ"
details: "詳細"
execution_time: 30
notes: "追加情報"CoordinatorからEvaluatorへの評価依頼。
ボディ:
task_id: "task_001"
title: "タスク名"
deliverables:
- file: "ファイル名"
location: "パス"
requirements:
- "要件1"
criteria:
- "基準1"EvaluatorからLeaderへの評価結果。
ボディ:
repository: "owner/repo"
task_id: "task_001"
title: "タスク名"
overall_status: "pass"
score: 95
checks_performed:
- check: "チェック名"
status: "pass"
details: "詳細"
issues_found:
- severity: "minor"
description: "問題の説明"
location: "場所"
recommendation: "推奨対応"
recommendations:
- "推奨事項1"
next_action: "approve"EvaluatorからInnovatorへの改善依頼。
ボディ:
task_id: "task_001"
target: "対象ファイル"
issues:
- issue: "問題"
severity: "minor"
location: "場所"
suggested_fix: "修正案"InnovatorからLeaderへの改善提案。
ボディ:
title: "改善提案のタイトル"
category: "performance"
current_situation:
description: "現状の説明"
issues:
- "問題1"
proposed_improvement:
description: "改善案の説明"
approach: |
詳細なアプローチ
benefits:
- "メリット1"
implementation_plan:
- step: 1
action: "アクション"
effort: "medium"
priority: "medium"
estimated_effort: "工数見積もり"CoordinatorからLeaderへの進捗報告。
ボディ:
repository: "owner/repo"
issue: 123
total_tasks: 3
completed: 1
in_progress: 2
pending: 0
summary: |
進捗の要約必須フィールド:
repositorysummary
任意フィールド:
issue- 対象 Issue 番号stage- 進捗ステージ名(例:planning/implementation/review)percent- 0-100 の整数進捗率message- 1行の短い進捗メッセージtotal_tasks/completed/in_progress/pendingfinal- 最終サマリの場合はtrue
表示フォーマット(共通):
stage=<stage> percent=<percent> message=<message>core.shのformat_progress_message()を使用
更新頻度の目安:
- 最小間隔: 2秒
- バースト抑制: 10秒あたり最大5回
- 最終サマリは
final: trueを付与し、通常の更新と分離
表示劣化のルール:
NO_COLORまたはTERM=dumbの場合は色や装飾を使わず、 1行の共通フォーマットのみを出力する
メッセージファイルは以下の命名規則に従います:
{message_type}_{message_id}.mime
message_id はマイクロ秒精度のUnixタイムスタンプ(date +%s%6N、16桁)です。
例:
user_goal_1738315200123456.mimetask_assignment_1738315260234567.mimetask_completed_1738315350345678.mime
Bashでの生成:
MESSAGE_FILE="workspace/.ignite/queue/${TO}/${TYPE}_$(date +%s%6N).mime"
python3 scripts/lib/ignite_mime.py build \
--from "$FROM" --to "$TO" --type "$TYPE" --priority "$PRIORITY" \
--body "$BODY_YAML" -o "$MESSAGE_FILE"各エージェントのキューディレクトリ:
workspace/.ignite/queue/
├── leader/ # Leader宛て
│ └── processed/ # 配信済みメッセージ
├── strategist/ # Strategist宛て
│ └── processed/
├── architect/ # Architect宛て
│ └── processed/
├── evaluator/ # Evaluator宛て
│ └── processed/
├── coordinator/ # Coordinator宛て
│ └── processed/
├── innovator/ # Innovator宛て
│ └── processed/
├── ignitian_1/ # IGNITIAN-1宛て
│ ├── processed/
│ └── task_assignment_1770263544123456.mime
├── ignitian_2/ # IGNITIAN-2宛て
│ └── processed/
└── ignitian_3/ # IGNITIAN-3宛て
└── processed/
# ignite_mime.py でMIMEメッセージを作成
python3 scripts/lib/ignite_mime.py build \
--from "$FROM" --to "$TO" --type "$TYPE" --priority "$PRIORITY" \
--body "$BODY_YAML" \
-o "workspace/.ignite/queue/${TO}/${TYPE}_$(date +%s%6N).mime"- キューの監視(queue_monitor.shが自動実行)
- メッセージ読み込み - Readツールでファイルを読み込む
- メッセージ処理 - X-IGNITE-Typeに応じて適切に処理
- ファイル削除 - 処理済みメッセージを削除
- MIMEパースエラー: ログに記録、スキップ
- 必須ヘッダー欠如: ログに記録、スキップ
- 不明なtype: ログに記録、スキップ
- 無効な宛先(To):
send_message.shの_validate_toでバリデーション。有効な宛先はleader,strategist,architect,evaluator,coordinator,innovator,ignitian_Nのみ。不正な宛先(メッセージタイプ名等)はエラーで即座に拒否
X-IGNITE-Status: processingのまま一定時間経過した場合:- retry_handler.shがタイムアウトを検知
X-IGNITE-Retry-CountをインクリメントしX-IGNITE-Status: retryingに設定- Exponential Backoff with Full Jitter でリトライ間隔を計算
- リトライ上限到達時は Dead Letter Queue に移動、Leaderにエスカレーション
リトライ上限(デフォルト3回)に到達したメッセージは workspace/.ignite/queue/dead_letter/ に移動されます。
- 明確な目的: 各メッセージは単一の目的
- 必要十分な情報: 不足も過剰もない
- 構造化: ボディのYAMLは論理的に構造化
- cat可読性: CTE=8bitにより、catでそのまま読める
# 最近のメッセージを確認
find workspace/.ignite/queue -name "*.mime" -mmin -5 -exec cat {} \;
# 特定タイプのメッセージを検索
find workspace/.ignite/queue -name "task_assignment_*.mime"
# メッセージ数をカウント
find workspace/.ignite/queue -name "*.mime" | wc -l
# メッセージをJSONでパース
python3 scripts/lib/ignite_mime.py parse workspace/.ignite/queue/ignitian_1/processed/task.mimeIGNITEの通信プロトコルは、RFC 2045準拠のMIME形式によるファイルベースメッセージングシステムです。MIMEヘッダーによりメタデータが構造化され、YAML形式のボディにより可読性が高く、cat でそのまま内容を確認できます(CTE=8bit)。各エージェントは独立して動作し、メッセージキューを通じて協調します。
| バージョン | 変更内容 |
|---|---|
| v3 | YAML形式からMIME形式へ全面移行(Issue #223) |
| v2 | statusフィールド廃止、ファイル存在モデルへ移行(Issue #116) |
| v1 | 初版 |