プログラミング
Show HN: Goで書かれた、また一つ別のミニマルで軽量なターミナルマルチプレクサ
Show HN: Yet another minimal and lightweight terminal multiplexer written in Go. (github.com)
要約
hrdxは、エージェント時代のために構築された実験的でミニマルかつ軽量なターミナルマルチプレクサです。プロジェクトをサイドバーのワークスペースとして管理し、ワークスペースごとにタブ、そして実際のターミナルペインでCodex CLI、Claude Code、pi、zot、またはプレーンシェルを並べて実行できます。ペインは本物のPTYセッションであり、エージェントのTUIはスタンドアロンの場合と全く同じように動作します。すべての要素が視覚的に把握でき、セッションは中断したところから再開されます。JSONファイルでカスタマイズ可能で、JSONソケットAPIを通じて外部からのスクリプト操作も可能です。
全文翻訳
hrdx.dev
これは何ですか?
hrdxは、エージェント時代のために構築された実験的で、ミニマルかつ軽量なターミナルマルチプレクサです。サイドバーのワークスペースとしてプロジェクトを管理し、ワークスペースごとにタブを持ち、実際のターミナルペインでCodex CLI、Claude Code、pi、zot、またはプレーンシェルを並べて実行できます。あるプロジェクトでエージェントを起動し、次のプロジェクトに切り替えて、サイドバーのスピナーが誰がまだ作業しているかを示してくれるようにします。
ラッパーではなく、リアルなターミナルです。
各ペインは本物のPTYセッションであり、背後には完全なターミナルエミュレータがあります。エージェントのTUIは、スタンドアロンの場合と全く同じように動作します:ストリーミング、スラッシュコマンド、セッション、マウスサポート、すべてです。ペインはクリーンなターミナルIDを提供するため、機能検出(capability-sniffing)TUIはマルチプレクサ内で動作するレンダリングパスを選択し、HRDX=1はツールがhrdx内で実行されていることを検出できるようにします。
すべてが見えるように。
サイドバーには、ワークスペース、Gitブランチ、ペインの階層が表示され、ワークスペースに複数のタブがある場合にのみタブ行が追加されます。各ペインには共有ステータス円があります:エージェントは作業中にアニメーション化されたブレイルスピナーになり、フォーカスされていないエージェントは終了時にオレンジ色に変わります。ペインにフォーカスすると認識され、緑色に戻ります。
ターミナルのように感じます。
スクロールバック、クリップボードコピー付きのマウス選択、ドラッグしてリサイズする分割、ドラッグして並べ替えるワークスペース、右クリックコンテキストメニュー、およびkittyキーボードプロトコルパススルーにより、ctrl+1のようなエキゾチックなコードでもエージェントに届きます。
中断したところから再開します。
終了して再起動しても、シェルとエージェントは軽量セッションホルダーで実行を継続し、中断したまさにその場所で再アタッチされます。コマンドなどもすべてです。ワークスペース、タブ、分割、比率も復元され、セッションが完全に失われた場合でも、エージェントは独自のセッションストアから最新の会話を再開します。
調整可能。
設定ウィンドウ(ctrl+b , またはサイドバーの歯車アイコン)で、個々のエージェントのオン/オフを切り替えたり、終了したターンの通知音(自分のオーディオファイルを含む)を選択したり、カラーテーマを変更したりできます。ユーザーテーマは簡単なJSONファイルです。すべて永続化されます。テーマを参照してください。
独自のエージェントを持ち込む。
カスタムハーネスとして任意のエージェントCLIを小さなJSONファイルで登録できます。これには、サイドバースピナーと終了サウンド用の独自のビジー検出が含まれます。組み込みエージェントと同様に、ピッカー、サイクリング、設定に表示されます。カスタムハーネスを参照してください。
外部からスクリプト化可能。
JSONソケットAPIにより、スクリプトやエディタはワークスペースとペインの状態を検査し、プロジェクトを開き、ペインを生成し、エージェントにタイプし、終了を待ち、画面を読み取り、ライブイベントを購読できます。ソケットAPIを参照してください。
インストール
curl -fsSL https://www.hrdx.dev/install.sh | bash
irm https://www.hrdx.dev/install.ps1 | iex
macOS、Linux、またはWindows(10 1809+ / 11、ConPTY経由)、およびPATHに少なくとも1つのエージェントCLIが必要です:codex、claude、pi、またはzot。
どのサポートされているプラットフォームでも `hrdx update` で更新できます。
実行
hrdx
複数のプロジェクトを同時に開くか、デフォルトのエージェントを選択します:
hrdx --cwd ~/Developer/api --cwd ~/Developer/web
hrdx --agent claude
フラグ
フラグ | 目的
--cwd PATH | プロジェクトをワークスペースとして開く、繰り返し可能
--agent ID | 新しいペインのデフォルトエージェント:zot、pi、claude、codex(デフォルトはzot)
--provider ID | すべてのzotペインにプロバイダーを渡す(zotのみ)
--model ID | すべてのzotペインにモデルを渡す(zotのみ)
--reasoning LEVEL | 推論レベルを設定する(zotのみ)
--continue | 各プロジェクトの最新セッションを再開する
--codex-bin PATH | 特定のcodexバイナリを使用する
--claude-bin PATH | 特定のclaudeバイナリを使用する
--pi-bin PATH | 特定のpiバイナリを使用する
--zot-bin PATH | 特定のzotバイナリを使用する
--shell PATH | シェルペイン用のシェル(デフォルトは$SHELL。Windowsでは解決可能な場合のみ、それ以外は%COMSPEC%/powershell.exe)
--state PATH | ワークスペース永続化用の状態ファイル(空の場合は無効)
--fresh 保存されたワークスペースを無視してクリーンに開始する
--api | Unixソケットで制御APIをサーブする(デフォルトはオン、--api=falseで無効)
--persist | セッションホルダーを介して再起動中にペインプロセスをアクティブに保つ(デフォルトはオン)
ネイティブWindowsのhrdx.exeをGit Bashから起動すると、Windowsが解決できないMSYS専用のSHELL値(例:/usr/bin/bash)を無視し、%COMSPEC%にフォールバックします。ペインにGit Bashを使用するには、ネイティブパスを明示的に渡してください。例:hrdx --shell "C:/Program Files/Git/bin/bash.exe"。
キー
すべてのキーはフォーカスされたターミナルに送信されます。ただし、ctrl+bプレフィックス(tmuxスタイル)を除きます。
ctrl+b の後 | アクション
c または C | 右/下に分割(ピッカーを開きます:インストール済みエージェントまたはシェル)
a または A | デフォルトエージェントを直接右/下に分割
s または S | 新しいシェルペインを直接(右/下)分割、%/" および |/- も同様
w | 新しいワークスペース(ディレクトリプロンプトとタブ補完、その後エージェント/シェルピッカー)
t | 現在のワークスペースで新しいタブ(エージェント/シェルピッカーを開きます)
n または p | 次のタブ / 前のタブ
] または [ | 次のワークスペースタブ / 前のワークスペースタブ、またはshift+tab
; | 次のペイン / 前のペイン。繰り返しジャンプするためにプレフィックスモードを維持します。escで終了します。
/ | すべてのワークスペース、タブ、ペインのファジーファインダー:タイプしてフィルタリング、矢印で選択、Enterでジャンプします。
r | フォーカスされたペインの名前を変更します。
m | ペインコンテキストメニューを開きます。
= | すべての分割を均等化します。
u または d (またはpgup/pgdown) | フォーカスされたペインの履歴をスクロールします。
esc / G | ライブ出力に戻る、選択をクリアします。
, | 設定ウィンドウ:エージェント、通知の有効/無効を切り替えます。
x | ペインを閉じます(隣接するペインがそのスペースを取ります)。
X | ワークスペースを閉じます。
ctrl+b | ペインにリテラルのctrl+bを送信します。
q | 終了します。
left / right | フッターのヒント行をスクロールします(狭いターミナル)。
プロセスが終了したペイン(例:シェルでexit)は自動的に閉じます。隣接するペインがスペースを取ります。開始に失敗したペインはエラーとともに表示されたままになります。
カスタムキー
プレフィックスキーは、状態ファイル(macOSでは~/Library/Application Support/hrdx/keys.json、Linuxでは$XDG_CONFIG_HOME/hrdx/keys.json、Windowsでは%AppData%\hrdx\keys.json)の隣にあるkeys.jsonを介して再マッピング可能です。アクション名を単一のキーにマッピングします。オーバーライドは、そのアクションのデフォルトキーを置き換えます。プレフィックスアクションは、内部のアクションだけでなく、ctrl+bトリガー自体を再マッピングします:
{
"find": "f",
"quit": "Q",
"agent-cycle": "g"
}
アクション:prefix, literal, quit, picker-right, picker-down, agent-right, agent-down, agent-cycle (デフォルトではバインドされていません), shell-right, shell-down, workspace, tab-new, tab-next, tab-prev, space-next, space-prev, pane-next, pane-prev, find, close-pane, close-space, equalize, rename, menu, settings, scroll-up, scroll-down, live。
マウス
すべてクリック可能です:サイドバーのワークスペース、タブ、ペインの行、メインのタブバー、メニュー、および下部にある設定エントリ。ワークスペースをドラッグして並べ替え、ペインの境界線をドラッグしてリサイズし、右クリックしてコンテキストメニューを表示し、左ボタンでドラッグしてテキストを選択します(クリップボードに直接コピーされます)。ホイールイベントはカーソル下のペインに送信されます:エージェントTUIは自身をスクロールし、シェルはローカル履歴をスクロールし、shift+pgup / shift+pgdnはキーボードから同じことを行います。
リモートおよびコンテナペイン
各ペインは実際のPTYであるため、シェルペインはリモートホスト、Dockerコンテナ、またはKubernetesワークロードに接続できます。インタラクティブシェルについては:
ssh user@host
docker exec -it -w /workspace container-name sh
kubectl exec -it -n namespace deploy/app -- sh
ターゲットにインストールされたエージェントは直接起動できます:
ssh -tt user@host 'cd /path/to/project && exec codex'
docker exec -it -w /workspace container-name codex
kubectl exec -it -n namespace deploy/app -- codex
サポートされているエージェントまたはカスタムエージェントについては、同じパターンを使用してください。認証、エージェント実行可能ファイル、設定、認証情報、およびプロジェクトファイルはターゲットで利用可能である必要があります。リモートおよびコンテナエージェントをピッカー、エージェントサイクリング、設定、サイドバーに表示するには、クライアントコマンドをカスタムハーネスとして登録します:
[
{
"kind": "remote-codex",
"binary": "ssh",
"args": ["-tt", "user@host", "cd /path/to/project && exec codex"]
},
{
"kind": "docker-codex",
"binary": "docker",
"args": ["exec", "-it", "-w", "/workspace", "container-name", "codex"]
},
{
"kind": "k8s-codex",
"binary": "kubectl",
"args": ["exec", "-it", "-n", "namespace", "deploy/app", "--", "codex"]
}
]
ラッパースクリプトは、ホスト、コンテナ、名前空間、ポッド、作業ディレクトリ、または認証設定が動的な場合に役立ちます。ハーネスバイナリをラッパーパスに設定し、固定パラメータをすべて指定します。