viterm — AIエージェントを、並べて走らせる

Swift · AppKit · libghostty

AIエージェントを、
並べて走らせる。

Claude Code も Codex も、git worktree ごとに何本でも。崩れない、待たせない、ネイティブな macOS ターミナル。

↓ 機能を見る
1 worktree : N セッション 非 Electron ネイティブ描画 macOS 15+ Apple Silicon

Not just tabs

タブは、並列じゃない。切り替えだ。

10 個のタブを開いても、いま誰が入力待ちで、誰が動いていて、どれが終わったのかは、1つずつ開いて確かめるしかない。viterm のタブには状態が宿り、サイドバーが全体を一望させる。

ターミナルのタブ
  • アクティブな1枚しか見えない。他は裏
  • どのタブが入力待ちか、開くまで分からない
  • worktree は自分で cd して作って名前をつける
  • タブが増えるほど、頭の中で状態を管理する
viterm
  • 全セッションの busy / 待ち / idle がサイドバーの worktree 行に常時
  • タブにも状態ドット。切り替える前に、分かる
  • 入力待ちは通知が飛び、⌘⇧U で一発ジャンプ
  • ブランチから worktree を作って即エージェント起動

Features

並列で走らせるための、四つの土台。

1 worktree : N sessions

1つの worktree に、何本でも。

同じブランチで Claude に実装させながら、隣で Codex にテストを書かせる。素のシェルも一緒に。⌘T でセッションはタブに並び、⌘1〜9 で行き来する。worktree を離れて戻っても、開いていたタブに帰ってくる。

claude #1⌘1
codex #1⌘2
zsh⌘3
feat/palette — 3 sessions
Native rendering

崩れない。ネイティブだから。

ターミナル描画は Ghostty と同じエンジン(libghostty)がネイティブに担当する。ウィンドウをどうリサイズしても、vim も Claude Code も崩れない。TUI in TUI をやめた構造の勝利。起動は一瞬、Electron じゃない。

↔ resize
┌─ NORMAL ──────────────┐
│  1  import AppKit      │
│  2  final class View { │
│  3    override func    │
│  4      layout() { ... │
└───────────────────────┘
✓ リサイズしても行がずれない
Worktree lifecycle

作成先は、あなたの流儀で。

worktree をどこに置くかはテンプレートで自由に決められる。~/worktrees/{project}/{branch} でも、リポジトリ隣の ../{branch} でも。作った瞬間にエージェントを起動し、終わったら main に merge か rebase して、サイドバーからそのまま畳む。

⌘N
作成先テンプレート
~/worktrees/{project}/{branch}
→ ~/worktrees/viterm/feat-palette
◉ 作成後に claude を起動
Status & notifications

入力待ちを、見逃さない。

各セッションは busy / 入力待ち / idle をタブと worktree 行のドットで示す。開いていない worktree の状態も、サイドバーに集約されて常に見える。エージェントが確認を求めたら macOS 通知が飛び、⌘⇧U で最新の入力待ちへ一発でジャンプ。

busy処理中
waiting通知 + バッジ
idle1.5s デバウンス

Keyboard-first

手をホームポジションから離さない。

worktree もセッションも通知も、⌘K のコマンドパレットから全部呼べる。マウスは要らない。

⌘Kコマンドパレット
⌘N新規 worktree
⌘Tセッション(タブ)を追加
⌘1–9タブ切替(worktree 内)
⌘⇧U入力待ちへジャンプ
⌘⌥↑↓worktree 切替
⌘,設定
⌘Bサイドバー切替

Free & open source

並列で走らせる準備は、できてる。

viterm は MIT ライセンスの無料 OSS。Homebrew で今すぐ。

GitHub でソースを見る