OpenManus はデフォルトではトークン制限を適用しません。 独自の上限は max_input_tokens で、app/config.py では Optional として宣言され、デフォルト値は None、説明は「すべてのリクエストで使用する最大入力トークン数(無制限の場合は None)」です。これは出荷済みの設定例には記載されていません。そのため、標準インストールで独自のトークン制限エラーが発生することはありません。遭遇したものはプロバイダーに由来します。設定した場合は、予想しにくい 2 通りの動作をし、現在の main に存在する不具合によって、すぐに失敗せず遅れて失敗します。
このページで扱うもう一つのエラーである Error: Unknown tool 'BrowserUseTool' は、現在発生しているバグではありません。このエラーが示すクラスは、2026年8月15日に OpenManus から削除されており、現在の main のデフォルトの Manus エージェントは、ローカルでブラウザーツールを一切登録しません。どちらの症状も API キー、エンドポイント、プロバイダーの問題ではなく、base_url の接続先を変更しても、どちらも解決しません。
その前に、位置付けについて 1 点。記載できる OpenManus のバージョンはありません。唯一の 3 つのタグ v0.1.0、v0.2.0、v0.3.0 は、2025 年 4 月 10 日にすべて 34 秒以内の間隔で公開され、それ以降はタグが付けられていないため、全員がタグなしの main を実行しています。正規のリポジトリは FoundationAgents/OpenManus です。アーカイブされておらず、MIT、スター数は 58,371、最終 push は 2026 年 8 月 22 日です(GitHub API、2026 年 9 月 21 日)。旧 mannaandpoem/OpenManus パスは現在、プロジェクトが移転したと記載する README のスタブになっているため、2025 年のチュートリアルに引用されたファイルパスや行番号は、もはや存在しないコードを指します。以下はすべて、2026 年 9 月 21 日に main ブランチのソースで確認したもので、実行は一切していません。
4 つのメッセージのうち、実際に表示されているのはどれか
| 表示される内容 | 表示する主体 | 意味 |
|---|---|---|
Maximum token limit reached, cannot continue execution: Request may exceed input token limit (Current: …, Needed: …, Max: …) | OpenManus、app/agent/toolcall.py | 実行に設定した独自の max_input_tokens 上限に達しました。リクエストは送信されませんでした |
| モデル名を含むコンテキスト長またはトークンエラー | プロバイダー(OpenAIError 経由で表面化) | リクエストがモデルのコンテキストウィンドウまたはエンドポイント独自の上限を超えました。OpenManus の上限とは無関係です |
Error: Unknown tool 'X' | OpenManus、app/agent/toolcall.py の 179~181 行 | モデルが available_tools.tool_map に存在しないツールを指定しました。ツール結果として返されるため、ループは継続して 1 ステップを消費します |
Failed to connect to Browser Use CLI 3.0: … | OpenManus、app/agent/manus.py の 99 行 | デフォルトのブラウザ MCP サーバーが起動しませんでした。実行は継続し、Manus エージェントは 4 つのローカルツールに加え、設定した他の MCP サーバーを保持します |
3 行目を生成するディスパッチは 3 行で、2026 年のブラウザ書き換えによっても変更されていません。name = command.function.name、続いて if name not in self.available_tools.tool_map: return f"Error: Unknown tool '{name}'" です。その中にはブラウザ固有の要素がないため、モデルが作り出したどのツールでも同じ文字列が表示されます。
トークン制限はオプトイン式で、累積的かつ概算です
「トークン制限」と呼ばれる異なる数値が 3 つあり、エラーメッセージが関係するのは常にそのうち 1 つだけです。
| 設定 | 制限対象 | デフォルト | 出荷済みの例にあるか? |
|---|---|---|---|
max_tokens | 1 回のレスポンス | コード中の 4096 | はい — 8192 に設定 |
max_input_tokens | 実行全体での累積入力 | None、つまり無制限 | いいえ。手動で追加しなければ適用されません |
| モデルのコンテキストウィンドウ | プロバイダー側での 1 リクエスト | モデル固有 | OpenManus の設定ではない |
2 行目が意外に感じられる部分です。app/llm.py の LLM.check_token_limit() は (self.total_input_tokens + input_tokens) <= self.max_input_tokens を返します。これは 1 つのリクエストに対するチェックではなく、セッションの実行中合計です。そのため、個々のリクエストが小さくても、長いエージェント実行では累積によって上限に達します。エラーテキストには current、needed、max の計算が明記されます。デフォルトの Manus エージェントは max_steps = 20 を設定し、各ステップでそれまでの会話を再送信するため、累積値はステップ数以上の速さで増加します。
このカウントも OpenManus 独自の推定です。LLM.__init__ は tiktoken.encoding_for_model(self.model) を呼び出し、KeyError で cl100k_base にフォールバックします。そのため、tiktoken にプリセットがないモデル ID、つまり Claude や Gemini の ID、またはゲートウェイ名前空間付き ID では、適用される予算はプロバイダーのカウントではなく概算値です。
# config/config.toml
[llm]
model = "claude-sonnet-4-6"
base_url = "https://api.kunavo.com/v1"
api_key = "sk-kn-..."
# The RESPONSE cap. Ships as 8192 in config.example.toml; the code default is 4096.
max_tokens = 8192
# The CUMULATIVE INPUT budget for the whole run. Absent from every shipped
# example, and None in code — so a stock install enforces no ceiling at all.
max_input_tokens = 400000上限が金額面で意味すること
max_input_tokens は累積入力を制限するため、1 回の実行における入力側のコスト上限に直接換算できます。以下の数値は、記載された上限に基づく例示的なトークン計算であり、実測タスクコストでも請求額の上限でもありません。この設定によって上限が定められる入力トークンを、100 万トークンあたりの現在の Kunavo カタログ料金で価格換算しています。出力はこの設定の対象に一切なりません。最後の列は、サンプル設定に含まれる max_tokens = 8192 で 1 回のレスポンスを価格換算したもので、20 ステップの実行ではこれが 20 回生成される可能性があります。
| モデル | 100万トークンあたりの入力/出力 | 100,000 上限における入力 | 400,000 上限における入力 | 8,192 トークンのレスポンス 1 回 |
|---|---|---|---|---|
| Claude Haiku 4.5 | $0.70 / $3.50 | $0.070 | $0.280 | $0.029 |
| GPT-5.6 Terra | $0.70 / $4.20 | $0.070 | $0.280 | $0.034 |
| Claude Sonnet 4.6 | $2.10 / $10.50 | $0.210 | $0.840 | $0.086 |
| Claude Opus 5 | $3.50 / $17.50 | $0.350 | $1.400 | $0.143 |
2 つの見方があります。上限は予算ではなく停止条件です。実行の入力側にかかり得る最大コストを示すだけで、タスクが完了するかどうかは示しません。また、OpenManus は tiktoken で数えるため、適用される上限とプロバイダーが請求するトークンは異なる測定値です。暴走ループを制限するために数値を設定し、その後、アカウントに実際に記録された値と照合してください。Kunavo のカタログ金額は上限ではなく請求の下限です。上流が料金を報告すると、請求額はカタログコストと上流コストに適用されるマークアップを掛けた額の大きい方になります。Kunavo の最小トップアップは前払いクレジット $10 であり、これは資金投入の最低額であって、タスク料金やサブスクリプションではありません。請求の詳細を参照してください。
トークンエラーが遅れて発生する理由
これは現在の main で読み取れる不具合であり、トークン制限の失敗がハングのように感じられる理由です。app/llm.py 内の 3 つの @retry デコレーター(ask、ask_with_images、ask_tool)はすべて同じように記述されています。
| デコレーターが示す内容 | 一致するもの | 結果 |
|---|---|---|
末尾コメント:# Don't retry TokenLimitExceeded | retry_if_exception_type((OpenAIError, Exception, ValueError)) | TokenLimitExceeded は OpenManusError のサブクラスであり、そのクラスは Exception のサブクラスです。そのため、Exception だけの指定でもこの例外に一致します。 |
Raise 箇所のコメント:# Raise a special exception that won't be retried | stop_after_attempt(6), wait_random_exponential(min=1, max=60) | エラーが表面化するまで、指数バックオフ付きで最大 6 回試行し、毎回同じ失敗する合計値を再計算します |
下流のエージェントループも、この形を否定するのではなく裏付けています。app/agent/toolcall.py は例外を捕捉して isinstance(e.__cause__, TokenLimitExceeded) を検査します。この __cause__ のアンラップによって tenacity の RetryError が到達し、独自のログ行には「Token limit error (from RetryError)」と表示されます。その後で初めて、ユーザーに表示する「Maximum token limit reached, cannot continue execution」メッセージを追加し、エージェント状態を finished に設定します。つまり、消費側のコードは、デコレーターのコメントが発生しないとしているリトライをすでに前提にしています。
マージ済みの修正はありません。PR #1348(タイトル「fix: prevent needless retry of TokenLimitExceeded and fix search engine fallback」)は 2026 年 8 月 10 日に未マージのままクローズされ、その再提出である #1407 は 2026 年 9 月 21 日時点でもオープンかつ未マージでした。関連するコンテキストオーバーフロー PR #1391(「add tool description token budget to prevent context overflow」)は 2026 年 8 月 18 日に未マージのままクローズされました。メンテナーがクローズした理由はここでは確認しておらず、未マージであることだけを確認しています。2025 年 3 月 17 日の過去の報告 issue #779「hitting token limit」 は、state_reason: not_planned の状態で非アクティブ bot により 2026 年 9 月 17 日にクローズされました。これは解決ではなくタイムアウトです。いずれかが取り込まれるまで、実用的な回避策は max_input_tokens を未設定のままにしてプロバイダーに過大なリクエストを拒否させるか、設定して遅延を受け入れることです。
Unknown tool 'BrowserUseTool' は、もはや存在しないバージョンからのエラーです
Issue #789「Result: Error: Unknown tool 'BrowserUseTool'」は 2025 年 3 月 18 日に起票され、2026 年 9 月 21 日時点でもオープンのままで、inactive のラベルが付いていました。原因はエンドポイントでもキーでもありません。報告者自身のログでは、登録されたツール名が browser_use である箇所で、モデルが Python クラス名 BrowserUseTool を出力しています。同じ実行の次のステップでは、browser_use を呼び出すと正常にディスパッチされています。貼り付けられたログは「Activating tool: 'browser_use'」で終わり、締めくくりの行が診断全体です。「BrowserUseTool seems not work, but browser_use can」。コメント投稿者が示した唯一の助言は、より強力なモデルを試すことでした。これはツール呼び出し忠実度の問題に対する適切な回答です。
この診断は現在の main には当てはまりません。正しく指定すべき browser_use という名前のツールが、もはや存在しないためです。2026 年 8 月 15 日のコミット ab8dfe43(「feat(browser): use Browser Use CLI 3.0」)と 05c5bbb1(「refactor(browser): use CLI 3.0 MCP server」)によって、ローカルブラウザツールが削除されました。main にある app/tool/ のディレクトリ一覧には browser_use_tool.py がなく、ツリーに残る BrowserUseTool という文字列の出現箇所は app/agent/sandbox_agent.py のコメントアウトされた 1 行だけです。
| 2025 年 3 月のコード(issue #789) | 現在の main、2026 年 9 月 21 日に確認 | |
|---|---|---|
| ブラウザツール | app/tool/browser_use_tool.py 内のローカルクラス | 削除済み。デフォルトの Manus エージェントでは、プロセス外 MCP サーバーが uvx browser-use --cli-mcp として起動します |
| 登録名 | browser_use | README によると browser_exec と browser_screenshot |
| Manus エージェントにローカルで登録されるツール | ブラウザツールを含む | PythonExecute、StrReplaceEditor、AskHuman、Terminate — ブラウザツールは MCP 経由で提供されます |
| 依存関係の固定 | requirements.txt で固定 | browser-use エントリはありません。uvx によって実行時に取得されるため、ブラウザスタックはチェックアウトとは独立して変動します |
| 認証情報 | モデルキー | ローカルモードではキーは不要です。クラウドモードは、独自の環境変数を持つ別個の Browser Use アカウントです |
| 無効化スイッチ | ツールを削除 | OPENMANUS_DISABLE_BROWSER_USE=1 |
したがって、今日この特定の文字列を修正するには、チェックアウトを更新し、古いリポジトリパスを前提に書かれたチュートリアルに基づく判断をやめてください。推測せずに述べるべき注意点が 1 つあります。MCP 接続に失敗すると、app/agent/manus.py は Failed to connect to Browser Use CLI 3.0 をログに記録し、4 つのローカルツールで処理を続けます。その結果、モデルは登録されていないブラウザツールを指定できる状態になります。実際に Unknown tool メッセージが発生するか、またどの名前で発生するかは、ここでは 観測していません。調査箇所として扱い、文書化された症状とはみなさないでください。また、requirements.txt が uv>=0.6.0 を固定している点にも注意してください。通常のインストールで uvx が PATH に入るかどうかは確認していません。
検索で今も見つかるもので、上の段落が意図的に主張していないことが 1 つあります。リポジトリには、デフォルトパスでは読み込まれないブラウザコードが実際に存在します。別個の Daytona サンドボックスエントリポイント sandbox_main.py は、SandboxManus エージェントを構築し、app/tool/sandbox/sb_browser_tool.py の SandboxBrowserTool をローカルツールとして登録します。名前は sandbox_browser であり、browser_use ではありません。したがって「ローカルブラウザツールがない」というのは、main.py から取得するデフォルトの Manus エージェントについての記述であり、ツリー全体についての記述ではありません。
検索時に区別しておくべき名前が 1 つあります。OpenManus/OpenManus-RL は別組織にある別リポジトリで、エージェントランタイムのバージョンではなく強化学習の研究プロジェクトです。そのファイル構成は、どちらのエラーについても何も示しません。
別の API エンドポイントで変わること、変わらないこと
上記の両方の症状は OpenManus 内部で生成されるため、「別のプロバイダーにすれば解決するか」という問いへの正直な答えは、いいえです。エンドポイントの選択が影響するのは、これら 2 つと取り違えやすい近接した一連の失敗です。
| 失敗 | エンドポイントに起因? | 最初に確認すること |
|---|---|---|
| OpenManus 独自のトークン制限メッセージ | いいえ — リクエスト送信前に発生 | max_input_tokens の値と、設定する意図があったかどうか |
Unknown tool | いいえ — モデルが未登録のものを指定 | そのエージェントが登録するツールと、モデルのツール呼び出し能力が十分かどうか |
| プロバイダーのコンテキスト長拒否 | はい | モデルのコンテキストウィンドウと、それに対する max_tokens |
| 初回実行時の認証またはモデル未検出エラー | はい | 出荷済みの例は、Anthropic が 2026 年 2 月 19 日に廃止した Claude ID をなお指定しています。OpenManus の料金と API セットアップで扱っています |
temperature に対する 400 | はい | OpenManus は、2 つのハードコードされた推論 ID 以外のすべてのリクエストで temperature を送信し、temperature = 0.0 を出荷しています |
| スクリーンショットがモデルに黙って届かない | 一部該当 | Vision は 6 つのハードコードされたモデル ID との完全一致で制御され、そのうち Anthropic のものはすべて廃止されています。セットアップページでも扱っています |
5 行目について、一般的な助言ではなくこのエンドポイントに固有のファーストパーティ情報が 1 つあります。Kunavo のディスパッチャーは、未対応パラメーターとして宣言しているカタログモデル — 現在は Claude Fable 5.1, Claude Fable 5, Claude Opus 5.5, Claude Opus 5, Claude Opus 4.8, Claude Opus 4.7, Claude Sonnet 5 — について、転送前に temperature、top_p、top_k を削除します。これはプロトコルスイッチの段階で行われるため、削除後の本文がリトライ試行でも使用されます。それ以外のモデルでは、このフィールドは OpenManus が送信したまま転送されます。これにより、それらのモデルで発生する特定の 400 を 1 つ取り除けますが、OpenManus がここでテスト済みだという主張ではありません。Kunavo は OpenManus をランタイムテストしていません。このページのどの記述も互換性の結果ではありません。
デバッグではなく経路を比較しているなら、OpenAI 互換 APIでは汎用経路が運ぶものと運ばないものを、LLM ゲートウェイでは複数のモデル系統で 1 つのキーを使う価値がある場合を、AI コスト最適化では掲載料金が最安であることとタスク完了までの最安方法の違いを扱っています。これはエージェントループを左右する区別です。同じ種類の診断を別のクライアントで行う場合は、OpenCode でプロバイダーが見つからない場合を参照してください。
不具合の修正ではなく OpenManus のセットアップを行うのですか?エンドポイント側で必要なのは [llm] 内の 3 つのフィールド、model、base_url、api_key です。クイックスタートから始め、リクエスト形式を チャット補完 と照合し、キーへの資金追加の準備ができたら Kunavo アカウントを作成してください。試している間も動作する経路を確保し、他を変更する前に、範囲を限定したタスクを 1 つ実行してください。
よくある質問
OpenManus のトークン上限は?
デフォルトでは上限はありません。OpenManus 自身の上限は max_input_tokens フィールドです。app/config.py では Optional として宣言され、デフォルト値 None は「unlimited」と説明されています。また、同梱されている設定例には登場しません。そのため、標準インストールでは独自のトークン上限エラーは発生せず、遭遇する上限はプロバイダー側のものです。設定した場合、LLM.check_token_limit() は self.total_input_tokens + input_tokens をこの値と比較します。つまり、これはリクエストごとのコンテキストチェックではなく、実行全体に対する累積入力予算です。モデルのコンテキストウィンドウとは無関係であり、1 回の応答を制限する max_tokens とも無関係です。max_tokens は config/config.example.toml で 8192 として同梱されています。3 つすべてを 2026 年 9 月 21 日に main ブランチで確認しました。
トークン上限を報告する前に OpenManus がハングするのはなぜですか?
上限エラーが再試行されるためです。コメントでは再試行しないと書かれているにもかかわらずです。app/llm.py の 3 つの @retry デコレーター(ask、ask_with_images、ask_tool)はすべて、末尾に「# Don't retry TokenLimitExceeded」というコメントを付けた retry_if_exception_type((OpenAIError, Exception, ValueError)) として記述されています。TokenLimitExceeded は OpenManusError を継承し、OpenManusError は Exception を継承するため、裸の Exception エントリに一致し、wait_random_exponential(min=1, max=60) のバックオフを伴って stop_after_attempt(6) まで tenacity が再試行します。エージェント自身のハンドラーもこの構造を確認しています。app/agent/toolcall.py は isinstance(e.__cause__, TokenLimitExceeded) をチェックします。これは tenacity の RetryError が到達する形式であり、その場合にのみ「Maximum token limit reached, cannot continue execution」と出力します。修正案は存在しますが、まだマージされていません。PR #1348 は 2026 年 8 月 10 日に未マージのままクローズされ、再提出された #1407 は 2026 年 9 月 21 日時点でもオープンかつ未マージでした。これは実行による再現ではなく、ソースの読み取りに基づく説明です。
OpenManus の「Error: Unknown tool 'BrowserUseTool'」を修正するには?
チェックアウトを更新してください。現在の OpenManus main には、そのクラスが存在しないためです。ローカルのブラウザーツールは 2026 年 8 月 15 日にコミット ab8dfe43 と 05c5bbb1 で削除されました。app/tool/ に browser_use_tool.py はなく、ツリー全体で BrowserUseTool という文字列が現れるのは app/agent/sandbox_agent.py のコメントアウトされた行だけです。main.py が構築するデフォルトの Manus エージェントでは、現在、ブラウザー処理は uvx browser-use --cli-mcp として起動するプロセス外 MCP サーバーになっており、browser_exec と browser_screenshot という名前のツールを公開しています。一方、別の Daytona サンドボックス用エントリポイントである sandbox_main.py では、sandbox_browser という独自のローカルブラウザーツールを引き続き登録します。問題 #789 の報告者が実行していた 2025 年 3 月のコードでは、モデルが登録済みツール名ではなく Python クラス名を出力していたことが原因でした。本人のログには、browser_use を呼び出した次のステップでは正常にディスパッチされており、最後の行には「BrowserUseTool seems not work, but browser_use can」とあります。この文字列自体は一般的なものです。app/agent/toolcall.py は、available_tools.tool_map に存在しない任意の名前に対して f"Error: Unknown tool '{name}'" を返します。そのため、現在でもモデルが発明したツール名には同じメッセージが表示されます。
Issue #789 は修正済みですか。また、修正を含む OpenManus のバージョンは何ですか?
修正されておらず、記載できるバージョンもありません。Issue #789「Result: Error: Unknown tool 'BrowserUseTool'」は 2025 年 3 月 18 日に起票され、2026 年 9 月 21 日時点でもオープンのままで、inactive のラベルが付いていました。コメントは 3 件で、より強力なモデルを試す提案、報告者が試すことへの同意、非アクティブ bot によるコメントでした。関連するトークン制限の報告である issue #779「hitting token limit」は、同じ非アクティブ bot により 2026 年 9 月 17 日に state_reason が not_planned の状態でクローズされました。これは修正ではなくタイムアウトです。また、名前を挙げられる現在の OpenManus リリースもありません。唯一の 3 つのタグ v0.1.0、v0.2.0、v0.3.0 はすべて 2025 年 4 月 10 日に互いに 34 秒以内の間隔で公開され、それ以降はタグが付けられていないため、全員がタグなしの main を実行しています。バージョン番号ではなく、コミット日を記載してください。
API プロバイダーを切り替えれば、OpenManus のトークンエラーやツールエラーは解決しますか?
いいえ。どちらの失敗も、本当にプロバイダーに起因するものと分けて考える必要があります。上記のトークン制限メッセージは、リクエスト送信前に OpenManus 自身が、設定された上限に対して自分のアカウンティングを行うことで生成するため、エンドポイントを変えても変わりません。Unknown tool メッセージは、モデルが未登録のものを指定した際に OpenManus のツールディスパッチが生成するもので、モデルのツール呼び出し忠実度の問題です。issue #789 で示された唯一の助言が、まさにその理由から別のモデルを試すことでした。別のエンドポイントで変わるものは次のとおりです。プロバイダー側のコンテキスト長超過は TokenLimitExceeded ではなく OpenAIError として返されます。出荷済みのサンプル設定をそのまま使うと、トークンエラーではなくモデルエラーになります。これは、Anthropic が 2026 年 2 月 19 日に廃止した Claude ID をなお指定しているためです。また OpenManus は、ハードコードされた 2 つの推論 ID 以外では常に temperature を送信するため、そのパラメーターをベンダーが廃止したモデルでは 400 型の失敗になります。
OpenManus は、私のプロバイダーと同じ方法でトークンを数えますか?
いいえ。OpenManus は tiktoken をローカルで使用して数え、LLM.__init__ は try ブロック内で tiktoken.encoding_for_model(self.model) を呼び出し、KeyError の場合は cl100k_base にフォールバックします。Claude や Gemini の ID、または tiktoken にプリセットがないゲートウェイ名前空間付き ID では、OpenManus が適用する予算はプロバイダーのカウントではなく cl100k_base による推定値です。また、TokenCounter は独自の固定値を加えます。メッセージごとに 4 トークン、書式設定トークン 2 個、低詳細度画像は 85、高詳細度タイルごとに 170 です。OpenManus のログ合計ではなく、プロバイダーのアカウントに記録された使用量と照合してください。2026 年 9 月 21 日、main ブランチで確認。requirements.txt では tiktoken~=0.9.0 が固定されています。
2026 年 9 月 21 日に確認した範囲であり、より広範な確認ではありません。app/llm.py、app/config.py、app/agent/toolcall.py、app/agent/manus.py、app/agent/base.py、app/agent/sandbox_agent.py、app/tool/sandbox/sb_browser_tool.py、sandbox_main.py、app/exceptions.py、requirements.txt、config/config.example.toml、および main ブランチの README、app/tool/ のディレクトリ一覧、削除されたブラウザツールのコミット履歴、issue #779 と #789、それらのコメント、PR #1348、#1391、#1407 の GitHub 記録、リポジトリとリリースのメタデータ、Anthropic のモデル廃止ページを確認しました。実行は一切していません。インストール、OpenManus の実行、どちらのエラーの再現、OpenManus 経由でのどのエンドポイントへのリクエストも行っていないため、ここでの動作に関する主張はすべて、実際に観測した失敗ではなくソースの読み取りに基づくものです。成功した最小限の実行も、実施していないため報告していません。Kunavo のトークン料金はライブカタログに基づき、すべてのドル金額は実測タスクコストではなく例示的なトークン計算です。