Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Git

git forge の issue および pull-request のコメントを通じてエージェントと会話し、PR ライフサイクル、レビューコメント、CI の結果、リリースを含むリポジトリイベントを、イベントごとのルーティングテーブルを通じて提示します。チャネルは provider seam を中心に構築されています。provider フィールドで forge を選択します。GitHub、Gitea、Forgejo は組み込みの provider です。追加の forge は、汎用チャネルを変更することなく、兄弟 provider としてドロップインできます。

ZeroClaw は初めてですか? まずは クイックスタート でエージェントを起動し、次に コンセプト に目を通して、このページが前提とする用語(agent、peer group、autonomy、SOP)を確認してください。

GitHub プロバイダーでは、ZeroClaw は GitHub App として認証し、アプリ自身のボットアイデンティティ(your-app[bot])として返信するため、アプリがインストールされている任意のリポジトリで動作します。個人アクセストークンや共有ユーザーアカウントは不要です。

Gitea/Forgejoプロバイダーを使用する場合、ZeroClawはパーソナルアクセストークンを使ってインスタンスのGitea互換APIに対して認証を行い、トークン所有者として応答します。

ビルドに関する注意: Git チャネルは標準の配布アーティファクトに含まれていますが、軽量な Cargo のデフォルトには含まれていません。カスタムソースビルドでは channel-git を追加する必要があります。デフォルト機能を無効にするビルドでは、agent-runtime も追加する必要があります。channel-git 機能には、接続されているすべての forge プロバイダーが取り込まれるため、1 つのバイナリですべてのサポート対象 forge に対応できます。プロバイダーごとに小さいビルドサブセットを選択することはできません。

エージェントと対話できるユーザー

受信側の送信者は、バインドされたエージェントに対して解決されたピアセットに照らして制御されます。これはエージェントが所属する peer_groups 設定から導出されます。照合では先頭の @ を取り除き、チャネルのネイティブな送信者識別子に対して大文字・小文字を区別せずに行われます。のセットはすべてを拒否し、"*" を含むセットはすべてを受け入れます。それ以外の場合は、リストに記載された外部ピア(およびピアエージェント)のみが受け入れられます。これはゲートウェイのペアリング(gateway.require_pairing)とは別物であり、ペアリングはチャットチャネルの送信者ではなく HTTP/WebSocket クライアントを認証します。

git 用のピアグループは channelgit に設定し、external_peers に許可された送信者をリストし(git の場合、コメント作者の forge ユーザー名(ログイン); ["*"] は誰でも受け入れます)、オプションでクロスエージェントディスパッチ用のピア agentsignore ブロックリスト、および output_modalitymirrorvoice、または text)を指定します。フィールドリファレンスについては Peer Groups を参照してください。

この設定の場所:

ゲートウェイダッシュボード

Web ダッシュボードで /config/peer_groups を開きます。

zerocode

Config ペインの Peer groups の下。

動作方法

  • ポーリング、ウェブフックではない。 チャネルは since カーソルに基づき、新しいイシュー、プルリクエスト、コメントを forge の REST API に対してポーリングします。デーモンには公開 URL、トンネル、インバウンドの露出は不要であり、NAT の背後で動作します。
  • Issue スコープの会話。 同じ Issue または PR 上のすべてのメッセージは1つの会話スレッドを共有し、エージェントはその Issue へのコメントとして返信します。
  • ストリーミング返信。 エージェントは下書きコメントを投稿し、応答が成長するにつれてその場で編集します(編集は forge の悪用制限を守るため ≥ 2 秒間隔で行われます)。
  • リアクション。 確認リアクションはフォージのリアクションセットにマッピングされます(GitHub の場合: 👀 → eyes、✅ → +1、⚠️ → confused、…)。マッピングできない絵文字はスキップされます。
  • コールドスタート。 デーモン起動前に作成されたイベントは処理されないため、再起動しても履歴を再生できません。その反面、デーモンが停止している間に投稿されたコメントは見逃されるため、アプリを再度メンションしてください。
  • コメントの編集は無視されます。 新しく作成されたコメントとイシュー/PR のオープニング投稿のみがエージェントをトリガーします。

認証情報

各プロバイダーは認証方法が異なり、それぞれに完全なステップバイステップのウォークスルーがあります:

  • GitHub は GitHub App として認証します(App ID と生成された秘密鍵)。GitHub App の作成 を参照してください。
  • Gitea / Forgejo は、パーソナルアクセストークンを使用してインスタンスの Gitea 互換 API に対して認証します。Gitea / Forgejo トークンの作成 (Codeberg) を参照してください。

設定

お好みのサーフェスでチャネルフィールドを設定します。

ゲートウェイダッシュボード

ウェブダッシュボードで /config/channels/git を開きます。

zerocode

Config ペインの Channels 配下にあります。

スキーマから直接取得した、完全なフィールドリファレンス:

access_token 🔑 secret · default ""

Gitea/Forgejo API リクエスト用の個人アクセストークン。このトークンには、リポジトリの読み取りアクセスに加えて、返信とリアクションのための issue/PR コメントの書き込みアクセスが必要です。Gitea/Forgejo プロバイダーのみ。

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.access_token フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.access_token フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.access_token    # マスクされた入力、暗号化して保存

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__access_token=
api_base_url string? · default

Gitea/Forgejo API ベース URL(/api/v1 を含む)。例: https://git.example.org/api/v1(公開 Gitea サービス: https://gitea.com/api/v1)。provider"gitea" または "forgejo" の場合に必須です。デフォルトのホストはありません。すべての API リクエストが access_token を運ぶため、オペレーターが指定していないエンドポイントにトークンを送信するのではなく、チャネルは起動時にフェイルクローズします。Gitea/Forgejo プロバイダー専用。

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.api_base_url フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.api_base_url フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.api_base_url <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__api_base_url=
app_id integer · default 0

GitHub App ID(アプリの設定ページに表示されます)。GitHub プロバイダーのみ。

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.app_id フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.app_id フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.app_id <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__app_id=
events map · default {}

正規化されたイベントタイプ("issue_comment.created""pull_request.opened""workflow_run.failed" など)をキーとする、イベントごとのルーティングテーブルです。テーブルに存在しないイベントタイプは、会話型のデフォルトにフォールバックします。issue_comment.createdissues.openedpull_request.opened はメッセージとして配信され(メンションゲート付き)、それ以外はすべて無視されます。どの API エンドポイントをポーリングするかはこのテーブルから導出され、イベントタイプをルーティングすることはそのイベントを購読することでもあります。

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.events フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.events フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.events <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__events=
events_backbone bool · default false

また、リポジトリ Events API(/repos/{owner}/{repo}/events)を広範なバックボーン・トランスポートとしてポーリングします。リポジトリごとにティックあたり1回の条件付き(ETag)リクエストなので、アイドル状態のリポジトリのコストはほぼゼロです。注意点: イベントは最大約5分の遅延で到着し、フィードには Actions/check イベントは含まれません(ワークフロー実行は常に専用のエンドポイントを使用します)。対象エンドポイントでも表面化されるアイテムは重複排除されます。デフォルト: false

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.events_backbone フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.events_backbone フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.events_backbone <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__events_backbone=
excluded_tools string[] · default []

このチャネルのツール仕様から除外されるツールです。設定すると、これらのツールはこのチャネル経由で応答する際にモデルに公開されません。

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.excluded_tools フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.excluded_tools フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.excluded_tools <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__excluded_tools=
installation_id integer? · default

として動作するインストールID。未設定の場合、初回使用時にアプリのインストールが一覧表示され、唯一のインストールは自動選択されます。アプリのインストールが0個または複数ある場合は起動に失敗します。

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.installation_id フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.installation_id フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.installation_id <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__installation_id=
listen_to_bots bool · default false

他のボットアカウントによって作成されたコメントを処理します。アプリ自身のコメントは常に無視されます。デフォルト: false

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.listen_to_bots フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.listen_to_bots フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.listen_to_bots <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__listen_to_bots=
mention_only bool · default true

アプリのボットログインを@メンションするコメントにのみ応答します。デフォルト: true

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.mention_only フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.mention_only フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.mention_only <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__mention_only=
poll_interval_secs integer · default 30

新しいイシューやコメントをポーリングする間隔(秒)。15未満の値は15に切り上げられます。デフォルト: 30

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.poll_interval_secs フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.poll_interval_secs フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.poll_interval_secs <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__poll_interval_secs=
private_key 🔑 secret · default

RS256秘密鍵PEM。GitHubがアプリの設定ページで生成する.pemファイルの内容で、インラインかつ保存時に暗号化されます。BEGIN/END行を含めてください。GitHubプロバイダーのみ。

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.private_key フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.private_key フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.private_key    # マスクされた入力、暗号化して保存

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__private_key=
private_key_path string? · default

RS256 秘密鍵 .pem ファイルへの Filesystem パス。private_key(インライン PEM)が未設定の場合に起動時に読み込まれます。インライン PEM フィールド以前の設定との後方互換のためのフォールバック。GitHub プロバイダーのみ。

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.private_key_path フィールドを設定します。

zerocode

設定 ペインで、channels.git.<alias>.private_key_path フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.private_key_path <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__private_key_path=
provider string · default "github"

Git フォージプロバイダー。サポート: "github""gitea"、および "forgejo" (Forgejo は Gitea 互換の REST プロバイダーを使用します)。デフォルト: "github"

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.provider フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.provider フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.provider <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__provider=
proxy_url string? · default

GitHub API リクエストのチャンネルごとのプロキシオーバーライド。

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.proxy_url フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.proxy_url フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.proxy_url <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__proxy_url=
repos string[] · default []

ポーリング対象のリポジトリを owner/repo 形式で指定します。空の場合 = インストールから参照可能なすべてのリポジトリ。

任意のサーフェスに設定する場合:

ゲートウェイダッシュボード

/config/channels/git を開き、channels.git.<alias>.repos フィールドを設定します。

zerocode

Config ペインで、channels.git.<alias>.repos フィールドを設定します。

zeroclaw config

zeroclaw config set channels.git.<alias>.repos <value>

環境変数

オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc~/.zshrc.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。

export ZEROCLAW_channels__git__<alias>__repos=

default エイリアスは、通常最初に使用するインスタンスです。また、単発送信の解決先でもあります。zeroclaw channel send --channel-id git は特に default エイリアスを検索するため、すべての送信が異なる名前のエイリアスに紐付いたエージェントから行われるのでない限り、インスタンス名は default にしてください。repos を空のままにすると、認証情報から参照できるすべてのリポジトリがポーリングされます。レート使用量を抑えるには、明示的なリポジトリ一覧を設定してください。ほかのボットアカウントからのコメントを処理する場合にのみ listen_to_bots を設定してください。未知の provider 値は、暗黙のフォールバックではなく、明確な起動時エラーになります。

クレデンシャルのセットアップはプロバイダーごとに異なり、それぞれ独自の暗号化されたシークレットを持ちます。両方のウォークスルーがエンドツーエンドでそれをカバーしています:

イベントとルーティング

会話を超えて、チャネルはリポジトリのアクティビティを型付きイベントに正規化し、設定に従って各イベントタイプをルーティングします。イベントを sop にルーティングすると、トリガーマッチングと承認ゲートを備えた決定論的で監査可能な手順である Standard Operating Procedure にディスパッチされます。Git SOP fan-in ページでは、forge イベントが SOP 実行になる正確な仕組みが詳しく説明されています。

イベントタイプルートの例Result
pull_request.openedsop = pr-triagePR ペイロードを pr-triage SOP にディスパッチします。
issues.openedsop = issue-triageイシューペイロードを issue-triage SOP にディスパッチします。
issue_comment.createdmessage = trueコメントを通常の会話エージェントループに配信します。
workflow_run.failedsop = ci-failureCI 失敗ペイロードを SOP イングレスにディスパッチします。
release.publishedmessage = trueリリースイベントを通常のエージェントループに配信します。

既知のイベントタイプ: issue_comment.created, issues.opened, pull_request.opened, pull_request.closed, pull_request.merged, pull_request_review_comment.created, workflow_run.completed, workflow_run.failed, release.published.

  • デフォルト。 events テーブルがない場合、チャネルは会話的に動作します: issue_comment.createdissues.opened、および pull_request.opened はメッセージとして配信されます(上記のとおりメンションゲートされます); それ以外はすべて無視されます。空でないテーブルに存在しないイベントタイプには、同じタイプごとのデフォルトが適用されます: workflow_run.failed をリストしても会話はオフになりません。message = truesop もないエントリは、そのイベントタイプを明示的に無効化します。
  • イベントタイプをルーティングすることは、それにサブスクライブすることです。 チャンネルはテーブルからポーリングする API エンドポイントを導出します。レビューコメント、リリース、Actions の実行は、それぞれのイベントタイプがルーティングされている場合にのみ取得されるため、未設定のチャンネルのコストは以前とまったく同じです。GitHub は現在、リストされているすべてのイベントタイプをカバーしています。Gitea/Forgejo プロバイダーは、issue コメント、issue/PR のオープン、PR のクローズ/マージ遷移、リリース、返信、編集、削除、リアクションをカバーします。
  • sop ルーティング。 sop ルートは、トピック git.<alias>:<event_type> と構造化された JSON ペイロードを持つ、チャネル由来の SOP イベントを発行します。ルーティングされたイベントはチャットとして配信されるのではなく、SOP ingress によって消費されます。チャネルとインスタンスを指定する channel トリガー(channel = "git"alias = "main")を使用して SOP.toml でこれにマッチさせます。git.<alias>:<event_type> 文字列はチャネルによって生成されるイベントトピックであり、トリガーフィールドではありません。さらに絞り込むには、オプションの condition を使用します。例: $.event_type == "pull_request.opened" または $.repo == "octo/repo"
  • ルートごとのメンション ゲーティング。 mention_only ゲートは、メッセージパス上の会話イベントに適用されます。sop-routed イベントはこれをスキップします。pr-triage にルーティングされた PR は、作成者がアプリにメンションしたかどうかにかかわらずキャプチャされます。ライフサイクル/CI/リリース イベントにはメンション サーフェスがなく、ゲートされません。アプリ自身のアクティビティは常にドロップされます。他のボットのアクティビティは listen_to_bots に従います。すべての配信は、作成者のログインに対するピアグループ許可リストを通過します。
  • 返信サーフェス。 コメント、issue、および PR イベントは、それぞれの issue/PR スレッドに返信します。Workflow-run イベントは、forge が関連する PR を報告した場合、その実行に関連付けられた PR に返信します。それ以外の場合、およびリリースについては、ターゲットはリポジトリそのものとなり、エージェントはプラットフォーム上で返信できません(それらを SOP にルーティングするか、他のツールを通じて対応してください)。
  • Events API バックボーン(オプション、GitHub)。 events_backbone = true はさらに ETag 条件付きリクエストで /repos/{owner}/{repo}/events をポーリングします(リポジトリごとにティックあたり1リクエスト。アイドル状態のリポジトリは 304 を返し、コストはほぼゼロです)。注意点: フィードは最大約5分の遅延があり、ペイロードは削減されており、Actions イベントはここに現れません: ワークフロー実行は常に専用エンドポイントを使用します。フィードと対象エンドポイントの両方で表面化した内容は重複排除されるため、組み合わせても安全です。Gitea/Forgejo は現在このオプションを無視します。

運用上の注意

  • レート予算: GitHub では、各インストールに 5,000 リクエスト/時間が付与されます。会話型のデフォルトはポーリングティックごとにリポジトリあたり 2 リクエストを消費します(30 秒間隔で 5 リポジトリ ≈ 1,200/時間)。追加でルーティングされる各エンドポイントファミリー(レビューコメント、リリース、Actions runs)はリポジトリあたりティックごとに 1 を追加し、Events API のバックボーンは 1 つの条件付きリクエストを追加します(アイドル状態のリポジトリでの 304s は実質的に無料です)。Gitea/Forgejo のレート制限はインスタンスに依存します。レート制限の応答時、チャネルは制限ウィンドウがリセットされるまでバックオフします。
  • 多数のリポジトリ: repos が空で、認証情報が 100 を超えるリポジトリを参照できる場合、最初のページのみがポーリングされます(GitHub では警告がログに記録されます)。その場合は repos を明示的にリストしてください。

安全性

公開リポジトリの Issues および PR コメントは敵対的な入力です。mention_only = true を維持し、peer group で送信者をゲートしてください(空の peer セットは全員を拒否し、["*"] は誰でも受け入れます)。公開向けリポジトリでは autonomySupervised 以下に保ってください。これは social channels と同じガイダンスです。

関連ドキュメント