diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-06 04:53:05 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-06 04:54:21 +0300 |
| commit | d36a6ded3bbc623a3fcad3c6e45b7b22ae9b6267 (patch) | |
| tree | 2777d83cbb67ebc2cabd6bffe5e22432c490f62b /website/src/content/docs/ja | |
| parent | b04c6496a8c08059b8cc83ab29a51023f16c76cd (diff) | |
feat(website): add japanese and simplified chinese docs with i18n, translation issue flow
Diffstat (limited to 'website/src/content/docs/ja')
| -rw-r--r-- | website/src/content/docs/ja/agent-skill.mdx | 65 | ||||
| -rw-r--r-- | website/src/content/docs/ja/agents.mdx | 163 | ||||
| -rw-r--r-- | website/src/content/docs/ja/cli-reference.mdx | 356 | ||||
| -rw-r--r-- | website/src/content/docs/ja/concepts.mdx | 85 | ||||
| -rw-r--r-- | website/src/content/docs/ja/configuration.mdx | 526 | ||||
| -rw-r--r-- | website/src/content/docs/ja/how-to-work.mdx | 103 | ||||
| -rw-r--r-- | website/src/content/docs/ja/index.mdx | 77 | ||||
| -rw-r--r-- | website/src/content/docs/ja/install.mdx | 151 | ||||
| -rw-r--r-- | website/src/content/docs/ja/integrations.mdx | 286 | ||||
| -rw-r--r-- | website/src/content/docs/ja/keyboard.mdx | 112 | ||||
| -rw-r--r-- | website/src/content/docs/ja/marketplace.mdx | 53 | ||||
| -rw-r--r-- | website/src/content/docs/ja/persistence-remote.mdx | 132 | ||||
| -rw-r--r-- | website/src/content/docs/ja/plugins.mdx | 318 | ||||
| -rw-r--r-- | website/src/content/docs/ja/quick-start.mdx | 69 | ||||
| -rw-r--r-- | website/src/content/docs/ja/session-state.mdx | 104 | ||||
| -rw-r--r-- | website/src/content/docs/ja/socket-api.mdx | 609 | ||||
| -rw-r--r-- | website/src/content/docs/ja/windows-beta.mdx | 100 |
17 files changed, 3309 insertions, 0 deletions
diff --git a/website/src/content/docs/ja/agent-skill.mdx b/website/src/content/docs/ja/agent-skill.mdx new file mode 100644 index 00000000..1fc6405d --- /dev/null +++ b/website/src/content/docs/ja/agent-skill.mdx @@ -0,0 +1,65 @@ +--- +title: エージェントスキルファイル +description: Claude Code などのコーディングエージェントに Herdr の使い方をインストールします。 +--- + +Herdr は再利用可能なエージェントスキルファイルを [`SKILL.md`](https://github.com/ogulcancelik/herdr/blob/master/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 ogulcancelik/herdr --skill herdr -g +``` + +`-g` フラグは、対応エージェントにグローバルインストールします。現在のプロジェクトにインストールする場合は `-g` を省略してください。 + +手動でのフォールバックおよび信頼できるソースとしては、リポジトリのコピーを使ってください: + +```text +https://github.com/ogulcancelik/herdr/blob/master/SKILL.md +``` + +スキルシステムを持つエージェントには、このファイルを `herdr` という名前のスキルとしてインストールしてください。スキルシステムを持たないエージェントには、ファイルの内容をプロジェクト指示またはユーザー指示に貼り付けてください。 + +インストール後、Herdr の中でエージェントを起動します: + +```bash +herdr +claude +``` + +他のコーディングエージェントを Herdr のペインで使っても構いません。重要なのは、エージェントのプロセスが Herdr 内で動作していて `HERDR_ENV=1` が利用できることです。 + +## 安全ルール + +このスキルはひとつのガードレールから始まります: `HERDR_ENV=1` が設定されていない場合、エージェントは停止して、Herdr 管理下のペイン内で動作していないと伝えるべきです。 + +これにより、Herdr の外にいるエージェントが自分のものではないセッションを制御しようとするのを防ぎます。 + +## エージェント向けリファレンス + +コマンドの完全なガイドはスキルファイル自体にあります。ペイン ID、`pane split`、`pane run`、`pane read`、`wait output`、`wait agent-status`、ワークスペースとタブのコマンド、協調動作のレシピを扱っています。 + +ソースファイルはこちら: + +[GitHub で `SKILL.md` を開く →](https://github.com/ogulcancelik/herdr/blob/master/SKILL.md) diff --git a/website/src/content/docs/ja/agents.mdx b/website/src/content/docs/ja/agents.mdx new file mode 100644 index 00000000..60a6451c --- /dev/null +++ b/website/src/content/docs/ja/agents.mdx @@ -0,0 +1,163 @@ +--- +title: エージェント +description: Herdr が何を検出できるか、エージェント状態の仕組み、インテグレーションによる精度向上。 +--- + +Herdr は複数のコーディングエージェントを同時に動かすために作られています。各エージェントは、シェル、ログ、プロンプト、実行中プロセスをそのまま保った実際のターミナルペインの中にいます。Herdr はどのペインにエージェントがいるかを追跡し、その状態をタブとワークスペースに集約し、すべてのターミナルを手作業で見回る代わりに、注意が必要なペインへ直接ジャンプできるようにします。 + +## 対応エージェント + +一般的なコーディングエージェントは、追加設定なしで自動検出されます。重要な違いは Herdr がエージェントを見えるかどうかではありません。どのシグナルが `idle`、`working`、`blocked` を決定する権限を持つかです。 + +| エージェント | 状態の権威 | インテグレーションの役割 | +| --- | --- | --- | +| Pi | インストール時はライフサイクルフック。それ以外はスクリーンマニフェスト | 状態とセッション | +| OMP | インストール時はライフサイクルフック | 状態 | +| GitHub Copilot CLI | スクリーンマニフェスト | セッション | +| Devin CLI | スクリーンマニフェスト | セッション | +| Kimi Code CLI | インストール時はライフサイクルフック。それ以外はスクリーンマニフェスト | 状態とセッション | +| Hermes Agent | インストール時はライフサイクルフック。それ以外はスクリーンマニフェスト | 状態とセッション | +| Qoder CLI | スクリーンマニフェスト | セッション | +| Droid | スクリーンマニフェスト | セッション | +| OpenCode | インストール時はライフサイクルプラグイン。それ以外はスクリーンマニフェスト | 状態とセッション | +| Kilo Code CLI | インストール時はライフサイクルプラグイン。それ以外はスクリーンマニフェスト | 状態とセッション | +| Claude Code | スクリーンマニフェスト | セッション | +| Codex | スクリーンマニフェスト | セッション | +| Cursor Agent CLI | スクリーンマニフェスト | セッション | +| Amp | スクリーンマニフェスト | なし | +| Grok CLI | スクリーンマニフェスト | なし | +| Antigravity CLI | スクリーンマニフェスト | なし | +| Kiro CLI | スクリーンマニフェスト | なし | + +検出されるもののテストが薄いもの: 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 では、VM、Bubblewrap、`fence` のようなラッパーがホストの `/proc` から実際のエージェントプロセスを隠すことがあります。コマンドに `HERDR_AGENT=<agent>` を設定して (例: `HERDR_AGENT=claude fence -- claude`)、どの既存エージェントのスクリーンマニフェストを使うべきか 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 が使えます。 + +## カスタムステータスラベル + +インテグレーションは、意味的な状態を変えずに表示用ステータスラベルを報告できます。 + +```bash +herdr pane report-agent w1:p1 \ + --source custom:indexer \ + --agent docs-bot \ + --state working \ + --custom-status indexing +``` + +`state` は wait、通知、ロールアップを制御します。`custom-status` は表示テキストだけです。 + +## CLI からエージェントを起動する + +ターミナルをエージェントターゲットとして扱いたいときは `herdr agent ...` コマンドを使います。エージェントターゲットは `agent list` に表示され、エージェント名で読み取りや入力送信ができ、エージェント状態で wait でき、直接アタッチできます。 + +スクリプトから Herdr にエージェントを起動します: + +```bash +herdr agent start reviewer --cwd ~/project --split right -- pi +``` + +特定のワークスペースやタブに配置することもできます: + +```bash +herdr agent start docs --workspace w1 --tab w1:t1 -- claude +``` + +通常のターミナル、サーバー、テスト、シェル、低レベルなターミナル入力には `herdr pane ...` コマンドを使ってください。たとえば `cargo test` には `agent start` ではなく `pane split` と `pane run` を使います。そのターミナルを意図的にエージェントターゲットとして扱うのでない限り。 + +## エージェントに直接アタッチする + +完全な 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 new file mode 100644 index 00000000..53559ea0 --- /dev/null +++ b/website/src/content/docs/ja/cli-reference.mdx @@ -0,0 +1,356 @@ +--- +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 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 +``` + +## サーバー + +```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 close <workspace_id> +``` + +フォーカスを奪わずにワークスペースを作成します: + +```bash +herdr workspace create --cwd ~/project --label api --no-focus +``` + +## 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> +``` + +## ペイン + +```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> +``` + +出力を読む: + +```bash +herdr pane read <pane_id> [--source visible|recent|recent-unwrapped|detection] [--lines N] +herdr pane read <pane_id> --source visible --ansi +herdr pane read <pane_id> --source recent-unwrapped --lines 120 +``` + +入力を送る: + +```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` のエイリアスとして受け付けられます。 + +`pane run` はテキストと Enter をアトミックに送信します。コマンドには `send-text` + `send-keys Enter` よりこちらを使ってください。 + +カスタムフックからエージェント状態を報告する: + +```bash +herdr pane report-agent <pane_id> \ + --source ID \ + --agent LABEL \ + --state idle|working|blocked|unknown \ + [--message TEXT] \ + [--custom-status TEXT] \ + [--seq N] \ + [--agent-session-id ID] \ + [--agent-session-path PATH] +``` + +公式インテグレーションがネイティブセッション参照を報告している場合、`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] \ + [--custom-status TEXT|--clear-custom-status] \ + [--state-label STATUS=TEXT] \ + [--clear-state-labels] \ + [--seq N] \ + [--ttl-ms N] +``` + +`STATUS` は `idle`、`working`、`blocked`、`done`、`unknown` のいずれかです。`--agent` は権威あるエージェントラベルに対するガードです。`--applies-to-source` はアクティブなライフサイクル権威ソースに対するガードです。表示名を変えるには `--display-agent` を使ってください。 + +メタデータのテキストは保存前に正規化されます。Herdr は前後の空白を取り除き、制御文字を除去し、`--custom-status` を 32 文字に、`--title`、`--display-agent`、各 `--state-label` の値を 80 文字に制限します。正規化後に空になった値は無視されます。 + +`--source` と `--applies-to-source` は 80 文字以下で、ASCII の英字、数字、コロン、ドット、アンダースコア、ハイフンのみを含められます。`--ttl-ms` はメタデータを自動失効させ、`1` から `86400000` ミリ秒の間でなければなりません。置き換え・クリア・ペインのクローズまで残るべきメタデータでは省略してください。`--seq` により、Herdr は同じ `--source` からの古い報告を無視できます。古い報告は API には受理されますが、ペイン状態には無視されます。 + +## エージェント + +```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 <target> <text> +herdr agent rename <target> <name>|--clear +herdr agent focus <target> +herdr agent wait <target> --status <idle|working|blocked|unknown> [--timeout MS] +herdr agent attach <target> [--takeover] +herdr agent start <name> [--cwd PATH] [--workspace ID] [--tab ID] [--split right|down] [--env KEY=VALUE] [--focus|--no-focus] -- <argv...> +herdr agent explain <target> [--json|--verbose] +herdr agent explain --file PATH --agent LABEL [--json|--verbose] +``` + +エージェントターゲットには、ターミナル ID、一意なエージェント名、検出または報告されたエージェントラベル、レガシーなペイン ID が使えます。名前とラベルはエージェントのアイデンティティです。ターミナル ID とレガシーペイン ID は低レベルな逃げ道です。 + +`agent read` は解決されたターミナルストリームを読みます。`agent send` はそのストリームにリテラルのテキストを書き込みます。`agent get`、`agent focus`、`agent wait`、`agent attach` は、解決されたターミナルがエージェントのアイデンティティを持つことを要求します。`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 のデフォルトの外側ターミナルウィンドウタイトルを復元します。 + +## Wait + +ペインの出力を待つ: + +```bash +herdr wait output <pane_id> --match <text> [--source visible|recent|recent-unwrapped] [--lines N] [--timeout MS] [--regex] [--raw] +``` + +ペインのエージェント状態を待つ: + +```bash +herdr wait agent-status <pane_id> --status <idle|working|blocked|done|unknown> [--timeout MS] +``` + +通常のコマンドやサーバーには `wait output` を使います。コーディングエージェントには `wait agent-status` を使います。 + +## インテグレーション + +```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 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 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|split|tab|zoomed] [--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` で、アクティブなペインの上に一時的なズームオーバーレイを開きます。分割、新しいタブ、ズームされたペインとして開くこともできます。ターミナル以外のネイティブなプラグインペインは今後の対応面です。 + +`--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` | エージェントのスクリーン検出が使う下部バッファのスナップショット。 | + +## 環境変数 + +| 変数 | 目的 | +| --- | --- | +| `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 new file mode 100644 index 00000000..640ba8a4 --- /dev/null +++ b/website/src/content/docs/ja/concepts.mdx @@ -0,0 +1,85 @@ +--- +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/configuration.mdx b/website/src/content/docs/ja/configuration.mdx new file mode 100644 index 00000000..39d3c825 --- /dev/null +++ b/website/src/content/docs/ja/configuration.mdx @@ -0,0 +1,526 @@ +--- +title: 設定 +description: Herdr のキーバインド、テーマ、サイドバーの挙動、通知、高度なオプションを設定します。 +--- + +Herdr は設定ファイルなしで動作します。カスタムキー、テーマ、サイドバー設定、通知、高度な挙動が欲しくなったら追加してください。 + +## 設定ファイル + +Herdr は次の場所から設定を読み込みます: + +```text +~/.config/herdr/config.toml +``` + +完全なデフォルト設定を表示します: + +```bash +herdr --default-config +``` + +完全な出発点が欲しい場合は、これを設定として保存してください: + +```bash +herdr --default-config > ~/.config/herdr/config.toml +``` + +設定値が無効な場合、Herdr は安全なデフォルトにフォールバックし、起動時に警告を表示します。 + +`onboarding` が存在しないか true の場合、Herdr は初回セットアップを表示します。オンボーディングから先へ進むと `onboarding = false` が書き込まれ、設定のインテグレーションタブが開きます。セットアップ後にそのフローをスキップしたい場合に設定してください。 + +```toml +onboarding = false +``` + +## アップデート + +Linux と macOS の直接インストールは、デフォルトで安定版アップデートチャンネルを使います。Windows ベータのインストールはデフォルトでプレビューを使い、安定版の Windows リリースが提供されるまで安定版には切り替えられません。 + +```toml +[update] +channel = "stable" +version_check = true +manifest_check = true +``` + +`channel = "preview"` を設定すると、`herdr update` は現在の開発ブランチから手動公開されるプレビュービルドをインストールします。Homebrew、mise、Nix のインストールはプレビューチャンネルを無視し、それぞれのパッケージマネージャーでアップデートします。 + +`version_check = false` を設定すると、新しい Herdr バージョンのバックグラウンドチェックを無効にします。手動の `herdr update` は引き続き設定済みチャンネルを使います。 + +`manifest_check = false` を設定すると、リモートのエージェント検出マニフェストのバックグラウンドチェックを無効にします。Herdr はバンドルされたマニフェストとローカルオーバーライドを引き続き使います。 + +## 設定のリロード + +`config.toml` を編集した後、実行中のサーバーをリロードします: + +```bash +herdr server reload-config +``` + +Herdr のグローバルメニューを開いて `reload config` を選ぶこともできます。 + +リロードは、ペインを再起動することなくほとんどの UI 設定を適用します。起動時のみの設定には引き続き再起動が必要です。 + +## ターミナルのデフォルト + +新しく作成される対話的ペインに Herdr が使う実行ファイルを設定します: + +```toml +[terminal] +default_shell = "nu" +``` + +未設定または空の場合、Herdr は `$SHELL`、次に `/bin/sh` を使います。これは実行ファイル名またはパスであり、シェルのコマンドラインではありません。既存のペインは再作成されるまで現在のシェルを保ちます。コマンドペインは引き続き `/bin/sh -c` を通して実行され、デタッチされたカスタムコマンドキーバインドは Herdr の既存の `/bin/sh -lc` 経路を使います。 + +新しく作成される対話的ペインのシェルの起動方法を設定します: + +```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` を最初に include し、その後にフォールバックの `ServerAliveInterval` と `ServerAliveCountMax` の値を加えたプライベートな一時 SSH 設定を書き込みます。あなた自身の SSH キープアライブ設定が優先されます。Herdr が生成する設定を使わず素の `ssh` でブリッジを実行するには `manage_ssh_config = false` を設定してください。 + +## キーバインド + +プレフィックスの導入ガイドと検証済みのプレフィックスなし構成については、[キーボード](/ja/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" +``` + +デフォルトのキーマップはプレフィックス優先で、シェル、エディタ、tmux、ターミナルアプリから入力を奪いうる直接ショートカットを避けています。主なデフォルトは次のとおりです: + +```toml +[keys] +detach = "prefix+q" +workspace_picker = "prefix+w" +goto = "prefix+g" +new_workspace = "prefix+shift+n" +new_worktree = "prefix+shift+g" +rename_workspace = "prefix+shift+w" +close_workspace = "prefix+shift+d" +navigate_workspace_up = "up" +navigate_workspace_down = "down" +navigate_pane_left = "h" +navigate_pane_down = "j" +navigate_pane_up = "k" +navigate_pane_right = "l" +remote_image_paste = "ctrl+v" +new_tab = "prefix+c" +previous_tab = "prefix+p" +next_tab = "prefix+n" +switch_tab = "prefix+1..9" +rename_tab = "prefix+shift+t" +close_tab = "prefix+shift+x" +copy_mode = "prefix+[" +focus_pane_left = "prefix+h" +focus_pane_down = "prefix+j" +focus_pane_up = "prefix+k" +focus_pane_right = "prefix+l" +swap_pane_left = "prefix+shift+h" +swap_pane_down = "prefix+shift+j" +swap_pane_up = "prefix+shift+k" +swap_pane_right = "prefix+shift+l" +cycle_pane_next = "prefix+tab" +cycle_pane_previous = "prefix+shift+tab" +last_pane = "" +split_vertical = "prefix+v" +split_horizontal = "prefix+minus" +close_pane = "prefix+x" +zoom = "prefix+z" +resize_mode = "prefix+r" +toggle_sidebar = "prefix+b" +``` + +任意のアクションはデフォルトでは未設定です。プレフィックスモードの挙動には `prefix+` で、意図的に直接ショートカットにしたいときは明示的な修飾キーコードでバインドしてください: + +```toml +[keys] +previous_workspace = "prefix+shift+left" +next_workspace = "prefix+shift+right" +last_pane = "prefix+tab" +open_worktree = "prefix+shift+o" +remove_worktree = "prefix+alt+d" +next_tab = ["prefix+n", "ctrl+alt+]"] +``` + +`last_pane` はワークスペースとタブをまたいで最後にフォーカスしていたペインに戻ります。tmux スタイルのペインバインド `prefix+l` がすでに右のペインへのフォーカスに使われているため、デフォルトでは未設定です。 + +`remote_image_paste` は `herdr --remote` でのみ有効です。ローカルのクリップボード画像をリモートのペインに送るローカルクライアント側のショートカットです。空文字列に設定すると生キーのショートカットを無効にできます。外側のターミナルが送る paste-image シグナルは引き続き機能します。 + +キー文字列には、通常のキー、`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 = "pane" +command = "lazygit" +description = "run lazygit" +``` + +`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 が検出できる場合、フォーカス中のペインの作業ディレクトリから実行されます。 + +## テーマ + +組み込みテーマを選びます: + +```toml +[theme] +name = "catppuccin" +``` + +組み込みテーマ: + +`catppuccin`、`catppuccin-latte`、`terminal`、`tokyo-night`、`tokyo-night-day`、`dracula`、`nord`、`gruvbox`、`gruvbox-light`、`one-dark`、`one-light`、`solarized`、`solarized-light`、`kanagawa`、`kanagawa-lotus`、`rose-pine`、`rose-pine-dawn`、`vesper`。 + +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` を省略すると、Herdr は設定された `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 のメインダッシュボードです。ワークスペース、タブ、ペイン、エージェントの状態を表示します。 + +主なオプション: + +```toml +[ui] +sidebar_width = 32 +sidebar_min_width = 18 +sidebar_max_width = 36 +mobile_width_threshold = 64 +mouse_capture = true +right_click_passthrough_modifier = "" +redraw_on_focus_gained = true +mouse_scroll_lines = 3 +confirm_close = true +prompt_new_tab_name = true +pane_borders = true +pane_gaps = true +show_agent_labels_on_pane_borders = false +agent_panel_sort = "spaces" +accent = "cyan" +``` + +`sidebar_min_width` と `sidebar_max_width` は、展開されたサイドバーのリサイズ範囲を桁数で制御します。デフォルトは 18 と 36 です。 + +`mobile_width_threshold` は、Herdr がモバイル向けの単一カラムレイアウトを使うターミナル幅の閾値を制御します。デフォルトは 64 桁です。折りたたみ端末、タブレット、幅の広いスマートフォンターミナルでは増やしてください。 + +エージェントパネルはすべてのスペースをまたいですべてのエージェントを表示します。`agent_panel_sort` には `spaces` または `priority` を指定できます。`workspaces` は `spaces` のエイリアスとして受け付けられます。デフォルトは `spaces` で、エージェントをスペース順にグループ化したまま保ちます。`priority` は注意の優先度順に並べます: blocked、done、working、idle、そして unknown です。同じステータス内では、最近状態が変わったエージェントが先に表示されます。 + +`confirm_close` はワークスペースを閉じるときに確認を求めるかどうかを制御します。`prompt_new_tab_name` は新しいタブで先にラベルを尋ねるかどうかを制御します。 + +URL の command+クリックなど、通常のクリックをターミナルに処理させたい場合は `mouse_capture = false` を設定してください。マウスキャプチャが有効な場合、ターミナルが修飾キー付きクリックを Herdr に送れば、Ctrl+クリックでペインのリンクを開けます。これは macOS も含みます。Herdr がマウス入力をキャプチャしている間、Cmd+クリックは通常のクリックと区別して報告されません。ターミナルネイティブのバイパス経路には、Linux では Shift+Ctrl+クリック、macOS では Shift+Cmd+クリックを使ってください。 + +マウスレポーティング対応のペインアプリの中で、Ctrl+右クリック、ホールド、ドラッグのジェスチャーを Herdr のペインメニューを開く代わりにアプリへ届けたい場合は `right_click_passthrough_modifier = "ctrl"` を設定してください。デフォルトは空で、このパススルーは無効です。対応する修飾キーは `ctrl`、`alt`、`cmd`、`super`、`meta`、`hyper` です。多くのターミナルが Shift+マウスを自分のマウスバイパスのために予約しているため、`shift` は拒否されます。 + +Herdr に戻ったときの目に見える全画面リフレッシュを避けるには `redraw_on_focus_gained = false` を設定してください。まれに発生する古い/汚れたホストターミナル表示から全再描画で回復できるため、デフォルトは `true` です。 + +マウスホイール 1 ノッチでスクロールするペインのスクロールバック行数を変えるには `mouse_scroll_lines` を設定します。デフォルトは 3 です。マウスレポーティングを要求するペインアプリは引き続きホイールイベントを直接受け取ります。オルタネートスクリーンのアプリにはスクロールするスクロールバックがありません。[スクロールバック](#スクロールバック)を参照してください。 + +分割ペインの境界線を消すには `pane_borders = false` を設定します。分割ペインにコンパクトな共有仕切り線を使わせるには `pane_gaps = false` を設定します。境界線が無効な場合、ペインの間隔はペイン間の空白ターミナルセル 1 個になります。ターミナルのセルは通常、幅より高さが大きいため、上下ペイン間の 1 行の間隔は左右ペイン間の 1 桁の間隔より大きく見えることがあります。 + +手動のペインラベルが設定されていないときに、検出されたエージェントラベルを分割ペインの境界線に表示したい場合は `show_agent_labels_on_pane_borders = true` を設定してください。 + +## 通知 + +Herdr は、エージェントが完了したり入力を必要としたりしたときにポップアップ通知を表示できます。 + +```toml +[ui.toast] +delivery = "off" +delay_seconds = 1 + +[ui.toast.herdr] +position = "bottom-right" + +[ui.toast.clipboard] +enabled = true +position = "bottom-center" +``` + +`delivery = "off"` はポップアップ通知を無効にします。これがデフォルトです。 + +`delivery = "herdr"` は Herdr の UI 内にトーストを表示します。トーストをクリックするか、`keys.open_notification_target` をバインドすると、対象のワークスペース、タブ、ペインにフォーカスします。`ui.toast.herdr.position` には `top-left`、`top-right`、`bottom-left`、`bottom-right` を設定できます。デスクトップの位置は Herdr のフレーム全体を基準とします。 + +`delivery = "terminal"` は外側のターミナルにデスクトップ通知の表示を依頼します。Herdr は Ghostty、iTerm2、Kitty、WezTerm 向けのターミナル通知エスケープシーケンスを送ります。ローカルのターミナルが通知を所有するため、SSH 越しで便利です。 + +`delivery = "system"` はローカルのオペレーティングシステムに直接依頼します。macOS では、Herdr は `terminal-notifier` が利用可能ならそれを使い、なければ `/usr/bin/osascript` にフォールバックします。`terminal-notifier` は通知をクリックしたときにホストのターミナルをアクティブにできます。Linux では、Herdr は `notify-send` を使い、`DISPLAY` または `WAYLAND_DISPLAY` を必要とします。 + +ポップアップ通知はバックグラウンドの注意喚起のためのものです。Herdr はアクティブなタブについてはポップアップを抑制します。 + +`delay_seconds` は、完了または入力要求のエージェント通知を送る前に待機します。Herdr は、遅延が切れた時点でペインがまだ同じ状態の場合にのみ通知します。即時通知には `0` を設定してください。有効な値は `0` から `3600` です。 + +クリップボードのフィードバックは、フォアグラウンドのコピー操作を確認するもので、terminal や system の配信では送られないため、別に設定します。コピー完了のポップアップを隠すには `ui.toast.clipboard.enabled = false` を設定してください。クリップボードの位置は `top-left`、`top-center`、`top-right`、`bottom-left`、`bottom-center`、`bottom-right` です。 + +## サウンド + +サウンド通知はデフォルトで有効で、ローカルの Herdr クライアントが再生します。 + +```toml +[ui.sound] +enabled = true +``` + +Herdr は、エージェントが完了したときに完了音を、エージェントが入力を必要とするときに注意音を再生します。共有マシンやリモートサーバーでは、明示的に音が欲しいのでなければ `enabled = false` を設定してください。 + +macOS では、Herdr は `afplay` を使います。Linux では、mp3 対応プレイヤーを順に試します: `paplay`、`pw-play`、`ffplay`、`mpg123`、そして `mpv` です。プレイヤーがない場合、音の再生はスキップされ、Herdr は警告をログに残します。 + +カスタムサウンドは mp3 ファイルでなければなりません。相対パスは設定ファイルのディレクトリから解決されます。 + +```toml +[ui.sound] +path = "sounds/notification.mp3" +done_path = "sounds/done.mp3" +request_path = "sounds/request.mp3" +``` + +`path` はすべてのサウンド通知にひとつの音を設定します。`done_path` と `request_path` は、完了音と入力要求音だけを上書きします。 + +エージェント別のサウンド上書きには `default`、`on`、`off` を指定できます。キーには `claude`、`codex`、`devin`、`droid` のような検出されたエージェントラベルを使います。Droid はデフォルトでミュートされています。 + +```toml +[ui.sound.agents] +droid = "off" +claude = "on" +``` + +## スクロールバック + +新しく作成されるペインのスクロールバックバッファサイズを設定します: + +```toml +[advanced] +scrollback_limit_bytes = 10485760 +``` + +既存のペインは、再作成されるまで現在のバッファを保ちます。 + +ペインは、アプリがプライマリスクリーンに書き込んでいるときにのみスクロールバーを表示します。オルタネートスクリーンに切り替えるフルスクリーンアプリ (vim、htop、`CLAUDE_CODE_NO_FLICKER=1` の Claude Code) はスクロールバックを生成しないため、スクロールバーは表示されず、ホイールイベントはアプリに直接ルーティングされます。アプリ自身のキーや UI でスクロールしてください。 + +## ペイン画面履歴 + +デフォルトでは、セッションの完全な再起動はワークスペース、タブ、ペイン、cwd、レイアウト、フォーカスを、ペインの内容を保存せずに復元します。 + +ペイン画面履歴はデフォルトで無効です。ペイン出力にはシークレット、トークン、プロンプト、コマンド出力が含まれうるため、サーバーの完全な再起動をまたいで Herdr に直近のペイン内容を保存させたいときだけ有効にしてください: + +```toml +[experimental] +pane_history = true +``` + +Settings > Experiments > pane screen history からも切り替えられます。 + +有効にすると、Herdr は保存したペイン履歴を `session.json` の隣の `session-history.json` に保存します。 + +ペイン画面履歴が、ライブ永続化、スナップショット復元、エージェントネイティブのセッション復元、ライブハンドオフとどう違うかは[セッション状態と復元](/ja/docs/session-state/)を参照してください。 + +## ネストされた起動 + +Herdr は通常、Herdr の中で Herdr を起動しないよう保護しています。 + +```toml +[experimental] +allow_nested = false +``` + +ネストされた起動はテスト目的でのみ有効にしてください。 + +## Kitty graphics + +Kitty graphics のサポートは実験的です。 + +```toml +[experimental] +kitty_graphics = false +``` + +ターミナルの画像挙動をテストしているのでなければ無効のままにしてください。 + +## エージェントセッション復元 + +Herdr は、Herdr サーバーの再起動後に、対応エージェントのペインをネイティブの会話セッションで再起動できます。 + +```toml +[session] +resume_agents_on_restore = true +``` + +これはデフォルトで有効です。Herdr が resume するのは、公式 Herdr インテグレーションを通じてネイティブセッション参照を報告したペインだけです。対応する resume ターゲットは Claude Code、Codex、Cursor Agent CLI、GitHub Copilot CLI、Droid、Kimi Code CLI、Qoder CLI、Pi、Hermes Agent、OpenCode、Kilo Code CLI です。未対応、欠落、無効、重複、または古くなったセッション参照は、保存されたペインディレクトリで通常のシェルとして復元されます。 + +セッション参照はローカルの Herdr セッションスナップショットに保存されます。通常のペイン、エージェント、ステータス、イベント出力には表示されません。 + +エージェントネイティブのセッション復元が、ペイン画面履歴やライブハンドオフとどう違うかは[セッション状態と復元](/ja/docs/session-state/)を参照してください。 + +## IME カーソルトラッキング + +フォーカス中のペインがカーソルを隠して独自に描画する場合 — Claude Code、pi、codex、Devin のような AI エージェント TUI でよくあります — 外側のターミナルがカーソルを報告しなくなるため、macOS のネイティブ入力メソッドは変換候補ウィンドウの位置を追跡できなくなります。 + +ペインの `?25l` 要求に関係なく、フォーカス中のペインのカーソルアンカーを外側のターミナルに公開するには `reveal_hidden_cursor_for_cjk_ime = true` を設定します: + +```toml +[experimental] +reveal_hidden_cursor_for_cjk_ime = false +cjk_ime_agents = [] +cjk_ime_cursor_shape = "steady_block" +``` + +有効にすると、カーソルはフォーカス中のペインが報告した位置に表示され続けます。ペインがカーソル位置を報告しない場合、アンカーはペインの左上にフォールバックし、安定した IME ヒントが常に利用できます。 + +`cjk_ime_agents` は任意の許可リストです。空の場合、この表示はどのフォーカス中ペインにも適用されます。空でない場合、フォーカス中ペインの検出エージェントがリスト内の名前のいずれかに一致するときだけ適用されます — 独自にカーソルを描画する AI エージェント TUI でのみ有効にして、素のシェルには影響を与えたくないときに便利です。受け付ける名前: `pi`、`claude`、`codex`、`gemini`、`cursor`、`devin`、`agy`、`cline`、`opencode`、`copilot`、`kimi`、`kiro`、`droid`、`amp`、`grok`、`hermes`、`kilo`、`qodercli`、`qoder`。不明な名前は無視されます。リストに有効な名前がひとつもない場合、この表示は適用されません。 + +`cjk_ime_cursor_shape` は IME アンカー用に描画される DECSCUSR の形状を制御します。受け付ける値: `block`、`steady_block` (デフォルト)、`underline`、`steady_underline`、`bar`、`steady_bar`。 + +既存の `[experimental]` ブロックを通じてホットリロードされます。 + +有効時のトレードオフ: 代わりのカーソルを描画せずにカーソルを隠すアプリ (vim のノーマルモードなど) では、外側のターミナルに余分なハードウェアカーソルが表示されます。特定の TUI に絞るには `cjk_ime_agents` と組み合わせてください。 + +## プレフィックスでの入力ソース切り替え + +macOS では、非 ASCII の入力ソースがアクティブな間、プレフィックスコマンドがホストの入力ソースを通して解釈されるため、プレフィックスモードのコマンドが使いにくいことがあります。 + +プレフィックスモードがアクティブな間、ホストの入力ソースをシステムの ASCII 対応入力ソースに切り替えるには `switch_ascii_input_source_in_prefix = true` を設定します: + +```toml +[experimental] +switch_ascii_input_source_in_prefix = false +``` + +有効にすると、Herdr はプレフィックスモードに入った後にのみ入力ソースを切り替え、プレフィックスモードの終了時に以前の入力ソースを復元します。この設定は macOS 専用で、他のプラットフォームやシステムの入力ソース切り替えが失敗した場合は何もしません。 + +Settings > Experiments > switch to ascii input source in prefix (macOS) からも切り替えられます。 + +## 環境変数 + +| 変数 | 目的 | +| --- | --- | +| `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 new file mode 100644 index 00000000..0365df0b --- /dev/null +++ b/website/src/content/docs/ja/how-to-work.mdx @@ -0,0 +1,103 @@ +--- +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 new file mode 100644 index 00000000..ce26d5fb --- /dev/null +++ b/website/src/content/docs/ja/index.mdx @@ -0,0 +1,77 @@ +--- +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 new file mode 100644 index 00000000..d70b9f37 --- /dev/null +++ b/website/src/content/docs/ja/install.mdx @@ -0,0 +1,151 @@ +--- +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:ogulcancelik/herdr` も使えます。 + +## Nix でインストール + +すでに Nix を使っている場合、Herdr はソースからビルドする flake を提供しています: + +```bash +nix run github:ogulcancelik/herdr/v0.x.y +nix build github:ogulcancelik/herdr/v0.x.y +nix profile install github:ogulcancelik/herdr/v0.x.y +``` + +`v0.x.y` は最新のリリースタグに置き換えてください。タグを省略すると `master` を追跡できますが、通常のインストールにはリリースタグを推奨します。 + +flake は開発用シェルも公開しています: + +```bash +nix develop github:ogulcancelik/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/ogulcancelik/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 new file mode 100644 index 00000000..0930db49 --- /dev/null +++ b/website/src/content/docs/ja/integrations.mdx @@ -0,0 +1,286 @@ +--- +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 向けの Herdr インテグレーションをインストールします。 +--- + +Herdr は対応エージェントを自動的に検出します。公式インテグレーションは、復元のためのネイティブセッション識別、ライフサイクル状態の報告、またはその両方を追加できます。 + +Claude Code/Codex/Copilot/Devin 系のフックによるエージェントネイティブのセッション復元、Pi/OMP/Kimi/OpenCode/Kilo/Hermes 系のフックまたはプラグインによる直接のライフサイクル報告、あるいはその両方が欲しいときにインテグレーションを使ってください。状態権威モデルの全体像は[エージェント](/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 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 qodercli +herdr integration uninstall cursor +``` + +## Herdr がインテグレーションをどう使うか + +Herdr はインテグレーションを 2 つの異なる方法で使います: + +| インテグレーションの種類 | エージェント | 効果 | +| --- | --- | --- | +| ライフサイクル権威 | Pi、OMP、Kimi Code CLI、OpenCode、Kilo Code CLI、Hermes Agent | インストールされ、そのペインについて能動的に報告している間は、フックまたはプラグインのイベントが `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 のペインを 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` です。インストール済みバージョンは `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` に書き込みます。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` に書き込みます。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` コマンドを起動しません。 + +## カスタムステータスラベル + +インテグレーションは、意味的な状態を変えずに短い表示用ラベルを報告できます。 + +たとえば、エージェントは意味的には `working` のまま、UI には `indexing` を表示できます。 + +```bash +herdr pane report-agent w1:p1 \ + --source custom:docs \ + --agent docs-bot \ + --state working \ + --custom-status indexing +``` + +Herdr 管理のインテグレーションと並走するユーザーフックは、`report-agent` ではなくメタデータを使うべきです。メタデータは、インテグレーションの `idle`、`working`、`blocked` やセッション復元の権威を奪わずに表示を変えます。`--agent` は、その権威あるエージェントがアクティブな間だけ報告が適用されるように保護します。`--applies-to-source` は、そのライフサイクル権威ソースがアクティブな間だけ報告が適用されるように保護します。`--display-agent` は表示名を変更します。 + +```bash +herdr pane report-metadata "$HERDR_PANE_ID" \ + --source user:claude-title \ + --agent claude \ + --title "Refactor auth middleware" \ + --display-agent "Claude: auth" \ + --custom-status "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 new file mode 100644 index 00000000..cb6a3f0d --- /dev/null +++ b/website/src/content/docs/ja/keyboard.mdx @@ -0,0 +1,112 @@ +--- +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`、`w/b/e`、`{`/`}` で移動し、`v` または Space で選択を開始し、`y` または Enter でコピーし、`q` または 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 new file mode 100644 index 00000000..5f0a5c4c --- /dev/null +++ b/website/src/content/docs/ja/marketplace.mdx @@ -0,0 +1,53 @@ +--- +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 new file mode 100644 index 00000000..f8d3ff02 --- /dev/null +++ b/website/src/content/docs/ja/persistence-remote.mdx @@ -0,0 +1,132 @@ +--- +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 new file mode 100644 index 00000000..ab9bfec4 --- /dev/null +++ b/website/src/content/docs/ja/plugins.mdx @@ -0,0 +1,318 @@ +--- +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"] + +[[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 管理の +プラグインを再インストールすると、その管理チェックアウトが置き換えられます。 +ローカルにリンクされたプラグインへの上書きインストールは拒否されます。先に +ローカルプラグインを 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 は +ビルドの失敗を報告しますが、足りないツールチェーンをインストールすることはありません。 + +## コマンドと環境 + +ランタイムコマンドは、プラグインディレクトリを作業ディレクトリとして実行されます。 +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` を受け取ります。 + +`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`、`split`、`tab`、`zoomed` で上書きできます。 + +プラグインペインは、開いた後は通常の Herdr ペインです。プラグインはソケットや CLI を +通じて `pane.move`、`pane.swap`、`pane.resize`、`pane.zoom` といった標準のペイン +API を呼び出せます。ペインがタブやワークスペースをまたいで移動しても、Herdr は +プラグインペインの所有権を元のペインに結び付けたまま維持します。 + +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 new file mode 100644 index 00000000..4de15f61 --- /dev/null +++ b/website/src/content/docs/ja/quick-start.mdx @@ -0,0 +1,69 @@ +--- +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 new file mode 100644 index 00000000..95bc0d28 --- /dev/null +++ b/website/src/content/docs/ja/session-state.mdx @@ -0,0 +1,104 @@ +--- +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>` | + +インストール済みインテグレーションのバージョンは `herdr integration status` で確認できます。古いインテグレーションは `herdr integration install <agent>` で再インストールしてください。 + +未対応、欠落、無効、重複、または古くなったセッション参照は、保存されたペインディレクトリで通常のシェルとして復元されます。 + +あるペインにエージェントネイティブのセッション復元が適用される場合、Herdr はそのペインでは保存済みペイン履歴のリプレイではなくエージェントセッションの resume を行います。 + +## ライブハンドオフ + +ライブハンドオフは、稼働中の Herdr サーバーを置き換える必要があるアップデートやリモートアタッチのフローのためのものです。古いサーバーにライブペインを新しいサーバーへ移すよう依頼し、サーバー交換をまたいでペインのプロセスが動き続けられるようにします。 + +これはスナップショット復元、ペイン履歴リプレイ、エージェントネイティブのセッション復元とは異なります。ハンドオフは現在のプロセスを生かし続けようとします。他の経路は、古いサーバーが停止した後に状態を再構築します。 + +ライブハンドオフは実験的機能で、オプトインです: + +```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 new file mode 100644 index 00000000..dca7136d --- /dev/null +++ b/website/src/content/docs/ja/socket-api.mdx @@ -0,0 +1,609 @@ +--- +title: ソケット API +description: スクリプト、ツール、コーディングエージェントから実行中の Herdr サーバーを制御します。 +--- + +Herdr は、実行中のセッションを調査・制御する必要があるスクリプトやエージェント向けに、ローカルソケット API を公開しています。 + +ほとんどの自動化は CLI ラッパーから始めるべきです。生のソケット API は、直接のリクエスト/レスポンス制御や長寿命のイベント購読が必要なときだけ使ってください。 + +## インテグレーション層を選ぶ + +| 層 | 用途 | +| --- | --- | +| エージェントスキル | ペイン内からの Herdr の使い方をコーディングエージェントに教える。 | +| CLI ラッパー | シェルスクリプト、シンプルなオーケストレーション、人間によるデバッグ。 | +| 生のソケット API | カスタムツール、プロトコルクライアント、イベント購読者。 | + +これらの層は同じ制御面を共有します。 + +## 制御できるもの + +ソケット 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 wait agent-status w1:p1 --status 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` | +| ワークスペース | `workspace.create`、`workspace.list`、`workspace.get`、`workspace.focus`、`workspace.rename`、`workspace.close` | +| Worktree | `worktree.list`、`worktree.create`、`worktree.open`、`worktree.remove` | +| タブ | `tab.create`、`tab.list`、`tab.get`、`tab.focus`、`tab.rename`、`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.report_agent`、`pane.report_agent_session`、`pane.report_metadata`、`pane.clear_agent_authority`、`pane.release_agent`、`pane.close`、`pane.wait_for_output` | +| レイアウト | `layout.export`、`layout.apply` | +| エージェント | `agent.list`、`agent.get`、`agent.read`、`agent.explain`、`agent.send`、`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` | + +一部の CLI コマンドは、これらのメソッドの便利ラッパーです。たとえば `herdr agent wait` は、エージェントターゲットを解決してからペインのエージェント状態イベントを購読します。 + +ペイン制御メソッドは `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` があるときはそのペインを返します。省略時はアクティブなフォーカス中ペインを返します。 + +`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" } + } + } + } +} +``` + +プロセスを起動するメソッドは `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` も発行します。 + +## プラグイン 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`、`split`、`tab`、`zoomed` でマニフェストを上書きできます。オーバーレイのペインはアクティブなペインを対象とします。分割とズームのペインは既存のペインを対象とし、タブのペインはワークスペースを対象にできます。ペインは開いた後は通常の Herdr ペインとして振る舞いますが、`plugin.pane.focus` と `plugin.pane.close` はプラグイン API 経由で開かれたペインにのみ作用します。focus は `plugin_pane_focused` を、close は `plugin_pane_closed` を返します。 + +## ソケットトランスポート + +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", + "custom_status": "indexing" + } +} +``` + +`state` は意味的です。wait、通知、ロールアップに影響します。 + +`custom_status` は表示用です。意味的な挙動を変えずに `indexing` のような短いアクティビティラベルを表示できます。 + +セッションのみの公式インテグレーションは、`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 のままです。 + +ユーザーフックが 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", + "custom_status": "refactor auth", + "state_labels": { + "working": "refactoring auth", + "idle": "ready", + "done": "review ready" + }, + "ttl_ms": 3600000 + } +} +``` + +メタデータ報告は表示専用です。有効なメタデータは、ペインのタイトル、表示されるエージェント名、コンパクトなアクティビティラベル、可視の状態ラベルを上書きできます。`working`、`blocked`、`idle`、wait、通知、ロールアップは引き続き意味的な状態から得られます。エージェントネイティブのセッション復元は、保存された公式セッション参照から得られます。`agent` は権威あるエージェントラベルに対する任意のガードで、`applies_to_source` はアクティブなライフサイクル権威ソースに対する任意のガードです。表示名を変えるには `display_agent` を使います。`state_labels` のキーは `idle`、`working`、`blocked`、`done`、`unknown` のいずれかでなければなりません。ひとつの表示上書きを取り除くには、同じ `source` で `clear_custom_status: true` のようなクリアフィールドを使ってください。 + +表示テキストは保存前に正規化されます。Herdr は前後の空白を取り除き、制御文字を除去し、`custom_status` を 32 文字に、`title`、`display_agent`、各状態ラベルを 80 文字に制限します。正規化後に空になった値は無視されます。 + +`source` と `applies_to_source` はソース識別子です。80 文字以下で、ASCII の英字、数字、コロン、ドット、アンダースコア、ハイフンのみを含められます。 + +短寿命のメタデータには `ttl_ms` を使ってください。`1` から `86400000` ミリ秒の間でなければなりません。置き換え・クリア・ペインのクローズまで残るべきメタデータでは省略します。TTL が切れると、Herdr はそのソースのメタデータを削除し、可視のペイン表示が変わった場合は表示変更イベントを発行します。 + +フックが順不同で更新を送る可能性がある場合は `seq` を使ってください。同じ `source` について、最後に受理されたシーケンス以下のシーケンス番号を持つ報告は、API には受理されますがペイン状態には無視されます。 + +## イベント購読 + +長寿命のストリームが必要なときはイベントを購読します: + +```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.renamed`、`workspace.closed`、`workspace.focused` があります。ワークスペースイベントは Herdr の UI/ランタイムのライフサイクルを記述します。ワークスペースが worktree グループに属している場合、`workspace.created` は任意の `workspace.worktree` 出自情報を含みます。削除前に Herdr がまだ識別できる場合、`workspace.closed` は最終的な `workspace` スナップショットを含みます。 +ペインのイベント購読には `pane.created`、`pane.closed`、`pane.focused`、`pane.moved`、`pane.exited`、`pane.agent_detected`、`pane.output_matched`、`pane.agent_status_changed` があります。 + +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 wait agent-status w1:p1 --status done +herdr wait agent-status w1:p1 --status 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/windows-beta.mdx b/website/src/content/docs/ja/windows-beta.mdx new file mode 100644 index 00000000..9d282a70 --- /dev/null +++ b/website/src/content/docs/ja/windows-beta.mdx @@ -0,0 +1,100 @@ +--- +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 の設定に `channel = "preview"` を書き込み、リリースを `%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 の隠れカーソル表示 | ベータ | +| 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 ベータで動作します。ペイン内でテキストをドラッグ選択すると 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 のログ。 +- 正確な再現手順。 |
