Voltar aos guias
Agentes de programação·21 de setembro de 2026·Atualizado em 1 de outubro de 2026·11 min de leitura

Limites de tokens do OpenManus e o erro Unknown BrowserUseTool: um existe, o outro desapareceu

O OpenManus não gera erro de limite de tokens até você ativar essa opção — e o erro do BrowserUseTool se refere a uma classe excluída do projeto em agosto de 2026.

Última revisão em .

O OpenManus não impõe limite de tokens por padrão. Seu próprio limite superior é max_input_tokens, que app/config.py declara como Optional com valor padrão None e a descrição "Maximum input tokens to use across all requests (None for unlimited)", e que não aparece em nenhum exemplo de configuração distribuído. Portanto, uma instalação padrão nunca gera seu próprio erro de limite de tokens — o que você atingiu veio do provedor. Quando você o define, ele se comporta de duas maneiras que as pessoas não esperam, e um defeito presente no main atual faz com que falhe lentamente em vez de rapidamente.

O outro erro abordado nesta página, Error: Unknown tool 'BrowserUseTool', não é um bug ativo. A classe que ele nomeia foi excluída do OpenManus em 15 de agosto de 2026, e o agente Manus padrão no main atual não registra nenhuma ferramenta de navegador localmente. Nenhum dos sintomas é um problema de chave de API, endpoint ou provedor, e redirecionar base_url não corrige nenhum deles.

Uma observação de contexto antes de tudo. Não há uma versão do OpenManus a citar: as únicas três tags, v0.1.0, v0.2.0 e v0.3.0, foram todas publicadas em um intervalo de 34 segundos em 10 de abril de 2025, e nada foi marcado desde então, portanto todos executam o main sem tag. O repositório canônico é FoundationAgents/OpenManus — não arquivado, MIT, 58.371 estrelas, último push em 22 de agosto de 2026 (API do GitHub, 21 de setembro de 2026). O antigo caminho mannaandpoem/OpenManus agora é um README de stub dizendo que o projeto mudou, portanto caminhos de arquivo e números de linha citados em tutoriais de 2025 apontam para código que não está mais lá. Tudo abaixo foi lido no código-fonte no branch main em 21 de setembro de 2026 e nada foi executado.

Qual das quatro mensagens você realmente tem

O que você vêQuem a imprimeO que significa
Maximum token limit reached, cannot continue execution: Request may exceed input token limit (Current: …, Needed: …, Max: …)OpenManus, app/agent/toolcall.pyO limite max_input_tokens definido por você para a execução foi atingido. Nenhuma solicitação foi enviada
Um erro de contexto ou de tokens que nomeia o modeloSeu provedor, exibido por meio de OpenAIErrorA solicitação excedeu a janela de contexto do modelo ou o próprio limite do endpoint. Não tem relação com o limite do OpenManus
Error: Unknown tool 'X'OpenManus, linhas 179–181 de app/agent/toolcall.pyO modelo nomeou uma ferramenta ausente de available_tools.tool_map. Retornado como resultado de ferramenta, portanto o loop continua e consome uma etapa
Failed to connect to Browser Use CLI 3.0: …OpenManus, linha 99 de app/agent/manus.pyO servidor MCP de navegador padrão não foi iniciado. A execução continua: o agente Manus mantém suas quatro ferramentas locais, além de quaisquer outros servidores MCP configurados

O despacho que produz a terceira linha tem três linhas e não foi alterado pela reformulação do navegador de 2026: name = command.function.name, depois if name not in self.available_tools.tool_map: return f"Error: Unknown tool '{name}'". Nada nele é específico para navegadores, portanto a mesma string aparece para qualquer ferramenta inventada por um modelo.

O limite de tokens é opcional, cumulativo e aproximado

Três números diferentes são chamados de "o limite de tokens", e a mensagem de erro diz respeito apenas a um deles.

ConfiguraçãoO que ele limitaPadrãoNo exemplo distribuído?
max_tokensUma resposta4096 no códigoSim — definido como 8192
max_input_tokensEntrada cumulativa durante toda a execuçãoNone, significando ilimitadoNão. Você o adiciona manualmente ou ele não se aplica
A janela de contexto do modeloUma solicitação, no provedorDo próprio modeloNão é uma configuração do OpenManus

A segunda linha é a que surpreende as pessoas. LLM.check_token_limit() em app/llm.py retorna (self.total_input_tokens + input_tokens) <= self.max_input_tokens — um total acumulado para a sessão, não uma verificação contra uma única solicitação. Portanto, uma execução longa do agente o atinge por acumulação mesmo quando cada solicitação individual é pequena, e o texto do erro explicita a aritmética: atual, necessário, máximo. O agente Manus padrão define max_steps = 20, e cada etapa reenvia a conversa até o momento, portanto o valor cumulativo sobe mais rápido do que a contagem de etapas.

A contagem também é uma estimativa própria do OpenManus. LLM.__init__ chama tiktoken.encoding_for_model(self.model) e recorre a cl100k_base em um KeyError, portanto, para qualquer ID de modelo sem predefinição no tiktoken — um ID Claude ou Gemini, ou um com namespace de gateway — o orçamento aplicado é uma aproximação, não a contagem do provedor.

config/config.toml
# 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

Quanto vale um limite em dinheiro

Como max_input_tokens limita a entrada cumulativa, ele se converte diretamente em um teto de custo para o lado de entrada de uma execução. Os valores abaixo são aritmética ilustrativa de tokens com base no limite indicado, não o custo medido de uma tarefa nem um teto de cobrança: eles calculam o preço dos tokens de entrada limitados pela configuração, usando as tarifas atuais do catálogo do Kunavo por milhão. A saída não é coberta por essa configuração — a última coluna calcula o preço de uma resposta no max_tokens = 8192 distribuído pelo exemplo de configuração, e uma execução de vinte etapas pode produzir vinte delas.

ModeloEntrada / saída por 1MEntrada com limite de 100,000Entrada com limite de 400,000Uma resposta de 8,192 tokens
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

Duas interpretações. Um limite é uma parada, não um orçamento: ele informa o máximo que o lado de entrada de uma execução pode custar e não diz nada sobre a conclusão da tarefa. E, como o OpenManus conta com tiktoken, o limite aplicado por ele e os tokens faturados pelo provedor são duas medições diferentes — defina o número para limitar um loop descontrolado e depois faça a reconciliação com o que sua conta realmente registrou. O valor do catálogo do Kunavo é um piso de cobrança, não um teto: quando o upstream informa sua cobrança, a fatura é o maior valor entre o custo do catálogo e o custo do upstream multiplicado pelo markup aplicável. O recarregamento mínimo do Kunavo é $10 em crédito pré-pago, um mínimo de financiamento, não uma tarifa de tarefa nem uma assinatura — consulte detalhes de cobrança.

Por que o erro de token chega tarde

Este é um defeito que pode ser lido no main atual e é o motivo pelo qual uma falha de limite de tokens parece um travamento. Todos os três decoradores @retry em app/llm.py — em ask, ask_with_images e ask_tool — são escritos de forma idêntica:

O que o decorador dizO que ele correspondeConsequência
Comentário final: # Don't retry TokenLimitExceededretry_if_exception_type((OpenAIError, Exception, ValueError))TokenLimitExceeded é uma subclasse de OpenManusError, que é uma subclasse de Exception — portanto, a entrada Exception sem especificação corresponde a ele
Comentário no local da exceção: # Raise a special exception that won't be retriedstop_after_attempt(6), wait_random_exponential(min=1, max=60)Até seis tentativas com recuo exponencial antes de o erro aparecer, recalculando o mesmo total que falha a cada vez

O loop do agente a jusante confirma o formato em vez de contradizê-lo. app/agent/toolcall.py captura a exceção e testa isinstance(e.__cause__, TokenLimitExceeded) — esse desempacotamento de __cause__ é como chega um RetryError do tenacity, e sua própria linha de log diz "Token limit error (from RetryError)". Só então ele adiciona a mensagem visível ao usuário "Maximum token limit reached, cannot continue execution" e define o estado do agente como concluído. Em outras palavras, o código consumidor já presume a repetição que o comentário do decorador diz que não ocorre.

Não há correção integrada. A PR #1348, intitulada "fix: prevent needless retry of TokenLimitExceeded and fix search engine fallback", foi encerrada sem integração em 10 de agosto de 2026; sua reapresentação, #1407, ainda estava aberta e sem integração em 21 de setembro de 2026. Uma PR relacionada sobre estouro de contexto, #1391, "add tool description token budget to prevent context overflow", foi encerrada sem integração em 18 de agosto de 2026. O motivo pelo qual os mantenedores as encerraram não foi lido aqui, apenas que não foram integradas. O relatório histórico, issue #779 "hitting token limit" de 17 de março de 2025, foi encerrado em 17 de setembro de 2026 por um bot de inatividade com state_reason: not_planned — um timeout, não uma resolução. Até que uma dessas correções seja integrada, as mitigações práticas são deixar max_input_tokens sem definição e permitir que o provedor rejeite solicitações grandes, ou defini-lo e aceitar o atraso.

Unknown tool 'BrowserUseTool' é um erro de uma versão que não existe mais

O issue #789, "Result: Error: Unknown tool 'BrowserUseTool'", foi aberto em 18 de março de 2025 e ainda estava aberto em 21 de setembro de 2026, rotulado como inactive. Sua causa nunca foi um endpoint ou uma chave. O próprio log do relator mostra o modelo emitindo o nome da classe Python, BrowserUseTool, onde o nome da ferramenta registrada era browser_use — e a etapa seguinte da mesma execução sendo despachada corretamente assim que chamou browser_use. O log colado termina em "Activating tool: 'browser_use'", e sua linha final é todo o diagnóstico: "BrowserUseTool seems not work, but browser_use can". O único conselho dado por qualquer comentarista foi tentar um modelo mais forte, que é o tipo correto de resposta para um problema de fidelidade na chamada de ferramentas.

Esse diagnóstico não se aplica ao main atual, porque não existe mais nenhuma ferramenta chamada browser_use para acertar. Em 15 de agosto de 2026, os commits ab8dfe43 ("feat(browser): use Browser Use CLI 3.0") e 05c5bbb1 ("refactor(browser): use CLI 3.0 MCP server") excluíram a ferramenta de navegador local. Uma listagem do diretório app/tool/ no main não contém nenhum browser_use_tool.py, e a única ocorrência da string BrowserUseTool restante na árvore está em uma linha comentada de app/agent/sandbox_agent.py.

Código de março de 2025 (issue #789)main atual, lido em 21 de setembro de 2026
Ferramenta de navegadorClasse local em app/tool/browser_use_tool.pyExcluída. No agente Manus padrão, um servidor MCP fora do processo iniciado como uvx browser-use --cli-mcp
Nome registradobrowser_usebrowser_exec e browser_screenshot, conforme o README
Ferramentas registradas localmente no agente ManusIncluía a ferramenta de navegadorPythonExecute, StrReplaceEditor, AskHuman, Terminate — as ferramentas de navegador chegam por MCP
Fixação de dependênciaFixada em requirements.txtNenhuma entrada browser-use; obtida em tempo de execução por uvx, portanto a pilha do navegador evolui independentemente do seu checkout
CredenciaisSua chave de modeloO modo local não precisa de chave. O modo de nuvem é uma conta separada do Browser Use com suas próprias variáveis de ambiente
DesativarRemover a ferramentaOPENMANUS_DISABLE_BROWSER_USE=1

Portanto, a correção para esta string exata hoje é atualizar seu checkout e parar de raciocinar com base em tutoriais escritos para o caminho antigo do repositório. Vale declarar uma ressalva, em vez de presumir: quando a conexão MCP falha, app/agent/manus.py registra Failed to connect to Browser Use CLI 3.0 e continua com as quatro ferramentas locais, o que deixa o modelo capaz de nomear uma ferramenta de navegador que não está registrada. Não foi observado aqui se isso produz uma mensagem Unknown tool na prática, nem sob qual nome, — trate isso como um ponto a investigar, não como um sintoma documentado. Observe também que requirements.txt fixa uv>=0.6.0; não foi verificado se uma instalação normal coloca uvx em seu PATH.

Uma coisa que a pesquisa ainda encontrará, e que os parágrafos acima deliberadamente não afirmam: o repositório contém código de navegador que o caminho padrão nunca carrega. O ponto de entrada separado do sandbox Daytona sandbox_main.py cria um agente SandboxManus que registra SandboxBrowserTool de app/tool/sandbox/sb_browser_tool.py como uma ferramenta local — sob o nome sandbox_browser, não browser_use. Portanto, “nenhuma ferramenta local de navegador” é uma afirmação sobre o agente Manus padrão que você obtém de main.py, não sobre toda a árvore.

Um nome a manter separado durante a pesquisa: OpenManus/OpenManus-RL é um repositório distinto, em uma organização distinta, um projeto de pesquisa de aprendizado por reforço, não uma versão do runtime do agente; seu layout de arquivos não tem relação com nenhum dos dois erros.

O que um endpoint de API diferente muda e não muda

Ambos os sintomas acima são produzidos dentro do OpenManus, portanto a resposta honesta a “outro provedor corrigirá isso?” é não. O que a escolha do endpoint afeta é um conjunto próximo de falhas que podem ser facilmente confundidas com essas duas.

FalhaTem formato de endpoint?O que verificar primeiro
Mensagem de limite de tokens do próprio OpenManusNão — gerada antes do envio de qualquer solicitaçãoSeu valor de max_input_tokens e se você pretendia definir um
Unknown toolNão — o modelo nomeou algo não registradoQuais ferramentas o agente registra e se o modelo é suficientemente bom em chamadas de ferramentas
Uma rejeição de comprimento de contexto do provedorSimA janela de contexto do modelo e max_tokens em relação a ela
Um erro de autenticação ou de modelo não encontrado na primeira execuçãoSimO exemplo fornecido ainda nomeia um ID Claude que a Anthropic aposentou em 19 de fevereiro de 2026 — abordado em Preços e configuração da API do OpenManus
Um erro 400 em temperatureSimO OpenManus envia temperature em todas as solicitações fora de seus dois IDs de raciocínio codificados, e fornece temperature = 0.0
Capturas de tela que silenciosamente nunca chegam ao modeloParcialmenteA visão é controlada por uma correspondência exata de string contra seis IDs de modelo codificados, todos os da Anthropic aposentados. Também abordado na página de configuração

Na quinta linha, há um detalhe de primeira parte específico deste endpoint, e não uma recomendação geral. O dispatcher do Kunavo remove temperature, top_p e top_k antes do encaminhamento, para os modelos do catálogo que declaram esses parâmetros como incompatíveis — atualmente 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 — e faz isso na troca de protocolo; portanto, o corpo sem esses campos também é o que qualquer tentativa de repetição recebe. Para todos os outros modelos, o campo é encaminhado como o OpenManus o enviou. Isso elimina um erro 400 específico para esses modelos; não é uma afirmação de que o OpenManus foi testado aqui. O Kunavo não testou o OpenManus em runtime, e nada nesta página é um resultado de compatibilidade.

Se você está avaliando rotas, em vez de depurar uma, A API compatível com OpenAI aborda o que o caminho genérico transporta e não transporta, o gateway de LLM aborda quando vale a pena usar uma chave para várias famílias, e a otimização de custos de IA aborda a diferença entre a tarifa listada mais barata e a maneira mais barata de concluir uma tarefa — distinção que decide um loop de agente. Para o mesmo tipo de diagnóstico em outro cliente, consulte Provedor do OpenCode não encontrado.

Está configurando o OpenManus, em vez de consertá-lo? O lado do endpoint consiste em três campos em [llm]: model, base_url e api_key. Comece pelo quickstart, confira o formato da solicitação em relação a chat completions e crie uma conta Kunavo quando estiver pronto para financiar uma chave. Mantenha uma rota funcional disponível enquanto testa e execute uma tarefa delimitada antes de mudar qualquer outra coisa.

Perguntas frequentes

Qual é o limite de tokens do OpenManus?

Por padrão, não há nenhum. O próprio limite superior do OpenManus é o campo max_input_tokens, que app/config.py declara como Optional com valor padrão None descrito como "ilimitado" e que não aparece em nenhum exemplo de configuração distribuído — portanto, uma instalação padrão nunca gera seu próprio erro de limite de tokens, e qualquer limite atingido vem do provedor. Quando você o define, LLM.check_token_limit() compara self.total_input_tokens + input_tokens com ele, tornando-o um orçamento cumulativo de entrada para toda a execução, e não uma verificação de contexto por solicitação. Ele não tem relação com a janela de contexto do modelo nem com max_tokens, que limita uma resposta e é distribuído como 8192 em config/config.example.toml. Os três foram lidos no branch main em 21 de setembro de 2026.

Por que o OpenManus trava antes de informar o limite de tokens?

Porque o erro de limite é repetido, apesar de um comentário dizer que não é. Todos os três decoradores @retry em app/llm.py — em ask, ask_with_images e ask_tool — são escritos como retry_if_exception_type((OpenAIError, Exception, ValueError)), com o comentário final "# Don't retry TokenLimitExceeded". TokenLimitExceeded é uma subclasse de OpenManusError, que é uma subclasse de Exception, portanto a entrada Exception sem especificação o corresponde e o tenacity tenta novamente até stop_after_attempt(6), usando wait_random_exponential(min=1, max=60) como recuo. O próprio manipulador do agente confirma o formato: app/agent/toolcall.py verifica isinstance(e.__cause__, TokenLimitExceeded), que é como chega um RetryError do tenacity, e somente então imprime "Maximum token limit reached, cannot continue execution". Existe uma correção, mas ela não foi integrada: a PR #1348 foi encerrada sem integração em 10 de agosto de 2026, e sua reapresentação, #1407, ainda estava aberta e sem integração em 21 de setembro de 2026. Isso foi lido no código-fonte, não reproduzido por execução.

Como corrijo Error: Unknown tool 'BrowserUseTool' no OpenManus?

Atualize seu checkout, porque no branch main atual do OpenManus essa classe não existe. A ferramenta de navegador local foi removida em 15 de agosto de 2026 nos commits ab8dfe43 e 05c5bbb1; app/tool/ não contém browser_use_tool.py, e a única ocorrência da string BrowserUseTool em toda a árvore está em uma linha comentada de app/agent/sandbox_agent.py. No agente Manus padrão que main.py cria, o trabalho de navegador agora é um servidor MCP fora do processo iniciado como uvx browser-use --cli-mcp, expondo ferramentas chamadas browser_exec e browser_screenshot; o ponto de entrada separado do sandbox Daytona, sandbox_main.py, ainda registra sua própria ferramenta de navegador local, chamada sandbox_browser. No código de março de 2025 em que o relator do issue #789 estava executando, a causa era o modelo emitir o nome da classe Python em vez do nome da ferramenta registrada — o próprio log mostra a etapa seguinte sendo despachada corretamente quando chamou browser_use, e a linha final diz "BrowserUseTool seems not work, but browser_use can". A string em si é genérica: app/agent/toolcall.py retorna f"Error: Unknown tool '{name}'" para qualquer nome ausente em available_tools.tool_map, portanto a mesma mensagem aparece hoje para qualquer ferramenta inventada pelo modelo.

O issue #789 foi corrigido? E qual versão do OpenManus contém a correção?

Não foi corrigido e não há uma versão a citar. O issue #789, "Result: Error: Unknown tool 'BrowserUseTool'", foi aberto em 18 de março de 2025 e ainda estava aberto em 21 de setembro de 2026, rotulado como inactive, com três comentários — um sugerindo um modelo mais forte, o relator concordando em tentar um, e um bot de inatividade. O relatório relacionado sobre limite de tokens, issue #779 "hitting token limit", foi encerrado em 17 de setembro de 2026 pelo mesmo bot de inatividade, com state_reason not_planned, o que é um timeout, não uma correção. E o OpenManus não tem uma versão atual para nomear: suas únicas três tags, v0.1.0, v0.2.0 e v0.3.0, foram todas publicadas em um intervalo de 34 segundos em 10 de abril de 2025, e nada foi marcado desde então, portanto todos executam o main sem tag. Cite a data de um commit, não um número de versão.

Trocar o provedor de API corrigirá um erro de token ou de ferramenta do OpenManus?

Não, e vale separar ambos os modos de falha daqueles que realmente têm formato de problema do provedor. A mensagem de limite de tokens mencionada acima é produzida pela própria contabilidade do OpenManus contra o limite configurado por você antes do envio de qualquer solicitação, portanto nenhum endpoint pode alterá-la. A mensagem Unknown tool é produzida pelo despacho de ferramentas do OpenManus quando o modelo nomeia algo não registrado, o que é uma propriedade de fidelidade de chamada de ferramentas do modelo, e o único conselho já dado no issue #789 foi tentar outro modelo exatamente por esse motivo. O que um endpoint diferente altera: uma rejeição de comprimento de contexto no provedor chega como OpenAIError, não como TokenLimitExceeded; uma cópia nova do exemplo de configuração distribuído falha com um erro de modelo em vez de um erro de token, porque ainda nomeia um ID Claude que a Anthropic aposentou em 19 de fevereiro de 2026; e o OpenManus sempre envia uma temperatura fora de seus dois IDs de raciocínio codificados, o que produz uma falha com formato 400 em modelos cujo fornecedor descontinuou esse parâmetro.

O OpenManus conta tokens da mesma forma que meu provedor?

Não. O OpenManus faz a contagem localmente com tiktoken, e LLM.__init__ chama tiktoken.encoding_for_model(self.model) dentro de um try que recorre a cl100k_base em caso de KeyError. Para um ID Claude ou Gemini, ou qualquer ID com namespace de gateway para o qual o tiktoken não tenha uma predefinição, o orçamento aplicado pelo OpenManus é uma estimativa cl100k_base, e seu TokenCounter adiciona constantes fixas próprias — 4 tokens por mensagem, 2 tokens de formatação, 85 para uma imagem de baixo nível de detalhe e 170 por bloco de alto nível de detalhe. Faça a reconciliação com o uso registrado pela conta do seu provedor, não com os totais registrados pelo OpenManus. Verificado no branch main, em 21 de setembro de 2026, com tiktoken~=0.9.0 fixado em requirements.txt.

Verificado em 21 de setembro de 2026, e não de forma mais ampla: 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 e o README no branch main; uma listagem de diretório de app/tool/; o histórico de commits da ferramenta de navegador excluída; os registros do GitHub para as issues #779 e #789, seus comentários e os pull requests #1348, #1391 e #1407; os metadados do repositório e das versões; e a página da Anthropic sobre descontinuação de modelos. Nada foi executado — nenhuma instalação, nenhuma execução do OpenManus, nenhuma reprodução de qualquer um dos erros e nenhuma solicitação pelo OpenManus em qualquer endpoint — portanto, toda afirmação comportamental aqui deriva da leitura das fontes, não de uma falha observada, e nenhuma execução mínima bem-sucedida é relatada porque nenhuma foi realizada. As tarifas de tokens do Kunavo vêm do catálogo ativo, e cada valor em dólar é uma aritmética ilustrativa de tokens, não o custo medido de uma tarefa.