Pitch: Fiz um mod menu para o Claude Code e o Codex (com auto continue após o limit reset)
Sim, mod menu tipo GTA. Você aperta alt+g no meio da sessão e abre uma caixinha por cima do Claude, com as opções, e ela vem pintada da cor do agente que está por baixo, terracota no Claude e azul no Codex. O resto da interface continua idêntica: ele roda dentro de um PTY de verdade e nem sabe que está "embrulhado".
Chamei de autoMODe. Ele tem dois mods.
Mod 1: auto continue
O limite estoura no meio de uma tarefa longa. A mensagem diz que renova às 18h20. Às 18h20 você não está lá, e o trabalho fica parado até você lembrar de voltar e digitar continue.
O automode lê o horário da renovação na própria tela, espera e digita por você.
Mod 2: auto ping
Essa é a parte que eu acho que interessa mesmo pra quem não vai instalar nada, então vou contar antes de falar do mod:
A janela de 5 horas não começa num horário fixo. Ela começa no seu primeiro prompt.
Passei semanas achando que o limite era azar. Batia no meio da manhã, voltava na hora do almoço, batia de novo às 16h e voltava quando eu já tinha ido embora. Não era azar. Era consequência direta de uma decisão que eu tomava sem perceber, todo dia, quando mandava a primeira mensagem.
Você chega às 9h, toma um café, faz a daily e manda o primeiro prompt às 9h15:
primeiro prompt renova renova de novo
09h15 14h15 19h15
A primeira renovação cai no seu almoço. A segunda cai depois do expediente. Você trabalha o dia inteiro com a cota que sobrou.
Agora com o primeiro prompt às 5h:
primeiro prompt renova renova de novo
05h00 10h00 15h00
Mesma cota. Mesmos limites. Mesmo plano. As duas renovações agora caem enquanto você está na cadeira.
Não tem truque aqui. Não é burlar limite nem ganhar cota. É que "quando a janela começa" é uma variável que estava lá o tempo todo e ninguém mexe nela.
O problema óbvio é que ninguém acorda às 5h pra mandar "oi" pro Claude. O mod faz isso: manda nos horários que você escolher, inclusive com o terminal fechado e você dormindo.
As partes técnicas que valem a pena
Se você já tentou automatizar alguma coisa por cima da TUI dos outros, essas talvez te poupem tempo.
A frase nunca chega inteira. A mensagem de limite parece um texto simples:
You've hit your session limit · resets 6:20pm (America/Sao_Paulo)
Mas o que chega no seu read() é isso quebrado dentro das bordas da caixa, com códigos ANSI no meio e, às vezes, com uma sequência de escape cortada ao meio entre duas leituras, porque a TUI repinta a tela dezenas de vezes por segundo. Nenhuma regex casa com isso. Tem que achatar antes: tirar os escapes, segurando os incompletos pra próxima leitura, trocar as bordas por espaço e colapsar tudo numa linha.
Alguém vai sugerir casar pela cor, já que a mensagem é vermelha. Não dá: tirar a cor é justamente o que torna a frase legível de novo, e a cor depende do tema do terminal.
O limite não só imprime uma mensagem. Ele te prende num menu.
What do you want to do?
❯ 1. Upgrade your plan
2. Upgrade to Team plan
3. Stop and wait for limit to reset
Digitar continue nessa tela não faz absolutamente nada. Meu auto continue só parecia funcionar porque eu testava depois de já ter passado por essa tela na mão. O Codex tem uma equivalente.
A parte que eu recomendo copiar é esta: leia o número da opção do texto, não fixe "3". Se reordenarem o menu um dia, você pode acabar escolhendo "Upgrade" achando que está esperando.
Medir em vez de chutar. Botei o menu por cima do Claude e, ao fechar, o header dele sumia pra sempre. Em vez de teorizar, rodei o Claude dentro de um PTY e catalogei os escapes que ele emite:
- Ele não usa a tela alternativa, apenas
?1004h,?2004h,?2031he?25. - Um
SIGWINCHdo mesmo tamanho ele ignora. - Um resize de verdade, de 39 para 40 linhas, faz ele reemitir a UI inteira, incluindo o header.
O header some porque o Claude o desenha uma vez só e nunca mais. Se a restauração da tela falhar por qualquer motivo, não existe nada que o traga de volta. A solução foi mentir sobre o tamanho da janela por 200ms ao fechar o menu. Feio, mas é medido.
PTY não tem EOF. Fim de entrada num pseudo-terminal é o caractere VEOF, e só enquanto o filho está em modo canônico. Sem isso, echo x | wrapper -- cat trava pra sempre.
Option+G no macOS não é Meta. O Terminal.app manda © por padrão. Eu tinha escolhido Alt+G como atalho do menu porque funcionava na minha máquina, onde eu tinha ligado isso anos atrás e esquecido. Hoje o padrão é ctrl+g, que chega em qualquer terminal.
Ressalvas
- Ele digita por você. Com o auto continue ligado, o agente volta a trabalhar sozinho quando o limite renova e pode rodar ferramentas enquanto você dorme. Dá pra desligar e usar só o ping.
- O ping gasta um pouquinho de cota. É o objetivo dele.
- O detector depende de uma frase que a Anthropic e a OpenAI mudam quando quiserem. Por isso o
automode doctorroda no CI. Se mudarem, o build quebra e avisa, em vez do auto continue morrer em silêncio de madrugada. - Testei de verdade no macOS. O CI passa no Linux, mas, na prática, ainda deve ter alguma aresta.
Instalação
git clone https://github.com/adrielmendes28/automode
cd automode
python3 -m automode install
Isso cria os aliases: claude e codex passam a rodar com os mods, e \claude roda pelado. Python puro, sem nenhuma dependência, licença MIT.
https://github.com/adrielmendes28/automode
Se você usa Claude Code ou Codex e nunca tinha pensado na hora do seu primeiro prompt, testa amanhã, nem que seja na mão. Manda um "oi" bem cedo e repara onde a sua janela cai. O mod só automatiza uma escolha que já era sua.