モデルは楽観的でも、インフラはそうではない。Schema・タイムアウト・ブレーカー・共通リトライが揃えば、悪ループによるワーカー枯渇や API 雪崩をほぼ防げる。

前提:リモート Mac に OpenClaw 導入済み、ループバック ゲートウェイ稼働。ホームヘルプ・OpenClaw ガイド/専用ノードは 購入ページ(閲覧のみならログイン不要)。ログとリトライ痕跡は IDE ブリッジ記事 と同様、読み取り専用 repo書き込み scratch に分離する。

ゲートウェイとスキルディレクトリ

ゲートウェイ状態~/.openclaw 等に集約。スキル~/openclaw-skills/<skill>/skill.yaml(または skill.json)+任意で schemas/scripts/ログ・一時ファイル~/openclaw-scratch/ に固定し、Git ルートへ書かない。

  • マニフェスト一枚/スキル。 ツール名・エントリ・既定ポリシー・Schema 参照を Git でレビュー可能に。
  • シークレット分離。 0600OPENCLAW_TOKEN_FILE。マニフェストはパスのみ。
  • 常駐。 launchd の KeepAlive、ログは ~/openclaw-scratch/logs/gateway.log。plist はマニフェストと同リポジトリに。

変更後は openclaw doctor --json > ~/openclaw-scratch/probe/doctor-last.json でベースライン保存。

Schema 検証の例

呼び得るツールすべてに inputSchema(Draft-07 または 2020-12、ビルドのバリデータに合わせる)。検証は実行。エラーは型・制約・パスを返してモデルが直せる形に。

例:課題 ID のみ受け付けるツール。

{ "name": "linear.fetch_issue", "description": "Fetch one Linear issue by stable id", "inputSchema": { "type": "object", "additionalProperties": false, "required": ["issueId"], "properties": { "issueId": { "type": "string", "pattern": "^[A-Z]{2,10}-[0-9]+$", "maxLength": 32 }, "includeComments": { "type": "boolean", "default": false } } } }

additionalProperties: falsemaxLengthmaxItems、モードは enum。肥大化した Schema は ~/openclaw-skills/.../schemas/ に外だし。ログは toolcorrelationId・エラーパスまで。生の秘密は出さない。

タイムアウトとサーキットブレーカー(熔断)パラメータ

タイムアウト=単発呼び出しの熔断。ブレーカー=連続失敗で下流を守る。マニフェストまたは policies.yaml に明示し、ツール単位で上書き。

  • executionTimeoutMs — HTTP 8〜30s、リポジトリ走査 60〜120s から調整。
  • queueWaitMs — 任意。並列スパム時は 503 tool_backpressure で拒否。
  • ブレーカー — 例:連続 5 失敗、または 60s でエラー率 40% → openDurationMs: 30000breaker_open
  • ハーフオープン — 回復確認用にカナリア 1 本。

数値はレビューでツール横にコメント。SLO 変更はマニフェスト先行→再配備。

リトライとバックオフ

sleep のコピペではなく共通テンプレ。読み取りは指数バックオフ+ジッター、書き込みは厳選したステータスのみ。API 向けの例:

retry: maxAttempts: 4 initialDelayMs: 200 multiplier: 2.0 maxDelayMs: 8000 jitterRatio: 0.2 retryOnHttpStatus: [408, 425, 429, 500, 502, 503, 504] nonRetryOnHttpStatus: [401, 403, 404, 422]

変更系は冪等キー。サブプロセスは idempotent: true かつ終了コードで一過性/入力不良を分けられるときだけ自動リトライを検討。ログは attemptdelayMserrorClasscorrelationId。ブレーカー オープン中はリトライしない。

ログとトラブルシュート FAQ

モデル更新後に検証エラー増。 未知キーをログし、落ち着いてから additionalProperties: false

タイムアウトするが下流は元気。 Mac 上で DNS/TLS を計測。p95 と executionTimeoutMs を突き合わせ、コールドスタート超過を疑う。

回復後もブレーカー開き。 ハーフオープン、4xx/5xx 分類、時刻ずれ、永続エラー型(例 ECONNRESET)を確認。

リトライで 429 悪化。 Retry-After 尊重、maxAttempts 削減。

成功ログだが効果なし。 非同期 enqueue のみの可能性。タイムアウト延長かツール分割。

doctor OK・実行 NG。 資格情報は別。カナリア実行、トークン readable、launchd とシェルのパス一致を確認。

まとめ: 三層パスを固定し Schema で実行前ゲート、タイムアウト+ブレーカーで暴走を止め、共通リトライで副作用を統制。correlationId でログを貫通させれば、リモート Mac でも再現可能な運用になる。

ゲートウェイを専用 Mac に載せるなら 購入 でリージョン比較、ヘルプ で手順、ホーム から コンソール へ。料金感は 料金