AI Frontier

2026年・macOS の OpenClaw ゲートウェイ:NTP スキュー、JWT、モデル API、TLS セッションチケットの落とし穴

MacHTML Lab2026.05.07約29分

OpenClawゲートウェイがヘルスチェックでは緑でも、モデルAPIから401が返ると運用は激怒します。2026年でも静かな根本原因のひとつはシステム時刻のスキューです。UTCに対してMacが90秒進むと、JWTのiatが「未来」になり拒否されます。遅れていると期限切れが早まって見えます。TLSセッションチケットのローテーションやノートPCのスリープが加わると、Linux CIでは再現しない断続障害になります。本稿では計測、sntp、JWTクレーム許容、macOStimedとLaunchAgent、Apple Siliconでのリハーサルをまとめます。

合わせてopenclaw doctor ゲートウェイ診断429 Retry-After の扱いJSON環境プロファイルで秘密と時刻ポリシーを同じレビューバンドルに収めてください。

補足1:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足2:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足3:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足4:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足5:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足6:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足7:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足8:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足9:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足10:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足11:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足12:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足13:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足14:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足15:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足16:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足17:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足18:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足19:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足20:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足21:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足22:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足23:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足24:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足25:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足26:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足27:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足28:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足29:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足30:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足31:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足32:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足33:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足34:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

補足35:ゲートウェイはgateway_clock_offset_secondsをエクスポートし、JWT発行失敗カウンタと相関させます。Mac miniではtimedの再同期タイミングとVPN再接続後のDNSキャッシュがトークン更新に影響するため、同じユーザコンテキストでsntpを実行し、LaunchAgentのPATHを確認してください。オフセットが300msを超えたらアラートし、5秒を超えたらトラフィックを止めて時刻源を修復します。

鍵が壊れたように見える症状

スキューはめったに「NTP失敗」とはログに出ません。散発的な401、タイムスタンプ比較で403、中間証明書ローテ後のTLS失敗が典型です。

sntpと単調時計で測る

sntp -d pool.ntp.orgをゲートウェイと同じユーザで実行し、絶対値500ms超は修正対象、5秒超はインシデントです。

JWTのiat/nbf/expマトリクス

クレーム許容失敗緩和
iat±60秒が一般的未来扱いNTP同期
nbf厳しい早期リフレッシュ嵐発行を2秒遅らせる
exp厳しい早期期限切れ短命トークン+スキュー予算

証明書更新後のTLSセッションチケット

葉証明書を週次で回すと、古いチケットが残ります。長寿命プロセスはローリング再起動が必要になることがあります。

スリープと仮想化

30分スリープ後はWi-Fi再接続まで時刻が古いままかもしれません。常時稼働ゲートウェイはデスクトップ級Mac miniが安定します。

是正マトリクス

  • 200ms未満:監視のみ
  • 200ms–2s:即時NTP再同期とアラート
  • 2s超:トラフィック停止→修正→スモーク

インシデント断片

  1. date -uとログをスナップショット
  2. JWTを検証ツールで読む
  3. 必要ならtimedを再起動
  4. openclaw doctorでTLSを確認
  5. ダッシュボードに300ms閾値を追加

Prometheusメトリクス

30秒ごとにsntp由来のゲージをスクレイプし、5連続で0.3秒超なら通知します。

LaunchAgentとtimed

45日稼働でもtimedが静かに劣化することがあります。追加の時間ログジョブを置きます。

多地域と夏時間

機械トークンはUTCのみで発行し、人間向けログだけローカル表示にします。

ゴールデンイメージ

初回ブート前に時計が止まっていることがあります。200ms超ではOpenClawを起動しないガードを入れます。

FAQ

2秒のズレはJWTを壊す?

厳しいiatではyes。

スリープは影響する?

はい。

チケットを無効化すべき?

最終手段;ローテ後の再起動を優先。

Mac miniで rehearsal?

macOSの時間サービスがLinuxと異なるからです。

同じOSファミリーで検証するには、MacHTMLのApple SiliconMac mini約$16.9/日で借りてtimedとWi-Fiジッターを再現してください。

macOSでOpenClaw時刻同期をリハーサル

クラウドMac miniでNTP・JWT・TLSチケットを本番と同じスケジュールで検証。

ゲートウェイ時計デバッグ
最低 $16.9/日