← IA

ponytail

Plugin que faz o Claude Code agir como um dev sênior preguiçoso: o código mais simples que funciona, e nada que ninguém pediu. Fica ativo em toda sessão; /ponytail-help mostra o resumo dos comandos.

Níveis

1 pedido, 3 respostas
> adiciona cache nessa chamada de API

A escada aplicada (abaixo): para no primeiro degrau que resolve. É o padrão.

claude code

> adiciona cache nessa chamada de API

fetch com revalidate: 60.

Pulei a classe de cache; adiciono

se o fetch não bastar.

app/posts/page.tsx

const res = await fetch(url, {
  next: { revalidate: 60 },
});

O nível vale até você trocar ou a sessão acabar. Para mudar o padrão: PONYTAIL_DEFAULT_MODE=lite ou { "defaultMode": "lite" } em %APPDATA%\ponytail\config.json (ou ~/.config/ponytail/config.json).

A escada

7 degraus

Antes de escrever código, o ponytail desce a escada e para no primeiro degrau que resolve. Escolha um pedido.

  1. 1

    Dá para não fazer?

    Ninguém pediu. Não faz, e diz isso em uma linha.

    sim
  2. 2

    Já existe no código?

  3. 3

    A biblioteca padrão faz?

  4. 4

    A plataforma faz?

  5. 5

    Uma dependência instalada faz?

  6. 6

    Cabe em uma linha?

  7. 7

    Só então: o mínimo que funciona.

adiciona modo offline: para no degrau 1, Dá para não fazer? Ninguém pediu. Não faz, e diz isso em uma linha.

Comandos

4 dicas
01

/ponytail-review

Revisa um diff só atrás de excesso: o que apagar, o que a biblioteca padrão já faz, abstração sem uso. Uma linha por achado.

Antes

Essa classe talvez seja mais

complexa que o necessário. Já

considerou se todas as regras

são precisas nesta fase?

Depois

L12-38: stdlib: validador de 27

linhas → "@" no email.

L4: native: moment.js → Intl.

net: -26 linhas possíveis.

02

/ponytail-audit

O mesmo olhar do review, no repositório inteiro. Lista do maior corte para o menor e não aplica nada.

Antes

Revisão do diff: ok ✓

(o resto do repositório

nunca foi olhado)

Depois

native: lodash p/ 2 funções.

yagni: AbstractRepo, 1 impl.

delete: flag beta nunca lida.

net: -140 linhas, -2 deps.

03

/ponytail-debt

Junta os comentários marcados com ponytail: num inventário, com o limite e o gatilho de cada atalho. Marca os que não têm gatilho.

Antes

// TODO melhorar depois

(há 8 meses; ninguém sabe

o quê nem quando)

Depois

api/rate.ts:14 · lock global

upgrade: lock por conta se o volume subir

cache.ts:9 · no-trigger

2 marcadores, 1 sem gatilho

04

/ponytail-gain

Placar do benchmark: menos código, menos custo, mais rápido. São medianas de 5 tarefas em 3 modelos, nunca números do seu repositório.

Antes

Você economizou 3.000 linhas

neste repositório!

(número inventado)

Depois

linhas 6–20%

custo 23–53%

3–6× mais rápido

mediana de benchmark, não deste repo

Limites

5 dicas
05

validação na fronteira

Entrada de usuário e de API continua validada. Simplificar nunca remove a checagem na borda do sistema.

Antes

Simplificando: tirei a validação

do body de /api/contato.

Depois

Mantive o schema do body:

é a fronteira de confiança.

Cortei só o wrapper sem uso.

06

erro que perde dados

O tratamento de erro que evita perder o que o usuário digitou fica. O corte é em retry e fallback especulativos.

Antes

Removi o try/catch do salvar

para enxugar.

Depois

O catch do salvar fica:

sem ele o rascunho some.

Retry em chamada local: removido.

07

acessibilidade

Label, foco e nome acessível não contam como excesso. O ponytail nunca troca semântica por menos linhas.

Antes

<input placeholder="Email" />

(o label sumiu junto)

Depois

<label>

Email <input type="email" />

</label>

08

o teste mínimo

Lógica com ramificação, laço ou parser sai com um teste pequeno que falha se ela quebrar. Sem framework, sem suíte por função.

Antes

parseCSV() entregue.

Testes: nenhum.

Depois

assert(parseCSV("a,b\n1,2")

.length === 1)

1 check, falha se quebrar ✓

09

desligar

"stop ponytail", "normal mode" ou /ponytail off volta ao comportamento normal. /ponytail retoma, e /ponytail lite, full ou ultra troca o nível.

Antes

> faz completo, com classe e testes

Simplificando para uma linha...

Depois

> normal mode

Ok, modo normal: classe com

interface e testes, como pedido.