diff options
| author | github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 2026-08-03 19:00:20 +0000 |
|---|---|---|
| committer | github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 2026-08-03 19:00:20 +0000 |
| commit | 3642e67c7b9c1d8608d72f288e80b410c602e55c (patch) | |
| tree | 31e956f8d0ce3ffa7ad06495c6523cc3c7b3a3a5 /website/src/content/docs/ja | |
| parent | 346411fa21afd297f5ed3b3fa56f9e3fbf7654b7 (diff) | |
docs: update website manifest for v0.8.0
Diffstat (limited to 'website/src/content/docs/ja')
20 files changed, 0 insertions, 3799 deletions
diff --git a/website/src/content/docs/ja/agent-automation.mdx b/website/src/content/docs/ja/agent-automation.mdx deleted file mode 100644 index 2b9a9d30..00000000 --- a/website/src/content/docs/ja/agent-automation.mdx +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: エージェント自動化 -description: Herdr のレイアウト、ペイン、エージェントの各プリミティブを使い、スクリプトや別のエージェントからコーディングエージェントを連携させます。 ---- - -Herdr はコーディングエージェントの自動化レイヤーとして使えます。スクリプトから制御することも、ひとつのエージェントから別のエージェントへ作業を渡し、状態を確認して結果を集めることもできます。重要なのは、目的に合うプリミティブを選ぶことです。 - -## 3 つのプリミティブ - -| プリミティブ | 責務 | -| --- | --- | -| レイアウト(`workspace`、`tab`、ペイン構成) | ターミナルの場所を作成し、整理する。 | -| ペイン | 生のターミナルを制御する。コマンド実行、入力送信、出力読み取り、出力待機を行う。 | -| エージェント | 認識済みコーディングエージェントを、名前またはペインとライフサイクル状態に基づいて制御する。 | - -ペインは、エージェントが入っていなくても存在します。エージェントは、ペイン内で現在実行されていると Herdr が認識したプロセスです。そのため `agent start` には既存のシェルペインが必要で、レイアウトの作成、分割、移動は行いません。 - -ワークスペースを作成すると最初のタブとルートペインも作られ、タブを作成するとそのルートペインも作られます。最初のプロセスには返されたペイン ID を使い、そのレイアウトに別のターミナルが必要なときだけ分割します。 - -作成コマンドは JSON を出力します。ID を推測せず、レスポンスから取得してください: - -```bash -created=$(herdr workspace create --cwd ~/project --label api --no-focus) -pane_id=$(printf '%s\n' "$created" | jq -r '.result.root_pane.pane_id') - -split=$(herdr pane split "$pane_id" --direction right --no-focus) -review_pane=$(printf '%s\n' "$split" | jq -r '.result.pane.pane_id') -``` - -`workspace create` は `.result.workspace`、`.result.tab`、`.result.root_pane` を返します。`tab create` は `.result.tab` と `.result.root_pane` を返し、`pane split` は新しいペインを `.result.pane` として返します。 - -ペインを別のワークスペースへ移動すると、ワークスペース修飾付きのペイン ID が変わります。`pane move` の後は `.result.move_result.pane.pane_id` を使い、以前の値が必要なら `.result.move_result.previous_pane_id` を参照してください。実行中プロセスは起動時の Herdr 環境を保ちますが、以前の `HERDR_PANE_ID` はそのターミナルの別名として残るため、`--current` は引き続き安全に使えます。移動後に始めるコマンドはエージェント名で解決できますが、すでに進行中の待機は `agent_not_running` で終了します。 - -シェル、テスト、サーバー、CI ウォッチャーなどの通常のターミナルプロセスにはペインコマンドを使います。どのエージェントが動いているか、または状態が `working`、`blocked`、`done`、`idle`、`unknown` のどれかを Herdr に判断させる場合はエージェントコマンドを使います。 - -## エージェントの識別子と起動 - -`w1:p2` のようなペイン ID はターミナルの場所を識別します。`reviewer` のようなエージェント名は、そのペインに現在いるエージェントの扱いやすい別名です。名前は `[a-z][a-z0-9_-]{0,31}` に一致し、ライブエージェント間で一意でなければなりません。エージェントが終了、解放、または置換されると別名は消えます。ペイン自体の恒久的な名前ではありません。 - -エージェントコマンドは、一意なライブ名、または現在そのエージェントをホストしているペイン ID のどちらでも指定できます。 - -利用可能なシェルペインとは、対話シェルのプロンプトに戻っており、フォアグラウンドをシェル自身が所有し、フォアグラウンドのコマンド、エディタ、エージェントが動いていないペインです。`agent start` の前にプロンプトへ戻してください。 - -`--kind` は対応済みエージェントとその標準実行ファイルを選びます。対応する kind は `pi`、`claude`、`codex`、`gemini`、`cursor`、`devin`、`agy`、`cline`、`omp`、`mastracode`、`opencode`、`copilot`、`kimi`、`kiro`、`droid`、`amp`、`grok`、`hermes`、`kilo`、`qodercli`、`maki` です。`--` より後の引数は、その実行ファイルへそのまま渡されます。 - -`agent start` は、同じターミナルで期待したエージェントを検出し、対話入力の準備ができたと Herdr が判断してから返ります。起動待機はデフォルトで 30 秒です。`--timeout` は 3000 より大きく 300000 以下のミリ秒で指定します。 - -```bash -herdr agent start reviewer --kind codex --pane "$review_pane" -- -m gpt-5.4 -``` - -手動で起動したエージェントも自動検出され、ペイン ID で指定できます。人が読みやすい安定した対象名が必要なら名前を付けます: - -```bash -herdr agent get w1:p2 -herdr agent rename w1:p2 reviewer -``` - -## 操作面を選ぶ - -| 目的 | コマンド | -| --- | --- | -| シェルコマンドを実行して送信する | `pane run` | -| Enter を付けずに文字列を送る | `pane send-text` | -| ターミナルキーや修飾キーの組み合わせを送る | `pane send-keys` | -| 文字列や正規表現を待つ | `pane wait-output` | -| 既存のペインで対応済みエージェントを起動する | `agent start` | -| プロンプトを送信し、必要なら完了を待つ | `agent prompt` | -| エージェントの対話 UI にキーを送る | `agent send-keys` | -| エージェントのライフサイクル状態を待つ | `agent wait` | - -`agent prompt` は文字列とエンコード済み Enter を送信し、ターミナルの現在の bracketed paste モードを尊重します。working 中のエージェントにも送信できます。`esc`、`up`、`enter`、`ctrl+c` のような操作には `agent send-keys` を使います。`escape` も `esc` のエイリアスとして使えます。意図的に生のターミナルを操作したい場合は、ペイン入力コマンドを使ってください。 - -ペイン入力は、現在のプロセスに関係なくターミナルを指定します。エージェント入力はライブエージェントを解決し、そのエージェントがペインを制御しなくなっていれば操作を拒否します。 - -`agent prompt --wait` はプロンプトをすぐ送信します。エージェントが non-working 状態から始まる場合、Herdr はまず 5 秒以内にライフサイクル変化が観測されることを要求します。状態シーケンスが進まなければ、無期限に待たず `agent_prompt_stalled` を返します。呼び出し側の `--timeout` が 5 秒以下なら、通常の `timeout` エラーを返します。活動を観測した後、要求された安定状態を待ちます。個々のターンは追跡しません。エージェントがすでに working の場合、進行中ターンの完了が待機を満たすことがあります。単独の `agent wait` は現在のエージェントを監視し、すでに状態が一致していれば即座に返ります。どちらもデフォルトでは `idle`、`done`、`blocked` を待ちます。複数の正確な状態を許可するには、`--until idle --until done` のように `--until` を繰り返します。`unknown` が必要な場合は `--until unknown` を明示してください。`agent prompt` では `--until` に `--wait` が必要です。 - -`idle` は、エージェントが入力待ちで、そのタブがフォーカス中の Herdr UI ですでに表示済みであることを示します。`done` は同じ基礎的な idle 状態ですが、バックグラウンド作業が完了してから、そのタブをフォーカスするか `pane focus` / `agent focus` で対象にするまで使われます。CLI で読み取るだけでは表示済みになりません。`blocked` は承認または質問 UI を Herdr が認識した状態です。`unknown` はエージェントが存在するもののライフサイクルを確実に分類できない状態で、成功完了を意味しません。違いが重要なら正確な `--until` を指定してください。 - -`pane wait-output` はエージェントのライフサイクルを解釈しません。選択したターミナルスナップショットをポーリングし、最初にすぐ検索するため、すでに存在する文字列も一致します。デフォルトのソース名は `recent` で、直近 80 行の描画済みターミナル行を折り返し前の出力として扱います。`--lines` でその行数を変更でき、`--regex` は Rust の正規表現構文で 1 行ずつ一致します。 - -CLI では、`pane read` と `agent read` のどちらもターミナルテキストを直接出力します。デフォルトは ANSI エスケープを除去した UTF-8 テキストです。ソースに装飾が含まれる場合、`--format ansi` または `--ansi` でエスケープを残します。`detection` ソースは常にプレーンテキストです。recent 系ソースでは、`--lines N` は折り返し解除の前に末尾の N 描画行を選び、省略時は 80 行です。`visible` と `detection` では、省略時にスナップショット全体を返し、指定時は改行で区切られた末尾 N 行を返します。socket API ではテキストを `.result.read.text` に返します。 - -## 既知の注意点: 代替画面の出力 - -Claude Code や OpenCode などの全画面エージェントは、ターミナルの代替画面に描画することがあります。代替画面の行は Herdr のホスト側スクロールバックには入りません。`--lines` で取得できるのは、ペインの現在の画面とホスト側スクロールバックに存在する行だけであり、失われた履歴を作り出すことはできません。`--lines` を増やしても応答テキストが増えない場合、そのペインは代替画面を使っている可能性が高く、応答の行はすでに保持されていません。フォントが大きい場合やペインが小さい場合は、より起こりやすくなります。 - -エージェントに簡潔な応答を求めるか、ペインを広げる、フォントを小さくする、またはエージェント自身のトランスクリプトやスクロール操作を使ってください。エージェント内でスクロールした後、`--source visible` を使うと、現在描画されているページを読み取れます。 - -その読み取りに失敗した後、エージェントに完全な応答を一時ディレクトリ内へ Markdown 形式で書き込み、ファイルパスだけを返すよう依頼してから、そのファイルを直接読み取ってください。これはフォールバックとしてのみ使い、最初のプロンプトではファイル出力を求めないでください。 - -成功した `agent start`、`agent prompt`、`agent wait` は現在のエージェントを `.result.agent` に返します。`pane wait-output` は `.result.pane_id`、`.result.matched_line`、一致したスナップショット `.result.read` を返します。 - -wait コマンドにはデフォルトのタイムアウトがなく、無期限に待機できます。タイムアウトやサーバーエラーでは JSON エラーを stderr に出して終了コード 1、CLI 構文エラーでは終了コード 2 を返します。 - -## レシピ - -補助エージェントを起動して作業を渡し、その作業が落ち着くまで待ちます: - -```bash -split=$(herdr pane split --current --direction right --no-focus) -review_pane=$(printf '%s\n' "$split" | jq -r '.result.pane.pane_id') -herdr agent start reviewer --kind codex --pane "$review_pane" -- -m gpt-5.4 -herdr agent prompt reviewer "Review the current diff" --wait --timeout 120000 -herdr agent read reviewer --source recent-unwrapped --lines 120 -``` - -エージェントが入力を求めるまで待ち、内容を確認して対話 UI を操作します: - -```bash -herdr agent wait reviewer --until blocked --timeout 120000 -herdr agent read reviewer --source recent-unwrapped --lines 80 -herdr agent send-keys reviewer esc -``` - -通常のプロセスを実行し、エージェントとして扱わずに出力を待ちます: - -```bash -herdr pane run w1:p3 "just test --watch" -herdr pane wait-output w1:p3 --regex "passed|failed" --timeout 120000 -``` - -コマンドとオプションの完全な一覧は [CLI リファレンス](/ja/docs/cli-reference/) を参照してください。シェル補完でも同じコマンドツリーを対話的に確認できます。 diff --git a/website/src/content/docs/ja/agent-skill.mdx b/website/src/content/docs/ja/agent-skill.mdx deleted file mode 100644 index ea86f9e6..00000000 --- a/website/src/content/docs/ja/agent-skill.mdx +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: エージェントスキルファイル -description: Claude Code などのコーディングエージェントに Herdr の使い方をインストールします。 ---- - -Herdr は再利用可能なエージェントスキルファイルを [`skills/herdr/SKILL.md`](https://github.com/herdrdev/herdr/blob/master/skills/herdr/SKILL.md) として提供しています。 - -このファイルを、再利用可能なスキルやカスタム指示に対応した任意のコーディングエージェントにインストールしてください。このスキルは、Herdr のペイン内から Herdr を制御する方法をエージェントに教えます。 - -Herdr は別の用途向けに [`herdr.dev/agent-guide.md`](https://herdr.dev/agent-guide.md) というガイドも提供しています。こちらは、人間が Herdr を学習・セットアップ・トラブルシューティングするのをエージェントが手伝うためのものです。スキルは Herdr を操作するエージェントのため、ガイドは人間に教えるエージェントのためのものです。 - -## スキルがすること - -このスキルは、`HERDR_ENV=1` が設定されているときに `herdr` CLI を使うようエージェントに指示します。これは、エージェントが Herdr 管理下のペイン内で動作しており、ローカルの Herdr ソケットと安全に通信できることを意味します。 - -スキルをインストールすると、エージェントは次のことができます: - -- ワークスペース、タブ、ペイン、隣のエージェントを調べる -- フォーカスを奪わずにペインを分割してコマンドを実行する -- ペインの出力と最近のログを読む -- サーバー、テスト、別のエージェントの完了を待つ -- 隣のペインでヘルパーエージェントを起動する - -このスキルは独立したアプリやサービスではありません。エージェント向けの markdown 指示ファイルです。 - -## インストールする - -`npx skills` でスキルをインストールします: - -```bash -npx skills add herdrdev/herdr --skill herdr -g -``` - -スキルがリポジトリのルートにあったときにインストールした場合は、`skills update` ではなく、この add コマンドを一度再実行してください。大きすぎる既存のコピーが置き換えられ、新しい場所が記録されます。 - -`-g` フラグは、対応エージェントにグローバルインストールします。現在のプロジェクトにインストールする場合は `-g` を省略してください。 - -手動でのフォールバックおよび信頼できるソースとしては、リポジトリのコピーを使ってください: - -```text -https://github.com/herdrdev/herdr/blob/master/skills/herdr/SKILL.md -``` - -スキルシステムを持つエージェントには、このファイルを `herdr` という名前のスキルとしてインストールしてください。スキルシステムを持たないエージェントには、ファイルの内容をプロジェクト指示またはユーザー指示に貼り付けてください。 - -インストール後、Herdr の中でエージェントを起動します: - -```bash -herdr -claude -``` - -他のコーディングエージェントを Herdr のペインで使っても構いません。重要なのは、エージェントのプロセスが Herdr 内で動作していて `HERDR_ENV=1` が利用できることです。 - -## 安全ルール - -このスキルはひとつのガードレールから始まります: `HERDR_ENV=1` が設定されていない場合、エージェントは停止して、Herdr 管理下のペイン内で動作していないと伝えるべきです。 - -これにより、Herdr の外にいるエージェントが自分のものではないセッションを制御しようとするのを防ぎます。 - -## エージェント向けリファレンス - -コマンドの完全なガイドはスキルファイル自体にあります。ペイン ID、`pane split`、`pane run`、`pane read`、`pane wait-output`、`agent wait`、ワークスペースとタブのコマンド、協調動作のレシピを扱っています。 - -ソースファイルはこちら: - -[GitHub で `SKILL.md` を開く →](https://github.com/herdrdev/herdr/blob/master/skills/herdr/SKILL.md) diff --git a/website/src/content/docs/ja/agents.mdx b/website/src/content/docs/ja/agents.mdx deleted file mode 100644 index 4b08da69..00000000 --- a/website/src/content/docs/ja/agents.mdx +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: エージェント -description: Herdr が何を検出できるか、エージェント状態の仕組み、インテグレーションによる精度向上。 ---- - -Herdr は複数のコーディングエージェントを同時に動かすために作られています。各エージェントは、シェル、ログ、プロンプト、実行中プロセスをそのまま保った実際のターミナルペインの中にいます。Herdr はどのペインにエージェントがいるかを追跡し、その状態をタブとワークスペースに集約し、すべてのターミナルを手作業で見回る代わりに、注意が必要なペインへ直接ジャンプできるようにします。 - -スクリプトや別のエージェントから連携させる方法は、[エージェント自動化](/ja/docs/agent-automation/) を参照してください。 - -## 対応エージェント - -一般的なコーディングエージェントは、追加設定なしで自動検出されます。重要な違いは Herdr がエージェントを見えるかどうかではありません。どのシグナルが `idle`、`working`、`blocked` を決定する権限を持つかです。 - -| エージェント | 状態の権威 | インテグレーションの役割 | -| --- | --- | --- | -| Pi | インストール時はライフサイクルフック。それ以外はスクリーンマニフェスト | 状態とセッション | -| OMP | インストール時はライフサイクルフック | 状態 | -| GitHub Copilot CLI | スクリーンマニフェスト | セッション | -| Devin CLI | スクリーンマニフェスト | セッション | -| Kimi Code CLI | インストール時はライフサイクルフック。それ以外はスクリーンマニフェスト | 状態とセッション | -| Hermes Agent | インストール時はライフサイクルフック。それ以外はスクリーンマニフェスト | 状態とセッション | -| Qoder CLI | スクリーンマニフェスト | セッション | -| Droid | スクリーンマニフェスト | セッション | -| OpenCode | インストール時はライフサイクルプラグイン。それ以外はスクリーンマニフェスト | 状態とセッション | -| Kilo Code CLI | インストール時はライフサイクルプラグイン。それ以外はスクリーンマニフェスト | 状態とセッション | -| MastraCode | インストール時はライフサイクルフック | 状態とセッション | -| Claude Code | スクリーンマニフェスト | セッション | -| Codex | スクリーンマニフェスト | セッション | -| Cursor Agent CLI | スクリーンマニフェスト | セッション | -| Amp | スクリーンマニフェスト | なし | -| Grok CLI | スクリーンマニフェスト | なし | -| Antigravity CLI | スクリーンマニフェスト | なし | -| Kiro CLI | スクリーンマニフェスト | なし | -| Maki | スクリーンマニフェスト | なし | - -検出されるもののテストが薄いもの: Gemini CLI と Cline。未対応のエージェントも通常のターミナルプロセスとして問題なく動きます。ただし、インテグレーションを追加するかソケット API で状態を報告しない限り、詳細な状態は得られない可能性があります。 - -## 状態の権威 - -Herdr はまず各ペインのフォアグラウンドプロセスを検出します。その後、各ペインはひとつの状態権威を持ちます。 - -完全なライフサイクルフックを持つエージェントでは、インテグレーションがインストールされ、実行中のペインについて能動的に報告している間は、インテグレーションが権威です。Herdr はそのフック報告を `idle`、`working`、`blocked` とセッション識別に使います。同じライフサイクル権威に対してスクリーンマニフェストのフォールバックを並走させることはしません。これにより、真実の情報源が 2 つ競合する状況を避けます。 - -完全なライフサイクルフックを持たないエージェントでは、Herdr はフォアグラウンドプロセスを識別し、ライブの下部バッファのスクリーンスナップショットを読みます。そのスナップショットに対して TOML マニフェストを評価し、`idle`、`working`、`blocked` を分類します。それらを発するエージェントでは、マニフェストはターミナルタイトルと進捗 (OSC) シーケンスも検出の証拠としてマッチできます。その証拠がない場合は、スクリーンルールが単独で検出を担います。 - -スクリーンスナップショットは、スクロールされたビューポートではなく、ペインバッファの直近の下部から取得されます。Herdr でスクロールバックしても、検出は下部のライブなエージェント UI を追い続けます。 - -Claude Code、Codex、GitHub Copilot CLI、Droid、Qoder CLI、Cursor Agent CLI のインテグレーションは、意図的にライフサイクル権威にしていません。これらは復元のためのネイティブセッション識別を提供しますが、フックがライフサイクル全体をカバーしていません。許可承認の結果、Esc による中断、その他の遷移を見逃すことがあります。これらのエージェントでは、Herdr は引き続きスクリーンマニフェスト検出を使います。 - -## VM とサンドボックスラッパー - -Linux と macOS では、ホストから見えるラッパーが実際のエージェントプロセスを Herdr から隠すことがあります。ラッパーのコマンドに `HERDR_AGENT=<agent>` を設定して、どの既存エージェントのスクリーンマニフェストを使うべきか Herdr に伝えてください。たとえば、Linux では `HERDR_AGENT=claude fence -- claude`、macOS では `HERDR_AGENT=claude nono run --profile claude-code -- claude` を実行します。このヒントはそのフォアグラウンドプロセスにスコープされます。VM やコンテナの内部だけで設定しても Herdr からは見えません。また、継承されるすべてのフォアグラウンドプロセスをそのエージェントとして扱いたいのでない限り、グローバルな export は避けてください。 - -## blocked 状態 - -スクリーンマニフェスト方式のエージェントでは、blocked の検出は意図的に厳格です。Herdr が `blocked` と判定するのは、ライブの下部バッファスナップショットが既知の承認・質問・許可 UI にマッチしたときだけです。既知のエージェントでどのマニフェストルールにもマッチしない場合、Herdr は `idle` にフォールバックし、explain の出力ではそのフォールバックに `default_known_agent_idle_fallback` というラベルを付けます。 - -つまり、見慣れない新しいエージェントプロンプトは、Herdr がその画面の形を学習するまで、最初は `blocked` ではなく `idle` と表示されることがあります。こうしたやり取りによって Herdr が入力を送ったり破壊的な操作をしたりすることはありません。影響するのは表示上の状態と wait だけです。 - -## 検出マニフェスト - -バンドルされたマニフェストは Herdr の内部にあります。Herdr は herdr.dev でリモートマニフェストの更新も確認し、有効なエージェント別ルール更新を Herdr の再起動なしで自動適用します。リモートマニフェストは Herdr の state ディレクトリに保存されます。バックグラウンドのリモートマニフェスト確認を無効にするには `[update] manifest_check = false` を設定します。 - -ローカルオーバーライドは、プラットフォームの設定ディレクトリからリモートまたはバンドルのマニフェストを置き換えられます: - -```text -~/.config/herdr/agent-detection/<agent>.toml -``` - -ローカルオーバーライドが常に優先されます。ローカルオーバーライドがない場合、Herdr はキャッシュされたリモートマニフェストと実行中バイナリにバンドルされたマニフェストのうち、新しくて互換性のある方を使います。デバッグビルドでは、同じ設定ヘルパーが `herdr-dev` のような開発用ディレクトリを使うことがあります。無効なオーバーライドファイルは警告付きで無視され、Herdr はそのエージェントについてキャッシュされたリモートまたはバンドルのマニフェストにフォールバックします。 - -リモートマニフェストは、Herdr がすでに識別方法を知っているエージェントの検出ルールにパッチを当てるものです。完全に新しいエージェントの追加には、プロセス検出、ラベル、インテグレーション挙動のために Herdr バイナリのアップデートが引き続き必要です。 - -実行中のサーバーは起動時にアクティブなマニフェストをメモリに読み込みます。リモートマニフェストの自動更新は、新しいルールが書き込まれた後にそのメモリ内キャッシュをリロードします。`herdr server update-agent-manifests` を実行すると、リモートマニフェストの更新を即座に取得して実行中のサーバーをリロードします。ローカルオーバーライドを手で編集した後は、Herdr を再起動するか `herdr server reload-agent-manifests` を実行して、実行中のサーバーにファイルを適用してください。 - -ペインの状態表示がおかしいときは `herdr agent explain` を使ってください: - -```bash -herdr agent explain <target> -herdr agent explain --file screen.txt --agent codex --json -``` - -ライブの explain は実行中のサーバーが評価するので、アクティブなマニフェストキャッシュを反映します。explain の出力には次が表示されます: エージェント、最終状態、完全なライフサイクル権威によってスクリーン検出がスキップされたかどうか、マニフェストのソースとバージョン、キャッシュされたリモートバージョン、ローカルオーバーライドによるシャドーイング、リモート更新の状況、マッチしたルール、可視の証拠フラグ、評価されたルールのマッチャーとリージョンの証拠、トランスクリプトビューアーでの更新スキップ理由、そしてどのルールにもマッチしなかったときの idle フォールバック理由です。 - -Herdr は外側のターミナル環境として tmux の中で動かせます。エージェント検出は、Herdr のペイン内で起動された tmux セッションの中までは調べません。シェルフレームワークが Herdr 内で自動的に tmux に入る場合、Herdr はペインのプロセスとして背後のエージェントではなく `tmux` を見ることになります。 - -## 状態のロールアップ - -サイドバーは状態を上位へ集約します。 - -blocked なエージェントは、そのペイン、タブ、ワークスペースを blocked に見せます。working なエージェントはワークスペースをアクティブに見せます。done なエージェントは、あなたが確認するまで表示され続けます。 - -これが Herdr の中心的なワークフローです: 複数のエージェントを起動し、並行して働かせ、サイドバーでどのプロジェクトが判断を必要としているか、どれがまだ実行中か、どれがレビュー待ちかを把握します。 - -## ダイレクトインテグレーション - -使っている各エージェントのインテグレーションをインストールしてください。スクリーン検出だけに頼らず、フックやプラグインの報告を Herdr に提供します: - -```bash -herdr integration install claude -herdr integration status -``` - -対応エージェントごとに、インテグレーションの名前と挙動は異なります。エージェント別の詳細と完全なインストール一覧は[インテグレーション](/ja/docs/integrations/)を参照してください。 - -## カスタムエージェントラベル - -表示用にエージェントターゲットの名前を変えられます: - -```bash -herdr agent rename w1:p1 reviewer -herdr agent rename reviewer --clear -``` - -ターゲットには一意なライブエージェント名、または現在そのエージェントをホストしているペイン ID を使います。ターミナル ID とエージェント kind のラベルだけでは指定できません。 - -## カスタムステータスラベル - -インテグレーションは、ライフサイクル状態を意味的な状態としてのみ報告します。表示のカスタマイズは、ペインメタデータのトークンとして別に追加します。 - -```bash -herdr pane report-agent w1:p1 \ - --source custom:indexer \ - --agent docs-bot \ - --state working - -herdr pane report-metadata w1:p1 \ - --source custom:indexer-display \ - --token summary=indexing -``` - -`state` は wait、通知、ロールアップを制御します。`summary` トークンは表示専用で、エージェントサイドバー行では `$summary` として使えます。 - -エージェントサイドバー行では、`terminal_title` または `terminal_title_stripped` も任意で使えます。どちらもデフォルト行には含まれません。前者は安全性のために正規化された最新の OSC 0/2 ターミナルタイトルを表示し、後者は先頭にある認識済みのアクティビティまたはスピナーのグリフ 1 つと、それに続く空白を除去します。これらの値は Herdr サーバーが所有し、コールドリスタートをまたいで保持されません。また、メタデータのタイトルや意味的なエージェント状態から独立しています。そのため、除去後のテキストが同じなら、スピナーのアニメーションで生のタイトルが変わってもペイン更新は発行されません。 - -## エージェントに直接アタッチする - -完全な Herdr UI ではなく、ひとつのエージェントターミナルに現在のターミナルをアタッチします: - -```bash -herdr agent attach reviewer -``` - -`ctrl+b q` でデタッチします。リテラルの `ctrl+b` は `ctrl+b ctrl+b` で送ります。 - -マウスホイールまたは通常の page up/page down でスクロールします。通常の入力をすると最下部に戻ります。 - -別のダイレクトアタッチクライアントがすでに入力を所有している場合は `--takeover` を使います: - -```bash -herdr agent attach reviewer --takeover -``` - -エージェントではないターミナルで同じダイレクトアタッチ挙動が欲しいときは `herdr terminal attach <terminal_id>` を使ってください。 diff --git a/website/src/content/docs/ja/cli-reference.mdx b/website/src/content/docs/ja/cli-reference.mdx deleted file mode 100644 index 3b96247e..00000000 --- a/website/src/content/docs/ja/cli-reference.mdx +++ /dev/null @@ -1,444 +0,0 @@ ---- -title: CLI リファレンス -description: セッション、ワークスペース、タブ、ペイン、通知、エージェント、wait、インテグレーション、ステータスのための Herdr コマンド。 ---- - -Herdr の CLI は、インテグレーションやエージェントが使うのと同じローカルソケット API を通じて、実行中のサーバーと通信します。 - -ほとんどのコマンドは JSON レスポンスを出力します。決定的な自動化が欲しいときはスクリプトから使ってください。 - -## 起動とステータス - -```bash -herdr # デフォルトセッションを起動またはアタッチ -herdr --session work # 名前付きセッションを起動またはアタッチ -herdr --remote workbox # SSH 越しにアタッチ (ローカルのキーバインドを使用) -herdr --remote workbox --remote-keybindings server -herdr --remote workbox --handoff -herdr --no-session # シングルプロセスの逃げ道 -herdr --default-config # デフォルト設定を表示 -herdr update # 設定済みチャンネルからダウンロードしてインストール -herdr update --handoff # 対応する実行中サーバーでライブハンドオフにオプトイン -herdr completion zsh # zsh 補完スクリプトを生成 -herdr channel show # stable または preview を表示 -herdr channel set preview # プレビュービルドにオプトイン -herdr channel set stable # Linux/macOS の直接インストールを安定版に戻す -herdr --version # バージョンを表示 -``` - -ステータスコマンド: - -```bash -herdr status -herdr status server -herdr status client -``` - -API スキーマコマンド: - -```bash -herdr api schema -herdr api schema --json -herdr api schema --output herdr-api.schema.json -``` - -`herdr api schema` は、インストール済みバイナリに同梱されたソケットプロトコルスキーマの短い概要を表示します。完全な JSON Schema ドキュメントが欲しいときは `--json` を使い、ファイルに書き出すには `--output PATH` を使ってください。 - -## シェル補完 - -```bash -herdr completion zsh -herdr completions zsh -herdr completion bash -herdr completion fish -herdr completion powershell -herdr completion elvish -``` - -`completion` はスクリプトを標準出力に表示します。`completions` はエイリアスです。一時的な zsh セッションでは、スクリプトを直接読み込めます: - -```bash -source <(herdr completion zsh) -``` - -永続的な zsh 設定では、生成された `_herdr` 関数を `compinit` が実行される前の `fpath` 上に置いてください: - -```bash -mkdir -p ~/.zfunc -herdr completion zsh > ~/.zfunc/_herdr -``` - -その後、`.zshrc` に次の内容があることを確認してください: - -```zsh -fpath=(~/.zfunc $fpath) -autoload -Uz compinit -compinit -``` - -## サーバー - -```bash -herdr server -herdr server stop -herdr server reload-config -herdr server agent-manifests [--json] -herdr server update-agent-manifests [--json] -herdr server reload-agent-manifests -``` - -`herdr server` はヘッドレスサーバーを明示的に起動します。監視下やサービス的な構成で使ってください。`reload-config` はペインを再起動せずにリロード可能な設定を適用します。`agent-manifests` は、アクティブなエージェント検出マニフェストのソース、キャッシュされたリモートバージョン、直近のリモート更新結果を表示します。`update-agent-manifests` はリモートマニフェストの更新を即座に取得し、実行中のサーバーにリロードして、更新後のマニフェスト状態を表示します。生のステータスレスポンスが欲しいときは `--json` を渡してください。`reload-agent-manifests` は、ローカルオーバーライドの編集後にエージェント検出マニフェストを実行中のサーバーにリロードします。 - -## 通知 - -```bash -herdr notification show <title> [--body TEXT] [--position top-left|top-right|bottom-left|bottom-right] [--sound none|done|request] -``` - -`notification show` は設定済みの `[ui.toast]` 配信を使います。`--position` はアプリ内の Herdr トーストにのみ影響します。`--sound` のデフォルトは `none` で、`done` と `request` は通知が表示されたときにのみ、既存の完了音と要注意音を再生します。 - -## セッション - -```bash -herdr session list [--json] -herdr session attach <name> -herdr session stop <name> [--json] -herdr session delete <name> [--json] -``` - -デフォルトセッションを明示的に停止する必要があるときは、セッション名として `default` を使ってください。 - -## ワークスペース - -```bash -herdr workspace list -herdr workspace create [--cwd PATH] [--label TEXT] [--env KEY=VALUE] [--focus] [--no-focus] -herdr workspace get <workspace_id> -herdr workspace focus <workspace_id> -herdr workspace rename <workspace_id> <label> -herdr workspace report-metadata <workspace_id> --source ID [--token NAME=VALUE] [--clear-token NAME] [--seq N] [--ttl-ms N] -herdr workspace close <workspace_id> -``` - -フォーカスを奪わずにワークスペースを作成します: - -```bash -herdr workspace create --cwd ~/project --label api --no-focus -``` - -ワークスペースは最上位のプロジェクトまたは作業コンテキストです。作成時に最初のタブとルートペインも作られます。JSON レスポンスの `.result.workspace.workspace_id`、`.result.tab.tab_id`、`.result.root_pane.pane_id` から各 ID を取得できます。 - -## Worktree - -```bash -herdr worktree list [--workspace ID | --cwd PATH] [--json] -herdr worktree create [--workspace ID | --cwd PATH] [--branch NAME] [--base REF] [--path PATH] [--label TEXT] [--focus] [--no-focus] [--json] -herdr worktree open [--workspace ID | --cwd PATH] (--path PATH | --branch NAME) [--label TEXT] [--focus] [--no-focus] [--json] -herdr worktree remove --workspace ID [--force] [--json] -``` - -worktree は、Git チェックアウトの出自情報を持つ通常の Herdr ワークスペースです。`worktree create` は Git worktree のチェックアウトを作成し、ワークスペースとして開き、親リポジトリのワークスペースとグループ化します。`--branch` が既存のローカルブランチを指す場合はそれをチェックアウトし、そうでなければ `--base` または `HEAD` からブランチを作成します。`--path` がない場合、チェックアウトは `<worktrees.directory>/<repo>/<branch-slug>` の下に作成されます。 - -`workspace close` は Herdr の状態だけを閉じます。`worktree remove` が明示的なチェックアウト削除の経路です。`git worktree remove` を実行し、ブランチは決して削除せず、Git がダーティなチェックアウトを拒否する場合は `--force` が必要です。 - -## タブ - -```bash -herdr tab list [--workspace <workspace_id>] -herdr tab create [--workspace <workspace_id>] [--cwd PATH] [--label TEXT] [--env KEY=VALUE] [--focus] [--no-focus] -herdr tab get <tab_id> -herdr tab focus <tab_id> -herdr tab rename <tab_id> <label> -herdr tab close <tab_id> -``` - -タブはワークスペース内の別のターミナルレイアウトです。`--workspace` を省略すると、`tab create` はアクティブなワークスペースを使い、存在しなければ失敗します。JSON レスポンスの `.result.tab.tab_id` と `.result.root_pane.pane_id` から ID を取得できます。 - -ワークスペースとタブの作成、およびペインの分割は、デフォルトではフォーカスを変えません。`--focus` は新しいレイアウトを選択し、`--no-focus` はデフォルトを明示します。`--cwd` がない場合、新しいターミナルは `terminal.new_cwd` の設定に従い、デフォルトでは元のペインまたはワークスペースを引き継ぎます。各 `--env KEY=VALUE` は新しいルートシェルの環境変数を追加または置換します。 - -## ペイン - -```bash -herdr pane list [--workspace <workspace_id>] -herdr pane current [--pane ID|--current] -herdr pane get <pane_id> -herdr pane layout [--pane ID|--current] -herdr pane process-info [--pane ID|--current] -herdr pane neighbor --direction left|right|up|down [--pane ID|--current] -herdr pane edges [--pane ID|--current] -herdr pane focus --direction left|right|up|down [--pane ID|--current] -herdr pane resize --direction left|right|up|down [--amount FLOAT] [--pane ID|--current] -herdr pane zoom [<pane_id>|--pane ID|--current] [--toggle|--on|--off] -herdr pane rename <pane_id> <label>|--clear -herdr pane split [<pane_id>|--pane ID|--current] --direction right|down [--ratio FLOAT] [--cwd PATH] [--env KEY=VALUE] [--focus] [--no-focus] -herdr pane swap --direction left|right|up|down [--pane ID|--current] -herdr pane swap --source-pane ID --target-pane ID -herdr pane move <pane_id> --tab <tab_id> --split right|down [--target-pane ID] [--ratio FLOAT] [--focus|--no-focus] -herdr pane move <pane_id> --new-tab [--workspace ID] [--label TEXT] [--focus|--no-focus] -herdr pane move <pane_id> --new-workspace [--label TEXT] [--tab-label TEXT] [--focus|--no-focus] -herdr pane close <pane_id> -``` - -`--current` を受け付けるペインコマンドは、Herdr ペイン内から実行した場合、呼び出し元の `HERDR_PANE_ID` を使います。`pane split` では、明示したペイン ID または `--pane ID` がそのペインを、`--current` が呼び出し元ペインを分割します。対象を省略すると UI でフォーカス中のペインを使います。分割レスポンスでは、新しいペイン ID は `.result.pane.pane_id` にあります。 - -`pane move` の後続コマンドには `.result.move_result.pane.pane_id` を使います。別ワークスペースへの移動ではワークスペース修飾付きのペイン ID が変わり、以前の値は `.result.move_result.previous_pane_id` に残ります。実行中プロセスの `HERDR_PANE_ID`、`HERDR_TAB_ID`、`HERDR_WORKSPACE_ID` は起動時の値のままですが、Herdr は以前のペイン ID をそのターミナルの別名として保持するため、`--current` を使うペインコマンドは引き続き解決できます。ライブエージェント名もターミナルに追従します。 - -出力を読む: - -```bash -herdr pane read <pane_id> [--source visible|recent|recent-unwrapped|detection] [--lines N] [--format text|ansi] [--ansi] [--raw] -herdr pane read <pane_id> --source visible --ansi -herdr pane read <pane_id> --source recent-unwrapped --lines 120 -``` - -`pane read` は UTF-8 のターミナルテキストを直接出力します。デフォルトでは ANSI エスケープを除去し、ソースに装飾が含まれる場合は `--format ansi` または `--ansi` で保持します。`detection` ソースは常にプレーンテキストです。recent 系ソースでは、`--lines N` は折り返し解除の前に末尾の N 描画行を選び、省略時は 80 行です。`visible` と `detection` では、省略時にスナップショット全体を返し、指定時は改行で区切られた末尾 N 行を返します。`agent read` も同じ出力と行数の動作です。 - -入力を送る: - -```bash -herdr pane send-text <pane_id> <text> -herdr pane send-keys <pane_id> <key> [key ...] -herdr pane run <pane_id> <command> -``` - -`<key>` は Herdr のキーコンボ構文を使います: `a` のような通常の印字可能キー、`enter`、`tab`、`esc`、`backspace`、`left`、`right`、`up`、`down` のような特殊キー、`ctrl+h`、`control+j`、`alt+x`、`shift+tab` のような修飾キーコード、`f1` のようなファンクションキー、そして `minus`、`plus`、`backtick` のような名前付き記号です。レガシーな `C-c` と `c-c` は `ctrl+c` のエイリアスとして受け付けられます。 - -標準表記は `esc` ですが、`escape` も使えます。 - -`pane run` は現在の bracketed paste モードを尊重し、テキストと Enter をアトミックに送信します。コマンドには `send-text` + `send-keys Enter` よりこちらを使ってください。個別の送信操作は低レベルのままで、コマンドを送信しません。 - -カスタムフックからエージェント状態を報告する: - -```bash -herdr pane report-agent <pane_id> \ - --source ID \ - --agent LABEL \ - --state idle|working|blocked|unknown \ - [--message TEXT] \ - [--seq N] \ - [--agent-session-id ID] \ - [--agent-session-path PATH] - -herdr pane report-agent-session <pane_id> \ - --source ID \ - --agent LABEL \ - [--seq N] \ - [--agent-session-id ID] \ - [--agent-session-path PATH] \ - [--session-start-source SOURCE] - -herdr pane release-agent <pane_id> \ - --source ID \ - --agent LABEL \ - [--seq N] -``` - -`report-agent-session` はライフサイクル状態を報告せずにネイティブセッション識別子を更新します。`release-agent` は、そのエージェントプロセスが終了したときに、そのソースのライフサイクル権限を終了します。 - -公式インテグレーションがネイティブセッション参照を報告している場合、`pane get`、`pane list`、`agent get`、`agent list` は読み取り専用の `agent_session` オブジェクトを含みます。ネイティブセッション参照が保存されていない場合、このフィールドは省略されます。 - -これらのコマンドは、ペインを制御しているフォアグラウンドプロセスの cwd を解決できる場合に `foreground_cwd` を含みます。既存の `cwd` フィールドは、ラベルと follow-cwd 挙動に使われるペイン/ワークスペースの cwd のままです。 - -意味的な状態を奪わずに、表示専用のペインメタデータを報告する: - -```bash -herdr pane report-metadata <pane_id> \ - --source ID \ - [--agent LABEL] \ - [--applies-to-source ID] \ - [--title TEXT|--clear-title] \ - [--display-agent TEXT|--clear-display-agent] \ - [--state-label STATUS=TEXT] \ - [--clear-state-labels] \ - [--token NAME=VALUE] \ - [--clear-token NAME] \ - [--seq N] \ - [--ttl-ms N] -``` - -`STATUS` は `idle`、`working`、`blocked`、`done`、`unknown` のいずれかです。`--agent` と `--applies-to-source` は `--title`、`--display-agent`、`--state-label` だけを保護し、トークンパッチは保護しません。トークンのクリアまたは TTL の更新は報告側が管理します。表示名を変えるには `--display-agent` を使ってください。 - -メタデータのテキストは保存前に正規化されます。Herdr は前後の空白を取り除き、制御文字を除去し、`--title`、`--display-agent`、各 `--state-label`、トークンの値を 80 文字に制限します。正規化後に空になったトークン値は、そのキーをクリアします。 - -`--token` は名前付き表示値を設定し、`--clear-token` は削除します。指定しなかったトークンは変わりません。ペイントークンはエージェントサイドバー行で `$name` として、ワークスペーストークンはスペース行で使えます。TTL は、その呼び出しで更新した各トークンキーに個別に適用されます。 - -`--source` と `--applies-to-source` は 80 文字以下で、ASCII の英字、数字、コロン、ドット、アンダースコア、ハイフンのみを含められます。`--ttl-ms` はメタデータを自動失効させ、`1` から `86400000` ミリ秒の間でなければなりません。置き換え・クリア・ペインまたはワークスペースのクローズまで残るべきメタデータでは省略してください。`--seq` により、Herdr は同じ `--source` からの古い報告を無視できます。古い報告は API には受理されますが、ペイン状態には無視されます。ペインまたはワークスペースが存続する間、シーケンス付きトークン報告を送れる異なるソースは最大 32 個で、クリアや失効でもその枠は解放されません。 - -## エージェント - -ペインとエージェントの使い分けや一連の連携例は、[エージェント自動化](/ja/docs/agent-automation/) を参照してください。 - -```bash -herdr agent list -herdr agent get <target> -herdr agent read <target> [--source visible|recent|recent-unwrapped|detection] [--lines N] [--format text|ansi] [--ansi] -herdr agent send-keys <target> <key> [key ...] -herdr agent prompt <target> <text> [--wait] [--until STATUS]... [--timeout MS] -herdr agent rename <target> <name>|--clear -herdr agent focus <target> -herdr agent wait <target> [--until STATUS]... [--timeout MS] -herdr agent attach <target> [--takeover] -herdr agent start <name> --kind KIND --pane ID [--timeout MS] [-- <agent-args...>] -herdr agent explain <target> [--json|--verbose] -herdr agent explain --file PATH --agent LABEL [--json|--verbose] -``` - -エージェントターゲットは、一意なライブエージェント名、または現在そのエージェントをホストしているペイン ID です。ターミナル ID とエージェント kind のラベルだけでは指定できません。`agent start` で起動するエージェントには名前が必須で、手動で起動したエージェントは名前なしのままペイン ID で指定します。 - -`agent start` は既存の利用可能なシェルペインを起動対象にします。対話シェル自身がフォアグラウンドを所有し、フォアグラウンドのコマンド、エディタ、エージェントが動いていない必要があります。トポロジーは別に作成します。名前はライブエージェント間で一意で、`[a-z][a-z0-9_-]{0,31}` に一致する必要があります。対応する kind は `pi`、`claude`、`codex`、`gemini`、`cursor`、`devin`、`agy`、`cline`、`omp`、`mastracode`、`opencode`、`copilot`、`kimi`、`kiro`、`droid`、`amp`、`grok`、`hermes`、`kilo`、`qodercli`、`maki` です。名前は現在のペイン占有者に属し、そのエージェントの終了、release、置換で消えます。一時的に検出できないだけでは消えません。 - -start は、期待したエージェントが同じターミナルを所有し、対話入力の準備ができてから返ります。デフォルトの起動タイムアウトは 30000 ミリ秒で、明示する値は 3000 より大きく 300000 以下でなければなりません。 - -`agent prompt` は現在の bracketed paste モードを尊重し、working 中でもテキストとエンコード済み Enter をアトミックに送信します。`--wait` を使う場合、non-working 状態から送信したプロンプトは 5 秒以内に観測可能なライフサイクル変化を起こす必要があり、変化がなければ Herdr は `agent_prompt_stalled` を返します。呼び出し側のタイムアウトが 5 秒以下なら、通常の `timeout` エラーを維持します。活動を観測した後、要求された安定状態を待ちます。個々のターンは追跡しません。すでに working の場合、進行中ターンの完了が待機を満たすことがあります。`--until` は一致状態を絞り込み、`--wait` なしでは拒否されます。単独の `agent wait` は現在の状態が一致すれば即座に返ります。どちらもデフォルトは `idle`、`done`、`blocked` です。 - -`idle` は入力待ちで、そのタブがフォーカス中の Herdr UI ですでに表示済みの状態です。`done` は同じ基礎的な idle 状態ですが、表示していないバックグラウンド作業が完了したときに使われます。そのタブをフォーカスするか `pane focus` / `agent focus` で対象にすると表示済みになりますが、CLI で読み取るだけでは変わりません。`blocked` は承認または質問 UI を Herdr が認識した状態です。`unknown` はエージェントが存在するものの確実に分類できない状態で、作業の成功を意味しません。 - -`agent send-keys` は `enter`、`up`、`esc`、`ctrl+c` などの論理キーを送ります。Herdr は 1 バイトも書き込む前に全キーを検証します。`agent read` は解決されたターミナルストリームを読み、`agent rename` は検出済みエージェントに名前を付けます。 - -`agent explain` は、スクリーン検出が使うのと同じ下部バッファの検出スナップショットの分類を実行中のサーバーに依頼します。そのためライブの出力はサーバーのアクティブなマニフェストキャッシュを反映します。これは `agent.explain` ソケットメソッドを使うので、Herdr のアップグレード後にライブ explain を使う前に、サーバーを再起動するか更新済みサーバーへハンドオフしてください。保存済みフィクスチャをローカルで説明するには `--file PATH --agent LABEL` を使います。デフォルトの出力には、エージェント、最終状態、マニフェストのソースとバージョン、リージョンの証拠付きでマッチしたルール、そしてフォールバック・スキップ・警告の理由が表示されます。`--verbose` を付けると、可視の証拠フラグ、キャッシュされたリモートバージョン、ローカルオーバーライドのシャドーイング、リモート更新状況、マッチャーとリージョンの証拠付きの評価済みルール全リストが表示されます。issue の報告やテストには `--json` を付けてください。 - -通常のターミナル、サーバー、テスト、シェル、低レベルなターミナル制御には `pane send-text`、`pane send-keys`、`pane run`、`terminal attach` を使ってください。Enter 付きでコマンドを送信したいときは `pane run` を使います。 - -## ダイレクトターミナルアタッチ - -```bash -herdr terminal attach <terminal_id> [--takeover] -herdr terminal title set <title> -herdr terminal title clear -``` - -ダイレクトアタッチからは `ctrl+b q` でデタッチします。リテラルの `ctrl+b` は `ctrl+b ctrl+b` で送ります。 -`terminal title clear` は Herdr のデフォルトの外側ターミナルウィンドウタイトルを復元します。 - -## 出力待機 - -ペインの出力を待つ: - -```bash -herdr pane wait-output <pane_id> (--match <text> | --regex <pattern>) [--source visible|recent|recent-unwrapped] [--lines N] [--timeout MS] [--raw] -``` - -通常のコマンドやサーバーには `pane wait-output` を使います。コーディングエージェントには `agent wait` を使います。 - -`pane wait-output` は選択したスナップショットを最初にすぐ検索するため、すでに存在する出力も一致します。デフォルトのソース名は `recent` で、直近 80 行の描画済みターミナル行を折り返し前の出力として扱います。`--lines` でその行数を変更できます。`--match` は 1 行内のリテラル部分文字列を検索し、`--regex` は Rust の正規表現構文で 1 行ずつ一致します。 - -`pane wait-output`、`agent wait`、`agent prompt --wait` は、`--timeout` を省略すると無期限に待ちます。タイムアウトまたはサーバーエラーは JSON として stderr に出力され、終了コード 1 になります。CLI 使用法のエラーは終了コード 2 です。 - -## インテグレーション - -```bash -herdr integration install pi -herdr integration install omp -herdr integration install claude -herdr integration install codex -herdr integration install copilot -herdr integration install devin -herdr integration install droid -herdr integration install kimi -herdr integration install opencode -herdr integration install kilo -herdr integration install hermes -herdr integration install mastracode -herdr integration install qodercli -herdr integration install cursor -herdr integration uninstall pi -herdr integration uninstall omp -herdr integration uninstall claude -herdr integration uninstall codex -herdr integration uninstall copilot -herdr integration uninstall devin -herdr integration uninstall droid -herdr integration uninstall kimi -herdr integration uninstall opencode -herdr integration uninstall kilo -herdr integration uninstall hermes -herdr integration uninstall mastracode -herdr integration uninstall qodercli -herdr integration uninstall cursor -herdr integration status [--outdated-only] -``` - -## プラグイン - -プラグインコマンドは、ローカル実行型ワークフロープラグインをインストールして実行します。プラグインはマニフェストとプロセス外コマンドの組み合わせです。ホスト側の面は Herdr が、実装言語はプラグインが担います。 - -プラグインのインストール、一覧、削除: - -```bash -herdr plugin install <owner>/<repo>[/subdir...] [--ref REF] [--yes] -herdr plugin list [--plugin ID] [--json] -herdr plugin uninstall <plugin_id|owner/repo[/subdir...]> -herdr plugin enable <plugin_id> -herdr plugin disable <plugin_id> -``` - -`plugin install` は `ogulcancelik/herdr-plugin-examples/worktree-bootstrap` のような GitHub 省略記法のみを受け付けます。`git` を使い、対話的なターミナルでは信頼プレビューを表示し、サポートされるマニフェストのビルドコマンドを実行し、GitHub インストールを Herdr 管理のディレクトリに保存します。非対話的なインストールには `--yes` を使ってください。GitHub 管理プラグインの再インストールは、その管理チェックアウトを置き換えます。ローカルにリンクされたプラグインへの上書きインストールは拒否されます。プラグインのマニフェストは `min_herdr_version` を宣言しなければならず、プラグインがより新しい Herdr バイナリを要求する場合、install と link は失敗します。`plugin list` はデフォルトで人間可読です。生の API レスポンスが欲しいときは `--json` を渡してください。 - -ローカル開発: - -```bash -herdr plugin link <path> [--disabled] -herdr plugin unlink <plugin_id> -``` - -`plugin link` は `herdr-plugin.toml` を含むプラグインディレクトリ、またはマニフェストへの直接パスを受け付けます。ローカルチェックアウトからプラグインを作成・テストしている間はこれが正しいコマンドです。`plugin unlink` はプラグインの登録を解除し、ファイルには触れません。`plugin uninstall` はプラグインの登録を解除し、Herdr 管理の GitHub チェックアウトファイルも削除します。GitHub インストールの場合、uninstall はプラグイン id と、install で使うのと同じ `owner/repo[/subdir...]` 省略記法の両方を受け付けます。アクション、イベントフック、ペイン、リンクハンドラーはマニフェストで宣言します。ランタイムでのアクション登録は v1 の範囲外です。 - -設定ディレクトリ: - -```bash -herdr plugin config-dir <plugin_id> -``` - -`plugin config-dir` はプラグインの設定ディレクトリを表示し、必要なら作成します (レガシーなプラグイン設定の場所が存在すれば、そこから初期内容を移します)。セットアップドキュメントやシェルスクリプトで、管理されたプラグインチェックアウトとは別の、`.env` ファイルなどユーザーが編集する設定のための安定したパスをユーザーに示すのに使ってください。 - -アクション: - -```bash -herdr plugin action list [--plugin ID] -herdr plugin action invoke <action_id> [--plugin ID] -``` - -`plugin action invoke` は、インストール済みで有効かつプラットフォーム互換のプラグインアクションのマニフェストコマンドを起動し、開始されたコマンドのログレコードを JSON レスポンスに表示します。複数のプラグインが同じアクション id を使っている場合は、修飾されたアクション id (`plugin.id.action`) を使ってください。ローカルのアクション id はドットを含められないため、プラグイン id がドットを含んでいても修飾 id は曖昧になりません。 - -ログ: - -```bash -herdr plugin log list [--plugin ID] [--limit N] -``` - -管理されたターミナルペイン: - -```bash -herdr plugin pane open --plugin ID --entrypoint ID [--placement overlay|popup|split|tab|zoomed] [--width SIZE] [--height SIZE] [--workspace ID] [--target-pane PANE] [--direction right|down] [--cwd PATH] [--env KEY=VALUE] [--focus|--no-focus] -herdr plugin pane focus <pane_id> -herdr plugin pane close <pane_id> -``` - -`plugin pane open` は、プラグインがリンクされ、有効で、現在のプラットフォームと互換であることを要求します。マニフェストで宣言された `[[panes]]` コマンドを Herdr 管理のターミナルペインとして起動します。マニフェストのデフォルトは `overlay` で、アクティブなペインの上に一時的なズームオーバーレイを開きます。分割、新しいタブ、ズームされたペイン、またはタブレイアウトを変更しないセッションモーダルな `popup` として開くこともできます。`--width` と `--height` は、外側のポップアップ寸法をターミナルセル数または `80%` のような割合で指定します。省略した寸法はデフォルトでターミナルの半分になり、小さすぎる値はポップアップの最小サイズに制限されます。ポップアップは Herdr ペインではなく、`HERDR_PANE_ID` を受け取らず、pane API やエージェント API に参加しません。ターミナル以外のネイティブなプラグインペインは今後の対応面です。 - -`--env KEY=VALUE` はプロセスを起動するコマンドで繰り返し指定できます。新しく起動されるプロセスにのみ適用されます。`HERDR_SOCKET_PATH`、`HERDR_BIN_PATH`、`HERDR_ENV`、`HERDR_WORKSPACE_ID`、`HERDR_TAB_ID`、`HERDR_PANE_ID`、`HERDR_PLUGIN_ID`、`HERDR_PLUGIN_ROOT`、`HERDR_PLUGIN_CONFIG_DIR`、`HERDR_PLUGIN_STATE_DIR`、`HERDR_PLUGIN_ENTRYPOINT_ID`、`HERDR_PLUGIN_CONTEXT_JSON` のような Herdr 管理の変数は、呼び出し側が与えた環境変数と衝突した場合も権威を保ちます。 - -## 読み取りソース - -| ソース | 意味 | -| --- | --- | -| `visible` | 現在レンダリングされている画面。UI のフィードバックループに最適。 | -| `recent` | ターミナルの折り返しを含む直近のスクロールバック。 | -| `recent-unwrapped` | ソフト折り返しなしの直近のスクロールバック。ログに最適。 | -| `detection` | エージェントのスクリーン検出が使う下部バッファのスナップショット。 | - -この表は読み取り時の意味です。`pane wait-output` に限り、`recent` と `recent-unwrapped` はどちらも recent の折り返し前スナップショットを検索し、デフォルト表記は `recent` です。 - -## 環境変数 - -| 変数 | 目的 | -| --- | --- | -| `HERDR_CONFIG_PATH` | 設定ファイルパスを上書きする。 | -| `HERDR_SESSION` | CLI コマンドの名前付きセッションを選択する。 | -| `HERDR_SOCKET_PATH` | 低レベルなソケットパスの上書き。 | -| `HERDR_ENV` | Herdr 管理のペインプロセス内で `1` に設定される。 | -| `HERDR_PANE_ID` | 実行中ペインプロセスの公開ペイン id。 | -| `HERDR_TAB_ID` | 実行中ペインプロセスの公開タブ id。 | -| `HERDR_WORKSPACE_ID` | 実行中ペインプロセスの公開ワークスペース id。 | -| `HERDR_LOG` | ログフィルターを設定する。例: `HERDR_LOG=herdr=debug`。 | -| `HERDR_DISABLE_SOUND` | サウンド通知が有効でも音の再生を無効にする。 | diff --git a/website/src/content/docs/ja/concepts.mdx b/website/src/content/docs/ja/concepts.mdx deleted file mode 100644 index 640ba8a4..00000000 --- a/website/src/content/docs/ja/concepts.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: コンセプト -description: Herdr のワークスペース、タブ、ペイン、エージェント、セッション、モードを理解します。 ---- - -Herdr はターミナルワークスペースマネージャーです。実際のターミナルプロセスを動かし続け、その周りに構造を加えます。 - -## ワークスペース - -ワークスペースは最上位のプロジェクトコンテナです。リポジトリ、タスク、調査ごとにひとつのワークスペースを使ってください。 - -ワークスペースはタブとペインを所有します。サイドバーの状態は内部のエージェントから集約されるので、どのプロジェクトが注意を必要としているかが分かります。 - -## タブ - -タブはワークスペース内のレイアウトです。`agents`、`logs`、`server`、`review` のようにビューを分けるために使います。 - -タブは CLI とソケット API からアドレス指定できます。 - -## ペイン - -ペインは実際のターミナルです。Herdr はターミナル出力を描画し、入力をプロセスに送り返し、クライアントのデタッチ後もペインを維持します。 - -ペインは右または下に分割できます。手動での名前変更、CLI からの読み取り、入力の送信、クローズができます。 - -## マウス UI - -Herdr はマウスネイティブです。ペイン、タブ、ワークスペース、エージェントをクリックできます。分割境界のドラッグ、テキスト選択、右クリックメニューも使えます。以下で説明する操作はすべてマウスでも行えます。キーボードバインドは任意のレイヤーです。 - -キーボードのみで操作したい場合や、Herdr にマウス入力をキャプチャさせたくない場合は、マウスキャプチャを無効にしてください: - -```toml -[ui] -mouse_capture = false -``` - -## エージェント - -エージェントは、Herdr がペイン内で認識するプロセスです。Herdr はフォアグラウンドプロセス、スクリーンマニフェスト、任意のインテグレーションからエージェントを検出します。 - -エージェントの状態は次のとおりです: - -| 状態 | 意味 | -| --- | --- | -| `blocked` | エージェントが入力、承認、または判断を必要としている。 | -| `working` | エージェントが実行中。 | -| `done` | エージェントが完了し、まだ確認されていない。 | -| `idle` | エージェントが完了または待機していて、確認済み。 | -| `unknown` | Herdr が状態を確信を持って分類できない。 | - -## セッション - -セッションは永続的な Herdr サーバーの名前空間です。デフォルトの `herdr` コマンドはデフォルトセッションにアタッチします。 - -名前付きセッションは独立したランタイム名前空間です: - -```bash -herdr session list -herdr session attach work -herdr session attach side-project -``` - -まずはワークスペースを使ってください。ペイン、ソケット、永続化されたランタイム状態を完全に分離する必要があるときに名前付きセッションを使います。 - -## クライアントとサーバー - -デフォルトでは、Herdr はバックグラウンドサーバーと、それにアタッチした 1 つ以上のクライアントとして動作します。 - -サーバーはペインとプロセス状態を所有します。クライアントはそのサーバーにアタッチしたターミナル UI です。 - -`ctrl+b q` でクライアントをデタッチします。サーバーとエージェントは動き続けます。 - -セッションを終了してそのペインを停止したい場合は、サーバーを停止します: - -```bash -herdr server stop -``` - -## モード - -Herdr にはターミナルモード、プレフィックスモード、ナビゲートモードがあります。 - -ターミナルモードはフォーカス中のペインにキーを送ります。プレフィックスモードはプレフィックスキーの後に Herdr のアクションをひとつ待ちます。ナビゲートモードは常駐のワークスペースナビゲーション画面です。 - -プレフィックスキー (デフォルト `ctrl+b`) を押してから、新しいタブなら `c`、ワークスペースナビゲーションなら `w` のようにアクションキーを押します。プレフィックスの考え方が初めてなら[キーボード](/ja/docs/keyboard/)を参照してください。 diff --git a/website/src/content/docs/ja/config-reference.mdx b/website/src/content/docs/ja/config-reference.mdx deleted file mode 100644 index 7bbb60aa..00000000 --- a/website/src/content/docs/ja/config-reference.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: 設定リファレンス -description: Herdr の正規の config.toml キーを、型・デフォルト値・許容値つきで一覧します。 ---- - -import ConfigReference from '../../../components/ConfigReference.astro'; - -Herdr が `config.toml` から読み取る正規キーを、フラットに一覧して絞り込めます。 -ガイド付きの設定手順や各オプションの背景は[設定](/ja/docs/configuration/)を参照してください。 - -コメント付きのデフォルト設定全体はいつでも出力できます: - -```bash -herdr --default-config -``` - -カスタムコマンドバインディング(`[[keys.command]]`)はユーザー定義のテーブルのため、 -ここではキーごとに掲載していません。 -[カスタムコマンドキーバインド](/ja/docs/configuration/#カスタムコマンドキーバインド)を参照してください。 - -各キーの説明は現時点では英語です。 - -<ConfigReference - placeholder="キーを絞り込み(例: sidebar, prefix, sound…)" - noMatches="一致するキーはありません。" - keyCountLabel="キー" -/> diff --git a/website/src/content/docs/ja/configuration.mdx b/website/src/content/docs/ja/configuration.mdx deleted file mode 100644 index 0eba298d..00000000 --- a/website/src/content/docs/ja/configuration.mdx +++ /dev/null @@ -1,462 +0,0 @@ ---- -title: 設定 -description: Herdr のキーバインド、テーマ、サイドバーの挙動、通知、高度なオプションを設定します。 ---- - -Herdr は設定ファイルなしで動作します。キー、テーマ、サイドバーのレイアウト、通知、高度な挙動をカスタマイズしたい場合に追加してください。 - -設定やキーバインドを探していますか?すべてのキー、型、デフォルト値、許容値は[設定リファレンス](/docs/config-reference/)で検索できます。このページでは、セットアップ、一般的なレシピ、リファレンスの一行だけでは説明しきれない設定構造を中心に説明します。 - -## 設定ファイル - -Herdr は次の場所から設定を読み込みます: - -```text -Linux and macOS: ~/.config/herdr/config.toml -Windows: %APPDATA%\herdr\config.toml -``` - -システム上で解決された設定ファイルのパスは、`herdr --help` で確認できます。 - -完全なデフォルト設定を表示します: - -```bash -herdr --default-config -``` - -完全な出発点が欲しい場合は、これを設定として保存してください: - -```bash -herdr --default-config > ~/.config/herdr/config.toml -``` - -設定値が無効な場合、Herdr は安全なデフォルト値にフォールバックし、起動時に警告を表示します。 - -`onboarding` が存在しないか true の場合、Herdr は初回セットアップを表示します。オンボーディングから先へ進むと `onboarding = false` が書き込まれ、設定のインテグレーションタブが開きます。セットアップ後にこのフローをスキップしたい場合に設定してください。 - -```toml -onboarding = false -``` - -## 設定のリロード - -`config.toml` を編集した後、実行中のサーバーをリロードします: - -```bash -herdr server reload-config -``` - -Herdr のグローバルメニューを開いて `reload config` を選ぶこともできます。 - -リロードは、ペインを再起動せずにほとんどの UI 設定を適用します。起動時のみの設定には引き続き再起動が必要です。 - -## ターミナルのデフォルト - -新しく作成される対話型ペインに Herdr が使う実行ファイルを設定します: - -```toml -[terminal] -default_shell = "nu" -``` - -未設定または空の場合、Herdr は `$SHELL`、次に Unix では `/bin/sh`、Windows では PowerShell を使います。これは実行ファイル名またはパスであり、シェルのコマンドラインではありません。既存のペインは再作成されるまで現在のシェルを保ちます。カスタムコマンドキーバインドの文字列は、Unix ではペインコマンドに `/bin/sh -c`、デタッチコマンドに `/bin/sh -lc` を通して実行され、Windows では `cmd.exe /d /c` を通して実行されます。 - -新しく作成される対話型ペインのシェルの起動方法を設定します: - -```toml -[terminal] -shell_mode = "auto" -``` - -`shell_mode = "auto"` は macOS でログインシェルを起動するため、`/usr/libexec/path_helper` のようなログイン時のみの PATH 設定や Homebrew のシェル初期化が新しいペインで実行されます。他のプラットフォームでは、既存の非ログインシェルの挙動を保ちます。ログインシェルでの起動を強制するには `"login"` を、無効にするには `"non_login"` を使ってください。コマンドペイン、デタッチされたカスタムコマンドキーバインド、明示的な argv 起動は、既存のコマンド実行経路を保ちます。 - -新しいペイン、タブ、ワークスペースの作業ディレクトリポリシーを設定します: - -```toml -[terminal] -new_cwd = "follow" -``` - -`new_cwd = "follow"` はデフォルトの挙動を保ち、元のペインまたはワークスペースを継承します。元のワークスペースがない場合、Herdr は `$HOME` で起動します。常に `$HOME` で起動するには `"home"` を、Herdr のプロセスディレクトリを使うには `"current"` を、または `"~/Projects"` のような固定パスを使ってください。CLI またはソケット API から明示的に指定された `--cwd` の値は引き続き優先されます。 - -## Worktree - -サイドバーから作成される Git worktree チェックアウトに Herdr が使うルートディレクトリを設定します: - -```toml -[worktrees] -directory = "~/.herdr/worktrees" -``` - -Herdr は `<directory>/<repo>/<branch-slug>` の下にチェックアウトを作成します。隣接ディレクトリ方式のチェックアウトには、`~/Projects/herdr-worktrees` のようなディレクトリを設定してください。相対値は、アプリが設定を適用するときに絶対パスへ解決されます。 - -worktree アクションは Git ワークスペースの行から使えます。`New worktree` はチェックアウトを作成し、入力したブランチがすでに存在する場合は既存のローカルブランチをチェックアウトし、存在しない場合はブランチを作成します。その後、新しい Herdr ワークスペースとして開き、元のワークスペースの下にグループ化します。`Open worktree...` はそのリポジトリにある既存の Git worktree チェックアウトを一覧表示します。すでに開いているチェックアウトを選ぶとそこへフォーカスし、閉じているチェックアウトを選ぶと同じグループで開きます。 - -グループ化された worktree も通常の Herdr ワークスペースと同様に動作します。フォーカス、名前変更、クローズができ、それぞれ独自のタブとペインを持ちます。親の行は元のワークスペースです。親の行を閉じると Herdr のグループ全体が閉じますが、チェックアウトのフォルダーやブランチは削除されません。 - -worktree チェックアウトの削除は明示的に行います。グループ化された子ワークスペースで `Delete worktree checkout...` を使うと `git worktree remove` が実行されます。Herdr はまず Git に安全な削除を要求します。チェックアウトに変更済みまたは未追跡のファイルがあり Git が拒否した場合、Herdr は強制削除を実行する前にもう一度確認します。ブランチは削除されません。 - -## リモートアタッチ - -リモートアタッチは、デフォルトで一時的なキープアライブと接続再利用のフォールバックを使って SSH 接続を管理します。 - -```toml -[remote] -manage_ssh_config = true -``` - -有効な場合、`herdr --remote` は最初に `~/.ssh/config` と `/etc/ssh/ssh_config` を取り込み、その後にフォールバックの `ServerAliveInterval` と `ServerAliveCountMax` の値を加えた、プライベートな一時 SSH 設定を書き込みます。ユーザー自身のキープアライブ設定が優先されます。Herdr は、最初に認証した接続を再利用するため、アタッチごとにプライベートな OpenSSH コントロールソケットも使います。Herdr が生成した設定やコントロールソケットを使わず、通常の `ssh` でリモートアタッチを実行するには `manage_ssh_config = false` を設定してください。 - -## キーバインド - -プレフィックスの導入ガイドと検証済みのプレフィックスなし構成については、[キーボード](/docs/keyboard/)を参照してください。 - -Herdr には tmux に似たプレフィックスモードがあります。デフォルトのプレフィックスは `ctrl+b` です。キーバインド文字列は明示的です。`prefix+n` は設定されたプレフィックスを押してから `n` を押すという意味で、`ctrl+alt+n` はターミナルモードの直接ショートカットです。 - -小さなキーバインドの上書きは次のようになります: - -```toml -[keys] -prefix = "ctrl+b" -goto = "prefix+g" -new_tab = "prefix+c" -next_tab = "prefix+n" -previous_tab = "prefix+p" -focus_pane_left = "prefix+h" -navigate_workspace_down = "j" -navigate_pane_down = "ctrl+j" -split_horizontal = "prefix+minus" -``` - -デフォルトのキーマップはプレフィックス優先なので、Herdr がシェル、エディタ、tmux、ターミナルアプリから入力を奪うことはありません。[設定リファレンス](/docs/config-reference/)で `keys.` を検索すると、すべてのアクションとデフォルトのバインドを確認できます。`prefix+?` で開くアプリ内ヘルプパネルには、現在有効なバインドが表示されます。 - -1 つのアクションに複数のショートカットが必要な場合、バインドを配列にすることもできます: - -```toml -[keys] -next_tab = ["prefix+n", "ctrl+alt+]"] -``` - -任意のアクションはデフォルトでは未設定です。プレフィックスモードの挙動には `prefix+` でバインドし、意図的に直接ショートカットにする場合は明示的な修飾キーコードを使ってください。 - -キー文字列には、通常のキー、`ctrl+a`、`shift+n`、`alt+1`、`cmd+k` のような修飾キーの組み合わせ、`enter`、`tab`、`esc`、`left`、`right`、`up`、`down` のような特殊キーが使えます。`minus`、`comma`、`ampersand`、`plus`、`backtick` のような名前付き記号も使えます。`n` のような通常の印字可能キーの直接バインドは入力を妨げるため危険です。意図的に直接バインドするのでなければ `prefix+n` を使ってください。`navigate_workspace_*` と `navigate_pane_*` のフィールドはナビゲートモード専用で、`j` や `k` のような通常のキーを使えます。これらには `prefix+`、`esc`、`enter`、`tab`、`shift+tab`、`left`、`right`、修飾なしの `1` から `9` は使えません。左右の矢印キーは、左ペインと右ペインへのナビゲーションの恒久的なエイリアスです。これらのナビゲートモードショートカットは、`focus_pane_down = "prefix+j"` のような一般アクションのバインドから独立しています。両方に同じキーが使われている場合、ナビゲートモードが開いている間はナビゲートモードのショートカットが優先されます。Alt、Cmd/Super、修飾キー付き記号は、ターミナルと tmux の設定に依存します。 - -古いカスタムキーバインドを使っていて新しいデフォルトが欲しい場合は、`herdr config reset-keys` を実行してください。Herdr は `config.toml` をバックアップし、`[keys]` と `[[keys.command]]` を削除し、再起動または `herdr server reload-config` の後に組み込みの v2 デフォルトを使います。 - -## インデックス付きジャンプ - -インデックス付きキーバインドは、通常のキーバインドフィールドで `1..9` を使います: - -```toml -[keys] -switch_tab = "prefix+1..9" -switch_workspace = "prefix+shift+1..9" -focus_agent = "prefix+alt+1..9" -``` - -レガシーな `[keys.indexed]` テーブルは互換性のために引き続きパースされますが、新しい設定では明示的なアクションフィールドを使ってください。 - -## カスタムコマンドキーバインド - -カスタムコマンドも同じキーバインド構文を使います。 - -```toml -[[keys.command]] -key = "prefix+alt+g" -type = "popup" -command = "lazygit" -description = "run lazygit" -width = "80%" -height = "80%" -``` - -`type = "popup"` は、タブレイアウトを変更せずにセッションモーダルなポップアップを開きます。 -ポップアップは、コマンドが終了するまで Escape を含むすべてのターミナル入力を受け取ります。 -`width` と `height` は任意です。省略するとデフォルトの半分のサイズになり、数値ならターミナルセル数、`"80%"` のような文字列ならターミナル領域に対する割合を指定できます。 -寸法にはポップアップの枠が含まれ、小さすぎる値は最小サイズに制限されます。 -ポップアップコマンドは `HERDR_PANE_ID` を受け取りません。背後のタイルペインには `HERDR_ACTIVE_PANE_ID` を使ってください。 - -Unix と macOS では、分割やタブを追加せずに一時的なターミナルを開くこともできます: - -```toml -[[keys.command]] -key = "prefix+t" -type = "popup" -command = "exec \"${SHELL:-sh}\"" -description = "open scratch terminal" -width = "80%" -height = "80%" -``` - -Windows では、代わりに `command = "powershell.exe -NoLogo"` のようなシェルコマンドを使ってください。 -シェルを終了するとポップアップが閉じ、タイル表示に戻ります。 - -`type = "pane"` は一時的なペインを開き、コマンドの終了時に閉じます。 - -`type = "shell"` はバックグラウンドでデタッチ実行します。 - -`type = "plugin_action"` はインストール済みプラグインのアクション id を呼び出します。アクション id がグローバルに一意でない場合は修飾 id を使ってください: - -```toml -[[keys.command]] -key = "prefix+l" -type = "plugin_action" -command = "example.layout.apply" -description = "apply layout" -``` - -任意で `description` を指定できます。指定すると、キーバインドヘルプパネル(`prefix+?` で開く)に、デフォルトの `'custom command'` ラベルの代わりに表示されます。 - -カスタムコマンドは、利用可能な場合に `HERDR_SOCKET_PATH`、`HERDR_BIN_PATH`、`HERDR_ACTIVE_WORKSPACE_ID`、`HERDR_ACTIVE_TAB_ID`、`HERDR_ACTIVE_PANE_ID`、`HERDR_ACTIVE_PANE_CWD` を受け取ります。Herdr が検出できる場合、シェルコマンドはフォーカス中のペインの作業ディレクトリから実行されます。 - -Windows では、カスタムコマンド文字列に `cmd.exe /d /c` が使われるため、環境変数には `%HERDR_BIN_PATH%` 構文を使います。PowerShell 構文を実行するには、たとえば `powershell.exe -NoProfile -Command "..."` のように明示的に呼び出してください。 - -## テーマ - -組み込みテーマを選びます: - -```toml -[theme] -name = "catppuccin" -``` - -すべての組み込みテーマは、[設定リファレンス](/docs/config-reference/)で `theme.name` を検索してください。Herdr の UI 色をホストターミナルの ANSI パレットに従わせたいときは `terminal` を使ってください。 - -ホストターミナルがライト/ダークの外観変更を報告したときに、Herdr が自身の UI テーマを切り替えるようにするには、テーマの自動切り替えを有効にします: - -```toml -[theme] -name = "catppuccin" -auto_switch = true -light_name = "catppuccin-latte" -dark_name = "catppuccin" -``` - -`auto_switch` のデフォルトは `false` なので、既存のテーマ設定は手動の挙動を保ちます。`light_name` または `dark_name` を省略すると、設定された `name` に対応する組み込みの姉妹テーマが存在する場合はそれを使います。たとえば `tokyo-night`/`tokyo-night-day` や `gruvbox`/`gruvbox-light` です。設定画面でテーマを手動選択すると `auto_switch` は無効になります。 - -個々の色を上書きできます: - -```toml -[theme.custom] -panel_bg = "reset" -accent = "#a6e3a1" -green = "#a6e3a1" -blue = "#89b4fa" -red = "#f38ba8" -yellow = "#f9e2af" -``` - -色の値には、hex、名前付きの色、`rgb(r,g,b)`、または `reset`、`default`、`none`、`transparent` のようなリセットエイリアスが使えます。 - -## UI とサイドバー - -サイドバーは Herdr のメインダッシュボードです。サイズ、折りたたみモード、Agent パネルの並び順、マウスの挙動、ペインの境界線、その他の表示設定については、[設定リファレンス](/docs/config-reference/)で `ui.` を検索してください。 - -### サイドバーの行レイアウト - -展開されたデスクトップサイドバーでは、`rows` の各内側の配列が 1 行として描画されます。完全なデフォルトレイアウトは次のとおりです: - -```toml -[ui.sidebar.agents] -row_gap = 0 -rows = [ - ["state_icon", "workspace", "tab"], - ["agent"], -] - -[ui.sidebar.spaces] -row_gap = 0 -rows = [ - ["state_icon", "workspace"], - ["branch", "git_status"], -] -``` - -Agent の行では、次の組み込みトークンを使えます: - -- `state_icon` — エージェントの意味的な状態を示す色付きアイコン。 -- `state_text` — `idle`、`working`、`blocked`、`done`、`unknown`。報告された表示ラベルがある場合はそれも含みます。 -- `workspace` — ワークスペース名。 -- `tab` — 利用可能な場合はタブ名。 -- `pane` — 利用可能な場合はペイン名。 -- `agent` — 検出または報告されたエージェントの表示名。 -- `terminal_title` — 安全性のための正規化後の最新の OSC 0/2 ターミナルタイトル。 -- `terminal_title_stripped` — 認識された先頭のアクティビティまたはスピナーのグリフ 1 つと、それに続く空白を除去したターミナルタイトル。 -- `$name` — `name` という名前のカスタムペインメタデータ。 - -Space の行では、次の組み込みトークンを使えます: - -- `state_icon` — Space 内で集約されたエージェント状態を示す色付きアイコン。 -- `state_text` — Space 内で集約されたエージェント状態のテキスト。 -- `workspace` — ワークスペース名。 -- `branch` — 利用可能な場合は Git ブランチ。 -- `git_status` — 0 でない場合は Git の ahead と behind の件数。 -- `$name` — `name` という名前のカスタムワークスペースメタデータ。 - -トークンは設定された順序で描画されます。Herdr は通常、隣接する値を ` · ` で区切り、`state_icon` の後には空白を 1 つ入れます。値がない場合、その値と区切りは表示されません。すべてのトークンに値がない行は表示されません。各レイアウトは最大 16 行、各行は最大 16 トークンです。 - -トークンエントリにはインラインのスタイルテーブルも使えます: - -```toml -[ui.sidebar.agents] -rows = [ - ["state_icon", { token = "workspace", bold = false }, "tab"], - [{ token = "$summary", fg = "#89b4fa", bold = true, dim = false }], -] -``` - -`fg` は厳密な `#RGB` または `#RRGGBB`、`bold` と `dim` は真偽値です。省略したフィールドはコンテキストのスタイルを保持し、明示的な `false` はその修飾を解除します。スタイルは 1 つの出現箇所だけに適用されます。`fg` を指定した `git_status` では、既定の緑/赤ではなく ahead と behind の両方が同じ色になります。区切りと行の背景は変更されません。 - -`row_gap` は、Agent パネルと Space パネルごとに、エントリ間の空白行数を指定します。デフォルトは `0` で、エントリを詰めて表示します。以前の間隔に戻すには `1` に設定します。`rows` で定義したコンテンツ行の間隔には影響しません。連続するインデントされた worktree の子は、1 つの Space グループとして詰めて表示されます。 - -既知のエージェントについて Agent の完全なレイアウトを上書きするには、`rows_by_agent` を使います: - -```toml -[ui.sidebar.agents] -rows = [ - ["state_icon", "agent", "state_text"], - ["workspace", "tab"], -] - -[ui.sidebar.agents.rows_by_agent] -claude = [ - ["state_icon", "agent", "state_text"], - ["terminal_title_stripped"], - ["workspace", "tab"], -] -``` - -上書きは `rows` を置き換えるもので、拡張するものではありません。上書きのキーには、`claude`、`codex`、`pi` のような大文字と小文字を区別する正規エージェント ID を使います。`claude-code` のような検出エイリアスは使えません。カスタム報告されたエージェントを含め、上書きがないエージェントには `rows` が使われます。 - -カスタム `$name` トークンは動的な値であり、リテラルテキストではありません。トークンをレイアウトに追加してから、スクリプトまたはプラグインで値を報告します: - -```toml -[ui.sidebar.agents] -rows = [ - ["state_icon", "agent", "$model"], - ["$summary"], - ["workspace", "tab"], -] -``` - -```bash -herdr pane report-metadata <pane_id> \ - --source my-agent-hook \ - --token model=opus \ - --token summary="reviewing authentication" -``` - -カスタム Space トークンには、同じ方法で `herdr workspace report-metadata` を使います。報告されていないカスタムトークンは表示されません。 - -メタデータの報告元が提供できるのは値だけで、スタイルはローカルのサイドバー設定で管理します。上限、クリア、シーケンス、有効期限については、[CLI リファレンス: report metadata](/docs/cli-reference/#panes)を参照してください。 - -サイドバーの行設定は、展開されたデスクトップサイドバーにだけ適用されます。折りたたみ表示とモバイル表示はコンパクトなレイアウトを保ちます。 - -## 通知 - -Herdr は、バックグラウンドのエージェントが完了したり入力を必要としたりしたときに通知できます: - -```toml -[ui.toast] -delivery = "herdr" -delay_seconds = 1 - -[ui.toast.herdr] -position = "bottom-right" -``` - -アプリ内トーストには `herdr`、SSH 越しでも使いやすい外側のターミナル通知には `terminal`、ローカル OS の通知サービスには `system`、ポップアップを無効にするには `off` を選びます。Herdr はアクティブなタブのポップアップを抑制します。位置、遅延の挙動、クリップボードのフィードバック設定については、[設定リファレンス](/docs/config-reference/)で `ui.toast` を検索してください。 - -## サウンド - -サウンド通知はローカルの Herdr クライアントで再生されます。カスタムサウンドは mp3 ファイルでなければなりません。相対パスは設定ファイルのディレクトリから解決されます。 - -```toml -[ui.sound] -path = "sounds/notification.mp3" -done_path = "sounds/done.mp3" -request_path = "sounds/request.mp3" -``` - -`path` はすべてのサウンド通知に 1 つの音を設定します。`done_path` と `request_path` は、完了音と入力要求音だけを上書きします。 - -エージェント別のサウンド上書きには `default`、`on`、`off` を指定できます。キーには `claude`、`codex`、`devin`、`droid` のような検出されたエージェントラベルを使います。Droid はデフォルトでミュートされています。 - -```toml -[ui.sound.agents] -droid = "off" -claude = "on" -``` - -## 高度な設定 - -スクロールバックの上限、ネストされた起動、その他の高度な設定や実験的設定については、[設定リファレンス](/docs/config-reference/)を検索してください。ペイン画面履歴を有効にする前に、[セッション状態と復元](/docs/session-state/)を参照してください。このガイドでは、ペインの内容を保存する場合のセキュリティ上のトレードオフを説明しています。 - -## Kitty graphics - -アタッチされたローカルクライアントでの Kitty graphics の描画は実験的機能で、デフォルトでは無効です: - -```toml -[experimental] -kitty_graphics = true -``` - -ターミナルの画像表示をテストする場合にのみ有効にしてください。 - -## Agent セッション復元 - -Herdr はデフォルトで、サーバーの再起動後に対応する Agent の会話を再開します: - -```toml -[session] -resume_agents_on_restore = true -``` - -公式インテグレーションからの有効なネイティブセッション参照を持つペインだけが再開できます。その他のペインは通常のシェルとして復元されます。対応する Agent と永続化の挙動については、[セッション状態と復元](/docs/session-state/)を参照してください。 - -## IME カーソルトラッキング - -macOS では、ハードウェアカーソルを隠す AI Agent TUI によって、ネイティブ入力メソッドの変換候補ウィンドウがフォーカス中のペインを追跡できなくなることがあります。これらのペインでカーソルアンカーを表示するには、次のように設定します: - -```toml -[experimental] -reveal_hidden_cursor_for_cjk_ime = true -cjk_ime_agents = ["claude", "pi", "codex"] -``` - -`cjk_ime_agents` で対象を限定すると、関係のないアプリケーションに余分なハードウェアカーソルが表示されるのを避けられます。使用できる Agent 名とカーソル形状については、[設定リファレンス](/docs/config-reference/)でこれらのキーを検索してください。 - -## プレフィックス入力ソースの切り替え - -macOS では、プレフィックスコマンドとプレフィックスから起動したモードがアクティブな間、Herdr がシステムの ASCII 対応入力ソースへ一時的に切り替えるようにできます: - -```toml -[experimental] -switch_ascii_input_source_in_prefix = true -``` - -ターミナル入力に戻るかテキストフィールドに入ると、Herdr は以前の入力ソースを復元します。この設定は他のプラットフォームには影響しません。 - -## 環境変数 - -| 変数 | 目的 | -| --- | --- | -| `HERDR_CONFIG_PATH` | 設定ファイルのパスを上書きする。 | -| `HERDR_SESSION` | CLI コマンドで名前付きセッションを選択する。 | -| `HERDR_SOCKET_PATH` | 低レベルなソケットパスを上書きする。 | -| `HERDR_LOG` | ログフィルタリングを設定する。例: `HERDR_LOG=herdr=debug`。 | -| `HERDR_DISABLE_SOUND` | `[ui.sound] enabled = true` でも音の再生を無効にする。 | - -## ログ - -ログは、起動時の警告、インテグレーションの状態、ソケット API の挙動を診断するときに役立ちます。 - -主なログファイル: - -```text -~/.config/herdr/herdr.log -~/.config/herdr/herdr-client.log -~/.config/herdr/herdr-server.log -``` - -ログは自動的にローテーションされます。問題を報告するときは、現在のログとローテーションされた関連ファイルを含めてください。 diff --git a/website/src/content/docs/ja/how-to-work.mdx b/website/src/content/docs/ja/how-to-work.mdx deleted file mode 100644 index 0365df0b..00000000 --- a/website/src/content/docs/ja/how-to-work.mdx +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: Herdr での作業の進め方 -description: Herdr をローカルで、SSH 内で、またはリモートアタッチで使います。 ---- - -Herdr は作業がある場所で動かし、どこからでもアタッチします。 - -Herdr はバックグラウンドのセッションサーバーと、1 つ以上のターミナルクライアントで構成されます。ペインはサーバー内で動き続けます。クライアントはアタッチ、デタッチし、セッションを描画します。 - -## ローカルでの作業 - -プロジェクトディレクトリから Herdr を起動します: - -```bash -herdr -``` - -Herdr はローカルのバックグラウンドセッションを自動的に起動するか、それにアタッチします。ソケットを管理する必要はありません。ペインの中でシェル、サーバー、テスト、エージェントを普段どおり実行してください。 - -`ctrl+b q` でクライアントをデタッチします。ペインは動き続けます。 - -あとで再アタッチします: - -```bash -herdr -``` - -セッションを終了してペインを停止したい場合は、サーバーを停止します: - -```bash -herdr server stop -``` - -## 通常の SSH 越しのリモート作業 - -コードと認証情報のあるマシンに SSH して、そこで Herdr を実行します: - -```bash -ssh you@server -herdr -``` - -これはターミナルマルチプレクサと同じように動作します。シェルはリモート、Herdr サーバーもリモート、エージェントとペインはリモートマシン上で動きます。`ctrl+b q` でデタッチして切断し、あとで SSH し直して再び `herdr` を実行してください。 - -すでに SSH シェルの中で作業している場合、スマートフォンやタブレットの SSH クライアントを使っている場合、あるいは最もシンプルな構成にしたい場合はこの方法を使ってください。 - -## スマートフォンから作業する - -Herdr のモバイルアプリや Web ダッシュボードは不要です。スマートフォンに任意の SSH クライアントを入れ、エージェントが動いているマシンに接続して、そこで Herdr を起動するだけです: - -```bash -ssh you@server -herdr -``` - -同じ永続 Herdr セッションがスマートフォンのターミナルに開きます。TUI は狭い画面に適応するので、SSH から離れることなくエージェントの確認、ワークスペースの切り替え、ペインのチェックができます。 - -iPhone では [moshi](https://getmoshi.app/) のようなアプリがよく動作します。 - -<div class="mobile-doc-shots"> - <figure> - <img src="/assets/mobile-agent-session-v2.jpeg" alt="スマートフォンで SSH 越しに表示した Herdr のエージェントセッション" loading="lazy" /> - <figcaption>SSH 越しのエージェントセッション</figcaption> - </figure> - <figure> - <img src="/assets/mobile-switch-menu-v2.jpeg" alt="スマートフォンで表示した Herdr のレスポンシブ切り替えメニュー" loading="lazy" /> - <figcaption>レスポンシブな切り替えメニュー</figcaption> - </figure> -</div> - -## ローカルターミナルからのリモート作業 - -先にシェルを開かずに SSH 越しでアタッチします: - -```bash -herdr --remote workbox -herdr --remote ssh://you@server:2222 -``` - -ローカルの Herdr はシンクライアントとして動作します。SSH 越しに接続し、リモートの Herdr サーバーを起動またはアタッチして、UI をローカルターミナルにストリーミングします。 - -リモートセッションをローカルのように感じたいときはこの方法を使ってください。クライアントは手元のマシンで動くので、画像クリップボードの貼り付けのようなローカルデスクトップ機能をリモートサーバーにブリッジできます。先に SSH してサーバー上で `herdr` を実行した場合、Herdr は完全にそのサーバー上で動くため、ローカルデスクトップのクリップボードは読めません。 - -繰り返し接続する相手は SSH config に登録しておきましょう: - -```text -Host workbox - HostName server.example.com - User you - Port 2222 -``` - -その後はこれでアタッチできます: - -```bash -herdr --remote workbox -``` - -## どの方法を使うか - -ローカル作業には `herdr` を使います。リモートシェル上で Herdr を tmux のように使いたいときや、スマートフォンの SSH クライアントを使っているときは `ssh you@server` してから `herdr` を使います。リモートセッション用のローカルシンクライアントが欲しいとき (ローカルクリップボードの画像貼り付けブリッジを含む) は `herdr --remote <host>` を使います。 - -リモートブートストラップの詳細、名前付きリモートセッション、カスタムバイナリ、ダイレクトターミナルアタッチ、`--no-session` については[永続化とリモートアクセス](/ja/docs/persistence-remote/)を参照してください。 diff --git a/website/src/content/docs/ja/index.mdx b/website/src/content/docs/ja/index.mdx deleted file mode 100644 index ce26d5fb..00000000 --- a/website/src/content/docs/ja/index.mdx +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Herdr ドキュメント -description: AI コーディングエージェントのためのターミナルワークスペースマネージャー。 -template: splash -hero: - tagline: "Herdr のインストール、学習、設定。あなたに合ったパスから始めましょう — マルチプレクサの経験は不要です。" - image: - file: ../../../../public/assets/logo.svg - actions: - - text: Herdr をインストール - link: /ja/docs/install/ - - text: クイックスタート - link: /ja/docs/quick-start/ - variant: secondary ---- - -import { Card, CardGrid } from '@astrojs/starlight/components'; - -## パスを選ぶ - -<CardGrid> - <Card title="ターミナルマルチプレクサは初めて?"> - ショートカットを覚えなくても始められます。Herdr はマウスファーストです。ペインをクリックし、境界をドラッグし、右クリックメニューから分割や切り替えができます。 - - [クイックスタート →](/ja/docs/quick-start/) - </Card> - <Card title="tmux や zellij から乗り換え?"> - モデルはすでにご存じのとおりです。プレフィックスは `ctrl+b`、ペインは永続化され、デタッチと再アタッチは期待どおりに動作します。 - - [コンセプト →](/ja/docs/concepts/) · [キーバインド →](/ja/docs/configuration/#キーバインド) - </Card> -</CardGrid> - -## またはエージェントに案内してもらう - -すでに AI コーディングエージェントを使っていますか? オンボーディングはエージェントに任せましょう。このプロンプトを貼り付けてください: - -```text -Help me understand and set up Herdr. Read https://herdr.dev/agent-guide.md first, then walk me through it step by step. -``` - -このガイドはエージェントに Herdr のコンセプト、セットアップ、設定、よくある問題の解決方法を教えるので、エージェントの回答が即興ではなく正確なままになります。 - -## コアガイド - -<CardGrid> - <Card title="エージェント"> - 対応エージェント、検出の挙動、インテグレーション、カスタムラベル、ダイレクトアタッチについて。 - - [エージェントを理解する →](/ja/docs/agents/) - </Card> - <Card title="セッション状態"> - デタッチ、再起動時の復元、ペイン履歴のリプレイ、エージェントネイティブの resume、ライブハンドオフについて。 - - [状態管理の方式を比較する →](/ja/docs/session-state/) - </Card> - <Card title="設定"> - キーバインド、テーマ、サイドバーの挙動、通知、スクロールバック、高度なオプションを設定します。 - - [Herdr を設定する →](/ja/docs/configuration/) - </Card> - <Card title="API"> - CLI とローカルソケット API を通じて、スクリプト・ツール・エージェントから Herdr を制御します。 - - [API ガイドを読む →](/ja/docs/socket-api/) - </Card> - <Card title="プラグイン"> - マニフェストのアクションとイベントフックを備えた、ローカル実行型ワークフロープラグインを作成します。 - - [プラグインを書く →](/ja/docs/plugins/) - </Card> - <Card title="マーケットプレイス"> - 今すぐ GitHub からプラグインを共有し、リポジトリにトピックを付けてマーケットプレイス公開時に掲載されるようにしましょう。 - - [プラグインを公開する →](/ja/docs/marketplace/) - </Card> -</CardGrid> diff --git a/website/src/content/docs/ja/install.mdx b/website/src/content/docs/ja/install.mdx deleted file mode 100644 index 30753259..00000000 --- a/website/src/content/docs/ja/install.mdx +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: Herdr のインストール -description: Linux、macOS、Windows ベータでの Herdr のインストール、アップデート、動作確認。 ---- - -Herdr は Linux と macOS 向けに安定版バイナリを提供しています。ネイティブ Windows 対応はプレビュー限定のベータです。 - -## インストール - -Linux または macOS では次を実行します: - -```bash -curl -fsSL https://herdr.dev/install.sh | sh -``` - -Windows プレビューベータでは、プレビューチャンネルをインストールします: - -```powershell -powershell -ExecutionPolicy Bypass -c "irm https://herdr.dev/install.ps1 | iex" -``` - -インストーラーはプラットフォームに合ったリリースバイナリをダウンロードして PATH 上に配置します。Windows では Herdr が設定を変更せずにデフォルトでプレビューを使います。インストーラーはバージョン付きインストールフォルダーを使い、`current` ジャンクションを更新します。そのため、アップデート時に実行中の `herdr.exe` を上書きする必要がありません。 - -## Homebrew でインストール - -すでに Homebrew を使っている場合: - -```bash -brew install herdr -``` - -## mise でインストール - -すでに mise を使っている場合: - -```bash -mise use -g herdr -``` - -mise が `herdr not found in mise tool registry` と報告する場合は、mise をアップデートして再試行してください。古い mise は Herdr のレジストリ登録より前のバージョンです。一時的な回避策として `mise use -g github:herdrdev/herdr` も使えます。 - -## Nix でインストール - -すでに Nix を使っている場合、Herdr はソースからビルドする flake を提供しています: - -```bash -nix run github:herdrdev/herdr/v0.x.y -nix build github:herdrdev/herdr/v0.x.y -nix profile install github:herdrdev/herdr/v0.x.y -``` - -`v0.x.y` は最新のリリースタグに置き換えてください。タグを省略すると `master` を追跡できますが、通常のインストールにはリリースタグを推奨します。 - -flake は開発用シェルも公開しています: - -```bash -nix develop github:herdrdev/herdr -``` - -アップデートは、Herdr のインストールに使ったのと同じ Nix ワークフローで行います。プロファイルインストールの場合は、プロファイルのエントリを一覧して Herdr のエントリをアップグレードします: - -```bash -nix profile list -nix profile upgrade <index-or-name> -``` - -Herdr が自分の flake の input になっている場合は、その input を更新してシステム、Home Manager、または開発環境を再ビルドします: - -```bash -nix flake update herdr -``` - -## 手動でダウンロード - -[GitHub releases](https://github.com/herdrdev/herdr/releases) からバイナリをダウンロードすることもできます。 - -システムに合ったアセットを選んでください: - -| システム | アセット | -| --- | --- | -| Linux x86_64 | `herdr-linux-x86_64` | -| Linux aarch64 | `herdr-linux-aarch64` | -| macOS Intel | `herdr-macos-x86_64` | -| macOS Apple silicon | `herdr-macos-aarch64` | - -Linux または macOS では、実行可能にして PATH 上のどこかに移動します。 - -```bash -chmod +x herdr-linux-x86_64 -mv herdr-linux-x86_64 ~/.local/bin/herdr -``` - -### Windows ベータのダウンロード - -ネイティブ Windows 対応がベータの間、Windows バイナリはプレビューリリースでのみ公開されます。通常のテストには上記のプレビューインストーラーを使うか、プレビューの GitHub プレリリースから Windows アセットをダウンロードしてください: - -| システム | アセット | -| --- | --- | -| Windows x86_64 ベータ | `herdr-windows-x86_64.exe` | - -## 動作確認 - -Herdr を起動します: - -```bash -herdr -``` - -シェルが `herdr` を見つけられない場合は、ターミナルを再起動するか、インストール先ディレクトリが PATH に含まれているか確認してください。 - -## アップデート - -Herdr は新しいリリースをチェックし、アプリ内で通知します。手動でアップデートすることもできます: - -```bash -herdr update -``` - -`herdr update` は Herdr 自身のインストーラーで管理されているインストール向けです。Homebrew、mise、Nix のインストールは、それぞれのパッケージマネージャーでアップデートしてください。 - -Linux と macOS では、Herdr はデフォルトで安定版アップデートチャンネルを使います。`master` からのプレビュービルドにオプトインするには、チャンネルを設定します: - -```bash -herdr channel set preview -``` - -Linux と macOS の直接インストールを安定版に戻すのも同じ方法です: - -```bash -herdr channel set stable -``` - -直接インストールの場合、チャンネルの変更はそのチャンネルをチェックして最新バイナリをインストールします。そのアップデートが失敗した場合は、`herdr update` を実行して設定済みチャンネルから再試行してください。 - -プレビュービルドは、現在の開発ブランチから手動で公開される GitHub プレリリースです。次の安定版リリースより前に修正が欲しいときに便利ですが、リグレッションの可能性があります。Homebrew、mise、Nix のインストールはプレビューチャンネルを使いません。 - -Windows ベータビルドは今のところプレビュー限定です。安定版の Windows リリースが提供されるまで、Windows では `herdr channel set stable` は拒否されます。 - -デフォルトでは、`herdr update` は新しいバイナリをインストールし、互換性のある実行中セッションには手を付けません。アップデートが Herdr のクライアント/サーバープロトコルを変更する場合、Herdr はインストール後に古いサーバーを停止するか尋ねます。新しいバージョンを使うには古いサーバーを停止してください。停止するとペインのプロセスは終了します。デフォルトセッションでは `herdr server stop` を実行してから再度 `herdr` を実行します。名前付きセッションでは `herdr session stop <name>` を実行してから再度 `herdr session attach <name>` を実行します。 - -対応する実行中セッションで実験的なライブサーバーハンドオフにオプトインするには: - -```bash -herdr update --handoff -``` - -ライブハンドオフは Homebrew、mise、Nix のパッケージマネージャー経由のアップデートには適用されません。それらのインストールではパッケージマネージャーでアップデートし、新しいサーバーを使う準備ができたらその Herdr セッションを再起動してください。実行中のセッションがまだ古いサーバーを使っている場合は、`herdr server stop` または `herdr session stop <name>` で停止してから、再度 Herdr を実行します。 - -## 動作要件 - -Herdr の安定版リリースは Linux と macOS をサポートします。ネイティブ Windows ビルドはプレビュー限定のベータリリースです。サポートされるワークフローと既知の制限は [Windows ベータ](/ja/docs/windows-beta/)を参照してください。 diff --git a/website/src/content/docs/ja/integrations.mdx b/website/src/content/docs/ja/integrations.mdx deleted file mode 100644 index fe4e41b1..00000000 --- a/website/src/content/docs/ja/integrations.mdx +++ /dev/null @@ -1,299 +0,0 @@ ---- -title: インテグレーション -description: Pi、OMP、Claude Code、Codex、GitHub Copilot CLI、Devin CLI、Droid、Kimi Code CLI、OpenCode、Kilo Code CLI、Hermes Agent、Qoder CLI、Cursor Agent CLI、MastraCode 向けの Herdr インテグレーションをインストールします。 ---- - -Herdr は対応エージェントを自動的に検出します。公式インテグレーションは、復元のためのネイティブセッション識別、ライフサイクル状態の報告、またはその両方を追加できます。 - -Claude Code/Codex/Copilot/Devin 系のフックによるエージェントネイティブのセッション復元、Pi/OMP/Kimi/OpenCode/Kilo/Hermes/MastraCode 系のフックまたはプラグインによる直接のライフサイクル報告、あるいはその両方が欲しいときにインテグレーションを使ってください。状態権威モデルの全体像は[エージェント](/ja/docs/agents/)を参照してください。 - -## インテグレーションをインストールする - -Herdr 内で設定を開き、インテグレーションタブから `PATH` 上で見つかったエージェント向けの推奨インテグレーションをインストールするか、コマンドを手動で実行します: - -```bash -herdr integration install pi -herdr integration install omp -herdr integration install claude -herdr integration install codex -herdr integration install copilot -herdr integration install devin -herdr integration install droid -herdr integration install kimi -herdr integration install opencode -herdr integration install kilo -herdr integration install hermes -herdr integration install mastracode -herdr integration install qodercli -herdr integration install cursor -``` - -## インテグレーションをアンインストールする - -```bash -herdr integration uninstall pi -herdr integration uninstall omp -herdr integration uninstall claude -herdr integration uninstall codex -herdr integration uninstall copilot -herdr integration uninstall devin -herdr integration uninstall droid -herdr integration uninstall kimi -herdr integration uninstall opencode -herdr integration uninstall kilo -herdr integration uninstall hermes -herdr integration uninstall mastracode -herdr integration uninstall qodercli -herdr integration uninstall cursor -``` - -## Herdr がインテグレーションをどう使うか - -Herdr はインテグレーションを 2 つの異なる方法で使います: - -| インテグレーションの種類 | エージェント | 効果 | -| --- | --- | --- | -| ライフサイクル権威 | Pi、OMP、Kimi Code CLI、OpenCode、Kilo Code CLI、Hermes Agent、MastraCode | インストールされ、そのペインについて能動的に報告している間は、フックまたはプラグインのイベントが `idle`、`working`、`blocked` を決定します。同じライフサイクル権威に対して、Herdr はスクリーンマニフェストのフォールバックを併用しません。 | -| セッション識別 | Claude Code、Codex、GitHub Copilot CLI、Devin CLI、Droid、Qoder CLI、Cursor Agent CLI | インテグレーションは復元用のネイティブセッション参照を報告します。状態は引き続き Herdr のスクリーンマニフェスト検出から得られます。 | - -カスタムソケットインテグレーションも、ネイティブのターミナル UI では見えない状態を定義する場合に状態を報告できます。 - -一部のインテグレーションは、エージェントのネイティブセッション参照を報告します。Herdr は公式のセッション参照を使って、`[session] resume_agents_on_restore = false` で無効化されていない限り、Herdr サーバーの再起動後に Claude Code、Codex、Devin CLI、Droid、Kimi Code CLI、Qoder CLI、Cursor Agent CLI、GitHub Copilot CLI、Pi、OMP、Hermes Agent、OpenCode、Kilo Code CLI、MastraCode のペインを resume します。 - -エージェントネイティブのセッション復元には最新の Herdr インテグレーションが必要です: Pi インテグレーションはバージョン `2`、OMP は `3`、Claude Code は `6`、Codex は `5`、GitHub Copilot CLI は `2`、Devin CLI は `2`、Droid は `2`、Kimi Code CLI は `3`、Qoder CLI は `2`、Cursor Agent CLI は `1`、OpenCode は `5`、Kilo Code CLI は `1`、Hermes Agent は `2`、MastraCode は `1` です。インストール済みバージョンは `herdr integration status` で確認してください。 - -## Pi - -Pi インテグレーションをインストールします: - -```bash -herdr integration install pi -``` - -Herdr はバンドルされた拡張を次の場所に書き込みます: - -```text -~/.pi/agent/extensions/herdr-agent-state.ts -``` - -`PI_CODING_AGENT_DIR` が設定されている場合は、代わりに `$PI_CODING_AGENT_DIR/extensions/herdr-agent-state.ts` に書き込みます。Pi の agent ディレクトリが存在する場合、Herdr は extensions ディレクトリを作成します。アンインストールはその拡張ファイルだけを削除します。 - -## OMP - -OMP インテグレーションをインストールします: - -```bash -herdr integration install omp -``` - -Herdr はバンドルされた拡張を次の場所に書き込みます: - -```text -~/.omp/agent/extensions/herdr-omp-agent-state.ts -``` - -`PI_CODING_AGENT_DIR` が設定されている場合は、代わりに `$PI_CODING_AGENT_DIR/extensions/herdr-omp-agent-state.ts` に書き込みます。OMP の agent ディレクトリが存在する場合、Herdr は extensions ディレクトリを作成します。アンインストールはその拡張ファイルだけを削除します。 - -OMP インテグレーションは、Herdr のソケット API を通じてエージェントラベル `omp`、ライフサイクル状態、ネイティブセッション識別を報告します。`omp` 実行ファイルのネイティブプロセス検出は不要で、Herdr はサーバー再起動後に `omp --resume=<session>` で OMP ペインを resume できます。 - -## Claude Code - -Claude Code フックをインストールします: - -```bash -herdr integration install claude -``` - -このフックは、セッション開始時に Claude Code のセッション識別をローカルの Herdr ソケットに報告します。Claude Code の状態は Herdr のスクリーンマニフェスト検出から得られます。 - -Herdr はデフォルトで `~/.claude` を使い、`CLAUDE_CONFIG_DIR` が設定されていればそちらを使います。Claude の設定ディレクトリはあらかじめ存在している必要があります。インストールは `hooks/herdr-agent-state.sh` を書き込み、`settings.json` に Herdr のフックエントリを追加します。アンインストールは一致するフックエントリを削除し、フックスクリプトを削除します。 - -## Codex - -Codex フックをインストールします: - -```bash -herdr integration install codex -``` - -Codex フックは、他のインテグレーションと同じローカルソケット API を通じてセッション識別を報告します。Codex の状態は Herdr のスクリーンマニフェスト検出から得られます。 - -Herdr はデフォルトで `~/.codex` を使い、`CODEX_HOME` が設定されていればそちらを使います。Codex の設定ディレクトリはあらかじめ存在している必要があります。インストールは `herdr-agent-state.sh` を書き込み、`hooks.json` を更新し、`config.toml` に `[features] hooks = true` があることを保証します。非推奨のトップレベル `codex_hooks` フラグが存在すれば削除もします。アンインストールは `hooks.json` から Herdr のエントリを削除してフックスクリプトを削除しますが、`config.toml` は変更しません。 - -## GitHub Copilot CLI - -GitHub Copilot CLI フックをインストールします: - -```bash -herdr integration install copilot -``` - -Copilot フックは、他のインテグレーションと同じローカルソケット API を通じてセッション識別を報告します。Copilot の状態は Herdr のスクリーンマニフェスト検出から得られます。 - -Herdr はデフォルトで `~/.copilot` を使い、`COPILOT_HOME` が設定されていればそちらを使います。Copilot の設定ディレクトリはあらかじめ存在している必要があります。インストールは `hooks/herdr-agent-state.sh` を書き込み、`settings.json` に `SessionStart` フックエントリを追加します。アンインストールは `settings.json` から Herdr のエントリを削除し、フックスクリプトを削除します。 - -Copilot がセッション情報を含むイベントを発行した後、Herdr は報告されたセッション id を使って `copilot --resume=<id>` でペインを resume できます。 - -## Devin CLI - -Devin CLI フックをインストールします: - -```bash -herdr integration install devin -``` - -このフックは、Devin のセッション、プロンプト、ツール使用、許可、停止の各イベントからネイティブセッション識別を報告します。Devin のフックはすべての許可キャンセルやユーザー割り込みの後に信頼できる状態遷移を発行しないため、Devin の状態は引き続き Herdr のスクリーンマニフェストと OSC 検出から得られます。 - -Herdr はデフォルトで `~/.config/devin` を使い、`XDG_CONFIG_HOME` が設定されていれば `$XDG_CONFIG_HOME/devin` を使います。Devin の設定ディレクトリはあらかじめ存在している必要があります。インストールは `herdr-agent-state.sh` を書き込み、`config.json` に Herdr のフックエントリを追加します。フックは Devin の実行中にセッション参照を更新します。アンインストールは `config.json` から Herdr のエントリを削除し、フックスクリプトを削除します。 - -Herdr は保存された Devin セッションを `devin --resume <id>` で resume します。フックのインストール有無にかかわらず、スクリーンマニフェスト検出が状態の権威のままです。 - -## Kimi Code CLI - -Kimi Code CLI フックをインストールします: - -```bash -herdr integration install kimi -``` - -このフックは、ネイティブ復元と権威ある `idle`、`working`、`blocked` 状態のために、Kimi のセッション識別とライフサイクル状態を Herdr に報告します。Kimi Code CLI `0.14.0` 以上が必要です。 - -Herdr はデフォルトで `~/.kimi-code` を使い、`KIMI_CODE_HOME` が設定されていればそちらを使います。Kimi Code の設定ディレクトリはあらかじめ存在している必要があります。インストールは `hooks/herdr-agent-state.sh` を書き込み、`config.toml` に Herdr 管理の `[[hooks]]` エントリを追記します。アンインストールは Herdr 管理の設定ブロックを削除し、フックスクリプトを削除します。 - -Herdr は保存された Kimi セッションを `kimi --session <id>` で resume します。 - -## Droid - -Droid フックをインストールします: - -```bash -herdr integration install droid -``` - -Droid フックは、他のインテグレーションと同じローカルソケット API を通じてセッション識別を報告します。Droid のフックはすべてのライフサイクル遷移をカバーしていないため、ライフサイクル状態は引き続き Herdr のスクリーンマニフェスト検出から得られます。 - -Herdr は Droid フックに `~/.factory` を使います。Factory の設定ディレクトリはあらかじめ存在している必要があります。インストールは `hooks/herdr-agent-state.sh` を書き込み、`settings.json` に Herdr の `SessionStart` フックエントリを追加し、`hooks.json` に古い Herdr Droid フックエントリがあれば削除します。アンインストールは両方の設定ファイルから Herdr のエントリを削除し、フックスクリプトを削除します。 - -Droid がセッション開始イベントを発行した後、Herdr は報告されたセッション id を使って `droid --resume <id>` でペインを resume できます。 - -## OpenCode - -OpenCode プラグインをインストールします: - -```bash -herdr integration install opencode -``` - -Herdr はプラグインを `~/.config/opencode/plugins/herdr-agent-state.js` に書き込みます。OpenCode の設定ディレクトリはあらかじめ存在している必要があります。アンインストールはそのプラグインファイルだけを削除します。 - -このプラグインは、OpenCode が Herdr のペイン内で動いている間、ライフサイクル状態とセッション識別を報告します。OpenCode がセッション情報を含むイベントを発行した後、Herdr は報告されたセッション id を使って `opencode --session <id>` でペインを resume できます。プラグインがインストールされていないときは、スクリーンマニフェスト検出が引き続き利用できます。 - -## Kilo Code CLI - -Kilo Code CLI プラグインをインストールします: - -```bash -herdr integration install kilo -``` - -Herdr はプラグインを `~/.config/kilo/plugin/herdr-agent-state.js` に書き込みます。Kilo の設定ディレクトリはあらかじめ存在している必要があります。アンインストールはそのプラグインファイルだけを削除します。 - -このプラグインは、Kilo が Herdr のペイン内で動いている間、ライフサイクル状態とセッション識別を報告します。Kilo がセッション情報を含むイベントを発行した後、Herdr は報告されたセッション id を使って `kilo --session <id>` でペインを resume できます。プラグインがインストールされていないときは、スクリーンマニフェスト検出が引き続き利用できます。 - -## Hermes Agent - -Hermes Agent プラグインをインストールします: - -```bash -herdr integration install hermes -``` - -Herdr は `~/.hermes/plugins/herdr-agent-state/` を書き込み、`~/.hermes/config.yaml` で `herdr-agent-state` を有効にします。Hermes の設定ディレクトリはあらかじめ存在している必要があります。プラグインを読み込ませるため、インストール後に Hermes を再起動してください。アンインストールはプラグインディレクトリを削除し、`plugins.enabled` から `herdr-agent-state` を削除します。 - -このプラグインは、Hermes が Herdr のペイン内で動いている間、ライフサイクル、ツール、承認状態、セッション id を報告します。Herdr は報告されたセッション id を使って `hermes --resume <id>` でペインを resume できます。プラグインがインストールされていないときは、スクリーンマニフェスト検出が引き続き利用できます。 - -## Qoder CLI - -Qoder CLI フックをインストールします: - -```bash -herdr integration install qodercli -``` - -このフックは、ネイティブ復元のために Qoder CLI のセッション識別を Herdr に報告します。Qoder のフックはすべてのライフサイクル遷移をカバーしていないため、ライフサイクル状態は引き続き Herdr のスクリーンマニフェスト検出から得られます。 - -Herdr はデフォルトで `~/.qoder` を使い、`QODER_CONFIG_DIR` が設定されていればそちらを使います。Qoder の設定ディレクトリはあらかじめ存在している必要があります。インストールは `hooks/herdr-agent-state.sh` を書き込み、`settings.json` に Herdr のフックエントリを追加します。アンインストールは一致するフックエントリを削除し、フックスクリプトを削除します。 - -Herdr は保存された Qoder CLI セッションを `qodercli --resume <id>` で resume します。 - -フックがインストールされていないときは、スクリーンマニフェスト検出が引き続き利用できます。 - -## Cursor Agent CLI - -Cursor Agent CLI フックをインストールします: - -```bash -herdr integration install cursor -``` - -このフックは、Cursor Agent CLI が Herdr のペイン内で動いている間、Cursor の `sessionStart` フックを通じてセッション識別を報告します。Cursor の状態は Herdr のスクリーンマニフェスト検出から得られます。 - -Herdr はデフォルトで `~/.cursor` を使い、`CURSOR_CONFIG_DIR` が設定されていればそちらを使います。Cursor の設定ディレクトリはあらかじめ存在している必要があります。インストールは `herdr-agent-state.sh` を書き込み、`hooks.json` に Herdr の `sessionStart` エントリを追加します。アンインストールは一致するフックエントリを削除し、フックスクリプトを削除します。 - -Cursor がセッション開始イベントを発行した後、Herdr は報告されたセッション id を使って `cursor-agent --resume <id>` でペインを resume できます。Herdr がペインを復元するとき、`cursor-agent` コマンドが `PATH` にある必要があります。Herdr は汎用の `agent` コマンドを起動しません。 - -## MastraCode - -MastraCode フックをインストールします: - -```bash -herdr integration install mastracode -``` - -このフックは、MastraCode のライフサイクル状態とスレッド識別を Herdr に報告し、権威ある `idle`、`working`、`blocked` 状態とネイティブ復元を提供します。MastraCode にはスクリーンマニフェストのフォールバックはありません。MastraCode が Herdr ペイン内で動いている間、状態はフックから得られます。 - -Herdr は `~/.mastracode` を使います。インストールは `hooks/herdr-agent-state.sh` を書き込み、`hooks.json` に Herdr のコマンドエントリを追加します。ディレクトリがなければ作成します。アンインストールは一致するフックエントリを削除し、フックスクリプトを削除します。 - -Herdr は保存された MastraCode スレッドを `mastracode --thread <id>` で resume します。 - -## カスタムステータスラベル - -インテグレーションは、ライフサイクル状態を意味的な状態としてのみ報告します。たとえば、ライフサイクル報告に表示フィールドを加えず、エージェントを `working` として報告します。 - -```bash -herdr pane report-agent w1:p1 \ - --source custom:docs \ - --agent docs-bot \ - --state working -``` - -Herdr 管理のインテグレーションと並走するユーザーフックは、`report-agent` ではなくメタデータを使うべきです。メタデータは、インテグレーションの `idle`、`working`、`blocked` やセッション復元の権威を奪わずに表示を変えます。`--agent` と `--applies-to-source` は表示フィールド (`--title`、`--display-agent`、`--state-label`) だけを保護します。トークンパッチは常に適用され、クリアまたは TTL の更新は報告側が管理します。`--display-agent` は表示名を変更します。 - -```bash -herdr pane report-metadata "$HERDR_PANE_ID" \ - --source user:claude-title \ - --agent claude \ - --title "Refactor auth middleware" \ - --display-agent "Claude: auth" \ - --token summary="refactor auth" \ - --state-label working="refactoring auth" \ - --ttl-ms 3600000 -``` - -トークンと状態ラベルは表示専用です。wait、通知、ワークスペースのロールアップは引き続き意味的な状態を使います。 - -## インテグレーション状態のデバッグ - -既知のエージェントを一覧します: - -```bash -herdr agent list -``` - -Herdr に何が見えているか確認する必要があるときはペインを読みます: - -```bash -herdr pane read w1:p1 --source recent --lines 50 -``` - -インテグレーションの状態がおかしく見えるときは、まずエージェントが Herdr 内で動いていること、そして該当のフックまたはプラグインが同じユーザーアカウントにインストールされていることを確認してください。 diff --git a/website/src/content/docs/ja/keyboard.mdx b/website/src/content/docs/ja/keyboard.mdx deleted file mode 100644 index f9bb4ac8..00000000 --- a/website/src/content/docs/ja/keyboard.mdx +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: キーボード -description: プレフィックスとは何か、最初に覚えるべきバインド、プレフィックスなしで運用する方法。 ---- - -:::tip[tmux や zellij から乗り換え?] -このモデルはすでにご存じのはずです。完全なデフォルトキーマップと設定構文は[キーバインドリファレンス](/ja/docs/configuration/#キーバインド)へどうぞ。 -::: - -Herdr はマウスネイティブです。キーバインドをひとつも覚えなくても、ペイン、タブ、ワークスペース、エージェントをクリックし、分割境界をドラッグし、右クリックメニューを使えます。キーボード操作は任意のレイヤーであり、必須ではありません。 - -## プレフィックスとは何か - -ターミナルマルチプレクサは、ターミナルとその中で動くプログラムの間に位置します。プログラムはすでにほとんどのキーの組み合わせを使っています: `ctrl+c` は中断、`ctrl+r` は履歴検索、エディタは残りのほぼすべてを占有します。もし Herdr がよく使われるキーを直接奪えば、中のプログラムを壊してしまいます。 - -プレフィックスはこれを解決します。プレフィックスキー (デフォルト `ctrl+b`) を押すと、次のキー入力はターミナルではなく Herdr に送られます。`prefix+c` は「`ctrl+b` を押して離し、次に `c` を押す」という意味です。何十ものキーを予約する代わりに、ひとつだけ予約します。 - -いつでも `prefix+?` を押すと、すべての有効なバインドが表示されます。 - -## まずこの 5 つを覚える - -| アクション | キー | -| --- | --- | -| 新しいタブ | `prefix+c` | -| 右 / 下に分割 | `prefix+v` / `prefix+minus` | -| ペイン間の移動 | `prefix+h/j/k/l` | -| ワークスペースナビゲーション | `prefix+w` | -| すべてを動かしたままデタッチ | `prefix+q` | - -これで日常の移動のほとんどをカバーできます。それ以外はマウスのままで大丈夫です。 - -## 残りはタスク別に - -ペイン: - -| アクション | キー | -| --- | --- | -| フォーカス中のペインをズーム | `prefix+z` | -| ペインを閉じる | `prefix+x` | -| ペインを入れ替える | `prefix+shift+h/j/k/l` | -| リサイズモード | `prefix+r` | -| コピーモード | `prefix+[` | - -タブ: - -| アクション | キー | -| --- | --- | -| 次 / 前のタブ | `prefix+n` / `prefix+p` | -| タブ 1–9 にジャンプ | `prefix+1..9` | -| タブの名前を変更 | `prefix+shift+t` | -| タブを閉じる | `prefix+shift+x` | - -ワークスペースとセッション: - -| アクション | キー | -| --- | --- | -| 新しいワークスペース | `prefix+shift+n` | -| ワークスペースの名前を変更 | `prefix+shift+w` | -| ワークスペースを閉じる | `prefix+shift+d` | -| Goto ピッカー | `prefix+g` | -| サイドバーの表示切り替え | `prefix+b` | - -完全なキーマップとバインドの構文は[キーバインドリファレンス](/ja/docs/configuration/#キーバインド)にあります。 - -## コピーモード - -`prefix+[` を押すと、フォーカス中のペインでコピーモードに入ります。`h/j/k/l`、tmux 形式の `w/b/e`、`{`/`}` で移動します。`/` または `?` で前方または後方のリテラル検索を開始し、`n` または `N` で同じ方向または逆方向に繰り返します。クエリに大文字が含まれる場合だけ大文字と小文字を区別します。`v` または Space で選択を開始し、`y` または Enter でコピーし、`q` または Esc でコピーせずに抜けます。Esc は終了する前に、アクティブな選択または検索を消します。コピーモードはペインのプロセスを停止しません。最下部では出力を追従し、履歴へ移動するとその位置を保ちます。マウスのドラッグ選択なら、コピーモードに入らずにそのままコピーできます。 - -## 何でも変更できる - -プレフィックス自体を含め、すべてのバインドは設定可能です: - -```toml -[keys] -prefix = "ctrl+a" -``` - -## プレフィックスなしで運用する - -Herdr のアクションを、プレフィックス不要の直接コードに割り当てることもできます。難しいのはどのコードが安全かを知ることです。ターミナル、シェル、デスクトップ環境がすでにキーボードの大半を占有しているからです。 - -どんなコードでもバインドにできます: `ctrl+j`、`alt+k`、手に馴染むものなら何でも。ただしコードが Herdr に届くまでには 3 つの層を通り抜ける必要があります: オペレーティングシステム、外側のターミナル (Ghostty、iTerm2 などは独自のデフォルトを持ちます)、そしてペイン内で動くプログラムです。`ctrl+j` は Herdr まで問題なく届きますが、シェルやエディタはそれを Enter として扱います。`alt+k` は Linux では空いていますが、macOS ではほとんどのターミナルで特殊文字に合成されます。これらの系統からコードを選ぶ場合は、自分のターミナルと OS のショートカットと衝突しないか確認してください。 - -私たちは Ghostty、iTerm2、Terminal.app、kitty、WezTerm、Alacritty、Warp、Windows Terminal、GNOME Terminal、Konsole のデフォルトキーバインドと、GNOME および KDE のグローバルショートカットを調査しました。ほぼどこでも使われていない修飾キーの系統がひとつあります: `ctrl+alt` です。ターミナルはこれを空けたままにしており、素の `alt` コードを阻む macOS の option キー合成の影響も受けず、モダンなキーボードプロトコルのないターミナルでも送信されます。安全なデフォルトとしてお勧めしますが、選択はあなた次第です。 - -この設定はプレフィックスバインドを維持したまま、直接コードを追加します: - -```toml -[keys] -focus_pane_left = ["prefix+h", "ctrl+alt+h"] -focus_pane_down = ["prefix+j", "ctrl+alt+j"] -focus_pane_up = ["prefix+k", "ctrl+alt+k"] -focus_pane_right = ["prefix+l", "ctrl+alt+l"] -previous_tab = ["prefix+p", "ctrl+alt+["] -next_tab = ["prefix+n", "ctrl+alt+]"] -new_tab = ["prefix+c", "ctrl+alt+c"] -split_vertical = ["prefix+v", "ctrl+alt+d"] -split_horizontal = ["prefix+minus", "ctrl+alt+shift+d"] -zoom = ["prefix+z", "ctrl+alt+z"] -``` - -いくつかの `ctrl+alt` コードは他で使われています。これらは避けてください: - -| コード | 使用しているもの | -| --- | --- | -| `ctrl+alt+arrows` | GNOME のワークスペース切り替え、Ghostty と Konsole のデフォルト | -| `ctrl+alt+t` | Ubuntu と Fedora の「ターミナルを起動」 | -| `ctrl+alt+l` / `ctrl+alt+a` | KDE のロック画面 / アテンションウィンドウ | -| `ctrl+alt+s` / `ctrl+alt+u` | Konsole | -| `ctrl+alt+f1..f12` | Linux の仮想コンソール切り替え | - -直接コードを押しても何も起きない場合、Herdr に届く前にターミナルかデスクトップ環境がそれを消費しています。どちらかを再設定してください: ターミナルの設定でそのコードを解放するか、Herdr で別のコードを選びます。 diff --git a/website/src/content/docs/ja/marketplace.mdx b/website/src/content/docs/ja/marketplace.mdx deleted file mode 100644 index 5f0a5c4c..00000000 --- a/website/src/content/docs/ja/marketplace.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: マーケットプレイス -description: GitHub 上のコミュニティ製 Herdr プラグインを探し、自分のプラグインを掲載する方法。 ---- - -Herdr プラグインマーケットプレイスは、コミュニティ製プラグインを探せるインデックスです。 -[herdr.dev/plugins](/plugins/) で閲覧できます。これは公開 GitHub リポジトリの -自動インデックスであり、審査済みカタログではありません。 - -## プラグインを探す - -[マーケットプレイス](/plugins/)には、GitHub トピック `herdr-plugin` が付いた -すべての公開リポジトリが掲載されます。名前、オーナー、説明、言語で検索でき、 -人気順、最近の活動順、新着順で並べ替えられます。各掲載はソースリポジトリの -GitHub ページに直接リンクしています。 - -掲載は自動かつ無審査です。掲載されているのはリポジトリが自らトピックを -付けたからであって、Herdr が検証したからではありません。インストールする前に -[信頼に関するガイダンス](/ja/docs/plugins/#信頼とセキュリティ)を確認してください。 - -## プラグインをインストールする - -マーケットプレイスはインストールの上に発見の仕組みを足すものであり、 -インストールを置き換えるものではありません。どのプラグインも GitHub から -直接インストールできます: - -```bash -herdr plugin install owner/repo[/subdir...] -``` - -ルートまたはサブディレクトリに `herdr-plugin.toml` マニフェストを置いた -通常の公開 GitHub リポジトリを公開すれば、このコマンドが機能します。 -マニフェストと作成方法のリファレンスは[プラグイン](/ja/docs/plugins/)を -参照してください。 - -## 自分のプラグインを掲載する - -公開リポジトリに GitHub トピック `herdr-plugin` を追加してください。 -インデックスが使うシグナルはこのトピックだけなので、公開プラグインに -トピックを付けるだけで掲載されます。インデックスは 30 分ごとに自動更新される -ため、新しくトピックを付けたリポジトリはまもなく表示され、トピックを外した -リポジトリは次回の更新で消えます。 - -## 掲載に表示される内容 - -各カードには GitHub リポジトリのメタデータが表示されます: リポジトリ名と -オーナー、説明、スター数、主要言語、最終 push 時刻、そしてソースへのリンクです。 -インデックスは GitHub のリポジトリ検索からこれらを読み取るため、リポジトリの -説明とトピックを正確に保つことが、掲載を有用にする鍵になります。 - -インデックスはまだ `herdr-plugin.toml` を解析しないため、プラグインの `id`、 -宣言された `platforms`、`min_herdr_version` といったマニフェストのフィールドは -v1 では表示されません。フォークとアーカイブ済みリポジトリは一覧から除外されます。 diff --git a/website/src/content/docs/ja/persistence-remote.mdx b/website/src/content/docs/ja/persistence-remote.mdx deleted file mode 100644 index f8d3ff02..00000000 --- a/website/src/content/docs/ja/persistence-remote.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: 永続化とリモートアクセス -description: Herdr からのデタッチ、あとからの再アタッチ、名前付きセッション、SSH 越しの接続。 ---- - -Herdr はペインをバックグラウンドサーバーで動かし続けます。ターミナルクライアントはデタッチして、あとで再接続できます。 - -ローカル、SSH、`herdr --remote` の各ワークフローについては [Herdr での作業の進め方](/ja/docs/how-to-work/)を参照してください。 - -## デタッチと再アタッチ - -`ctrl+b q` でクライアントをデタッチします。ペインとエージェントは動き続けます。再度 `herdr` を実行すると再アタッチします。セッションとそのペインを停止するには `herdr server stop` を使います。 - -サーバーの完全停止後に Herdr が再起動すると、保存されたセッションの形を復元します。デタッチ、サーバー再起動、画面履歴リプレイ、エージェントネイティブのセッション復元、ライブハンドオフでそれぞれ何が生き残るかは[セッション状態と復元](/ja/docs/session-state/)を参照してください。 - -## 名前付きセッション - -独立した Herdr サーバーが欲しいときは名前付きセッションを使います。 - -```bash -herdr session list -herdr session attach work -herdr session attach side-project -herdr session stop work -herdr session delete side-project -``` - -名前付きセッションは独自のペイン、タブ、ワークスペース、ソケット、ランタイム状態を持ちます。グローバル設定ファイルは共有されます。 - -スクリプトでは `--json` を使ってください: - -```bash -herdr session list --json -herdr session stop work --json -herdr session delete side-project --json -``` - -## SSH 越しのリモートアタッチ - -リモートモードは 2 つあり、[Herdr での作業の進め方](/ja/docs/how-to-work/)で比較しています。tmux スタイルの方法では、サーバーに SSH してそこで `herdr` を実行します。もうひとつは、ローカルマシンから SSH 越しにアタッチする方法です: - -```bash -herdr --remote workbox -herdr --remote ssh://you@server:2222 -``` - -このモードでは、ローカルの Herdr はシンクライアントです。SSH 越しに接続し、リモートの Herdr サーバーを起動またはアタッチして、UI をローカルターミナルにストリーミングします。クライアントがローカルで動くため、Herdr は画像クリップボードの貼り付けのようなローカルデスクトップ機能をリモートセッションにブリッジできます。画像をリモートの一時ファイルにコピーし、そのパスを貼り付けます。 - -デフォルトでは、`herdr --remote` はそのアタッチにローカルの Herdr キーバインドを使います。リモートサーバーの設定が異なっていても、ローカルの操作感覚を維持できます。ローカルキーバインドはアタッチ時のスナップショットなので、ローカルのキーバインドを編集したらデタッチして再アタッチしてください。リモートサーバーの設定を使いたい場合は `--remote-keybindings server` を使います。ローカルのカスタムコマンドキーバインドは送信されません。それらのコマンドはリモートホスト上で実行されてしまうからです。 - -繰り返し接続する相手は SSH config を使ってください: - -```text -Host workbox - HostName server.example.com - User you - Port 2222 -``` - -その後はこれでアタッチできます: - -```bash -herdr --remote workbox -``` - -リモートアタッチは x86_64 と aarch64 の Linux および macOS ホストをサポートします。Herdr はリモートのプラットフォームを確認し、リモートの `PATH` 上にある一致する `herdr` を優先し、次に `~/.local/bin/herdr` を確認します。一致するバイナリがない場合、対話的な実行では `~/.local/bin/herdr` へのインストールを提案します。非対話的な実行はホストを変更せずに失敗します。`~/.local/bin` がリモートの `PATH` にない場合、Herdr はインストール後に警告します。 - -ネイティブ Windows の `herdr --remote` は Windows ベータの範囲外です。Windows からはサーバーに SSH してそこで `herdr` を実行してください。 - -デフォルトでは、`herdr --remote` はあなたの SSH config を最初に include し、その後にフォールバックのキープアライブ設定を加えた一時的な SSH config を通してブリッジを実行します。既存のユーザーのキープアライブ設定が優先されます。Herdr が生成するブリッジ設定を使わず素の `ssh` を使うには `[remote].manage_ssh_config = false` を設定してください。 - -デフォルトでは、実行中のリモートサーバーの置き換えや再起動が必要な場合、リモートアタッチは通常の再起動/停止フローを使います。対応する実行中リモートサーバーで実験的なライブハンドオフにオプトインするには `--handoff` を渡します: - -```bash -herdr --remote workbox --handoff -``` - -先にサーバーへ SSH してそこで `herdr` を実行した場合、Herdr は完全にサーバー上で動きます。このモードは便利でシンプルですが、通常のターミナルテキスト貼り付けを超えてローカルデスクトップのクリップボードにはアクセスできません。 - -ローカルとリモートのプラットフォームが一致する場合、直接インストールでは Herdr は現在のローカルバイナリをコピーできます。Homebrew、mise、Nix のインストールの場合、またはプラットフォームが異なる場合は、`https://herdr.dev/latest.json` から現在のクライアントバージョンに一致するリリースアセットをダウンロードします。 - -ローカルビルドやカスタムバイナリの場合は、リモートアタッチの前に `HERDR_REMOTE_BINARY` にローカルファイルパスを設定してください。 - -```bash -HERDR_REMOTE_BINARY=target/release/herdr herdr --remote workbox -``` - -## リモートの名前付きセッション - -リモートホスト上の名前付きセッションにアタッチするには、`--remote` と一緒に `--session` を使います: - -```bash -herdr --remote workbox --session agents -``` - -## ダイレクトターミナルアタッチ - -完全な Herdr アタッチはワークスペース UI 全体を開きます。ダイレクトアタッチは、サーバーが所有するターミナルをひとつだけ、現在のターミナルに開きます。 - -ダイレクトターミナルアタッチは Windows ベータでは Unix 専用です。 - -エージェントターゲットでアタッチ: - -```bash -herdr agent attach reviewer -``` - -ターミナル ID でアタッチ: - -```bash -herdr terminal attach term_abc123 -``` - -ダイレクトアタッチは、現在レンダリングされているターミナル状態をストリーミングし、その後ライブの ANSI フレームを流します。入力はそのターミナルに直接送られます。 - -`ctrl+b q` でデタッチします。リテラルの `ctrl+b` は `ctrl+b ctrl+b` で送ります。 - -ひとつのターミナルの入力とリサイズを所有できる書き込み可能なダイレクトアタッチクライアントはひとつだけです。既存の所有者を置き換えるには `--takeover` を使います: - -```bash -herdr terminal attach term_abc123 --takeover -``` - -## シングルプロセスの逃げ道 - -バックグラウンドのサーバー/クライアント分離なしで Herdr を実行するには `--no-session` を使います: - -```bash -herdr --no-session -``` - -これは主にデバッグや互換性のための逃げ道です。デフォルトの永続セッションモードが通常の使い方です。 diff --git a/website/src/content/docs/ja/plugins.mdx b/website/src/content/docs/ja/plugins.mdx deleted file mode 100644 index db5342cd..00000000 --- a/website/src/content/docs/ja/plugins.mdx +++ /dev/null @@ -1,367 +0,0 @@ ---- -title: プラグイン -description: マニフェストのアクション、イベントフック、ペインを備えたローカル Herdr プラグインを作成します。 ---- - -Herdr プラグインは、共有可能で実行可能なワークフローパッケージです。プラグインは -Bash スクリプト、JavaScript アプリ、Lua スクリプト、Rust バイナリ、その他マシンで -実行できる任意の argv コマンドにできます。Herdr はホスト側の面を担います: -インストール、マニフェスト検証、キーバインド、ターミナルペイン、イベント、 -呼び出しコンテキスト、ソケットアクセスです。プラグインは自分の実装言語、依存関係、 -ファイル、永続状態を担います。 - -プラグインは Herdr を軽量に保つために存在します。コアはターミナルワークスペース、 -ペイン、エージェント、安定した CLI/ソケット API に集中し続けます。プラグインは -その既存の拡張面を、あらゆるワークフローを Herdr 本体に追加することなく、 -誰もが作成・インストール・共有できる再利用可能なワークフローに変えます。 - -プラグインは SDK インテグレーションではありません。`herdr-plugin.toml` -マニフェストと、Herdr が起動できるコマンドを持つディレクトリです。Herdr は -マニフェストを検証し、ランタイムコンテキストを注入し、宣言されたコマンドを起動し、 -ログを記録します。コマンドはさらに作業が必要なときに、CLI またはソケット経由で -Herdr を呼び出します。 - -独立したプラグイン SDK や制限付きコマンドセットはありません。Herdr CLI 全体が -プラグイン API です: [CLI リファレンス](/ja/docs/cli-reference/)のすべてのコマンドを -プラグインから使えます。自分で `herdr ...` として実行できるものは、プラグインも -実行できます。ほとんどのプラグインは、実行中の Herdr バイナリを指す -`HERDR_BIN_PATH` を通じて Herdr を呼び出すべきです。これにより、Unix ソケットと -Windows 名前付きパイプの両方でプラグインの移植性が保たれます。生の JSON リクエストを -自分で送りたいときは[ソケット API](/ja/docs/socket-api/)を使ってください。 - -ランタイムでのアクション登録と、ターミナル以外のネイティブなプラグイン UI は -プラグイン v1 の範囲外です。アクション、イベントフック、ペイン、リンクハンドラーは -すべてマニフェストで宣言します。 - -## 信頼とセキュリティ - -プラグインはあなたのマシンで動く普通のコードです。インストールまたはリンクすると、 -そのビルドコマンドとランタイムコマンドはあなたのユーザーとして、あなたの環境で -実行され、Herdr CLI 全体を呼び出せます — エディタ、シェル、コーディングエージェントに -追加する拡張機能と同じです。この開放性こそが狙いであり、少しの判断力があれば -安全に保てます。 - -信頼できる作者とリポジトリからプラグインをインストールし、新しいプラグインが -何をするのか先に目を通してください: `herdr-plugin.toml` マニフェストと、実行される -スクリプトやバイナリです。`herdr plugin install` は対話的なターミナルでソースと -実行されるコマンドのプレビューを表示するので、確定する前に確認できます。すでに -信頼しているソースには `--yes` を使い、特定のリビジョンが欲しいときは `--ref` で -固定してください。 - -Herdr はマニフェストを検証し、各プラグインの設定と状態を専用ディレクトリに -保ちますが、プラグインの動作をレビューしたりサンドボックス化したりはしません。 -サードパーティのプラグインは Herdr ではなく作者のものです。検証と実行の判断は -あなた自身に委ねられます。 - -## マニフェスト - -マニフェストは Herdr とプラグインの間の契約です。パッケージのメタデータ、対応 -プラットフォーム、任意のビルドコマンド、Herdr が実行できるエントリーポイントを -宣言します。 - -```toml -id = "example.layout" -name = "Layout" -version = "0.1.0" -min_herdr_version = "0.7.0" -description = "Apply project layouts" -platforms = ["linux", "macos", "windows"] - -[[build]] -command = ["npm", "ci"] - -[[build]] -command = ["npm", "run", "build"] -platforms = ["linux", "macos"] - -[[startup]] -command = ["node", "dist/restore.js"] - -[[actions]] -id = "apply" -title = "Apply layout" -contexts = ["workspace"] -command = ["node", "dist/apply.js"] - -[[events]] -on = "worktree.created" -command = ["herdr", "workspace", "list"] - -[[panes]] -id = "board" -title = "Project board" -placement = "overlay" -command = ["herdr-board"] - -[[link_handlers]] -id = "github-issue" -title = "Open GitHub issue" -pattern = "^https://github\\.com/[^/]+/[^/]+/(issues|pull)/[0-9]+$" -action = "apply" -``` - -トップレベルの `id`、`name`、`version`、`min_herdr_version` は必須です。 -`min_herdr_version` には、プラグインが使うプラグイン API、イベント名、 -マニフェストフィールドをサポートする最も古い Herdr バージョンを設定してください。 -プラグインの最低バージョンが現在のバイナリより新しい場合、Herdr はリンクや -インストールを拒否します。`description` は任意です。プラグイン id には ASCII の -英字、数字、ドット、コロン、アンダースコア、ハイフンが使えます。 - -アクション id、ペイン id、リンクハンドラー id はプラグイン内部のローカル id です。 -ASCII の英字、数字、コロン、アンダースコア、ハイフンが使えますが、ドットは -使えません。各 id の種類はプラグイン内で一意でなければなりません。グローバルに -一意な名前が必要なとき、Herdr はアクション id を `plugin.id.action` の形に修飾します。 - -プラグインが動作する場所は `platforms = ["linux", "macos", "windows"]` で宣言します。 -ビルドコマンド、スタートアップフック、アクション、イベントフック、ペイン、 -リンクハンドラーも独自の `platforms` を宣言でき、項目レベルの platforms は -トップレベルのリストを上書きします。トップレベルの `platforms` がないローカル -プラグインは警告付きでリンクされます。 - -`command` の値は argv 配列です。Herdr はこれをシェル経由で実行しないため、 -コマンド自身がシェルを起動しない限りシェル展開はありません。言語固有の挙動は -スクリプトやバイナリの側に置いてください。 - -## 最初のプラグイン - -`herdr-plugin.toml` と実行可能なスクリプトまたはプログラムをひとつ含む -ディレクトリから始めます: - -```text -my-plugin/ - herdr-plugin.toml - index.js -``` - -```toml -id = "example.workspace-tools" -name = "Workspace Tools" -version = "0.1.0" -min_herdr_version = "0.7.0" -description = "Small workspace helpers" -platforms = ["linux", "macos", "windows"] - -[[actions]] -id = "list-workspaces" -title = "List workspaces" -contexts = ["workspace"] -command = ["node", "index.js"] -``` - -コマンドの中からは `HERDR_BIN_PATH` で Herdr を呼び出します: - -```js -const { spawnSync } = require("node:child_process"); - -const herdr = process.env.HERDR_BIN_PATH ?? "herdr"; -const result = spawnSync(herdr, ["workspace", "list"], { - encoding: "utf8", - stdio: ["ignore", "pipe", "pipe"], -}); - -process.stdout.write(result.stdout); -process.stderr.write(result.stderr); -process.exit(result.status ?? 1); -``` - -この例は Node を使っていますが、プラグインに Node は必須ではありません。 -マニフェストは Bash、PowerShell、Python、Rust、Go、Lua、Bun など、ユーザーの -マシンで使える任意のコマンドを起動できます。 - -## インストールとリンク - -サンプルプラグインをインストールします: - -```bash -herdr plugin install ogulcancelik/herdr-plugin-examples/agent-telegram-notify -herdr plugin config-dir examples.agent-telegram-notify -herdr plugin list -herdr plugin action list --plugin examples.agent-telegram-notify -``` - -ローカルでプラグインを作成しているときは、代わりに作業ディレクトリをリンクします: - -```bash -herdr plugin link /path/to/plugin -herdr plugin config-dir example.layout -herdr plugin action list --plugin example.layout -herdr plugin action invoke example.layout.apply -herdr plugin pane open --plugin example.layout --entrypoint board -herdr plugin log list --plugin example.layout -``` - -`plugin install` は `owner/repo/subdir` のような GitHub 省略記法のみを受け付けます。 -`git` でクローンし、対話的なターミナルではプレビューを表示し、サポートされる -ビルドコマンドを実行し、チェックアウトを Herdr 管理のプラグインデータの下に保存して -登録します。非対話的なインストールには `--yes` を使ってください。GitHub 管理の -プラグインを再インストールすると、その管理チェックアウトが置き換えられます。 -インストール済みおよびリンク済みのプラグインと、その有効・無効の状態は現在の -ユーザー全体で共有され、すべての Herdr セッションから利用できます。Herdr サーバーが -動作していないときでも `plugin install` と `plugin link` で登録できます。 -Herdr 0.7.3 の名前付きセッションだけにインストールしたプラグインは、再度 install -または link してください。既存のプラグイン設定と状態はそのまま残ります。 -ローカルにリンクされたプラグインへの上書きインストールは拒否されます。先に -ローカルプラグインを unlink または uninstall してください。`plugin install` と -`plugin link` はプラグインの設定・状態ディレクトリを作成し、 -`plugin config-dir <id>` はセットアップドキュメントやシェルスクリプト向けに -設定ディレクトリを表示します。 - -`plugin uninstall <id-or-source>` はプラグインの登録を解除します。GitHub 管理の -インストールでは管理チェックアウトも削除し、プラグイン id と、install で使うのと -同じ `owner/repo[/subdir...]` 省略記法の両方を受け付けます。`plugin unlink <id>` は -登録解除のみを行いファイルには触れないため、ローカル開発に便利です。v1 に独立した -`plugin update` はありません。管理プラグインを更新するには GitHub から -再インストールしてください。 - -サンプル集のリポジトリは `ogulcancelik/herdr-plugin-examples` です。 -`agent-telegram-notify`、`github-link-preview`、`dev-layout-bootstrap` を含む -独立したサンプルプラグインがサブディレクトリに入っています。これらはコピーする -ためのサンプルであり、メンテナンスされる公式プラグインではありません。 - -## ビルドコマンド - -ビルドコマンドは GitHub からの `plugin install` 中、確認の後、Herdr がプラグインを -登録する前に実行されます。ビルドコマンドが失敗するとインストールは中止され、 -プラグインは登録されません。`plugin link` はビルドコマンドを実行しません。 -ローカルの作者は自分で作業ツリーをビルドします。ビルドコマンドはファイルを生成して -構いませんが、インストールプレビュー後に `herdr-plugin.toml` を変更すると -インストールは中止されます。ビルド失敗時には、プラグイン id、ビルドのインデックス、 -作業ディレクトリ、コマンド、終了ステータスまたは spawn エラー、上限付きの -stdout/stderr が、ツールの出力を解釈せずに表示されます。 - -ビルドコマンドも素の argv コマンドですが、ランタイムのプラグインコンテキストや -Herdr のソケット環境変数は受け取りません。プラグインの作者は `cargo`、`npm`、 -`bun`、`lua` といった必要なシステムツールをドキュメントに書いてください。Herdr は -ビルドの失敗を報告しますが、足りないツールチェーンをインストールすることはありません。 - -## スタートアップフック - -`[[startup]]` コマンドは、Herdr がセッションを復元し、API ソケットの準備が整った後に、 -有効なプラグインごとに一度実行されます。ライブハンドオフで新しいサーバーが引き継いだ -ときにも再実行されますが、クライアントの接続、設定の再読み込み、プラグインの link や -enable では実行されません。Herdr はこれらを非同期で開始し、完了を通常のプラグイン -コマンドログに記録します。スタートアップの失敗でサーバーが停止することはありません。 - -スタートアップフックは一度限りの初期化コマンドであり、監視されるデーモンではありません。 -フックはプラグインが所有する状態を復元し、必要な Herdr API を呼び出して終了してください。 -たとえば宣言型の Agent ビューを `HERDR_PLUGIN_STATE_DIR` に保存し、スタートアップフックで -読み込んで再適用できます。 - -スタートアップフックは通常のランタイムプラグイン環境と -`HERDR_PLUGIN_EVENT=startup` を受け取ります。インストールプレビューには、自動実行される -コードを確認できるよう、すべてのスタートアップコマンドが表示されます。 - -## コマンドと環境 - -ランタイムコマンドは、プラグインディレクトリを作業ディレクトリとして実行されます。 -Herdr は `HERDR_SOCKET_PATH`、`HERDR_BIN_PATH`、`HERDR_ENV=1`、 -`HERDR_PLUGIN_ID`、`HERDR_PLUGIN_ROOT`、`HERDR_PLUGIN_CONFIG_DIR`、 -`HERDR_PLUGIN_STATE_DIR`、`HERDR_PLUGIN_CONTEXT_JSON`、そして利用可能なら -`HERDR_WORKSPACE_ID`、`HERDR_TAB_ID`、`HERDR_PANE_ID` を注入します。アクション -コマンドは加えて `HERDR_PLUGIN_ACTION_ID` を受け取ります。スタートアップフックと -イベントフックは `HERDR_PLUGIN_EVENT`(スタートアップフックでは `startup`)を受け取り、 -イベントフックはさらに `HERDR_PLUGIN_EVENT_JSON` を、ペインコマンドは -`HERDR_PLUGIN_ENTRYPOINT_ID` を受け取ります。 - -`HERDR_PLUGIN_ROOT` は、インストールまたはリンクされたプラグインディレクトリです。 -GitHub からインストールされたプラグインのルートは管理されたソースチェックアウト -なので、そこにユーザーの認証情報や永続状態を保存しないでください。`.env` ファイルの -ようなユーザーが編集する設定は `HERDR_PLUGIN_CONFIG_DIR` の下に、ローカルの -ランタイム状態は `HERDR_PLUGIN_STATE_DIR` の下に置いてください。Herdr はこれらの -ディレクトリを作成し、レガシーなプラグイン設定の場所が存在すれば -`HERDR_PLUGIN_CONFIG_DIR` に初期内容を移しますが、その中身の検証、同期、削除は -しません。ファイル形式とライフサイクルはプラグインが所有します。 - -`HERDR_PLUGIN_CONTEXT_JSON` には、その呼び出しで利用可能な場合、ワークスペース、 -タブ、フォーカス中のペイン、worktree、エージェント、選択テキスト、クリックされた -URL、リンクハンドラーのフィールドが含まれます。シェルプラグインは、よく使う id は -個別の環境変数から読み、完全な形が必要ならコンテキスト JSON をパースできます。 - -Node、PowerShell、Bash など別のランタイムから移植性を保って Herdr を呼び出す必要が -あるときは `HERDR_BIN_PATH` を使ってください。`HERDR_SOCKET_PATH` の背後にある生の -ソケットトランスポートは OS 固有です: Unix クライアントは Unix ソケットパスに、 -Windows クライアントは名前付きパイプに接続します。`HERDR_BIN_PATH` を通じた CLI -呼び出しなら、そのトランスポートの違いを気にせずに済みます。利用可能なコマンドは -[CLI リファレンス](/ja/docs/cli-reference/)、生のリクエスト形式は -[ソケット API](/ja/docs/socket-api/)を参照してください。 - -## ペイン - -マニフェストのペイン `placement` のデフォルトは `overlay` で、アクティブなペインの -上に一時的なズームオーバーレイを開き、閉じるときに以前のフォーカスとズームを -復元します。`plugin.pane.open` リクエストは、マニフェストの placement を -`overlay`、`popup`、`split`、`tab`、`zoomed` で上書きできます。 - -`placement = "popup"` は、タイルレイアウトを変更せずにセッションモーダルなターミナルポップアップを開きます。 -マニフェストまたは open リクエストで任意の `width` と `height` を指定できます。 -省略するとデフォルトの半分のサイズになり、数値なら外側のターミナルセル数、`"80%"` のような文字列ならターミナル領域に対する割合になります。 -Escape を含むすべてのターミナル入力を受け取り、コマンドが終了するか `popup.close` リクエストが送られると閉じます。 -最小サイズより小さい寸法は最小値に制限されます。 - -ペインを常に一時的にしたい場合は、プラグインペインのエントリーポイントに placement を直接宣言します: - -```toml -[[panes]] -id = "picker" -title = "Picker" -platforms = ["linux", "macos"] -placement = "popup" -width = "80%" -height = 20 -command = ["sh", "picker.sh"] -``` - -split、tab、zoomed、overlay のプラグインペインは、開いた後は通常の Herdr ペインです。プラグインはソケットや CLI を -通じて `pane.move`、`pane.swap`、`pane.resize`、`pane.zoom` といった標準のペイン -API を呼び出せます。ペインがタブやワークスペースをまたいで移動しても、Herdr は -プラグインペインの所有権を元のペインに結び付けたまま維持します。 -ポップアップは Herdr ペインではなく、セッションに 1 つだけ存在できるリソースです。 -ペイン id を持たず、プラグインのフォーカスコンテキストを変更せず、ペインのライフサイクルイベントを発行せず、pane、layout、永続化、エージェント API に参加しません。 -そのプロセスには `HERDR_PANE_ID` が渡されず、背後のタイルペインは `HERDR_PLUGIN_CONTEXT_JSON` から参照できます。 -Settings、コピーモード、または別の Herdr モーダルが開いている間にポップアップを開くと `ui_busy` が返り、起動後の `plugin.pane.open` は `ok` を返します。 - -Windows では、ビルドコマンド、アクションコマンド、イベントコマンドは、素の -コマンドが `PATH` にあれば `npm.cmd`、`bun.cmd`、`pnpm.cmd` のような一般的な -`PATHEXT` shim を解決します。ペインコマンドは Herdr の通常の Windows ペイン -ランチャーを使うため、引き続き有効な Windows の argv コマンドでなければなりません。 - -## キーバインド - -インストール済みプラグインのアクションにキーを割り当てます: - -```toml -[[keys.command]] -key = "prefix+l" -type = "plugin_action" -command = "example.layout.apply" -description = "apply layout" -``` - -## リンクハンドラー - -`[[link_handlers]]` を使うと、マッチしたターミナル URL への修飾キー付きクリックを、 -ブラウザで URL を開く代わりにプラグインのアクションにルーティングできます。 -修飾キー付きクリックの修飾キーは macOS を含むすべてのプラットフォームで Control -です。キャプチャされたターミナルのマウスレポートは、Command/Super を通常のクリックと -区別して伝えないからです。`pattern` はクリックされた URL に対してマッチする Rust の -正規表現で、`action` には同じプラグインが宣言したアクション名を指定します。リンク -ハンドラーのアクションは `HERDR_PLUGIN_CONTEXT_JSON` で -`invocation_source = "link_click"`、`clicked_url`、`link_handler_id` を受け取ります。 -シェルプラグインは `HERDR_PLUGIN_CLICKED_URL` と `HERDR_PLUGIN_LINK_HANDLER_ID` も -読めます。ハンドラーは各プラグイン内でマニフェストの順にチェックされます。 - -## ストレージ - -v1 には Herdr が管理するプラグインストレージ API はありません。永続状態が必要な -プラグインは、自分のファイルやデータベースを持ってください。 - -## マーケットプレイス - -コミュニティ製プラグインは[マーケットプレイス](/plugins/)で探せます。これは -GitHub トピック `herdr-plugin` が付いた公開 GitHub リポジトリの自動インデックスです。 -プラグインは普通の GitHub リポジトリのままです: `herdr-plugin.toml` を含めて公開し、 -`herdr plugin install owner/repo[/subdir]` を共有してください。 - -プラグインを掲載するには、公開リポジトリに GitHub トピック `herdr-plugin` を -追加します。インデックスは 30 分ごとに更新されます。発見の仕組みは -[マーケットプレイス](/ja/docs/marketplace/)を参照してください。 diff --git a/website/src/content/docs/ja/quick-start.mdx b/website/src/content/docs/ja/quick-start.mdx deleted file mode 100644 index 4de15f61..00000000 --- a/website/src/content/docs/ja/quick-start.mdx +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: クイックスタート -description: 最初の Herdr ワークスペースを作成し、永続的なターミナルペインでエージェントを動かします。 ---- - -Herdr をまだインストールしていない場合は[インストール](/ja/docs/install/)を参照してください。その後、任意のプロジェクトディレクトリから Herdr を起動します: - -```bash -herdr -``` - -Herdr はデフォルトのバックグラウンドセッションを起動するか、それにアタッチします。ソケットを管理する必要はありません。デタッチしてもエージェントは動き続けます。 - -## ワークスペースを作成する - -セッションにワークスペースがない場合、Herdr は自動的にひとつ開きます。ワークスペースはタブ、ペイン、エージェントを入れるプロジェクト単位のコンテナです。アクティブなプロジェクトごとに専用のワークスペースを作ってください。そうすることでサイドバーのエージェント状態が読みやすくなります。 - -## マウスを使う - -Herdr はマウスネイティブなので、まずはクリックから始めてください。ペイン、タブ、ワークスペース、エージェントをクリックしてフォーカスします。分割境界をドラッグしてリサイズします。右クリックでコンテキストメニューが開き、ペインの分割やタブの作成ができます。テキストをドラッグ選択するとクリップボードにコピーされます。トークンをダブルクリックすると直接コピーされます。コピーに Ctrl+C は不要です。 - -ターミナルが修飾キー付きクリックを Herdr に渡す場合、Ctrl+クリックでペイン内のリンクを開けます。これは OSC 8 ハイパーリンクと、表示されている `http://` または `https://` の URL で機能します。macOS では、マウスキャプチャが有効な間は Herdr が処理するペインリンクに Ctrl+クリックを使ってください。Cmd+クリックは Shift+Cmd+クリックや `ui.mouse_capture = false` といったターミナルネイティブのバイパス経路でのみ使えます。 - -`ui.right_click_passthrough_modifier` を設定すると、その修飾キー + 右クリックで、右クリック・ホールド・ドラッグのジェスチャーがマウスレポーティング対応のペインアプリに送られます。 - -## エージェントを動かす - -ペインの中でコーディングエージェントを起動します: - -```bash -claude -``` - -`codex`、`pi`、`opencode` など、他の[対応エージェント](/ja/docs/agents/)でも構いません。Herdr は自動的に検出します。サイドバーには各エージェントが `working`、`blocked`、`done`、`idle` のどれかが表示されます — すべてのワークスペースを横断して表示されるので、どのプロジェクトがあなたを必要としているか常に分かります。 - -## キーボード操作 - -キーボード操作は任意です。マウスですべての操作ができます。`ctrl+b` を押してプレフィックスモードに入り、アクションキーを押します。 - -よく使うアクション: - -| アクション | キー | -| --- | --- | -| 右に分割 | `prefix+v` | -| 下に分割 | `prefix+minus` | -| 新しいタブ | `prefix+c` | -| 次 / 前のタブ | `prefix+n` / `prefix+p` | -| ワークスペースナビゲーション | `prefix+w` | -| 新しいワークスペース | `prefix+shift+n` | -| クライアントをデタッチ | `prefix+q` | - -プレフィックスの考え方が初めてなら、[キーボード](/ja/docs/keyboard/)でプレフィックスとは何か、なぜマルチプレクサがこれを使うのか、プレフィックスなしで運用する方法を説明しています。Herdr 内で `prefix+?` を押すとすべての有効なバインドが表示され、`prefix+[` でコピーモードに入ってキーボードからコピーできます。 - -## デタッチして戻ってくる - -`prefix+q` を押すか、単純にターミナルウィンドウを閉じてください。Herdr サーバーとすべてのエージェントは動き続けます。もう一度 `herdr` を実行すると同じセッションに再アタッチします。 - -セッションを本当に終了してペインを停止するには: - -```bash -herdr server stop -``` - -## 次に読むもの - -- [コンセプト](/ja/docs/concepts/) — ワークスペース、タブ、ペイン、エージェントのモデルを 2 分で。 -- [Herdr での作業の進め方](/ja/docs/how-to-work/) — ローカル、SSH、スマートフォン、`herdr --remote` のワークフロー。 -- [エージェント](/ja/docs/agents/) — 対応エージェント、検出、状態の精度を高めるインテグレーション。 -- [設定](/ja/docs/configuration/) — キーバインド、テーマ、通知、その他すべて。 diff --git a/website/src/content/docs/ja/session-state.mdx b/website/src/content/docs/ja/session-state.mdx deleted file mode 100644 index 2567fc3f..00000000 --- a/website/src/content/docs/ja/session-state.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: セッション状態と復元 -description: Herdr が何をライブで維持し、再起動後に何を復元し、履歴から何をリプレイし、エージェントインテグレーションで何を resume し、アップデート時に何をハンドオフするかを理解します。 ---- - -Herdr には複数の状態管理経路があります。それぞれが異なる問題を解決します。 - -## 何が生き残るか - -| ケース | プロセスは動き続ける | レイアウトは戻る | 直近の画面は戻る | エージェントの会話は再開する | -| --- | --- | --- | --- | --- | -| デタッチと再アタッチ | はい | はい | はい (ライブのターミナルから) | はい (プロセスが止まらないため) | -| サーバー再起動 | いいえ | はい | ペイン画面履歴が有効な場合のみ | エージェントネイティブのセッション復元がある場合のみ | -| `--handoff` なしのアップデート | 互換性のあるサーバーは動き続ける。再起動が必要なサーバーは停止/再起動が必要な場合がある | 再起動後は戻る | ペイン画面履歴が有効な場合のみ | エージェントネイティブのセッション復元がある場合のみ | -| `--handoff` ありのアップデート | 対応する稼働中サーバーではベストエフォート | はい | はい (ハンドオフが成功すればライブのターミナルから) | はい (ハンドオフが成功すればプロセスが動き続けるため) | - -以下のセクションでそれぞれの経路を説明します。 - -## ライブ永続化 - -通常のデタッチでは Herdr サーバーは動き続けます。ペイン、シェル、エージェント、サーバー、テスト、コマンドプロセスはそのサーバー内で動き続けます。 - -`ctrl+b q` でクライアントをデタッチします。あとで再アタッチします: - -```bash -herdr -``` - -元のプロセスが一度も止まらないため、これが最も強力な永続化経路です。 - -## スナップショット復元 - -Herdr サーバーが停止して再起動すると、元のペインのプロセスは失われています。Herdr は保存されたセッションの形を復元します: ワークスペース、タブ、ペイン、cwd、レイアウト、フォーカスです。 - -スナップショット復元は、動作中のシェル、サーバー、テスト、その他任意のプロセスを保存しません。より強力な復元経路が使えないペインは、保存されたディレクトリで新しいシェルとして戻ってきます。 - -## ペイン画面履歴のリプレイ - -ペイン画面履歴は、サーバーの完全な再起動後に直近のターミナル内容を復元します。復元されるのは Herdr が表示できるものであって、元のプロセスではありません。 - -ペイン出力にはシークレット、トークン、プロンプト、コマンド出力が含まれうるため、これはデフォルトで無効です。Settings > Experiments > pane screen history から、または次の設定で有効にします: - -```toml -[experimental] -pane_history = true -``` - -有効にすると、Herdr は保存したペイン履歴を `session.json` の隣の `session-history.json` に保存します。Herdr の設定/セッションディレクトリはターミナル履歴と同じ感覚で扱ってください。 - -## エージェントネイティブのセッション復元 - -一部のエージェントは自分の会話セッションを resume できます。Herdr は、公式インテグレーションが報告したセッション参照を使って、Herdr サーバーの再起動後に対応エージェントのペインを再起動できます。 - -これはデフォルトで有効です。無効にするには: - -```toml -[session] -resume_agents_on_restore = false -``` - -Herdr が resume するのは、現行の公式 Herdr インテグレーションを通じてネイティブセッション参照を報告したペインだけです。 - -クライアントがアタッチしてターミナルサイズとテーマのコンテキストを提供すると、Herdr は各ペインがフォーカスされるのを待たずに、ワークスペースとタブをまたいで復元対象のエージェントペインを resume します。 - -エージェントネイティブのセッション復元には、次の Herdr インテグレーションバージョン以上が必要です: - -| エージェント | 最低 Herdr インテグレーションバージョン | resume コマンド | -| --- | --- | --- | -| Pi | `2` | `pi --session <path-or-id>` | -| OMP | `3` | `omp --resume=<path-or-id>` | -| Claude Code | `6` | `claude --resume <id>` | -| Codex | `5` | `codex resume <id>` | -| Cursor Agent CLI | `1` | `cursor-agent --resume <id>` | -| GitHub Copilot CLI | `2` | `copilot --resume=<id>` | -| Devin CLI | `2` | `devin --resume <id>` | -| Droid | `2` | `droid --resume <id>` | -| Kimi Code CLI | `3` | `kimi --session <id>` | -| Qoder CLI | `2` | `qodercli --resume <id>` | -| OpenCode | `5` | `opencode --session <id>` | -| Kilo Code CLI | `1` | `kilo --session <id>` | -| Hermes Agent | `2` | `hermes --resume <id>` | -| MastraCode | `1` | `mastracode --thread <id>` | - -インストール済みインテグレーションのバージョンは `herdr integration status` で確認できます。古いインテグレーションは `herdr integration install <agent>` で再インストールしてください。 - -未対応、欠落、無効、重複、または古くなったセッション参照は、保存されたペインディレクトリで通常のシェルとして復元されます。 - -あるペインにエージェントネイティブのセッション復元が適用される場合、Herdr はそのペインでは保存済みペイン履歴のリプレイではなくエージェントセッションの resume を行います。 - -## ライブハンドオフ - -ライブハンドオフは、稼働中の Herdr サーバーを置き換える必要があるアップデートやリモートアタッチのフローのためのものです。古いサーバーにライブペインを新しいサーバーへ移すよう依頼し、サーバー交換をまたいでペインのプロセスが動き続けられるようにします。 - -これはスナップショット復元、ペイン履歴リプレイ、エージェントネイティブのセッション復元とは異なります。ハンドオフは現在のプロセスを生かし続けようとします。他の経路は、古いサーバーが停止した後に状態を再構築します。 - -ハンドオフが保護するのは、ペインの PTY とプロセス、エージェントの識別情報と永続メタデータ、交換後のサーバーに必要なプラグイン/セッション状態など、サーバーが所有する長寿命のセッション状態です。交換境界をまたぐ一時的な協調状態は保持しません。処理中の CLI/API リクエスト、wait、購読ストリーム、クライアントソケット、ペイン間メッセージは中断される可能性があるため、クライアントは再接続して再試行してください。 - -ライブハンドオフは実験的機能で、オプトインです: - -```bash -herdr update --handoff -herdr --remote workbox --handoff -``` - -素の `herdr update` と素の `herdr --remote workbox` は、デフォルトでは通常の再起動/停止フローを使います。 - -`herdr update --handoff` は Herdr 自身のアップデーターが管理するインストールにのみ適用されます。Homebrew、mise、Nix のインストールはそれぞれのパッケージマネージャーで更新されるため、そこでは `herdr update` は無効化されており、ライブハンドオフは実行できません。 diff --git a/website/src/content/docs/ja/socket-api.mdx b/website/src/content/docs/ja/socket-api.mdx deleted file mode 100644 index 8995dbae..00000000 --- a/website/src/content/docs/ja/socket-api.mdx +++ /dev/null @@ -1,750 +0,0 @@ ---- -title: ソケット API -description: スクリプト、ツール、コーディングエージェントから実行中の Herdr サーバーを制御します。 ---- - -Herdr は、実行中のセッションを調査・制御する必要があるスクリプトやエージェント向けに、ローカルソケット API を公開しています。 - -ほとんどの自動化は CLI ラッパーから始めるべきです。生のソケット API は、直接のリクエスト/レスポンス制御や長寿命のイベント購読が必要なときだけ使ってください。 - -## インテグレーション層を選ぶ - -| 層 | 用途 | -| --- | --- | -| エージェントスキル | ペイン内からの Herdr の使い方をコーディングエージェントに教える。 | -| CLI ラッパー | シェルスクリプト、シンプルなオーケストレーション、人間によるデバッグ。 | -| 生のソケット API | カスタムツール、プロトコルクライアント、イベント購読者。 | - -これらの層は同じ制御面を共有します。 - -## スキーマ - -インストール済み CLI は、その Herdr バイナリに同梱されたソケットプロトコルスキーマを表示できます: - -```bash -herdr api schema -herdr api schema --json -herdr api schema --output herdr-api.schema.json -``` - -通常の `herdr api schema` は短い概要を表示します。`--json` はツール向けの完全な JSON Schema を表示し、`--output PATH` はそのドキュメントをファイルに書き込みます。スキーマには、生のリクエスト、成功レスポンス、エラーレスポンス、発行イベント、購読イベントが含まれます。 - -## 制御できるもの - -ソケット API では次のことができます: - -- ワークスペースの作成、一覧、フォーカス、名前変更、クローズ -- タブの作成、一覧、フォーカス、名前変更、クローズ -- ペインの一覧、調査、分割、入れ替え、フォーカス、リサイズ、名前変更、読み取り、クローズ、入力送信 -- CLI ヘルパーを通じたエージェントの一覧、調査、読み取り、プロンプト、待機、名前変更、フォーカス、起動、アタッチ -- フックやプラグインからのカスタムエージェント状態の報告 -- イベントの購読と、出力や状態変化の待機 -- 組み込みインテグレーションのインストールとアンインストール -- サーバーの停止と設定のリロード - -## CLI の例 - -ワークスペースを作成する: - -```bash -herdr workspace create --cwd ~/project --label api -``` - -タブを作成する: - -```bash -herdr tab create --label logs -``` - -ペインを分割してコマンドを実行する: - -```bash -herdr pane split w1:p1 --direction right -herdr pane run w1:p2 "npm test" -``` - -ペインを調査して並べ替える: - -```bash -herdr pane layout --current -herdr pane neighbor --direction right --current -herdr pane resize --direction right --amount 0.1 --current -herdr pane swap --direction right --current -herdr pane zoom --on --current -herdr pane split w1:p1 --direction right --ratio 0.333 -``` - -エージェントを待つ: - -```bash -herdr agent wait w1:p1 --until done -``` - -ペインの出力を読む: - -```bash -herdr pane read w1:p2 --source recent --lines 50 -``` - -## 生のメソッド - -生のソケットメソッド名はドット記法を使います: - -| 領域 | メソッド | -| --- | --- | -| サーバー | `ping`、`server.stop`、`server.reload_config`、`server.agent_manifests`、`server.reload_agent_manifests` | -| 通知 | `notification.show` | -| クライアント | `client.window_title.set`、`client.window_title.clear` | -| セッション | `session.snapshot` | -| ワークスペース | `workspace.create`、`workspace.list`、`workspace.get`、`workspace.focus`、`workspace.rename`、`workspace.move`、`workspace.report_metadata`、`workspace.close` | -| Worktree | `worktree.list`、`worktree.create`、`worktree.open`、`worktree.remove` | -| タブ | `tab.create`、`tab.list`、`tab.get`、`tab.focus`、`tab.rename`、`tab.move`、`tab.close` | -| ペイン | `pane.split`、`pane.swap`、`pane.move`、`pane.zoom`、`pane.layout`、`pane.process_info`、`pane.neighbor`、`pane.edges`、`pane.focus_direction`、`pane.resize`、`pane.list`、`pane.current`、`pane.get`、`pane.rename`、`pane.send_text`、`pane.send_keys`、`pane.send_input`、`pane.read`、`pane.graphics.info`、`pane.graphics.set`、`pane.graphics.clear`、`pane.graphics.stream`、`pane.report_agent`、`pane.report_agent_session`、`pane.report_metadata`、`pane.clear_agent_authority`、`pane.release_agent`、`pane.close`、`pane.wait_for_output` | -| ポップアップ | `popup.close` | -| レイアウト | `layout.export`、`layout.apply`、`layout.set_split_ratio` | -| エージェント | `agent.list`、`agent.get`、`agent.read`、`agent.explain`、`agent.send_keys`、`agent.prompt`、`agent.wait`、`agent.rename`、`agent.focus`、`agent.start` | -| イベント | `events.subscribe`、`events.wait` | -| インテグレーション | `integration.install`、`integration.uninstall` | -| プラグイン | `plugin.link`、`plugin.list`、`plugin.unlink`、`plugin.enable`、`plugin.disable`、`plugin.action.list`、`plugin.action.invoke`、`plugin.log.list`、`plugin.pane.open`、`plugin.pane.focus`、`plugin.pane.close` | - -`agent.wait` はサーバー所有でイベント駆動です。解決したペイン占有者に固定されるため、置換されたエージェントが待機を満たすことはありません。`agent.prompt` は `until` と `timeout_ms` を持つ省略可能な `wait` オブジェクトを受け付けます。これにより、プロンプト送信と待機開始を 1 つのリクエストで行い、別々の呼び出し間の競合を避けられます。 - -`session.snapshot` は、独自のローカルランタイムキャッシュを持つクライアント向けに、一度限りのブートストラップスナップショットを返します。レスポンスには、バージョン/プロトコルメタデータ、フォーカス中のワークスペース/タブ/ペイン id、ワークスペース、タブ、ペイン、タブレイアウト、エージェントの各レコードが含まれます。これは購読ではありません。取得後はリソースイベントを購読し、そのイベントでローカルキャッシュを更新してください。再接続後やキャッシュが古い可能性がある場合は、`session.snapshot` を再度呼び出します。ワークスペースレコードには、関連付けられた worktree の出自情報も含まれます。リポジトリ全体の worktree 検出には引き続き `worktree.list` を使います。 - -CLI の `herdr api snapshot` は、クライアントやエージェントが簡単にブートストラップできるよう、現在の `session.snapshot` レスポンスを JSON で出力します。 - -ペイン制御メソッドは `w1:p1` のような公開ペイン id を使います。スキーマ上 `pane_id` が省略可能なメソッドは、省略時にサーバーのアクティブなフォーカス中ペインを使います。`pane.move` は常に送信元の `pane_id` を要求します。 - -`pane.send_keys` と `pane.send_input.keys` は Herdr のキーコンボ文字列を受け付けます: 通常の印字可能キー、`enter` や `esc` のような特殊キー、`ctrl+h`、`control+j`、`alt+x`、`shift+tab` のような修飾キーコード、`f1` のようなファンクションキー、`minus` や `plus` のような名前付き記号です。`prefix+` のバインド文字列は受け付けません。 - -```json -{"id":"req_current","method":"pane.current","params":{"caller_pane_id":"w1:p1"}} -{"id":"req_layout","method":"pane.layout","params":{"pane_id":"w1:p1"}} -{"id":"req_neighbor","method":"pane.neighbor","params":{"pane_id":"w1:p1","direction":"right"}} -{"id":"req_edges","method":"pane.edges","params":{"pane_id":"w1:p1"}} -{"id":"req_focus","method":"pane.focus_direction","params":{"direction":"right"}} -{"id":"req_resize","method":"pane.resize","params":{"pane_id":"w1:p1","direction":"right","amount":0.1}} -{"id":"req_zoom","method":"pane.zoom","params":{"pane_id":"w1:p1","mode":"toggle"}} -{"id":"req_split","method":"pane.split","params":{"direction":"right","ratio":0.333,"env":{"HERDR_ROLE":"tests"}}} -{"id":"req_process","method":"pane.process_info","params":{"pane_id":"w1:p1"}} -``` - -`pane.current` は単一の `PaneInfo` を返します。`caller_pane_id` があるときはそのペインを返します。省略時はアクティブなフォーカス中ペインを返します。 - -ターミナルのスクロール情報を取得できる場合、`PaneInfo` には `scroll` が含まれます: - -```json -{ - "offset_from_bottom": 12, - "max_offset_from_bottom": 240, - "viewport_rows": 30 -} -``` - -クライアントは `offset_from_bottom == 0` を最下部にいる状態として扱えます。 - -### 実験的なペイングラフィックス - -ペイングラフィックスを使うと、プラグインがペイン上に画像データを配置できます。`[experimental].kitty_graphics = true` の場合にのみ利用でき、それ以外ではすべてのペイングラフィックスメソッドが `feature_disabled` を返します。`pane.graphics.info` はグラフィックスレイヤーを作成せず、接続中クライアントのセルの幅と高さをピクセル単位で返します。`pane.graphics.set` は `data_base64` の `png`、`rgb`、`rgba` データを受け取り、`pane.graphics.clear` はレイヤーを削除します。 - -```json -{"id":"graphics_info","method":"pane.graphics.info","params":{"pane_id":"w1:p1"}} -{"id":"graphics_set","method":"pane.graphics.set","params":{"pane_id":"w1:p1","format":"png","image_width":800,"image_height":600,"data_base64":"...","placement":{"viewport_col":0,"viewport_row":0,"grid_cols":80,"grid_rows":30}}} -{"id":"graphics_clear","method":"pane.graphics.clear","params":{"pane_id":"w1:p1"}} -``` - -フレームを繰り返し送る場合は、`pane.graphics.stream` で専用ソケットを開きます。Herdr が `ok` を返した後、フレームごとに 1 つの JSON ヘッダーと正確に `data_length` バイトの生データを送ります。ソケットが閉じるまでストリームがそのペインのグラフィックスレイヤーを所有し、同時に set、clear、stream を要求すると `stream_conflict` を返します。 - -```json -{"id":"graphics_stream","method":"pane.graphics.stream","params":{"pane_id":"w1:p1"}} -{"format":"png","image_width":800,"image_height":600,"data_length":12345,"placement":{"viewport_col":0,"viewport_row":0,"grid_cols":80,"grid_rows":30}} -``` - -`pane.layout` は、`workspace_id`、`tab_id`、`zoomed`、外側の `area`、`focused_pane_id`、ペインの矩形、分割の矩形/比率を含むタブレイアウトのスナップショットを返します。`pane.neighbor` と `pane.edges` は同じレイアウトスナップショットを含むので、クライアントは非公開のレイアウト状態なしに次の判断を下せます。 - -`pane.process_info` は、ペインのシェル pid、利用可能な場合はフォアグラウンドプロセスグループ id、そしてプラットフォームが公開している場合は pid、名前、argv/cmdline、cwd を含むフォアグラウンドプロセスを返します。 - -`layout.export` は移植可能なタブレイアウトツリーを返します。アクティブなタブをエクスポートするには `tab_id` と `pane_id` の両方を省略し、特定のタブなら `tab_id` を、そのペインを含むタブなら `pane_id` を渡します。 - -```json -{"id":"req_export","method":"layout.export","params":{"tab_id":"w1:t1"}} -``` - -レスポンスには `workspace_id`、`tab_id`、`zoomed`、`focused_pane_id`、`root` が含まれます。`root` は `pane` ノードと `split` ノードの BSP ツリーです。ペインノードは `pane_id`、`label`、`cwd`、argv の `command` を含められます。分割ノードは `direction` (`right` または `down`)、`ratio`、`first`、`second` を使います。 - -`layout.apply` は宣言的なツリーから新しいタブを作成します。`tab_id` が与えられた場合、Herdr は先に置き換え用のタブを作成してから古いタブを閉じます。これは構造、ラベル、cwd、env、任意の argv コマンドを復元しますが、ライブの PTY、スクロールバック、実行中プロセスは保存しません。 - -```json -{ - "id": "req_apply", - "method": "layout.apply", - "params": { - "workspace_id": "wabc", - "tab_label": "dev", - "focus": true, - "root": { - "type": "split", - "direction": "right", - "ratio": 0.65, - "first": { - "type": "pane", - "label": "editor", - "cwd": "/repo" - }, - "second": { - "type": "pane", - "label": "tests", - "cwd": "/repo", - "command": ["sh", "-c", "just test"], - "env": { "HERDR_ROLE": "tests" } - } - } - } -} -``` - -`layout.set_split_ratio` は、タブレイアウト内の既存の分割比率を更新します。レスポンスは、更新済みの移植可能な `layout` を含む `type: "layout_split_ratio_set"` です。 - -```json -{"id":"req_ratio","method":"layout.set_split_ratio","params":{"tab_id":"w1:t1","path":[],"ratio":0.6}} -``` - -プロセスを起動するメソッドは `env` オブジェクトを受け付けます。Herdr はそのキー/値ペアを新しく起動されるプロセスにのみ適用します。Herdr は管理下のペインプロセスに `HERDR_SOCKET_PATH`、`HERDR_ENV=1`、`HERDR_WORKSPACE_ID`、`HERDR_TAB_ID`、`HERDR_PANE_ID` も注入します。呼び出し側が与えた環境変数と衝突した場合、Herdr 管理の変数が権威を持ちます。 - -`pane.swap` は方向指定と明示指定の両方の形式をサポートします: - -```json -{"id":"req_swap_dir","method":"pane.swap","params":{"pane_id":"w1:p1","direction":"right"}} -{"id":"req_swap_explicit","method":"pane.swap","params":{"source_pane_id":"w1:p1","target_pane_id":"w1:p2"}} -``` - -入れ替えは同じタブ内に限られます。分割の形、分割比率、ペイン id、実行中のプロセスを保存します。レスポンスは `type: "pane_swap"` で、`changed`、任意の `reason`、`source_pane_id`、任意の `target_pane_id`、`focused_pane_id`、`layout` を含みます。reason の値は `no_neighbor`、`same_pane`、`not_found`、`cross_tab` です。タブがズームされている場合、入れ替えはズームを維持したまま隠れた全タブレイアウトを変更します。 - -`pane.move` は、実行中のペインを別のタブ、新しいタブ、または新しいワークスペースに移動します: - -```json -{"id":"req_move_tab","method":"pane.move","params":{"pane_id":"w1:p2","destination":{"type":"tab","tab_id":"w1:t2","target_pane_id":"w1:p3","split":"right","ratio":0.5},"focus":true}} -{"id":"req_move_new_tab","method":"pane.move","params":{"pane_id":"w1:p2","destination":{"type":"new_tab","workspace_id":"w1","label":"logs"},"focus":true}} -{"id":"req_move_new_workspace","method":"pane.move","params":{"pane_id":"w1:p2","destination":{"type":"new_workspace","label":"logs","tab_label":"main"},"focus":true}} -``` - -既存タブへの移動には `split: "right" | "down"` が必要です。`target_pane_id` は任意で、デフォルトは移動先タブのフォーカス中ペインです。同じタブ内のレイアウト変更は引き続き `pane.swap` です。元のタブへの移動は `reason: "same_tab"` 付きで `changed: false` を返します。ズームされた移動元/移動先タブを含む移動は `reason: "zoomed_tab"` 付きで `changed: false` を返します。 - -レスポンスは `type: "pane_move"` で、`changed`、任意の `reason`、`previous_pane_id`、`previous_workspace_id`、`previous_tab_id`、移動された `pane`、任意の `source_layout`、`target_layout`、任意の作成されたワークスペース/タブのレコード、任意の閉じられたワークスペース/タブの id、`focused_pane_id` を含みます。ワークスペースをまたぐ移動では、内部のペインとターミナルは生きたまま、移動先ワークスペースで新しい公開ペイン id が割り当てられます。購読者は `pane.moved` を購読できます。Herdr は移動されたターミナルプロセスについて偽のペインの close/create イベントを発行しません。 - -`pane.zoom` は、対象ペインのタブのズームをトグル、有効化、無効化します: - -```json -{"id":"req_zoom_toggle","method":"pane.zoom","params":{"pane_id":"w1:p1"}} -{"id":"req_zoom_on","method":"pane.zoom","params":{"pane_id":"w1:p1","mode":"on"}} -{"id":"req_zoom_off","method":"pane.zoom","params":{"pane_id":"w1:p1","mode":"off"}} -``` - -`pane_id` を省略すると、サーバーのアクティブなフォーカス中ペインが対象になります。レスポンスは `type: "pane_zoom"` で、`changed`、`zoom_changed`、`focus_changed`、任意の `reason`、`pane_id`、`focused_pane_id`、`zoomed`、`layout` を含みます。`changed` は、ズーム状態またはフォーカスのどちらかが変わったときに true です。reason の値は `single_pane`、`already_zoomed`、`already_unzoomed` です。 - -`notification.show` の CLI ラッパーは次のとおりです: - -```bash -herdr notification show "build failed" --body "api workspace" --position top-left --sound request -``` - -設定済みのトースト配信を通じてユーザー通知を表示します: - -```json -{"id":"req_notify","method":"notification.show","params":{"title":"build failed","body":"api workspace","position":"top-left","sound":"request"}} -``` - -`title` は必須で、制御文字と連続する空白を除去した後に可視のテキストが残っていなければなりません。`body` は任意です。Herdr は改行、タブ、キャリッジリターン、連続する空白をスペースにまとめてから、通知テキストを `title` は 80 文字、`body` は 240 文字に切り詰めます。サニタイズ後の `title` が空の場合は `invalid_params` を返します。`position` は任意で、`ui.toast.delivery = "herdr"` のときのみ適用されます。デスクトップの位置は Herdr のフレーム全体を基準とし、省略時は `ui.toast.herdr.position` を使います。terminal、system、off の配信では `position` は無視されます。`sound` は任意で `none`、`done`、`request` のいずれかを指定でき、デフォルトは `none` で、通知が表示されたときにのみ再生されます。 - -レスポンスは何かが表示されたかどうかを報告します: - -```json -{"id":"req_notify","result":{"type":"notification_show","shown":true,"reason":"shown"}} -``` - -reason の候補は `shown`、`disabled`、`rate_limited`、`no_foreground_client`、`busy` です。`disabled` は `ui.toast.delivery = "off"` を意味します。`busy` は既存のアプリ内トーストが置き換えられなかったことを意味します。terminal と system の配信は、現在フォアグラウンドでアタッチしている Herdr クライアントを通じたベストエフォートです。 - -フォアグラウンドクライアントの外側ターミナルウィンドウタイトルを設定またはクリアします: - -```json -{"id":"req_title","method":"client.window_title.set","params":{"title":"herdr api"}} -{"id":"req_title_clear","method":"client.window_title.clear","params":{}} -``` - -`client.window_title.clear` は Herdr のデフォルトタイトルを復元します。レスポンスは `type: "client_window_title"` で、`changed` と、`set`、`cleared`、`no_foreground_client` のいずれかの reason を含みます。 - -Worktree メソッドは Git チェックアウトを Herdr ワークスペースとして管理します。`worktree.create` はチェックアウトを作成し、新しい `workspace`、`tab`、`root_pane`、`worktree` のレコードを返します。要求されたブランチがローカルに既存ならそれをチェックアウトし、なければ要求されたベースまたは `HEAD` からブランチを作成します。`worktree.open` は既存のチェックアウトを開くか、すでに開いているワークスペースを返します。`worktree.remove` はリンクされた子ワークスペースに対して `git worktree remove` を実行し、ブランチは決して削除しません。 - -元のワークスペースから worktree を作成する: - -```json -{"id":"req_1","method":"worktree.create","params":{"workspace_id":"w1","branch":"worktree/api","focus":false}} -``` - -既存のチェックアウトを開く: - -```json -{"id":"req_2","method":"worktree.open","params":{"workspace_id":"w1","branch":"worktree/api","focus":true}} -``` - -リンクされたチェックアウトを削除する: - -```json -{"id":"req_3","method":"worktree.remove","params":{"workspace_id":"2","force":false}} -``` - -`worktree.list`、`worktree.create`、`worktree.open` では `workspace_id` と `cwd` は最大どちらか一方だけを使い、両方省略するとアクティブなワークスペースを使います。`worktree.open` では `path` と `branch` のちょうど一方を使います。生のソケットの `cwd` と `path` の値は絶対パスでなければなりません。CLI は相対の `--cwd` と `--path` の値をリクエスト送信前に展開します。ワークスペースが Herdr の worktree グループに属している場合、ワークスペースのレスポンスには任意の `worktree` 出自情報が含まれます。既存のワークスペースが worktree の出自情報を獲得または変更したとき、worktree コマンドは `workspace.updated` を発行することがあります。 - -worktree コマンドはライフサイクルイベントも発行します。`worktree.create` は `workspace.created`、`tab.created`、`pane.created`、`worktree.created` を発行します。`worktree.open` は `worktree.opened` を発行し、新しい Herdr ワークスペースを開いた場合はワークスペース/タブ/ペインの作成イベントも発行します。`worktree.remove` は `worktree.removed` を発行し、リンクされたワークスペースがまだ開いている場合は `workspace.closed` も発行します。 - -## エージェントビューのクエリ - -`agent.view.set` は、組み込みの Agents ビューに一つの一時的な宣言型プロジェクションを -設定します。エージェントの情報や現在の UI コンテキストが変わるたびに再評価されます。 -展開・折りたたみサイドバー、モバイルの Agents リスト、マウスターゲット、番号付き -フォーカス、前後のエージェントへの移動順を制御します。`agent.list`、通知、検出、 -グローバルな要対応件数は変更しません。 - -現在表示中の Space にいるエージェント、または別の場所で対応が必要なエージェントを -表示し、要対応度と直近の状態遷移で並べ替える例です: - -```json -{ - "id": "view_set", - "method": "agent.view.set", - "params": { - "source": "plugin:example.agent-views", - "label": "focus", - "filter": { - "op": "any", - "filters": [ - { - "op": "eq", - "field": "workspace_id", - "value": {"context": "current_workspace_id"} - }, - { - "op": "in", - "field": "status", - "values": ["blocked", "done"] - } - ] - }, - "sort": [ - {"field": "attention", "order": "desc"}, - {"field": "state_change_seq", "order": "desc"} - ] - } -} -``` - -フィルターノードの `op` には `all`、`any`、`not`、`eq`、`in`、`exists` を使います。 -組み込みフィールドは `status`、`workspace_id`、`tab_id`、`pane_id`、`agent`、 -`seen`、`state_change_seq` です。プラグインが報告したペインメタデータを絞り込むには、 -フィールドとして `{"token":"name"}` を使います。値には文字列、真偽値、符号なし整数、 -またはコンテキストオブジェクトを指定できます。コンテキスト値は -`current_workspace_id` と `current_tab_id` で、対応する ID フィールドとの比較にだけ -使えます。有効な status は `idle`、`working`、`blocked`、`done`、`unknown` です。 -`done` は idle かつ未確認の状態を表します。 - -ソートフィールドは `workspace_order`、`tab_order`、`pane_order`、`attention`、 -`status`、`agent`、`seen`、`state_change_seq`、または `{"token":"name"}` です。 -ソートは安定しており、指定順に評価され、`asc` または `desc` を受け付けます。値がない -項目は値がある項目の後に残ります。`sort` を省略すると既存の -`ui.agent_panel_sort` ポリシーが有効です。カスタムソートは設定を書き換えず、一時的に -そのポリシーを置き換えます。 - -`source` は所有者を識別します。プラグインは `plugin:<HERDR_PLUGIN_ID>` を使います。 -所有元のプラグインが存在しないか無効な場合、Herdr は設定を拒否します。他の呼び出し元は -独自の非 `plugin:` source を使えます。設定に成功すると以前のビューはアトミックに -置き換えられます。ビューは clear または置換されるか、所有プラグインが disable、unlink、 -uninstall されるか、サーバーが終了するまで有効です。永続的な動作が必要なプラグインは、 -クエリを `HERDR_PLUGIN_STATE_DIR` に保存し、`[[startup]]` フックから再適用してください。 - -無条件で clear するか、指定した source がまだ所有している場合だけ clear できます: - -```json -{"id":"view_clear","method":"agent.view.clear","params":{}} -{"id":"view_clear_owned","method":"agent.view.clear","params":{"source":"plugin:example.agent-views"}} -``` - -source が一致しない場合、アクティブなビューは変わりません。set と clear のレスポンスは -`type: "agent_view"` で、`active`、`source`、任意の `label` を報告します。 - -## プラグイン API - -プラグイン API は、実行可能なワークフローツールのための初期のホスト面です。プラグインは `herdr-plugin.toml` マニフェストを持つパッケージです。マニフェストは、共有可能なアクション、イベントフック、ターミナルペインのエントリーポイント、リンクハンドラーを宣言します。アクションとペインはマニフェスト専用です。ランタイムでのアクション登録とランタイムでの argv ペイン作成は v1 の範囲外です。 - -インストールおよびリンクされたプラグインは再起動をまたいで永続化されます。Herdr は `plugin.link`、`plugin.unlink`、`plugin.enable`、`plugin.disable` の際に、`session.json` の隣に `plugins.json` レジストリファイルを書き込みます。`herdr plugin install` CLI も、Herdr が動作していないときに同じレジストリを書き込み、起動時に自動的に読み込まれます。起動時、Herdr は各マニフェストを元のパスから再読み込みします。ファイルが欠落しているかパースできない場合、エントリは `warnings` フィールド付きで保持され、`plugin.list` がそれを表面化します。 - -イベントフックの `on` の値は、リンク時に既知の Herdr イベント名と照合されます。認識されない名前はエラーではなく、リンクは成功しますが、返されるプラグイン情報に警告が含まれます (例: `"unknown event 'worktree.craeted'"`)。`plugin.link` と `plugin.list` のレスポンスの `warnings` フィールドを確認してください。 - -ローカルのプラグインマニフェストをリンクする: - -```json -{"id":"req_plugin_link","method":"plugin.link","params":{"path":"/path/to/plugin","enabled":true}} -``` - -`plugin.link` は任意の `source` メタデータも受け付けます。CLI は GitHub からインストールするときにこれを使い、`plugin.list` が出自、要求された ref、解決されたコミット、管理チェックアウトのパスを表示できるようにします: - -```json -{"id":"req_plugin_link","method":"plugin.link","params":{"path":"/managed/plugin/herdr-plugin.toml","enabled":true,"source":{"kind":"github","owner":"ogulcancelik","repo":"herdr-plugin-examples","subdir":"worktree-bootstrap","requested_ref":"main","resolved_commit":"abc123","managed_path":"/data/plugins/github/<managed-checkout>","installed_unix_ms":1780000000000}}} -``` - -パスは `herdr-plugin.toml` を含むプラグインディレクトリでも、マニフェストへの直接パスでも構いません。マニフェストの形式は次のとおりです: - -```toml -id = "example.worktree-bootstrap" -name = "Worktree Bootstrap" -version = "0.1.0" -min_herdr_version = "0.7.0" -description = "Prepare new worktrees" -platforms = ["linux", "macos", "windows"] - -[[build]] -command = ["bun", "install"] - -[[actions]] -id = "bootstrap" -title = "Bootstrap worktree" -contexts = ["workspace"] -command = ["bun", "run", "bootstrap.ts"] - -[[events]] -on = "worktree.created" -command = ["bun", "run", "bootstrap.ts"] - -[[panes]] -id = "board" -title = "Worktree board" -placement = "overlay" -command = ["bun", "run", "board.ts"] - -[[link_handlers]] -id = "github-issue" -title = "Open GitHub issue" -pattern = "^https://github\\.com/[^/]+/[^/]+/(issues|pull)/[0-9]+$" -action = "bootstrap" -``` - -`min_herdr_version` は必須です。このフィールドが欠落している、無効、または実行中の Herdr バイナリより新しい場合、サーバーはプラグインのリンクを拒否します。 - -プラグインが対応する OS 識別子 (`linux`、`macos`、`windows`) をトップレベルの `platforms` で宣言してください。ローカル開発では `platforms` の省略が許されます — `plugin.link` は成功しますが、レスポンスに警告が含まれます。個々のビルドコマンド、アクション、イベントフック、ペイン、リンクハンドラーは独自の `platforms` を宣言してプラグインレベルのリストを上書きできます。省略時はプラグインから継承します。実効的な platforms が現在の OS を含まないアクションの呼び出しやペインのオープンは `platform_unsupported` エラーを返します。 - -リンク済みプラグインの一覧、有効化、無効化、リンク解除: - -```json -{"id":"req_plugin_list","method":"plugin.list","params":{}} -{"id":"req_plugin_disable","method":"plugin.disable","params":{"plugin_id":"example.worktree-bootstrap"}} -{"id":"req_plugin_enable","method":"plugin.enable","params":{"plugin_id":"example.worktree-bootstrap"}} -{"id":"req_plugin_unlink","method":"plugin.unlink","params":{"plugin_id":"example.worktree-bootstrap"}} -``` - -アクションはリンクされたマニフェストから解決されます。`plugin.action.list` はインストール済みプラグイン全体のすべてのアクションを返します。絞り込むには `plugin_id` を渡してください。 - -```json -{"id":"req_plugin_actions","method":"plugin.action.list","params":{}} -{"id":"req_plugin_actions_filtered","method":"plugin.action.list","params":{"plugin_id":"example.worktree-bootstrap"}} -``` - -`plugin.action.list` は、プラグインレベルの継承を適用した後の各アクションの実効的な `platforms` を返します。 - -修飾 id または素のアクション id でアクションを呼び出す: - -```json -{"id":"req_plugin_invoke","method":"plugin.action.invoke","params":{"action_id":"example.worktree-bootstrap.bootstrap","context":{"invocation_source":"keybinding"}}} -``` - -`plugin.action.invoke` はマニフェストのアクションを解決し、マニフェストのコマンドを起動し、Herdr が構築した呼び出しコンテキストと、開始されたコマンドのログレコードを返します。欠けているコンテキストフィールドは、アクティブなワークスペース、タブ、フォーカス中のペイン、worktree の出自情報、リクエスト id から補完されます。無効化されたプラグインのアクションの呼び出しは `plugin_disabled` エラーを返します。 - -Herdr は `HERDR_SOCKET_PATH`、`HERDR_BIN_PATH`、`HERDR_ENV=1`、`HERDR_PLUGIN_ID`、`HERDR_PLUGIN_ROOT`、`HERDR_PLUGIN_CONFIG_DIR`、`HERDR_PLUGIN_STATE_DIR`、`HERDR_PLUGIN_CONTEXT_JSON`、そして利用可能な `HERDR_WORKSPACE_ID`、`HERDR_TAB_ID`、`HERDR_PANE_ID` の値を注入します。アクションコマンドは加えて `HERDR_PLUGIN_ACTION_ID` を受け取ります。イベントフックは `HERDR_PLUGIN_EVENT` と `HERDR_PLUGIN_EVENT_JSON` を、ペインコマンドは `HERDR_PLUGIN_ENTRYPOINT_ID` を受け取ります。 - -直近のアクションおよびイベントコマンドのログを一覧する: - -```json -{"id":"req_plugin_logs","method":"plugin.log.list","params":{"plugin_id":"example.worktree-bootstrap","limit":20}} -``` - -イベントフックは、Herdr が `worktree.created` のような一致するイベント名を発行したときに、有効なインストール済みプラグインに対して実行されます。 - -v1 には Herdr が管理するプラグインストレージ API はありません。`HERDR_PLUGIN_CONFIG_DIR` と `HERDR_PLUGIN_STATE_DIR` はパスの発見だけを提供します。ファイル、スキーマ、マイグレーション、クリーンアップはプラグインが所有します。 - -管理されたターミナル UI を開く: - -```json -{"id":"req_plugin_pane","method":"plugin.pane.open","params":{"plugin_id":"example.board","entrypoint":"board","placement":"zoomed","target_pane_id":"w1:p1","env":{"HERDR_ROLE":"board"},"focus":true}} -``` - -`plugin.pane.open` は、インストール済みで有効かつプラットフォーム互換のプラグインを要求し、要求されたマニフェストの `[[panes]]` エントリーポイントを argv ベースのターミナルペインとして起動します。マニフェストのペイン `placement` のデフォルトは `overlay` です。リクエストの `placement` は `overlay`、`popup`、`split`、`tab`、`zoomed` でマニフェストを上書きできます。overlay と popup はアクティブなタイルペインを起動コンテキストとして使います。ポップアップターミナルはセッションモーダルで、タブレイアウトを変更しません。任意の `width` と `height` は、外側のサイズをターミナルセル数または `"80%"` のような割合で指定します。省略した寸法はデフォルトでターミナルの半分になり、小さすぎる値は最小サイズに制限されます。ポップアップはペイン id を持たず、`pane.*` とエージェント API の対象外で、ペインのライフサイクルイベントを発行せず、プラグインのフォーカスコンテキストを背後のタイルペインに維持し、そのプロセスへ `HERDR_PANE_ID` を渡しません。起動は `ok` を返し、`popup.close` はアクティブなポップアップを閉じ、ポップアップがない場合は `popup_not_open` を返します。split と zoomed は既存のペインを対象とし、tab はワークスペースを対象にできます。split、tab、zoomed、overlay は通常の Herdr ペインとして振る舞い、`plugin.pane.focus` と `plugin.pane.close` は引き続きそれらのペインに作用します。 - -## ソケットトランスポート - -Herdr はローカルソケット上の改行区切り JSON を使います。Unix では Unix ドメインソケットです。Windows では名前付きパイプです。 - -1 行につき 1 リクエストを送ります: - -```json -{"id":"req_1","method":"ping","params":{}} -``` - -成功レスポンスは同じ `id` を含みます: - -```json -{"id":"req_1","result":{"type":"pong"}} -``` - -イベント購読は、最初のレスポンスの後も接続を開いたままにします。 - -## ソケットパス - -デフォルトのソケットは Herdr の設定ディレクトリの下にあります。 - -名前付きセッションは別のソケットを持ちます: - -```text -~/.config/herdr/herdr.sock -~/.config/herdr/sessions/<name>/herdr.sock -``` - -解決順: - -1. 明示的な CLI の `--session <name>` -2. `HERDR_SOCKET_PATH` -3. `HERDR_SESSION=<name>` -4. デフォルトセッションのソケット - -`HERDR_SOCKET_PATH` は低レベルな上書きにのみ使ってください。 - -プラグインでは、移植性のある Windows の挙動が必要なときは `HERDR_BIN_PATH` と CLI ラッパーの呼び出しを推奨します。生のソケットクライアントは、プラットフォームネイティブのローカルソケット形式を使う責任を負います。 - -## エージェント状態の報告 - -インテグレーションは `pane.report_agent` でエージェント状態を報告します。 - -```json -{ - "id": "req_1", - "method": "pane.report_agent", - "params": { - "pane_id": "w1:p1", - "source": "custom:docs", - "agent": "docs-bot", - "state": "working", - "message": "building docs" - } -} -``` - -`state` は意味的です。wait、通知、ロールアップに影響します。表示専用の値はメタデータで別に報告します。 - -セッションのみの公式インテグレーションは、`pane.report_agent_session` でネイティブセッション参照を報告します。状態を報告するインテグレーションは、`pane.report_agent` にネイティブセッション参照を含めることもできます。状態に依存しないセッション報告は、wait、通知、ロールアップに影響しません。 - -```json -{ - "id": "req_2", - "method": "pane.report_agent_session", - "params": { - "pane_id": "w1:p1", - "source": "herdr:codex", - "agent": "codex", - "agent_session_id": "..." - } -} -``` - -Herdr に保存されたネイティブセッション参照があるとき、`pane.get`、`pane.list`、`agent.get`、`agent.list` は読み取り専用の `agent_session` オブジェクトを公開します: - -```json -{ - "agent_session": { - "source": "herdr:codex", - "agent": "codex", - "kind": "id", - "value": "..." - } -} -``` - -ネイティブセッション参照が保存されていない場合、このフィールドは省略されます。 - -`pane.get`、`pane.list`、`agent.get`、`agent.list` は、ペインの PTY を現在制御しているプロセスの cwd を解決できるときに `foreground_cwd` も公開します。既存の `cwd` フィールドは、ラベル、follow-cwd 挙動、復元されたセッション状態に使われるペイン/ワークスペースの cwd のままです。 - -`PaneInfo` と `AgentInfo` は、任意の `terminal_title` と `terminal_title_stripped` フィールドを公開します。`terminal_title` は、安全性のための正規化を行った最新の OSC 0/2 タイトルです。`terminal_title_stripped` は、先頭にある認識済みのアクティビティまたはスピナーのグリフ 1 つと、それに続く空白を除去します。これらはサーバーが所有する値で、コールドリスタートをまたいで保持されず、メタデータの `title` や意味的なエージェント状態から独立しています。 - -ユーザーフックが Herdr インテグレーションからライフサイクル状態を奪わずに表示をカスタマイズしたいときは `pane.report_metadata` を使ってください。 - -```json -{ - "id": "req_2", - "method": "pane.report_metadata", - "params": { - "pane_id": "w1:p1", - "source": "user:claude-title", - "agent": "claude", - "title": "Refactor auth middleware", - "display_agent": "Claude: auth", - "state_labels": { - "working": "refactoring auth", - "idle": "ready", - "done": "review ready" - }, - "tokens": { - "summary": "refactor auth", - "model": "opus" - }, - "ttl_ms": 3600000 - } -} -``` - -メタデータ報告は表示専用です。有効なメタデータは、ペインのタイトル、表示されるエージェント名、可視の状態ラベル、任意の名前付きトークンを上書きできます。`working`、`blocked`、`idle`、wait、通知、ロールアップは引き続き意味的な状態から得られます。エージェントネイティブのセッション復元は、保存された公式セッション参照から得られます。`agent` は表示フィールドを権威あるエージェントラベルに対して保護する任意のガードで、`applies_to_source` も表示フィールドをアクティブなライフサイクル権威ソースに対して保護します。これらのガードはトークンパッチには適用されません。トークンのクリアと TTL の更新は報告側が管理します。表示名を変えるには `display_agent` を使います。`state_labels` のキーは `idle`、`working`、`blocked`、`done`、`unknown` のいずれかでなければなりません。 - -トークンマップはリソースごとのパッチです。文字列はキーを設定し、JSON の `null` はクリアし、省略したキーは変わりません。最後に受理された更新が優先されます。任意の TTL は、その報告で更新した各トークンキーに個別に適用されます。ペイントークンは pane と agent の get/list 応答で公開され、エージェントサイドバー行では `$name` として描画できます。1 回の報告で指定できるトークンキーは最大 16 個、ペインまたはワークスペースが保持できるキーは最大 32 個です。トークン名は 1〜32 文字の ASCII 英数字、アンダースコア、ハイフンに限られます。 - -ワークスペーストークンも同じ規約を使います: - -```json -{"id":"req_3","method":"workspace.report_metadata","params":{"workspace_id":"w1","source":"user:jj","tokens":{"jj_status":"2 changes","old":null},"ttl_ms":5000}} -``` - -workspace の get/list 応答は結果の `tokens` マップを公開し、スペースサイドバー行では `$jj_status` のような値を描画できます。変更と TTL の失効は、最新のワークスペーススナップショットを含む `workspace.metadata_updated` を発行します。このメタデータイベントは API 購読者に届きますが、プラグインイベントフックは実行しません。 - -表示テキストは保存前に正規化されます。Herdr は前後の空白を取り除き、制御文字を除去し、`title`、`display_agent`、各状態ラベル、トークン値を 80 文字に制限します。正規化後に空になったトークン値は、そのキーをクリアします。 - -`source` と `applies_to_source` はソース識別子です。80 文字以下で、ASCII の英字、数字、コロン、ドット、アンダースコア、ハイフンのみを含められます。 - -短寿命のメタデータには `ttl_ms` を使ってください。`1` から `86400000` ミリ秒の間でなければなりません。置き換え・クリア・ペインまたはワークスペースのクローズまで残るべきメタデータでは省略します。表示フィールドは従来どおりソース単位で失効し、呼び出しで更新した各トークンには個別の期限が設定されます。トークンメタデータはサーバー再起動後に復元されません。 - -フックが順不同で更新を送る可能性がある場合は `seq` を使ってください。同じ `source` について、最後に受理されたシーケンス以下のシーケンス番号を持つ報告は、API には受理されますがペイン状態には無視されます。ペインまたはワークスペースが存続する間、シーケンス付きトークン報告を送れる異なるソースは最大 32 個です。クリアや失効でもそのソース枠は解放されません。 - -## イベント購読 - -長寿命のストリームが必要なときはイベントを購読します: - -```json -{ - "id": "sub_1", - "method": "events.subscribe", - "params": { - "subscriptions": [ - { "type": "pane.agent_status_changed", "pane_id": "w1:p1", "agent_status": "blocked" } - ] - } -} -``` - -最初のレスポンスは購読の確認応答です。以降の行はプッシュされるイベントです。 - -ワークスペースのイベント購読には `workspace.created`、`workspace.updated`、`workspace.metadata_updated`、`workspace.renamed`、`workspace.moved`、`workspace.closed`、`workspace.focused` があります。`workspace.metadata_updated` はプラグインイベントフックを実行せずにトークン変更と TTL 失効を報告します。その他のワークスペースイベントは Herdr の UI/ランタイムのライフサイクルを記述します。ワークスペースが worktree グループに属している場合、`workspace.created` は任意の `workspace.worktree` 出自情報を含みます。`workspace.moved` は、移動した `workspace_id`、要求された `insert_index`、更新済みの順序付き `workspaces` リストを含みます。削除前に Herdr がまだ識別できる場合、`workspace.closed` は最終的な `workspace` スナップショットを含みます。 -タブのイベント購読には `tab.created`、`tab.closed`、`tab.focused`、`tab.renamed`、`tab.moved` があります。`tab.moved` は、移動した `tab_id`、`workspace_id`、要求された `insert_index`、そのワークスペースの更新済みの順序付き `tabs` リストを含みます。 -ペインのイベント購読には `pane.created`、`pane.updated`、`pane.closed`、`pane.focused`、`pane.moved`、`pane.exited`、`pane.agent_detected`、`pane.output_matched`、`pane.agent_status_changed`、`pane.scroll_changed` があります。ターミナルタイトルの変更は `pane.updated` を発行することがありますが、生のタイトルでスピナーだけが変化し、`terminal_title_stripped` が変わらない場合は発行しません。`pane.scroll_changed` は 1 つの `pane_id` を対象とし、Herdr がスクロールスナップショットの変化を検出するたびに `pane_id`、`workspace_id`、現在の `scroll` 情報を発行します。 -レイアウトのイベント購読には `layout.updated` があります。このイベントは 1 つのタブについて更新済みの `PaneLayoutSnapshot` を運びます。`session.snapshot` でブートストラップするクライアントは、同じ `workspace_id` と `tab_id` のキャッシュ済みレイアウトを置き換えてください。 - -worktree のイベント購読には `worktree.created`、`worktree.opened`、`worktree.removed` があります。worktree イベントは Git チェックアウトのライフサイクルを記述します。`worktree.created` は開かれた `workspace` と作成された `worktree` を含みます。`worktree.opened` は対象の `workspace`、開かれた `worktree`、`already_open` を含みます。`worktree.removed` は `workspace_id`、削除された `worktree`、`forced` を含みます。 - -ライフサイクルイベントには `events.subscribe` を使ってください。ワンショットの wait がサポートされる場合、専用の wait ヘルパーが別途ドキュメント化されます。 - -## ペインの読み取り - -プロトコルクライアントを書いているのでなければ、CLI 経由で `pane.read` を使ってください。 - -```bash -herdr pane read w1:p1 --source visible --lines 80 -herdr pane read w1:p1 --source recent --lines 120 -herdr pane read w1:p1 --source recent-unwrapped --lines 120 -herdr pane read w1:p1 --source detection -``` - -`recent-unwrapped` はソフト折り返しを無視するのでログに便利です。 -`detection` は、エージェントのスクリーン検出が使う下部バッファのスナップショットを返します。 - -## 状態の待機 - -エージェントとスクリプトの協調には wait を使います。 - -```bash -herdr agent wait w1:p1 --until done -herdr agent wait w1:p1 --until blocked -``` - -エージェントの wait は、任意のコマンドの完了ではなく意味的な状態を観測します。 - -## レスポンスの形式 - -成功レスポンスは次のようになります: - -```json -{ - "id": "req_1", - "result": { - "type": "pane_info", - "pane": { - "pane_id": "w1:p1", - "terminal_id": "term_abc123", - "workspace_id": "w1", - "tab_id": "w1:t1", - "focused": true, - "agent_status": "working", - "revision": 42 - } - } -} -``` - -`server.agent_manifests` は、ルールをリロードせずに、アクティブなエージェント検出マニフェストのソースとリモート更新の診断情報を返します: - -```json -{ - "id": "req_1", - "result": { - "type": "agent_manifest_status", - "last_check_unix": 1781043522, - "last_result": "checked", - "manifests": [ - { - "agent": "cursor", - "source": "/home/me/.config/herdr/agent-detection/cursor.toml", - "source_kind": "local override", - "active_version": "2026.06.10.1", - "cached_remote_version": "2026.06.10.1", - "local_override_shadowing_remote": true, - "remote_update_result": "current" - } - ] - } -} -``` - -`last_check_unix`、`last_result`、`active_version`、`cached_remote_version`、`remote_update_result`、`remote_update_error`、`remote_last_checked_unix`、`warning` のようなフィールドは、利用できないときは省略されます。`server.reload_agent_manifests` は、メモリ内のルールキャッシュをリロードした後、同じ `manifests` の項目形式を持つ `agent_manifest_reload` を返します。 - -`agent.explain` は、サーバーのアクティブなマニフェストキャッシュを使って、対象ペインの検出スナップショットを実行中のサーバーで評価します: - -```json -{ - "id": "req_2", - "method": "agent.explain", - "params": { "target": "w1:p1" } -} -``` - -レスポンスには `herdr agent explain --json` が出力するのと同じ explain オブジェクトが含まれます: 最終状態、マニフェストのソースとバージョン、マッチしたルール、評価されたルールの証拠、スキップ状態の理由、idle フォールバックの理由、そして完全なライフサイクルフック権威によってスクリーンルールが権威でなくなったときの `screen_detection_skip_reason` です。 - -クライアントには `agent.explain` をサポートする実行中のサーバーが必要です。Herdr のアップグレード後は、このメソッドに頼る前にサーバーを再起動するかライブハンドオフしてください。 - -エラーは次のようになります: - -```json -{ - "id": "req_1", - "error": { - "code": "not_found", - "message": "pane not found" - } -} -``` - -## プロトコルの安定性 - -Herdr にはクライアント/サーバー互換性のためのプロトコルバージョンがあります。プロトコルの変更は、リリースの互換性を念頭にレビューされます。 - -新しい挙動に依存する前に、`ping` または `herdr status` でサーバーのプロトコルを確認してください。未知のフィールドは寛容に扱ってください。 diff --git a/website/src/content/docs/ja/troubleshooting.mdx b/website/src/content/docs/ja/troubleshooting.mdx deleted file mode 100644 index a5b64361..00000000 --- a/website/src/content/docs/ja/troubleshooting.mdx +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: トラブルシューティング -description: インストール、ターミナル入力、セッション、キーバインド、リモート接続の一般的な問題を診断します。 ---- - -まずバージョンとセッション状態を確認します: - -```bash -herdr -V -herdr status -``` - -OS、外側のターミナル名とバージョン、ローカルまたはリモートのどちらか、tmux を使用しているかも記録してください。 - -## Windows で CJK IME の UI 位置がずれる、またはカーソルがちらつく - -Herdr は、ConPTY ベースのマルチプレクサーによる画面再描画中にネイティブカーソルがちらついたり、ジャンプしたり、古い位置を表示したりすることを避けるため、ネイティブ Windows と WSL ではデフォルトでセル描画カーソルを使います。セル描画カーソルは、韓国語、日本語、中国語 IME の変換中テキストや候補 UI が使用するネイティブカーソルの基準位置を提供できません。 - -IME の変換中テキストや候補ウィンドウが誤った位置に表示される場合は、ネイティブカーソルを有効にしてください: - -```toml -[ui] -host_cursor = "native" -``` - -ネイティブモードでは IME の基準位置が正しくなりますが、出力中にカーソル表示が乱れることがあります。視覚的に安定したカーソルへ戻すには `host_cursor = "drawn"` を設定するか、設定を削除して Windows のデフォルトを使ってください。現在の制限については [Windows ベータ](/ja/docs/windows-beta/) を参照してください。 - -## Enter、Tab、Backspace が 2 回入力される - -古いターミナルでは、アプリケーションが Kitty キーボードイベント報告を有効にすると、Enter、Tab、Backspace のリリースをプレスと同じバイトとして送ることがあります。送信後は Herdr から重複したバイトを区別できません。 - -上流の修正を含むバージョンへ外側のターミナルを更新してください: - -| ターミナル | 修正済みの最小バージョン | -| --- | --- | -| kitty | 0.33.0 | -| foot | 1.20.0 | -| Alacritty | 0.15.0 | - -長期サポート版 Linux ディストリビューションの古いターミナルパッケージで特に発生します。確認済みの境界キャプチャと上流参照は [Herdr issue #1116](https://github.com/herdrdev/herdr/issues/1116) を参照してください。現在のターミナルでも発生する場合は、正確なバージョンと Herdr の外でも発生するかを報告してください。 - -## Option+Left または Option+Right を押すと `;3D` または `;3C` が入力される - -ターミナルは一般に、Alt+Left と Alt+Right を標準の修飾付き矢印シーケンス `ESC[1;3D` と `ESC[1;3C` として送信します。macOS では、まず外側のターミナルで Option を Alt として扱うよう設定する必要があります。シェルがこれらのシーケンスを割り当てていない場合、zsh は残りの文字を `;3D` または `;3C` と表示することがあります。これは kitty、Alacritty、その他のターミナルで発生する可能性があります。Herdr と tmux はどちらも元の修飾付き矢印入力を保持します。 - -すべてのターミナルとネストしたシェルで修飾付き矢印を単語移動として使う場合は、zsh のバインドを明示的に追加します: - -```zsh -bindkey $'\e[1;3D' backward-word -bindkey $'\e[1;3C' forward-word -``` - -kitty の外では動作するのに Herdr 内では動作しないことがあります。これは kitty の自動 zsh インテグレーションが、kitty が直接起動したシェルにだけこれらのバインドを追加し、ターミナルマルチプレクサーが起動したシェルには追加しないためです。kitty の[手動シェルインテグレーション手順](https://sw.kovidgoyal.net/kitty/shell-integration/#manual-shell-integration)に従うか、シェルへ届く前に `kitty.conf` でキーを割り当ててください: - -```text -map alt+left send_text all \x1bb -map alt+right send_text all \x1bf -``` - -ターミナルアプリケーションが Alt+Left と Alt+Right を直接使用する場合があるため、Herdr は修飾付き矢印を意図的に書き換えません。調査の詳細は [Herdr issue #1370](https://github.com/herdrdev/herdr/issues/1370) を参照してください。 - -## Herdr を更新したのに実行中のセッションが古い - -バイナリを更新しても、互換性のある実行中サーバーは自動で置き換わらないことがあります。`herdr status` を確認してください。更新済みサーバーを起動するには、セッションを停止して Herdr を再起動します: - -```bash -herdr server stop -herdr -``` - -サーバーを停止するとペインのプロセスも終了します。名前付きセッションでは `herdr session stop <name>` を使います。更新機能、パッケージマネージャー、ライブハンドオフについては[インストール](/ja/docs/install/#update)を参照してください。 - -## `herdr` コマンドが見つからない - -ターミナルを再起動して環境を読み込み直し、Herdr のインストール先が `PATH` に含まれていることを確認してください。パッケージマネージャー経由のインストールは、そのパッケージマネージャーから更新して公開する必要があります。[インストール](/ja/docs/install/#verify)を参照してください。 - -## 直接キーバインドが動作しない - -OS または外側のターミナルが Herdr に届く前にキーを処理している可能性があります。そのレイヤーでキーを解放するか、別のバインドを選んでください。既知の競合と安全なデフォルトは[キーボード](/ja/docs/keyboard/#going-prefix-free)を参照してください。 - -## リモートアタッチで認証できない - -まず `ssh <host>` で通常の OpenSSH 接続が動作することを確認してください。非対話シェル、CI、モバイルターミナルでパスフレーズ付きキーを使う場合は、リモートアタッチの前にキーを `ssh-agent` へ読み込んでください。[永続化とリモートアクセス](/ja/docs/persistence-remote/#remote-attach-over-ssh)を参照してください。 - -## 診断ログを探す - -Herdr のログはデフォルトで `~/.config/herdr/` にあります: - -```text -herdr.log -herdr-client.log -herdr-server.log -``` - -詳細なログには `HERDR_LOG=herdr=debug` を設定します。問題を報告するときは現在のログとローテーション済みログを含めてください。[設定](/ja/docs/configuration/#logs)を参照してください。 diff --git a/website/src/content/docs/ja/windows-beta.mdx b/website/src/content/docs/ja/windows-beta.mdx deleted file mode 100644 index fa526872..00000000 --- a/website/src/content/docs/ja/windows-beta.mdx +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: Windows ベータ -description: ネイティブ Windows 対応の状況、サポートされるワークフロー、既知の制限。 ---- - -ネイティブ Windows 対応は実験的ベータです。 - -Windows 上の Herdr は、Herdr が本来前提としていた Unix の PTY モデルではなく、ConPTY と Windows のプロセス/ランタイム挙動を使います。Herdr の機能には Windows にきれいに対応付くものもあれば、そうでないものもあります。このプレビューは、すべての Linux/macOS 機能が Windows で完全にサポートされることを約束するものではありません。 - -ベータの目的は実際の使用から学ぶことです: インストールの成功率、ペインの信頼性、エージェントのワークフロー、バグの量、不足している機能、そして Windows ユーザーが Herdr から十分な価値を得られているかどうか。そのフィードバックに基づき、Windows 対応は安定版に昇格するか、成熟するまでプレビュー限定のままか、メンテナンスコストに見合わなければ縮小される可能性があります。 - -ネイティブ Windows ベータビルドは PowerShell でインストールします: - -```powershell -powershell -ExecutionPolicy Bypass -c "irm https://herdr.dev/install.ps1 | iex" -``` - -Windows ベータビルドはプレビューチャンネルでのみ提供されます。Windows では Herdr が設定を変更せずにデフォルトでプレビューを使います。インストーラーはリリースを `%USERPROFILE%\.herdr\packages\standalone\releases` に保存し、`%LOCALAPPDATA%\Programs\Herdr\bin` を現在のリリースに向け、実行中のプロセスがアップデートを妨げないよう少数の古いリリースを保持します。 - -内部ベータテスト向けに、`HERDR_MANIFEST_URL` でインストーラーを Herdr の安定版/プレビューマニフェストではなくカスタムマニフェストに向けられます。 - -## ベータでサポート - -| 機能 | 状況 | -| --- | --- | -| ローカル永続セッション | ベータ | -| ConPTY によるネイティブペイン | ベータ | -| Windows Terminal / PowerShell アプリからのアタッチ | ベータ | -| `cmd.exe` ペイン | ベータ | -| 起動時 cwd とワークスペースラベル | ベータ | -| ペイン起動時の cwd | ベータ | -| エージェントコマンドの発見 | ベータ | -| エージェントのセルフレポートインテグレーション | ベータ | -| エージェントのプロセスツリー検出 | ベータ | -| 既知の cwd からの Git/worktree 検出 | ベータ | -| プラグイン | プレビュー | -| ペイン画面履歴 | ベータ | -| ネストされた起動のオーバーライド | ベータ | - -Windows のエージェントプロセス検出は、ペインのシェルの子孫プロセスをスキャンし、直接のエージェントと一般的なコマンドラッパーを認識します。Codex、Claude などのエージェントには有用ですが、Unix のフォアグラウンドプロセスグループ検出と同じものではありません。 - -プラグインは、プレビューとしてマニフェストのプラットフォームに `windows` をサポートします。GitHub インストール、ローカルリンク、ビルドコマンド、アクション、イベント、プラグインペインは Windows ではベストエフォートです。コマンドは argv 形式で Windows 互換である必要があります。`npm`、`bun`、`node` のような Node パッケージの shim は `PATH` にあれば動作するはずですが、`sh` や Bash を使う Unix 専用の例には Windows 向けの代替が必要です。プラットフォームフィルターは、未サポートのビルドコマンドをスキップし、未サポートのアクションやペインには `platform_unsupported` を返します。 - -## 部分的なサポート - -| 機能 | 状況 | -| --- | --- | -| シェルで `cd` した後のライブ cwd | 部分的 | -| シェルインテグレーション/OSC7 によるライブ cwd | ベータ | -| エージェントへのクリップボード画像貼り付け | 未検証 | -| CJK IME の変換候補位置 | 部分的 | -| Kitty graphics のレンダリング | 未検証 | -| ホストカーソル描画 | 部分的 | - -Herdr はペインを正しいディレクトリで起動でき、Herdr を起動したディレクトリから最初のワークスペースを作成できます。起動後の PowerShell のディレクトリ変更は別問題です: Herdr が調べられるプロセスのフィールドは、その後の論理的な `cd` の変化を確実には追跡しません。ライブ cwd の報告には Herdr インテグレーションかプロンプトのシェルインテグレーションを使ってください。 - -Windows Terminal は特定のエージェント向けに画像貼り付け経路をサポートしているかもしれませんが、Herdr 自身のクリップボード画像リーダーはまだ Windows に配線されていません。Windows のクリップボードブリッジが実装・テストされるまで、`alt+v` の画像貼り付けは未検証として扱ってください。リモートクリップボードの画像ブリッジは別機能で、引き続き Unix/macOS の `herdr --remote` に紐づいています。 - -Kitty graphics は実験的なままで、まだ Windows でのサポートを謳っていません。Windows Terminal での画像レンダリングを特にテストしているのでない限り、`experimental.kitty_graphics = false` のままにしてください。 - -## 既知の注意点 - -### カーソル描画 - -Herdr はネイティブ Windows のペインに ConPTY を使用します。現在の Windows のターミナルカーソル処理では、マルチプレクサーが画面を再描画している途中のカーソル位置が表示されることがあります。そのため、出力中にネイティブカーソルがちらついたり、ジャンプしたり、古い位置に一瞬残ったりします。この挙動は他のネイティブ Windows ターミナルマルチプレクサーや、VT カーソル位置を直接連続更新するテストでも再現するため、ネイティブカーソルの挙動を維持したまま Herdr 側で完全に解消することはできません。 - -視覚的な安定性を優先するため、デフォルトの `host_cursor = "auto"` はネイティブ Windows と WSL で Herdr のカーソルを端末セルの内容として描画します。それ以外の Linux と macOS クライアントでは、引き続きネイティブの端末カーソルを使います。Windows の描画カーソルは安定していて点滅しませんが、外側ターミナルのネイティブな点滅、形状、カーソル色は反映されません。 - -描画カーソルは、Windows が IME の変換中テキストや候補ウィンドウの位置決めに使う実際のカーソルではありません。そのため、韓国語、日本語、中国語 IME の UI が誤った位置に表示されることがあります。この問題が発生する場合は、外側ターミナルのカーソルを有効にしてください: - -```toml -[ui] -host_cursor = "native" -``` - -ネイティブモードでは IME の基準位置が正しくなりますが、出力中にカーソルのちらつき、ジャンプ、古い位置の残像が再び発生することがあります。これは現在の Windows ベータにおける互換性上のトレードオフです。 - -### キーボードとマウス - -Windows のターミナルは、修飾キー付きのキーをすべて同じ形で報告するわけではありません。Herdr は Windows Terminal と Windows 上の Alacritty ではマウス報告と `ctrl+j` を保持しますが、`shift+enter` は外側ターミナルが修飾付き Enter として区別して報告する場合にだけ動作します。Windows またはターミナルがそれを通常の Enter として報告する場合、Herdr は通常の Enter を転送します。 - -## コピーと貼り付け - -Herdr のペインテキストコピーは Windows ベータで動作します。ペイン内でテキストをドラッグ選択すると Herdr 経由でコピーされます。 - -テキストの貼り付けには Windows Terminal で `ctrl+shift+v` を使ってください。複数行テキストの貼り付けはブラケット付きなので、シェルやエージェントのプロンプトは各行を個別に送信せず、ひとつの貼り付けとして受け取ります。`shift` を押しながら右クリックすると、クリックを Herdr に送らずに外側ターミナルの貼り付けアクションを使えます。 - -## Windows ベータで未サポート - -| 機能 | 状況 | -| --- | --- | -| ダイレクトターミナルアタッチ | 未サポート | -| Windows バイナリからの `herdr --remote` | 未サポート | -| ライブサーバーハンドオフ | 未サポート | -| Unix ファイルディスクリプタのハンドオフ | 未サポート | -| Unix フォアグラウンドプロセスグループ | 未サポート | -| リモートクリップボード画像ブリッジ | 未サポート | -| プレフィックスによる入力ソース切り替え | 未サポート | -| 署名済みバイナリ / SmartScreen 回避 | 未サポート | - -Windows からのリモート作業は、サーバーに SSH してそこで `herdr` を実行してください: - -```powershell -ssh you@server -herdr -``` - -このモードでは Herdr はリモートホスト上で動きます。ネイティブ Windows の `herdr --remote` はベータの範囲外です。 - -Windows のアップデートは Windows インストーラー経由で行われ、バージョン付きインストールジャンクションを更新します。アップデート後は実行中の Herdr セッションを再起動してください。ライブハンドオフは Unix 専用です。 - -## Windows ベータの問題を報告する - -以下を含めてください: - -- Herdr のバージョン。 -- Windows のバージョン。 -- ターミナルアプリ。 -- シェル (PowerShell、cmd など)。 -- 名前付き `HERDR_SESSION` を使っていたかどうか。 -- 関連する Herdr のログ。 -- 正確な再現手順。 |
