このリポジトリは、以下をリライト元とした実装計画です。
目的は、Claude CodeスタイルのCLI機能を維持しつつ、次を追加することです。
- ChatGPT Codex対応
- Sakana AI対応
- Shift+Tabによるモデル切替
- 複数モデルの並列思考と最終回答の統合
- マルチプロバイダCLIアーキテクチャ(Claude、Codex、Sakana)
- 実行中に切り替え可能なモデル選択UX
- 複数モデル実行パイプライン
- 審判モデル(LLM-as-a-judge)による統合
- モデル別のコスト/レイテンシ追跡
- すべてのアダプタを本番品質で完成させること
- 非公式連携に対する長期的な法務/契約保証
- プラグインマーケットプレイスやGUIアプリ化
- 参照元プロジェクトのClaude中心ワークフローを維持する。
- セッションを再起動せずにモデル/プロバイダを切り替えられるようにする。
- 1つのプロンプトを複数モデルで実行し、合議型の回答を可能にする。
- 将来プロバイダ追加時にコア変更を最小化できる拡張性を確保する。
以下のようなプロバイダインターフェースを定義します。
interface LlmProvider {
id: "claude" | "codex" | "sakana";
listModels(): Promise<string[]>;
sendMessage(input: ProviderMessageInput): Promise<ProviderMessageOutput>;
supportsStreaming: boolean;
normalizeError(error: unknown): ProviderError;
}- CLIでユーザー入力を受け取る。
- 有効モデルを解決する(セッション上書き > CLIフラグ > 設定デフォルト)。
- プロバイダアダプタ経由でリクエストを送る。
- 可能な場合はストリーミングで応答を表示する。
- コストとテレメトリを記録する。
- ユーザーがマルチモデルモードを有効化する。
- 選択されたモデル群へプロンプトを並列送信する。
- タイムアウトと部分失敗許容を前提に各応答を収集する。
- 審判モデルに候補応答群と評価基準を渡す。
- 最終統合回答とモデル別サマリーを返す。
- Shift+Tabで、定義済み順序に従ってアクティブモデルを循環切替する。
- 現在のプロバイダ/モデルをステータスラインに常時表示する。
- 逆順切替は任意でCtrl+Shift+Tabに割り当て可能とする。
- 競合時の代替キーはキーマップ設定で変更可能にする。
想定UX:
- 1回押下: 次のモデルへ移動
- 思考文脈を維持: 入力中プロンプトは保持
- セッション再起動不要
デフォルト戦略はLLM審判統合とします。
審判モデルへの入力:
- 元プロンプト
- 各モデル出力(プロバイダ/モデル名付き)
- 採点基準(正確性、網羅性、安全性、実行可能性)
審判モデルの出力形式:
- 採用した最終回答
- 採用理由
- 不採用回答の不足点
- 信頼度スコア(0-1)
- 現行CLI挙動との互換性を基準線として維持する。
- ツール呼び出しとコーディング支援の操作感を維持する。
- OpenAI/Codex系API向けアダプタ層を追加する。
- 応答スキーマを内部共通形式へ正規化する。
- Sakana AIの実装は sakana.js を利用する方針を明示する。
- 要望に基づき、sakana.js 経由のスクレイピング連携を初期案として扱う。
- リスク: 画面/仕様変更、bot対策、利用規約制約、安定性低下。
- 推奨代替: 公式APIまたはOpenAI互換エンドポイントへ段階移行。
設定例:
{
"defaultProvider": "claude",
"defaultModel": "claude-opus",
"providers": {
"claude": {
"apiKeyEnv": "ANTHROPIC_API_KEY"
},
"codex": {
"apiKeyEnv": "OPENAI_API_KEY",
"baseUrl": "https://api.openai.com/v1"
},
"sakana": {
"library": "sakana.js",
"mode": "scraping",
"endpoint": "TBD"
}
},
"multiModel": {
"enabled": false,
"models": ["claude-opus", "gpt-codex"],
"judgeModel": "claude-opus",
"timeoutMs": 45000
},
"keybindings": {
"cycleModel": "shift+tab"
}
}- プロバイダインターフェースとアダプタ登録機構を追加
- Claude経路を正準参照実装として維持
- Codexアダプタの骨組みを追加
- Sakanaアダプタの骨組みを追加(sakana.js 利用、スクレイピングは実験扱い)
- Shift+Tabによるモデル循環切替を実装
- ステータスラインにモデル表示を追加
- 設定変更と実行時上書きコマンドを追加
- 並列実行マネージャを追加
- 応答収集とタイムアウト制御を追加
- 審判モデル統合パイプラインを追加
- 統合結果表示とモデル別補足表示を追加
- プロバイダ別のリトライ/バックオフを追加
- 構造化エラー分類を追加
- 単一モデル互換性の回帰テストを追加
- マルチモデル統合の結合テストを追加
- 単体テスト
- プロバイダアダプタ(成功/失敗/タイムアウト)
- モデル解決ロジックとキーバインド挙動
- 審判プロンプト生成と応答パーサ
- 結合テスト
- プロバイダ別の単一モデルE2E
- 1プロバイダ失敗時を含むマルチモデルE2E
- UXテスト
- プロンプト入力途中でのShift+Tab切替
- 動的切替後のステータスライン整合性
- 非機能テスト
- 並列負荷時のレイテンシ/タイムアウト挙動
- プロバイダ/モデル別コスト集計の整合性
- Sakanaスクレイピングの脆弱性
- 対策: 実験機能として明示し、アダプタを分離し、公式API移行経路を準備する。
- プロバイダ横断のレート制限
- 対策: プロバイダ単位のスロットリングと適応的リトライを実装する。
- 審判モデルの幻覚やバイアス
- 対策: 決定論的な評価ルーブリック、元出力の閲覧機能、信頼度しきい値を導入する。
- 端末環境でのキーバインド衝突
- 対策: 代替キーを設定可能にし、競合検知時に警告を出す。
/model現在のモデル/プロバイダを表示/model next次モデルへ切替(Shift+Tab相当)/model set <provider:model>アクティブモデルを設定/multi onマルチモデルモードを有効化/multi offマルチモデルモードを無効化/multi models add <provider:model>対象モデル集合へ追加/multi judge <provider:model>審判モデルを設定
- このリポジトリをクローンする。
- 採用実装に合わせたNode.jsとパッケージマネージャを準備する。
.env.exampleを.envにコピーし、必要なAPIキーを設定する。- 開発モードでCLIを起動する。
/model、Shift+Tab、/multiの挙動を確認する。
- Claude単一モデルフローが維持されている。
- Codexアダプタで最低1件のE2Eが成功する。
- Shift+Tabでモデル切替と表示更新が行える。
- マルチモデルモードで審判統合結果を返せる。
- Sakana実験経路が明確にラベル付けされ、切替可能である。
このREADMEは最初の実装成果物であり、以降の実装を進めるための基準設計書です。