Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
@@ -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。

## コマンド

Expand Down
49 changes: 35 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,43 @@
# 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/<slug>`)とブランチ(`codiva/<slug>`)を自動生成。互いのファイル変更が干渉しない。
- **エージェントを選べる** — 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` で切替。

## 動作要件

- Node.js **>= 20**
- **`claude` / `codex` / `grok` の CLI が 1 つ以上**インストール・ログイン済みであること(下記「Codex / Grok で動かす」)。
- **`claude` / `codex` / `grok` の CLI が 1 つ以上**インストール・ログイン済みであること(下記「エージェントを選ぶ・切り替える」)。
どれも無くても codiva は起動でき、`/login` で codiva の中からサインインできます。
- 対象が Git リポジトリで、コミットが 1 つ以上あること

Expand Down Expand Up @@ -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 修正)

Expand Down Expand Up @@ -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 セッション
Expand Down Expand Up @@ -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`** を選びます。切替は**次の指示から**効きます。

Expand All @@ -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 内に限定されます)。`質問あり` の状態にもなりません。
Expand Down Expand Up @@ -519,8 +540,8 @@ codiva は全画面(代替スクリーン)で描画しているため、異

セッション詳細のログは**直近 2000 件 / 合計 40 万文字**までを保持し、それより古い行は落とします
(1 件が極端に長い場合も途中で切り、末尾に `…` を付けます)。長時間動かしたセッションのログを
無制限に抱えると codiva 自身がメモリ不足で落ちるためで、会話の完全な記録は Claude Code 側の
トランスクリプト(`~/.claude/projects/`)に残っています。
無制限に抱えると codiva 自身がメモリ不足で落ちるためで、会話の完全な記録は各エージェントの CLI 側
(Claude Code なら `~/.claude/projects/`)に残っています。

なお、この上限に達したログを**上へスクロールして読んでいる最中に新しい行が追記される**と、
古い行が落ちたぶん表示位置が少し新しい方へ動きます(範囲選択は安全のため解除されます)。
Expand Down
2 changes: 1 addition & 1 deletion docs/PRD.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 で抽象化した)。ユーザーは一覧画面で全セッションの進捗をリアルタイムに把握し、必要に応じて個別セッションに入って追加指示や許可応答を行う。

「指示を次々投げるだけで、並列に実装が進む」体験の提供が目的。

Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -18,6 +18,9 @@
"claude",
"claude-code",
"claude-agent-sdk",
"codex",
"grok",
"coding-agent",
"tui",
"ink",
"git-worktree",
Expand Down
Loading