リモート Mac の OpenClaw が GitHub Webhook を受け lockfile 差分 を検査し Checks に要約を返す手順を、docs.openclaw.ai・
openclaw doctor・127.0.0.1 待受を軸に整理します。関連:Discord CI 要約、ゲートウェイ硬化。ヘルプ・購入・ブログはログイン不要です。
なぜゲートウェイ・隔離・最小権限がセットか
1) 管理口を WAN に晒すとトークン流出時の影響が大きい。2) check_suite 未フィルタは delivery 洪水になる。3) 共有ワークツリーは生成物残りで lock の diff が歪む。
判断表:待受・認証・トリガー・ワークツリー
| 観点 | 本番の推奨 | 避けたい構成 |
|---|---|---|
| ゲートウェイ待受 | 127.0.0.1+SSH リバースまたはエッジ TLS 終端 | 無認証の WAN 直結管理口 |
| GitHub 側の身元 | GitHub App または fine-grained PAT(Contents 読取・Checks 書込・Metadata 読取) | classic repo を長期リポジトリ明文保管 |
| Webhook | check_suite 完了/pull_request+Secret と X-Hub-Signature-256 | 全イベント購読や SSL 検証オフ |
| 検証用ワークツリー | イベント ID ごとの専用ディレクトリまたは git worktree | 並行ジョブで共有 clone |
OpenClaw ゲートウェイ:doctor・Dashboard トークン・ループバック
openclaw onboard 後に openclaw doctor で Node/CA/プロキシを確認し、launchd とシェルの PATH を揃えます。docs.openclaw.ai に従い待受は 127.0.0.1 のみ、Dashboard トークンは Keychain 等に閉じ、外向きはトンネルで Webhook パスだけ中継します。
GitHub:Webhook のイベント選別・Secret・最小スコープ
Webhook は JSON、イベントは check_suite(完了時)と pull_request に絞り、handler で lock パス命中時のみ処理します。Checks 書込は GitHub App 優先、PAT は 最小リポジトリ集合+ローテ。Secret/トークンはツリー外保管。通知は Discord 記事 流用可。
リモート Mac 上の最小再現チェックリスト
順に実施
- ① Node 24(または 22.16+)固定、
openclaw doctor後に起動。 - ②
127.0.0.1待受+トンネルで公開 URL を一本化。 - ③ Webhook Secret と
X-Hub-Signature-256、重複 delivery は除外。 - ④ run ごと専用ディレクトリでトリガー SHA を浅 clone。
- ⑤ lock に
git diff等を実行しログ化。 - ⑥ Checks API の
check_runsummary に結論を書く。 - ⑦ 硬化記事 を参照。
# 例:lockfile の有無をゼロ終了コードで確認(作業ツリー内)
git diff --exit-code -- package-lock.json pnpm-lock.yaml || echo "lockfile_changed=1"
GITHUB_STEP_SUMMARY併用で Runner ログが読みやすい。- サブモジュール利用時は浅 clone でも
--recurse-submodulesの要否を先に決める。
よくあるエラー FAQ(401・403・署名・重複)
401/署名不一致
Secret 一致と body 非改変を確認。sha256= と生バイト HMAC。
Checks 403
Checks 書込・App インストール・組織制限を疑い GET /repos/... で到達性を確認。
check_suite 重複
head_sha キャッシュ、マトリクスは代表ジョブのみ更新。
doctor の証明書/Node
plist に NODE_EXTRA_CA_CERTS と絶対パス PATH。