Superpowers と oh-my-openagent を繋ぐ神経系プラグイン。
Justice は、以下の2つの間のギャップを埋める OpenCode プラグイン です。
- Superpowers — Markdownのプランファイルを通じた宣言的なAIプロジェクト管理
- oh-my-openagent —
task()ツールを備えたイベント駆動型のAI実行エンジン
Justice がない環境では、plan.md のチェックボックスリストと task() への委譲呼び出しの間に自動的な連携はありません。Justice は「神経系」として機能することでこのギャップを埋めます。具体的には、委譲の意図を検出し、プランを解析し、コンテキストをパッケージ化し、結果を処理し、さらに得られた学習内容を今後のタスクにフィードバックします。
Superpowers (頭脳) Justice Plugin (神経系) oh-my-openagent (手足)
───────────────────── ──────────────────────────────────── ────────────────────────
plan.md → フック層 (Hook Layer): → task()
design.md → plan-bridge (Message/PreToolUse) → background_output()
role-prompt.md → task-feedback (PostToolUse) ← compaction イベント
→ compaction-protector (Event) ← loop-detector イベント
→ loop-handler (Event)
↕
コアロジック層 (純粋関数、I/Oなし):
PlanParser · TaskPackager · ErrorClassifier
DependencyAnalyzer · CategoryClassifier
WisdomStore · LearningExtractor · ...
- フックファースト (Hook-First): 全ての機能は OmO のライフサイクルフックとして実装されます。
- 純粋なコア (Pure Core): ビジネスロジックは OmO に一切依存しておらず、完全にユニットテスト可能です。
- フェイルオープン (Fail-Open): I/O エラーによって実行がクラッシュすることはありません。プラグインはグレースフルに縮退します。
- 不変型の利用 (Immutable Types): 予期せぬ状態変更を防ぐため、すべてのインターフェースで
readonlyを使用します。
# 依存関係のインストール
bun install
# 全テストの実行 (201 テスト)
bun run test
# 型チェック
bun run typecheck
# 静的解析 (Lint)
bun run lintbun add justice-pluginoh-my-opencode.jsonc に以下を追加してください:
インストール後、AI エージェントがメッセージ内でプランファイルを参照し、かつ委譲を表すキーワード(例: "plan.md から次のタスクを委譲して")を含めた場合に、Justice は自動的にアクティブになります。
委譲のキーワード (英語/日本語): delegate, next task, execute task, 次のタスク, タスクを委譲, タスクを実行, タスクを開始
| コンポーネント | レイヤー | 目的 |
|---|---|---|
PlanParser |
Core | plan.md を解析して PlanTask[] を生成、チェックボックスの更新 |
TaskPackager |
Core | PlanTask から構造化された DelegationRequest に変換 |
TriggerDetector |
Core | プランの参照と委譲の意図を検出 |
ErrorClassifier |
Core | エラーを分類し、リトライの可否を判定 |
FeedbackFormatter |
Core | task() の生の出力を解析して TaskFeedback に変換 |
DependencyAnalyzer |
Core | (depends: task-N) マーカーの解析、トポロジカルソート |
CategoryClassifier |
Core | キーワードに基づいて OmO のタスクカテゴリを自動選択 |
ProgressReporter |
Core | タスクリストから進捗レポートを生成 |
SmartRetryPolicy |
Core | 指数バックオフとコンテキスト削減を実施 |
TaskSplitter |
Core | 失敗時にサブタスクへの分割提案を生成 |
WisdomStore |
Core | LRU キャッシュ削除機構付きのインメモリ学習ストア |
LearningExtractor |
Core | TaskFeedback から学習内容を抽出 |
WisdomPersistence |
Core | WisdomStore と .justice/wisdom.json 間の永続化・復元 |
StatusCommand |
Core | プログラムから利用可能なプランステータス API |
JusticePlugin |
Core | オーケストレーター — イベントをルーティングし、WisdomStore を共有 |
PlanBridge |
Hook | Message/PreToolUse 時の委譲ブリッジ |
TaskFeedbackHandler |
Hook | PostToolUse 時のフィードバックループ |
CompactionProtector |
Hook | コンパクション発生時にプランの状態をスナップショット化 |
LoopDetectionHandler |
Hook | ループ検出時に強制中断し、分割を提案 |
NodeFileSystem |
Runtime | Bun.file を基盤とした FileReader/FileWriter 実装 |
Justice は 2 層レイヤーのエラー戦略を実装しています:
| レイヤー | 対象エラー | アクション |
|---|---|---|
| 第1レイヤー (自動修正) | syntax_error, type_error (最大 3 リトライ) |
エージェントに通知せず進行(OmO が自動修正を実施) |
| 第2レイヤー (エスカレーション) | test_failure, design_error |
plan.md にエラーの注記を追記; systematic-debugging のガイダンスをコンテキストに注入 |
| 中断 (Abort) | timeout, loop_detected |
タスク分割の指示をコンテキストに注入 |
bun run test # 全テストの実行
bun run test:watch # 監視モード
bun run test:coverage # カバレッジ・レポートの出力
bun run typecheck # tsc --noEmit
bun run lint # ESLint
bun run format # Prettier によるフォーマット
bun run build # dist/ ディレクトリへのコンパイル完全に独立し、再現性のある開発環境として Devcontainer の設定が含まれています。 VS Code の Remote Containers 拡張機能を使用してリポジトリを開いてください。
| フェーズ | 説明 | 状態 |
|---|---|---|
| 1 | 基盤の構築 (型、パーサー、足場作り) | ✅ 完了 |
| 2 | タスク委譲ブリッジ (Task Delegation Bridge) | ✅ 完了 |
| 3 | フィードバックループ (Feedback Loop) | ✅ 完了 |
| 4 | 高度なエラーハンドリング (Advanced Error Handling) | ✅ 完了 |
| 5 | 学習の統合 (Wisdom Integration) | ✅ 完了 |
| 6 | マルチエージェント協調 (Multi-Agent Coordination) | ✅ 完了 |
| 7 | プラグインオーケストレーターとランタイム | ✅ 完了 |
{ "hooks": { "custom": [ { "name": "justice-plan-bridge", "event": ["Message", "PreToolUse"], "source": "./node_modules/justice-plugin/dist/hooks/plan-bridge.js" }, { "name": "justice-task-feedback", "event": ["PostToolUse"], "source": "./node_modules/justice-plugin/dist/hooks/task-feedback.js" }, { "name": "justice-compaction-protector", "event": ["Event"], "source": "./node_modules/justice-plugin/dist/hooks/compaction-protector.js" }, { "name": "justice-loop-handler", "event": ["Event"], "source": "./node_modules/justice-plugin/dist/hooks/loop-handler.js" } ] } }