diff --git a/CLAUDE.md b/CLAUDE.md index 18c4713..1377f50 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ # codiva -対象Gitリポジトリで起動し、指示ごとに独立した git worktree 上で Claude Code セッション(Claude Agent SDK)を並列実行する TUI アプリ。TypeScript (ESM, strict) + Ink 7 + npm。 +対象Gitリポジトリで起動し、指示ごとに独立した git worktree 上でコーディングエージェント(Claude Code = Claude Agent SDK / Codex CLI / Grok CLI)のセッションを並列実行する TUI アプリ。TypeScript (ESM, strict) + Ink 7 + npm。 ## コマンド diff --git a/README.md b/README.md index 5c018a1..e3fe646 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,35 @@ # codiva -> 対象の Git リポジトリで起動し、指示ごとに独立した git worktree 上で Claude Code セッションを並列実行する TUI アプリ。 +> 対象の Git リポジトリで起動し、指示ごとに独立した git worktree 上でコーディングエージェント(Claude Code / Codex / Grok)のセッションを並列実行する TUI アプリ。 [![npm version](https://img.shields.io/npm/v/codiva.svg)](https://www.npmjs.com/package/codiva) [![CI](https://github.com/takecchi/codiva/actions/workflows/ci.yml/badge.svg)](https://github.com/takecchi/codiva/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE) -`codiva` は、自然文で指示を投げるたびに独立した git worktree + ブランチ上で Claude Code セッション([Claude Agent SDK](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk) 経由)をバックグラウンド起動し、複数タスクを並列に進行させるターミナル UI です。「指示を次々投げるだけで、並列に実装が進む」体験を目指しています。 +`codiva` は、自然文で指示を投げるたびに独立した git worktree + ブランチ上でコーディングエージェントのセッションをバックグラウンド起動し、複数タスクを並列に進行させるターミナル UI です。「指示を次々投げるだけで、並列に実装が進む」体験を目指しています。 + +**エージェントは Claude Code 専用ではありません。** 次の 3 つから選べます(一覧の `/agent` で切り替え。詳しくは「[エージェントを選ぶ・切り替える](#エージェントを選ぶ切り替えるagent)」)。 + +| エージェント | 起動するもの | +|---|---| +| **Claude Code** | [Claude Agent SDK](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk)(`claude` CLI) | +| **Codex** | OpenAI の `codex` CLI | +| **Grok** | xAI の `grok` CLI | + +新規セッションの既定を選ぶこともできますし、セッションごとに途中で切り替えることもできます(worktree・作業ツリー・PR はそのまま引き継がれます)。エージェントごとに使える機能の差(許可ダイアログ・コスト表示など)は後述の制約表にまとめてあります。 ## 特徴 - **並列セッション** — 指示ごとに worktree(`.codiva/worktrees/`)とブランチ(`codiva/`)を自動生成。互いのファイル変更が干渉しない。 +- **エージェントを選べる** — Claude Code / **Codex**(`codex` CLI)/ **Grok**(xAI の `grok` CLI)に対応。一覧の `/agent` で新規セッションの既定を選び(自動で保存)、詳細ビューの `/agent` でそのセッションを途中から切り替えられる。導入・ログイン状態も `/agent` に表示され、`/login` で codiva の中からサインインできる。 - **リアルタイム進捗** — 一覧画面で全セッションの状態(`実行中` / `Step 4/7` / `質問あり` / `許可待ち` / `完了` / `失敗`)と経過時間を表示。 - **ノンブロッキング投入** — 指示を投げても即座に次の指示を入力できる。 - **許可応答・追加指示** — 詳細ビューでツール使用の許可 / 拒否、稼働中セッションへの追加指示ができる。 -- **エージェントの切替** — セッションを動かすエージェントとして Claude Code のほかに **Codex**(`codex` CLI)と **Grok**(xAI の `grok` CLI)を選べる。一覧の `/agent` で新規セッションの既定を選び(自動で保存)、詳細ビューの `/agent` でそのセッションを途中から切り替える。導入・ログイン状態も `/agent` に表示(下記)。 - **マージ or 破棄** — 完了セッションの diff stat を確認し、ベースブランチへマージ、または worktree ごと破棄。 - **リポジトリ追加指示** — `.codiva/prompt.md` に書いた指示(例:「作業完了時に PR を出す」)を全セッションに自動注入。一覧画面の `/prompt` コマンドから TUI 内で編集できる。 -- **プラン / 使用状況の表示** — 一覧画面のヘッダに claude.ai のプラン種別(Pro / Max / Team / Enterprise)と使用リミット枠(使用率・リセットまでの残り時間)を表示。 +- **プラン / 使用状況の表示**(Claude のとき) — 一覧画面のヘッダに claude.ai のプラン種別(Pro / Max / Team / Enterprise)と使用リミット枠(使用率・リセットまでの残り時間)を表示。既定エージェントが Codex / Grok のときは、報告されないので表示しません。 - **現在ブランチの表示** — ヘッダに対象リポジトリがチェックアウトしているブランチ(= 新しいセッションの分岐元・マージ先)を表示。別ターミナルで切り替えても数秒で追従します。 -- **学習データ利用の警告** — claude.ai の「Help improve our AI models」(モデル学習へのデータ提供)が ON のときだけ、起動時のヘッダに注意行を出す。 +- **学習データ利用の警告**(Claude のとき) — claude.ai の「Help improve our AI models」(モデル学習へのデータ提供)が ON のときだけ、起動時のヘッダに注意行を出す。 - **アップデート通知** — 起動時に npm の最新版を確認し、新しいバージョンがあればヘッダに 1 行表示。`/update` コマンドで確認の上その場で更新できる。 - **キーボード完結** — マウス不要。入力欄・ヘッダ・セッション詳細のログはドラッグで範囲選択してコピーもできます(ログは画面外へドラッグすると自動スクロールしながら選択が続きます)。ログ内の URL はクリックでブラウザで開けます。 - **日本語 / 英語 UI** — `~/.codiva/config.json` または `CODIVA_LANG` で切替。 @@ -27,7 +37,7 @@ ## 動作要件 - Node.js **>= 20** -- **`claude` / `codex` / `grok` の CLI が 1 つ以上**インストール・ログイン済みであること(下記「Codex / Grok で動かす」)。 +- **`claude` / `codex` / `grok` の CLI が 1 つ以上**インストール・ログイン済みであること(下記「エージェントを選ぶ・切り替える」)。 どれも無くても codiva は起動でき、`/login` で codiva の中からサインインできます。 - 対象が Git リポジトリで、コミットが 1 つ以上あること @@ -209,7 +219,7 @@ codiva PR の**番号**と**状態**は別に扱います。番号はブランチに対して不変なので保存され、次回起動時にはすぐ `#12` が出ます(状態のグリフは最初のポーリングで付きます)。状態だけが取得できなかった場合も番号は消えず、代わりに `⋯`(確認中)/ `?`(確認できず)がグリフの位置に出ます。 -`?` が出るときは `gh auth status` や `gh api rate_limit` を確認してください。とくに GitHub の API レート制限(GraphQL は 1 時間あたり 5000)は Claude セッション自身の `gh` 実行とも共有なので、大量に並列作業していると枯れることがあります。この状態を検知したら codiva は 5 分間ポーリングを止めて回復を待ちます。**確認できなかった間も直前に検知した PR 番号・状態は表示したままにします**(消えて見えないほうが混乱するため)。 +`?` が出るときは `gh auth status` や `gh api rate_limit` を確認してください。とくに GitHub の API レート制限(GraphQL は 1 時間あたり 5000)はセッション自身の `gh` 実行とも共有なので、大量に並列作業していると枯れることがあります。この状態を検知したら codiva は 5 分間ポーリングを止めて回復を待ちます。**確認できなかった間も直前に検知した PR 番号・状態は表示したままにします**(消えて見えないほうが混乱するため)。 ### 詰まった PR を立て直す(コンフリクト取り込み / CI 修正) @@ -258,9 +268,9 @@ PR がコンフリクト(`✗`)になったり CI が落ちたりしたと - **まとめて 1 回に畳む** — 同じタイミングで 3 件以上を確認する必要があるときは、`gh pr list` 1 回で全部取得してローカルで突き合わせます。セッションが 10 個あっても API 呼び出しは 1 回です。 - **枯れたら止まる** — レート制限・未認証を検知したら 5 分間ポーリングを停止します。 -### プラン / 使用状況の表示 +### プラン / 使用状況の表示(既定エージェントが Claude のとき) -一覧画面のヘッダ(バナー)に、ログイン中の claude.ai プランと使用リミット枠が出ます。 +一覧画面のヘッダ(バナー)に、ログイン中の claude.ai プランと使用リミット枠が出ます(Codex / Grok はこれらを報告しないため、既定をそちらにしている間は出ません)。 ``` Codiva v0.3.1 3 セッション @@ -289,11 +299,11 @@ Codiva v0.3.1 3 セッション - 画面下部のステータスバーはモード表示(`⏵⏵ 自動モード`)と操作ヒントだけです。プラン / 使用状況は ヘッダに集約しています(詳細ビューで見たいときは Esc で一覧へ戻ります)。 -### Codex / Grok で動かす(`/agent`) +### エージェントを選ぶ・切り替える(`/agent`) -セッションを動かすエージェントとして、Claude Code のかわりに **Codex**(OpenAI の `codex` CLI)または **Grok**(xAI の `grok` CLI)を選べます。 +セッションを動かすエージェントは **Claude Code**(`claude` CLI / Claude Agent SDK)・**Codex**(OpenAI の `codex` CLI)・**Grok**(xAI の `grok` CLI)から選べます。既定は Claude ですが、Claude が入っていない環境でも Codex / Grok だけで使えます。 -1. 使いたい CLI をインストールしてログインを済ませる(`codex` → `codex login` / `grok` → `grok login`。Grok は `curl -fsSL https://x.ai/cli/install.sh | bash` で入り、`XAI_API_KEY` でも動きます)。**codiva はこれらの CLI を同梱しません** — `git` や `gh` と同じく、あなたの環境に入っているコマンドを起動します(使わない人にまで大きなバイナリを配らないため)。認証も codiva は一切触りません。 +1. 使いたい CLI をインストールしてログインを済ませる(`claude` → `claude auth login` / `codex` → `codex login` / `grok` → `grok login`。Grok は `curl -fsSL https://x.ai/cli/install.sh | bash` で入り、`XAI_API_KEY` でも動きます)。**codiva はこれらの CLI を同梱しません** — `git` や `gh` と同じく、あなたの環境に入っているコマンドを起動します(使わない人にまで大きなバイナリを配らないため)。認証も codiva は一切触りません。 2. **一覧で `/agent` と入力**し、使いたいエージェントを選ぶだけで新規セッションの既定になります(設定ファイルの手編集は不要 — 選ぶと `~/.codiva/config.json` に保存されます。もちろん `"agent": "codex"` / `"agent": "grok"` を直接書いても構いません)。ダイアログには各エージェントの**導入・ログイン状態**(`使用できます` / `未ログイン` / `未導入`)が並びます。 3. すでに動いているセッションを途中で切り替えるなら、詳細ビュー(一覧で `Enter`)で **`/agent`** を選びます。切替は**次の指示から**効きます。 @@ -318,6 +328,17 @@ Codiva v0.3.1 3 セッション - 詳細ビューの入力欄には `Claude に追加の指示を入力…` のように相手の名前が出ます。 - 途中で切り替えたセッションの会話ログには `── ここから Codex ──` の区切りが入り、どこからが別のエージェントの発言か分かります。 +#### エージェントごとの機能差 + +worktree の分離・並列実行・追加指示・中断(`Ctrl+C`)・マージ / 破棄・PR 自動化(`/sync` / `/fix-ci`)・デスクトップ通知・リポジトリ追加指示(`.codiva/prompt.md`)・`/model` は**どのエージェントでも同じように使えます**。違うのは次の 4 点だけです。 + +| | Claude Code | Codex | Grok | +|---|---|---|---| +| ツール使用の許可 / 質問ダイアログ | ✅ | ❌(サンドボックスで代替) | ✅ | +| コスト表示(ヘッダの合計金額) | ✅ | ❌ | ❌ | +| プラン / 使用状況ゲージ | ✅ | ❌ | ❌ | +| 再起動後のログ復元 | ✅ | ❌(会話の再開自体は可) | ❌(同) | + **Codex セッションの制約**(Claude セッションとの違い): - **ツール使用の許可を尋ねません。** `codex exec` の JSON 出力モードは承認要求を CLI 内部で自動的に拒否してしまい、codiva 側へ上げる手段がありません。そこで codiva は「それらしい許可ダイアログ」を出さず、**サンドボックスを唯一の安全弁**にしています(設定 `codexSandbox`。既定の `workspace-write` では書き込みがセッションの worktree 内に限定されます)。`質問あり` の状態にもなりません。 @@ -519,8 +540,8 @@ codiva は全画面(代替スクリーン)で描画しているため、異 セッション詳細のログは**直近 2000 件 / 合計 40 万文字**までを保持し、それより古い行は落とします (1 件が極端に長い場合も途中で切り、末尾に `…` を付けます)。長時間動かしたセッションのログを -無制限に抱えると codiva 自身がメモリ不足で落ちるためで、会話の完全な記録は Claude Code 側の -トランスクリプト(`~/.claude/projects/`)に残っています。 +無制限に抱えると codiva 自身がメモリ不足で落ちるためで、会話の完全な記録は各エージェントの CLI 側 +(Claude Code なら `~/.claude/projects/`)に残っています。 なお、この上限に達したログを**上へスクロールして読んでいる最中に新しい行が追記される**と、 古い行が落ちたぶん表示位置が少し新しい方へ動きます(範囲選択は安全のため解除されます)。 diff --git a/docs/PRD.md b/docs/PRD.md index eadfaa6..605607e 100644 --- a/docs/PRD.md +++ b/docs/PRD.md @@ -2,7 +2,7 @@ ## 概要 -codiva は、対象のGitリポジトリで起動する TUI アプリケーション。ユーザーが自然文で指示を投げるたびに、独立した git worktree 上で Claude Code セッション(Claude Agent SDK 経由)がバックグラウンド起動し、複数タスクを並列に進行させる。ユーザーは一覧画面で全セッションの進捗をリアルタイムに把握し、必要に応じて個別セッションに入って追加指示や許可応答を行う。 +codiva は、対象のGitリポジトリで起動する TUI アプリケーション。ユーザーが自然文で指示を投げるたびに、独立した git worktree 上でコーディングエージェントのセッションがバックグラウンド起動し、複数タスクを並列に進行させる。エージェントは Claude Code(Claude Agent SDK 経由)/ Codex(`codex` CLI)/ Grok(`grok` CLI)から選べる(当初は Claude Code のみ。Phase D で抽象化した)。ユーザーは一覧画面で全セッションの進捗をリアルタイムに把握し、必要に応じて個別セッションに入って追加指示や許可応答を行う。 「指示を次々投げるだけで、並列に実装が進む」体験の提供が目的。 diff --git a/package.json b/package.json index c4aa9c6..8b07267 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "codiva", "version": "0.5.2", - "description": "TUI app that runs parallel Claude Code sessions in isolated git worktrees", + "description": "TUI app that runs parallel coding-agent sessions (Claude Code / Codex / Grok) in isolated git worktrees", "type": "module", "bin": { "codiva": "dist/index.js" @@ -18,6 +18,9 @@ "claude", "claude-code", "claude-agent-sdk", + "codex", + "grok", + "coding-agent", "tui", "ink", "git-worktree",