セッションの生成とGitによるコラボレーション
この章では、組み合わせて使う2つの機能を説明します。1つはサブタスクを独立した子セッションとして起動する機能(git の独立したワークツリーを使うこともできます)、もう1つは並行して進めたブランチを1つにまとめるグラフィカルなマージです。この2つを組み合わせると、複数のエージェントが同じリポジトリで並行して作業できます。
1. セッションの生成とは
どのセッションからでも、サブタスクを切り出せます。VelaTerm は現在のノードの下に新しい子セッションを作成し(ツリーは親 → 子 → 孫という階層構造になります)、必要に応じて git の独立したワークツリーを割り当て、タスクの説明を新しいセッションの最初のメッセージとして送信します。新しいエージェントは起動するとすぐに作業を始め、追加の説明は必要ありません。
生成されるのはツリー上の実際のセッションで、専用のプロセスを持ちます。いつでも様子を確認したり、質問に答えたり、開き直して再開したりできます。隠れたバックグラウンドタスクではありません。
計画、実行、検証をそれぞれ別のエージェントに担当させたい作業には、計画・実行ワークフローを使ってください。計画と実行を参照してください。
2. 生成の方法
| 方法 | 使う人 | ワークツリー |
|---|---|---|
コマンド vspawn "task" | ユーザーまたはスクリプト(任意のセッション) | デフォルトでオフ。--worktree でオン |
コマンド vspawn-tree "task" | 同上 | 常にオン |
Claude Code では /vspawn task、Codex では $vspawn task | ユーザーがエージェントに依頼し、エージェントがまずタスクを自己完結したプロンプトに展開する | デフォルトでオフ |
Claude Code では /vspawn-tree task、Codex では $vspawn-tree task | 同上 | 常にオン |
2つのコマンドは、VelaTerm が起動するすべてのセッションで使えます。エージェント用のスキルを使うには Vela Skills が必要です。「設定」▸「一般」で「Install」を選んでから、Claude Code または Codex の新しい会話を始めると、エージェントがスキルを読み込みます。エージェントがこれらのスキルを呼び出すのは、ユーザーが依頼したときだけです。
新しいセッションからは、生成元の会話は見えません。スキルを使った場合は、エージェントが目的、関連ファイル、ここまでの結論、制約、受け入れ基準をタスクに書き込みます。自分でコマンドを実行する場合は、これらの情報をタスクのテキストに含めてください。
3. ディレクトリ、エージェント、モデル
- ディレクトリ。 子セッションは、コマンドを実行したディレクトリで起動します。このディレクトリは、ワークツリーを作成する際のリポジトリにもなります。別のプロジェクトを使うには
--cwd <path>を指定します(例:vspawn-tree --cwd /work/project "fix the parser")。これは、専用のプロジェクトフォルダーを持たないコレクションで特に重要です。会話から対象のリポジトリが1つに特定できる場合、スキルは--cwdを自動的に付けます。 - エージェント。 子セッションは、現在のセッションと同じエージェントを使います。通常のターミナルから生成した場合は Claude Code が起動します。
--claude、--codex、--copilot、--kiroで別のエージェントを選べるほか、確認カードではすべての種類のエージェントを選べます。 - モデルと思考の深さ。
--model <name>と--effort <level>で、子セッションのモデルと思考の深さを指定します(例:vspawn --model opus --effort high "port the parser")。モデル名は、実行するエージェントに合わせて指定します。エージェントが対応していない設定は、セッションが作成される前に拒否されます。これらのオプションを指定しない場合、同じ種類のエージェントの子セッションは親の起動引数と権限の設定を引き継ぎ、別の種類の子セッションは「設定」▸「エージェント」にあるそのエージェントのデフォルトを使います。 - ビュー。 親が会話ビューに対応していて、子セッションも会話ビューに対応している場合、子セッションは親と同じビューで開きます。それ以外の場合は、そのエージェントの既定のビューで開きます。
すべてのオプションは、セッションコマンドの§3 に記載しています。
4. 生成前の確認
デフォルトでは、生成の要求があるたびに、まず「子セッションを起動」という確認カードが表示されます。このカードは作業中のセッションからフォーカスを奪わず、システム通知(「子セッションの起動確認待ち」)で確認待ちであることを知らせます。
- カードには、要求元のセッションとそのディレクトリ(「起動元のセッション」)、子セッションの最初のメッセージになる「タスクの指示」、「実行設定」(「セッションの種類」「モデル」「推論強度」)、「作業ディレクトリ」の選択(「現在のディレクトリ」または「独立したワークツリー」)が表示されます。
- モデルの候補は、選択したエージェントから取得されます。一覧を取得できない場合は、モデルの識別子を入力できます。「エージェントの既定値」のままにした項目には、エージェント自身の設定が使われます。
- 通常のターミナルは作業ディレクトリで開くだけで、タスクの指示は実行しません。
- 「子セッションを起動」(または ⌘Enter / Ctrl+Enter)で子セッションを起動し、「キャンセル」で要求を破棄します。後続の要求はキューで待機し、カードには残りの件数(「ほか N 件が確認待ち」)が表示されます。
カードを表示せずに要求を実行するには、「設定」▸「動作」で「Confirm before spawn」をオフにするか、個別のコマンドに --yes を付けます。
5. ワークツリー:競合せずに並行して作業する
ワークツリーを使うと、子セッションは専用のディレクトリにある新しいブランチで作業し、メインの作業ディレクトリや他の子セッションから切り離されます。複数のエージェントが同じリポジトリを同時に変更する場合は、この構成をお勧めします。新しいワークツリーは現在のコミットから作成され、未コミットの変更は含まれません。生成したセッション用のワークツリーを作成できなかった場合、そのセッションは元のディレクトリを使います。
ワークツリーで作業しているセッションには、サイドバーのアイコンに小さなバッジが付きます。ポインターを合わせると、ワークツリーの名前とパスが表示されます。
ワークツリーを使うその他の方法は次のとおりです。
- プロジェクト、グループ、セッションのメニューにある 「新規 worktree セッション…」 を選ぶと、「Worktree」オプションが「新規」に設定された作成ダイアログが開きます。「worktree 名」を入力すると、その名前がディレクトリとブランチに使われます。このダイアログでは、セッションを「既存」のワークツリーに割り当てることも、「なし」を選ぶこともできます。
- グループのメニューにある 「Worktree に移動…」 を選ぶと、グループを新しいワークツリーまたは既存のワークツリーに割り当てます。以降にそのグループで作成したセッションはそのワークツリーを使い、すでにグループ内にあるセッションは元のディレクトリのままです。ワークツリーを割り当てたグループには、「グループ情報」も表示されます。
作業ディレクトリが git リポジトリであるセッションやグループの Git サブメニューには、次の項目があります。
| 項目 | 機能 |
|---|---|
| 「変更を表示…」 | 作業ツリーの変更を、ファイルの一覧と差分で表示します |
| 「Merge…」 | マージダイアログを開きます(§6) |
| 「Copy worktree path」「Open worktree folder」 | ワークツリーに割り当てられたセッションとグループで使えます |
| 「Delete worktree…」 | このリポジトリのワークツリーを選び、そのディレクトリをディスクから削除します。「Force delete (discard uncommitted changes)」を選ぶと、未コミットの変更があっても削除します |
割り当てたワークツリーが削除された後は、セッションまたはグループのメニューに「Convert to normal session」または「Convert to normal group」が表示されます。これを選ぶと割り当てが解除され、セッションは再びプロジェクトのディレクトリで起動します。
サブツリーにワークツリーを含むセッションを削除する場合は、確認画面でそれらのワークツリーもあわせて削除するかを選べます。
6. マージ:グラフィカルな Git マージ
作業が終わったら、マージします。作業ディレクトリが git リポジトリであるセッションやグループであれば、ワークツリーの有無にかかわらず、「Git」▸「Merge…」を選ぶと「Merge branches」ダイアログが開きます。
- 2つのブランチを選びます。 「Source branch」と「Target branch」を選びます。「Swap direction」を選ぶと、両者が入れ替わります。同じダイアログで、子セッションのブランチをメインブランチにマージすることも、メインブランチの内容を子セッションに取り込んで最新の状態にすることもできます。
- 確定する前に、マージによってターゲットブランチに取り込まれる変更の一覧が表示されます。
- マージは、ターゲットブランチがチェックアウトされている作業ツリーで実行されます。ターゲットブランチがどこにもチェックアウトされていない場合はマージを実行できないため、先にチェックアウトしてください。
- ソースブランチの作業ツリーに未コミットの変更がある場合は、入力したメッセージでそれらを先にコミットします(「Commit & merge」)。
- マージで競合が発生した場合、VelaTerm は競合をそのまま残し、解決すべき場所を表示します。そのワークツリーのターミナルで競合を解決して(またはエージェントに解決を依頼して)から、コミットしてください。
マージしても、ワークツリーは削除されません。不要になったら、「Git」▸「Delete worktree…」で削除してください。
7. 一般的なワークフロー
- メインのセッションで Claude Code とタスクについて相談し、
/vspawn-tree refactor the checkout moduleを実行します(Vela Skills が必要です)。 - 確認カードでタスクの内容を確認し、「子セッションを起動」を選びます。子セッションは専用のワークツリーで起動し、サイドバーで親の下に表示されます。作業中は、ステータスドットが緑になります。
- メインのセッションで作業を続けます。子セッションが質問したり作業を終えたりすると、ドットの色が変わり、通知が表示されます。
- 子セッションの作業内容を確認してから、「Git」▸「Merge…」を選び、そのブランチをメインブランチにマージします。
- 「Git」▸「Delete worktree…」でワークツリーを削除し、記録を残すために子セッションをアーカイブします。