gateway status(JSON)・openclaw doctor・一八七八九番の lsof 指紋をマージ前に連鎖する手順です。launchd と同じNode 絶対パス(nvm 回避)で headless 運用します。関連:validate CI ゲート、埋め込みプリフェッチ、環境マージ HowTo。料金・購入・ヘルプはログイン不要です。

この連鎖で潰す三つの盲点

  1. 人間だけの目視:SSH で眺めたときは緑でも、JSON フィールドなら自動で落とせた退行がある。
  2. ポートの幽霊:昨日の実験で残った 18789 の待受が今日のジョブと衝突し、doctor 単体では TCP 状態と突合していない。
  3. PATH の物語:CI は nvm 経由、launchd は別の node でゲートは緑でも本番が想定バイナリを再起動しない。

判断表:何を第一信頼にするか

信号 強み 死角
gateway status JSON CI の差分や要約にそのまま載せやすい。 直後のクラッシュでは遅延があり得る。lsof とセットにする。
doctor プロバイダ配線や権限系を早く落とす。 18789 の独占所有を証明しない。
lsof 指紋 Mac 上のリスナ衝突の事実に近い。 ログに秘密を混ぜないよう PID 行の取り扱いに規律が要る。

前提チェックリスト(上から順に)

本番に近いイメージで上から潰します。依存取得を先に済ませ定常レイテンシを測ると、常駐ゲートウェイ運用と整合します。

  • Node は node -v と絶対パスをログへ。nvm エイリアスは避ける。
  • OpenClaw CLI はグローバルでピン留め。command -v openclaw を plist の ProgramArguments 草案と並べて記録。
  • OPENCLAW_CONFIG_HOME を検証対象の設定木へ。秘密はマスク変数のみ。
  • プリフェッチ:npm・モデル・コンテナ層を先に温め status を現実値に(上記埋め込み記事と併用)。

ステップ:マージ前ゲート脚本

依存インストールの後・マージの前に一度だけ走らせ、Webhook 用の一行要約に載せる単一ログ openclaw-gate.log を残します。

export CI=true
# `openclaw gateway status --help` にある JSON・非対話系フラグを追記
export OPENCLAW_GATE_LOG="${OPENCLAW_GATE_LOG:-openclaw-gate.log}"
: > "$OPENCLAW_GATE_LOG"

{
  echo "=== node path ==="
  command -v node
  node -v
  echo "=== openclaw path ==="
  command -v openclaw
  openclaw --version
  echo "=== gateway status json ==="
  openclaw gateway status --json > gateway-status.json
  python3 -m json.tool gateway-status.json | head -n 80
  echo "=== doctor ==="
  openclaw doctor
  echo "=== config validate ==="
  openclaw config validate --config "${OPENCLAW_CONFIG_HOME:?}/openclaw.json"
  echo "=== lsof 18789 ==="
  lsof -nP -iTCP:18789 -sTCP:LISTEN || true
} 2>&1 | tee "$OPENCLAW_GATE_LOG"

記録した openclaw の絶対パスを launchd の plist に写します。listen アドレスやトークンを変えたあとはデーモンを再起動し、リスナと認証情報の部分ホットリロードを盲信しない運用に寄せます。

健康判据(三点すべて満たす)

  • JSON:プロセス状態が実行中で、ビルド印がピン留めした CLI と一致する。
  • HTTP:ループバックの curl がドキュメント上のヘルス経路で 2xx。エッジと同じトークンを使う。
  • TCP:lsof が期待する PID ひとつ、または CI スモーク専用の明示ポートのみ。

headless パラメータと観測性

CI=true と openclaw gateway status --help の JSON・非対話フラグを明示し、tee で openclaw-gate.log に集約します。依存をプリプルしたうえで JSON・doctor・lsof 抜粋だけを webhook のCI 要約へ載せれば、ゲートウェイを再走させず安定します。

よくある署名と第一対応

ログの形 想定原因 まずやること
EADDRINUSE(18789) 古いゲートウェイまたはラベル重複。 lsof の PID を止めるか、CI スモークを別ポートへ。
JSON は健全だが curl が失敗 bind インタフェース違いやトークン不一致。 openclaw.json の listen と curl のホスト・Authorization を突合。
launchd 下で command not found: openclaw PATH にグローバル npm の bin が無い。 ProgramArguments を絶対パスにするか plist で PATH を先頭補強。

HowTo/FAQPage 構造化データのメモ

先頭の JSON-LD に HowTo(六 step)と FAQPage(四問)の例を併記しています。用語は社内に合わせ差し替え、BlogPosting と同一 URL への併記が扱いやすいです。

FAQ

PR ジョブで常駐デーモンまで入れるべきか。 推奨しません。CLI のみのゲートにし、長寿命ホストだけ launchd を載せます。並列 PR と一八七八九番の取り合いを防ぎます。

status の前にプリフェッチする理由。 冷えたキャッシュはレイテンシと readiness で偽陽性を増やします。リードの validate ゲート記事と組み合わせ、プールイメージを一度温めてから測定します。

成果物の保持期間。 インシデント検証用に少なくとも十四日程度を目安にし、tarball には SHA256 を併記します。

まとめ

status JSON・doctor・一八七八九指紋の連鎖は、プリフェッチ後の定常状態を前提にCI 一行要約へ流用しやすいです。ホーム・料金・購入・ヘルプ(ログイン不要)、索引は 技術ブログ一覧です。

OpenClaw ゲート用の専用リモート Mac

依存プリフェッチと JSON ゲート、webhook 向け CI 要約を同一 Apple Silicon 上で安定再現。料金・購入・ヘルプはログイン不要です。