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 imprime | O que significa |
|---|---|---|
Maximum token limit reached, cannot continue execution: Request may exceed input token limit (Current: …, Needed: …, Max: …) | OpenManus, app/agent/toolcall.py | O 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 modelo | Seu provedor, exibido por meio de OpenAIError | A 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.py | O 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.py | O 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ção | O que ele limita | Padrão | No exemplo distribuído? |
|---|---|---|---|
max_tokens | Uma resposta | 4096 no código | Sim — definido como 8192 |
max_input_tokens | Entrada cumulativa durante toda a execução | None, significando ilimitado | Não. Você o adiciona manualmente ou ele não se aplica |
| A janela de contexto do modelo | Uma solicitação, no provedor | Do próprio modelo | Nã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
[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 = 400000Quanto 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.
| Modelo | Entrada / saída por 1M | Entrada com limite de 100,000 | Entrada com limite de 400,000 | Uma 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 diz | O que ele corresponde | Consequência |
|---|---|---|
Comentário final: # Don't retry TokenLimitExceeded | retry_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 retried | stop_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 navegador | Classe local em app/tool/browser_use_tool.py | Excluída. No agente Manus padrão, um servidor MCP fora do processo iniciado como uvx browser-use --cli-mcp |
| Nome registrado | browser_use | browser_exec e browser_screenshot, conforme o README |
| Ferramentas registradas localmente no agente Manus | Incluía a ferramenta de navegador | PythonExecute, StrReplaceEditor, AskHuman, Terminate — as ferramentas de navegador chegam por MCP |
| Fixação de dependência | Fixada em requirements.txt | Nenhuma entrada browser-use; obtida em tempo de execução por uvx, portanto a pilha do navegador evolui independentemente do seu checkout |
| Credenciais | Sua chave de modelo | O 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 |
| Desativar | Remover a ferramenta | OPENMANUS_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.
| Falha | Tem formato de endpoint? | O que verificar primeiro |
|---|---|---|
| Mensagem de limite de tokens do próprio OpenManus | Não — gerada antes do envio de qualquer solicitação | Seu valor de max_input_tokens e se você pretendia definir um |
Unknown tool | Não — o modelo nomeou algo não registrado | Quais ferramentas o agente registra e se o modelo é suficientemente bom em chamadas de ferramentas |
| Uma rejeição de comprimento de contexto do provedor | Sim | A 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ção | Sim | O 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 temperature | Sim | O 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 modelo | Parcialmente | A 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.