Gemini CLI "ENAMETOOLONG: name too long" no write_file: como resolver
Voltar para o Blog
Artigogemini clitroubleshootingagente de programaçãodev toolsopen source

Gemini CLI "ENAMETOOLONG: name too long" no write_file: como resolver

Mafra17 de outubro de 20265 min de leitura

Você atualizou o Gemini CLI, pediu para o agente criar ou editar um arquivo de nome comprido, e o write_file (ou o replace) devolveu ENAMETOOLONG: name too long. O nome é válido: o shell grava o mesmo arquivo sem reclamar. Quem estoura o limite é o arquivo temporário que o Gemini CLI cria desde a versão 0.64.0, a estável atual.

Este guia mostra de onde vem o erro, como confirmar em um comando e três formas de destravar enquanto a correção oficial não sai. Tudo foi conferido no código-fonte e nos releases do repositório google-gemini/gemini-cli em 17/10/2026, e o limite foi reproduzido num sistema de arquivos ext4.

O que significa "ENAMETOOLONG" no write_file do Gemini CLI?

Significa que o sistema operacional recusou abrir um arquivo cujo nome passa de 255 bytes. O detalhe está no fim da mensagem: o caminho recusado termina em .tmp, não é o arquivo que você pediu.

Error writing to file '/projeto/docs/<nome-longo>.md': ENAMETOOLONG: name too long, open '/projeto/docs/<nome-longo>.md.8dcae82f-0430-47ee-adf0-bcd8979a3a72.tmp' (ENAMETOOLONG)

O arquivo não é criado. Se ele já existe, não dá para sobrescrever nem editar pelo agente. O caso está descrito na issue #29702, aberta em 10/10/2026.

Por que um nome válido dá erro na 0.64.0?

Porque a 0.64.0 passou a gravar de forma atômica: escreve num arquivo temporário ao lado do destino e depois renomeia. O nome do temporário é o nome do destino mais um UUID e .tmp, o que soma 41 bytes. Trecho de packages/core/src/services/fileSystemService.ts:

const tmpPath = `${realPath}.${randomUUID()}.tmp`;

Linux e macOS aceitam até 255 bytes por nome de arquivo (NAME_MAX). Então qualquer nome entre 215 e 255 bytes é legal para o sistema e ilegal para o temporário. No teste em ext4, um nome de 214 bytes gerou temporário de 255 e gravou; com 215 bytes, o temporário foi para 256 e falhou.

VersãoComo gravaPublicada
0.63.0Escreve direto no destino, sem temporário06/10/2026
0.64.0 (estável, tag latest)Temporário + rename, falha acima de 214 bytes13/10/2026
0.65.0-preview.0 e nightly 0.66.0 de 17/10Mesmo código da 0.64.013/10 a 17/10/2026

Conta em bytes, não em caracteres

Letra sem acento ocupa 1 byte em UTF-8, letra acentuada ocupa 2 e ideograma chinês ou japonês ocupa 3. Um arquivo com 70 ideogramas e .md tem 213 bytes e passa. Com 71 ideogramas, são 216 bytes e o write_file falha. Nome gerado a partir de título de documento, slug longo ou nome com hash embutido chega lá rápido.

Atalho por symlink também não resolve: o Gemini CLI resolve o link para o caminho real antes de montar o nome do temporário, então quem conta é o nome do arquivo de destino.

Fluxograma: o erro ENAMETOOLONG cita um arquivo .tmp, conte o nome em bytes com printf e wc -c, encurte o nome para até 214 bytes; se o nome não pode mudar, volte para a 0.63.0 com o auto update desligado
Do erro ao contorno, em três passos e um ramo.

Como confirmar que é esse o problema?

Veja a versão e conte o nome em bytes:

gemini --version
printf '%s' 'nome-do-arquivo.md' | wc -c

Se a versão é 0.64.0 ou mais nova e o número passa de 214, é este bug. Para achar de uma vez todos os arquivos do projeto que o write_file não consegue regravar:

find . -type f | LC_ALL=C awk -F/ 'length($NF) > 214'

O LC_ALL=C faz o awk contar bytes em vez de caracteres. E o limite do seu sistema de arquivos sai em getconf NAME_MAX . (255 em ext4, APFS e na maioria dos casos).

Como resolver o ENAMETOOLONG no Gemini CLI?

Encurte o nome para até 214 bytes. É o caminho mais simples e não depende de versão. Para o agente não voltar a gerar nome longo, deixe a regra no GEMINI.md do projeto:

Nomes de arquivo novos: no máximo 150 bytes. Use slug curto, sem título completo.

Precisa editar um arquivo que já existe com nome longo

Renomeie, edite e devolva o nome. O mv não usa temporário, então funciona com qualquer nome que o sistema aceite:

mv 'nome-longo-original.md' tmp-edit.md
# peça a edição no tmp-edit.md
mv tmp-edit.md 'nome-longo-original.md'

Outra saída é pedir que o agente grave pelo shell (run_shell_command) em vez do write_file. O shell escreve direto no destino, sem o sufixo de 41 bytes.

O nome não pode mudar: volte para a 0.63.0

  1. Desligue a atualização automática no ~/.gemini/settings.json, senão o Gemini CLI volta sozinho para a 0.64.0:
    {
      "general": {
        "enableAutoUpdate": false
      }
    }
  2. Instale a versão anterior:
    npm install -g @google/gemini-cli@0.63.0

Cuidado com a troca: a 0.63.0 tem o falso positivo de Untrusted Command Flags Detected no modo YOLO, que a 0.64.0 corrigiu. Explicamos esse aviso neste guia. Se você roda com --yolo, encurtar o nome costuma sair mais barato que voltar de versão.

Quando sai a correção oficial?

Ainda não saiu. O PR #29703, aberto em 10/10/2026, mantém o temporário na mesma pasta (para o rename continuar atômico) e corta o nome dele para caber em 255 bytes, com teste para nome ASCII de 254 bytes e nome longo em chinês. Em 17/10 ele seguia aberto, sem merge. Acompanhe a issue #29702 e, quando o fix entrar numa versão estável, religue o enableAutoUpdate.

Na Verboo Code, as ferramentas de escrita e edição também gravam num temporário e renomeiam, mas se o temporário falhar a gravação cai para escrita direta no destino. Nome longo não derruba a tarefa no meio.

Gostou deste artigo?
Compartilhe conhecimento com sua rede.
// Leia também

Artigos relacionados