OpenClawが動かない5つの症状 無反応から暴走まで、原因と直し方

公開: 2026-10-14
開発日記OpenClawローカルLLMOllamaColima

Mac miniに置いたOpenClawが、数日のうちに5通りの形で動かなくなりました。 OpenClawは、Discordで頼むとAIが実装し、レビューを通してPRを作り、mainへ入れるところまで進める仕組みです。 実装はminiの中で動くローカルのAI(qwen3-coder:30b)、レビューはcodexが受け持ちます。

動かなくなる理由は1つではありませんでした。 どの層で起きているかを先に決めないと、直す場所を間違えます。 5つの症状を、起きた順に書きます。

5つの症状は、別々の層で起きた

まず、仕組みの全体と、どこで何が起きたかを1枚にまとめます。

Discord受付役AI本体固定スクリプトGitHub依頼を書くコンテナの中OllamapushとPR作成PRとmain1432512345無反応 / コンテナを動かす土台のColimaが止まり、受付役ごと落ちていた止まらない / 生成が約56分続き、Ollamaの処理枠を1つ占有した途中で止まる / ツール呼び出しのXMLが閉じず、実行が止まる報告がずれる / 失敗を書かない、実行する場所を取り違えるPRにならない / ホスト側のgitとブランチ設定で失敗する
番号は症状の番号。受付役とAI本体の間(3)だけが、2つの部品にまたがっている。

用語を先に置きます。

症状1 Discordのbotが約2日間、無反応だった

10月12日、Discordに頼んでも返事が来ないことに気づきました。 miniを見ると、10月10日にAppleのOS更新で再起動されていました。

再起動のあとに戻ったものと、戻らなかったものがあります。

部品再起動後
Ollama(LaunchAgentで常駐)戻った
PR監視(launchdで常駐)戻った
Colima戻らなかった

Colimaが止まると、その中のコンテナ(受付役)も一緒に落ちます。 Discordの窓口だけが消えていたので、miniは動いているのに、botだけが黙っていました。

夜明け前の宿場で、消えた石灯籠の火を打ち石で灯し直す浪人

直し方は1行でした。miniに入って、Colimaを起動します。

export PATH=/opt/homebrew/bin:$PATH
colima start

CPUとメモリの設定は ~/.colima/default/colima.yaml に保存済みなので、引数は要りません。 コンテナは再起動すると自動で立ち上がり、約45秒で正常(healthy)になりました。

直すのは簡単で、問題は気づくまでに約2日かかったことです。 再起動後にColimaが戻ったかを見る仕組みは、まだ作っていません。 OS更新のたびに起きるので、次に同じことが起きる前に手当てが要ります。

切り分けの順番は、WIKIのOpenClawの切り分けに表にしました。

症状2 AIの生成が約56分、止まらなかった

miniのAIの応答を計測していました。 openclaw agent を、shellの timeout 280 を付けて流しました。

280秒で切れたように見えました。切れたのは、手元の計測コマンドだけでした。 受付役の側の実行は続き、AIは終わらない生成に入りました。

台所にたとえると、タイマーだけを止めて、コンロの火は点いたままでした。 手元で切った「つもり」と、向こうで止まったかどうかは別の話です。

手元のtimeout受付役の生成上限を入れた試験×280秒で、手元だけが切れた生成は続いた(53,000トークン超、約56分)上限64で試験: 64トークンで停止、全体30秒0分10分20分30分40分50分
棒の長さは時間。1本目だけ手元の話で、2本目が実際にAIが動いていた長さ。

効かなかった設定と、効いた設定

生成の長さには、上限を入れてありました。maxTokens: 8192 です。これは上限として効いていませんでした。

試したこと結果
maxTokens: 8192上限として効かなかった
models.providers.ollama.models[2].params.num_predict を8192効いた
試験として64へ下げて流す64トークンで止まり(stopReason=length)、全体で30秒
shellの timeout で計測コマンドを切る手元だけ切れる。受付役側は続く
openclaw agent --timeout 秒受付役の側で打ち切る

試験のあとは、上限を8192へ戻しました。[2] は私の設定の中での並び順なので、そのまま写さず、自分の設定を見て合わせてください。

速度は、暴走の間に毎秒27トークンから11トークンへ、なだらかに落ちました。 生成が長くなるほど、読み直す文脈が伸びて遅くなるのが主因と見ています。 熱の寄与は測っていません(電源管理の記録に警告は無し)。

上限は、止めたい層に入れる。 手元のtimeoutは、手元しか止めません。

症状3 ツール呼び出しが、途中で止まった

実Issueを任せる試験で、AIが編集ツールを呼んだ直後に、次のエラーで止まりました。

XML syntax error ... element <parameter> closed by </function>

ローカルのAIが、長い引数を持つツール呼び出しで、</parameter> という閉じ印を書き忘れていました。 この試験で1回、あとの修正ループの試験で1回、計2回起きました。

最初に疑ったのは、< や <= を含む編集内容でした。XMLの記号と衝突しそうだからです。 Ollamaに <= を含む編集を直接渡すと、通りました。 文字が原因ではありません。

毎回起きるわけではないので、対処は2つにしました。

症状4 報告と実際が、ずれていた

実際のIssue(E2Eテストの要素指定1行の修正)を、miniのAIに任せた最初の試験です。 読む、実装する、PRを作るところまでは通りました。ただし、途中の報告にずれがありました。

ぬかるんだ道の足跡を提灯で照らす浪人と、遠くで方角を指して何かを報告する使者

指示書に「呼べなければ、PRを出す合図を置かない」と書き足すと、2回目は失敗を正直に報告しました。 ただ、これは頼んでいるだけで、守られる保証がありません。 そこで、レビューをAIの判断に任せるのをやめました。

マージの前に、ホスト側の固定スクリプト(決まった手順を実行するプログラム)がレビューを呼びます。 返答の最後の行が、ちょうど「判定: 問題なし」のときだけマージします。それ以外は、レビューを呼べない、差分が大きすぎる、形式が違う、のどれでもマージしません。

AIの報告は、そのまま信じず、実際の実行記録と照らします。

openclaw sessions tail --agent codese

経過をその場で追えます。あとから一式を読むなら、実行記録を書き出す export-trajectory も使いました。 使者の口上(報告)と、道に残った足跡(実行記録)が合っているかを見る作業です。

症状5 pushは通ったのに、PRにならなかった

同じ試験で、pushまで動いたのにPRの作成が失敗しました。重なっていた原因は3つです。

2つ目が調査を遅らせました。失敗の理由を握りつぶす書き方は、原因探しの時間でいつか返ってきます。

直したあとの状態

マージ前のレビューを必須にしたうえで、「要修正」と返されたら、人を待たずにローカルのAIで直して再レビューします。最大3回です。 わざと間違えたPRで実機を試すと、要修正の指摘、ローカルのAIによる修正、再レビューで問題なし、までが約1分46秒で通りました。

まだ確かめていないこと

学んだこと

  1. 症状を、どの層で起きたかに分ける。 無反応は土台、止まらないのはAI本体、報告のずれは指示と確認の問題。直す場所が違う
  2. 手元で切れたことと、向こうで止まったことは別。 timeoutは、掛けた場所までしか効かない
  3. AIの報告は、実行記録と照らす。 失敗を書かないことがある
  4. 上限は、止めたい層に入れる。 効いたかどうかは、小さな値に下げて試して確かめる

切り分けの手順と、各症状の確認コマンドはOpenClawの切り分けにまとめています。

関連する記事です。