feat: Claude / Codex / Grok の 3 エージェント対応を仕上げる(Phase D の残り) - #128
Merged
Conversation
Phase D の未着手 3 項目(docs/TASKS.md)を入れて、エージェント抽象の 「混在させても嘘をつかない」ところまで通す。 ## capability による UI 縮退 判定を純粋な `core/agent-capabilities.ts` に集約(`supportsCapability` = **不明なら縮退しない** / `capabilityLookup` / `agentSupports` / `showsAccountUsage`)。「値が 0 だから自然に消える」偶然に頼るのをやめた: - `cost`: `totalCostUsd(states, reportsCost)` が報告しない provider を合計から外す (混在時に「Claude ぶんの合計」を全体として出さない) - `usage`: 一覧のゲージを `showsAccountUsage` で出し分け、**同じ純関数**を `usage-poller` の `enabled` にも渡す = 出さないゲージのために 5 分ごとの `claude` probe を立てない - `permissions`: フッタの確認モード表示を `確認モード (非対応)` に差し替える (Codex では原理的に聞かれないのに「確認モード」と言い切っていた) - `transcript`: 持たない provider のセッションでは復元時に読みにも行かない ## どのセッションが何で走っているかの表示 - ヘッダに新規セッションの既定エージェント(プラン・モデルと同じ行) - 一覧の行は**混在時だけ**エージェント列を出す(`usesMultipleAgents` + `showsAgentColumn`。列が奪う幅はブランチ列の判定から差し引く) - 詳細は追加指示のプレースホルダに相手の名前(1 行も増やさない) - ログは `logLines(…, dividerFor)` が `LogEntry.agent` の境界に区切りを 1 本挿む ## 引き継ぎプロンプト `core/agent-handoff.ts`(英語固定 = AI 向け文字列)。ブランチ・最初の指示・ 直前の指示を並べ、続ける前に自分で `git status` / `git diff` を読むよう促す。 `composeSystemPrompt` の最後の節として **切替直後の 1 回だけ**渡す(キューへ 指示として積まないので、切替直後に余分なターンは走らない)。 refs #107
3 tasks
takecchi
added a commit
that referenced
this pull request
Aug 21, 2026
## 概要 README などの説明が「Claude Code 専用アプリ」に読める状態だったので、**Claude Code 以外(Codex / Grok)でも使える**ことを明示しました。実装は既に 3 エージェント対応済み(#128 / #130)で、本 PR はドキュメント・パッケージメタのみの変更です。 ## 変更内容 ### README.md - **タグライン / 紹介文** — 「Claude Code セッションを並列実行」→「コーディングエージェント(Claude Code / Codex / Grok)のセッションを並列実行」。 - **冒頭に対応エージェントの表を追加** — 「Claude Code 専用ではありません」と明言し、それぞれが起動する CLI(`claude` / `codex` / `grok`)を並べた。 - **特徴の 2 番目に「エージェントを選べる」を繰り上げ**(従来は下の方に埋もれていた)。Claude 固有の項目(プラン / 使用状況・学習データ利用の警告)には「Claude のとき」と注記。 - **機能差の比較表を追加** — 許可ダイアログ・コスト表示・使用状況ゲージ・ログ復元の 4 点だけが違い、worktree 分離 / 並列実行 / 中断 / マージ / PR 自動化 / 通知 / `/model` はどのエージェントでも同じ、と先に書いた(表の値は `CLAUDE_CAPABILITIES` / `CODEX_CAPABILITIES` / `GROK_CAPABILITIES` と一致)。 - **見出しを改題** — 「Codex / Grok で動かす」→「エージェントを選ぶ・切り替える」(Claude も含めた選択の話なので)。参照している 2 箇所のリンク / 文言も追従。 - ログイン手順に `claude auth login` を追記、Claude 前提の言い回し(`gh` レート制限・トランスクリプトの説明)を中立化。 ### その他 - `package.json` — `description` を "parallel coding-agent sessions (Claude Code / Codex / Grok)" に変更(npm ページの 1 行説明)。`keywords` に `codex` / `grok` / `coding-agent` を追加。 - `CLAUDE.md` / `docs/PRD.md` — 概要 1 行を同じ方針に更新。 ## テスト計画 - [x] 変更はドキュメントと `package.json` のメタ情報のみ(コード・テストへの影響なし) - [ ] CI(lint / typecheck / test / build)がグリーン - [ ] README を GitHub でプレビューし、追加した 2 つの表と見出しアンカー(`#エージェントを選ぶ切り替えるagent`)が正しく解決されることを確認
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
背景
Grok 対応の issue #107 は PR #124(v0.5.0)で実装済み・クローズ済みで、
claude/codex/grokの 3 つはすでに/agentから選べる状態でした。残っていたのはdocs/TASKS.mdの Phase D の未チェック 3 項目(capability 縮退の仕上げ・エージェントの表示・引き継ぎプロンプト)だけだったので、そこを入れて「3 つを混在させても嘘をつかない」ところまで通します。変更点
1. capability による UI 縮退(
core/agent-capabilities.ts新規)判定を純粋モジュールへ集約(
supportsCapability/capabilityLookup/agentSupports/showsAccountUsage)。原則は 2 つ:agentを持たない古いセッションで機能を隠すと、動くはずの操作が黙って消える。costtotalCostUsd(states, reportsCost))usageusage-pollerのenabledが同じ純関数を通るので、出していないゲージのために 5 分ごとのclaudeprobe が立たない)permissions確認モード (非対応)に差し替え。Codex では原理的に聞かれないのに確認モードと言い切っていたので「待っていれば聞かれる」と読めていたtranscript2. どのセッションが何で走っているかの表示
SessionState.agent/LogEntry.agentは状態に載っていたのにどこにも描いていなかったので、4 か所に出す:エージェント: Claude(新規セッションの既定。プラン・モデル・ブランチと同じ行 = 行を増やさない)usesMultipleAgents+showsAgentColumn)。全部同じならヘッダと重複するだけで title / branch から幅を奪うため。列が奪う幅はブランチ列の判定から差し引く(行が折り返すとrowLineAtPointの「1 セッション = 1 行」が崩れてクリック位置が全部ズレる)Claude に追加の指示を入力…)。ステータスヘッダを持たないビューなので 1 行も増やさずに出せる場所logLines(…, dividerFor)がLogEntry.agentの境界に── ここから Codex ──を 1 本挿む(切替を使っていないセッションには 1 本も出ない)3. 引き継ぎプロンプト(
core/agent-handoff.ts新規)切替先は前の会話を持たないので、何も渡さないと「途中まで作業された作業ツリー」を白紙から見ることになり、済んだ作業をやり直したり直前の指示を無視したりする。ブランチ・最初の指示・直前の指示を並べ、続ける前に自分で
git status/git diffを読むよう促す文をcomposeSystemPromptの最後の節として渡す。Sessionが次のopen()で消費)— 常設にすると引き継ぎ後のターンや通信断からの再起動でも「前任者から引き継いだ」と言い続けるSHARED_IGNORED_FILES_NOTICEと同じ扱い)。各項目は 1 行に畳んでMAX_HANDOFF_FIELD_CHARSで切るドキュメント
docs/TASKS.md(Phase D を ✅ に)/docs/ARCHITECTURE.md(縮退の表・引き継ぎの設計理由)/.claude/rules/sdk-integration.md(capability 縮退の原則・systemPrompt の合成順)/CLAUDE.md(コードの地図)/README.md(利用者向け)。テスト
agent-capabilities.spec.ts/agent-display.spec.ts/agent-handoff.spec.ts(いずれもテーブルドリブン)cost.spec.ts(報告しない provider を数えない)/layout.spec.ts(showsAgentColumnと列幅の一致)/scroll.spec.ts(区切り行の挿入・切替なしでは 1 本も出ない)/session.spec.ts(引き継ぎが最初の run だけに載る)/status-footer.spec.tsx(確認モード (非対応))lint/typecheck/test(118 files, 2971 tests)/buildの 4 点を通した動作確認のお願い
TTY と各 CLI の認証が要るので、体感確認はお願いできると助かります(過去 Phase と同じ運用):
エージェント: <名前>が出る//agentで既定を変えると追従する確認モード (非対応)になる(shift+tabの切替自体は効く)/agentで切り替えたあと最初の指示で、切替先がgit statusなどで状況を確かめてから続ける/ログに── ここから <名前> ──が入るCloses #107