152 lines
7.8 KiB
Markdown
152 lines
7.8 KiB
Markdown
# ponytail
|
||
|
||
- **Autore:** DietrichGebert
|
||
- **Repository:** [DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail) (licenza MIT)
|
||
- **Sorgente:** [skills/ponytail/SKILL.md](https://github.com/DietrichGebert/ponytail/blob/main/skills/ponytail/SKILL.md)
|
||
- **Pagina su skills.sh:** [dietrichgebert/ponytail/ponytail](https://skills.sh/dietrichgebert/ponytail/ponytail)
|
||
- **Diffusione (settembre 2026):** circa 63.600 installazioni tramite `npx skills` (su skills.sh dal 12 giugno 2026); il repository ha circa 144.800 stelle e 7.800 fork su GitHub
|
||
- **Controlli di sicurezza su skills.sh:** Gen Agent Trust Hub, Socket e Snyk superati
|
||
|
||
## A cosa serve
|
||
|
||
Fa scrivere all'agente il codice più semplice e breve che funziona, evitando soluzioni sovraingegnerizzate. L'idea è far ragionare l'agente come "lo sviluppatore senior più pigro della stanza": il codice migliore è quello che non scrivi.
|
||
|
||
## Cosa fa
|
||
|
||
### Quando si attiva
|
||
|
||
Quando scrivi "ponytail", "be lazy", "lazy mode", "simplest solution", "minimal solution", "yagni", "do less" o "shortest path", oppure quando ti lamenti di codice sovraingegnerizzato, gonfio, pieno di boilerplate o di dipendenze inutili.
|
||
|
||
Una volta attiva resta accesa in ogni risposta, finché non scrivi "stop ponytail", "normal mode" o `/ponytail off`.
|
||
|
||
### Come lavora
|
||
|
||
Prima di scrivere codice, l'agente sale una "scala" di sette gradini e si ferma al primo che risolve il problema:
|
||
|
||
1. Serve davvero? (YAGNI)
|
||
2. Esiste già nel codice del progetto?
|
||
3. Lo fa già la libreria standard?
|
||
4. Lo offre già la piattaforma (browser, sistema operativo, framework)?
|
||
5. Lo fa una dipendenza già installata?
|
||
6. Si può fare in una riga?
|
||
7. Solo allora scrive il minimo indispensabile.
|
||
|
||
Altre regole:
|
||
|
||
- niente astrazioni "per il futuro" né boilerplate;
|
||
- meglio cancellare che aggiungere, meglio noioso che ingegnoso;
|
||
- meno file possibile e modifica più corta possibile;
|
||
- correggere la causa, non il sintomo;
|
||
- le scorciatoie volute vanno segnate con un commento che dice il compromesso.
|
||
|
||
**Cosa non semplifica mai:** validazione degli input, gestione degli errori che evita perdite di dati, sicurezza, accessibilità e funzionalità chieste esplicitamente.
|
||
|
||
**Formato delle risposte:** prima il codice, poi al massimo tre righe brevi, nella forma "saltato X, da aggiungere quando Y". Per esempio, a "aggiungi una cache per le risposte API" risponde con `@lru_cache(maxsize=1000)` sulla funzione e "saltata una classe di cache dedicata, da aggiungere quando lru_cache non basta più".
|
||
|
||
### Livelli di intensità
|
||
|
||
| Livello | Comportamento |
|
||
|---|---|
|
||
| `lite` | fa quello che chiedi, ma indica in una riga l'alternativa più semplice; scegli tu |
|
||
| `full` | applica la scala in modo rigido (predefinito) |
|
||
| `ultra` | estremista YAGNI: prima cancella, poi aggiunge; consegna la soluzione in una riga e mette in discussione il resto |
|
||
| `off` | disattiva |
|
||
|
||
Il livello predefinito si cambia con la variabile d'ambiente `PONYTAIL_DEFAULT_MODE` o nel file `~/.config/ponytail/config.json`.
|
||
|
||
### Comandi
|
||
|
||
Il plugin completo comprende sei skill, richiamabili con i comandi `/` in Claude Code e OpenCode, oppure con `@` in Codex:
|
||
|
||
| Comando | Funzione |
|
||
|---|---|
|
||
| `/ponytail [lite\|full\|ultra\|off]` | attiva la modalità o ne cambia il livello |
|
||
| `/ponytail-review` | cerca la sovraingegnerizzazione nelle modifiche correnti |
|
||
| `/ponytail-audit` | cerca codice superfluo in tutto il repository |
|
||
| `/ponytail-debt` | raccoglie le scorciatoie rimandate |
|
||
| `/ponytail-gain` | mostra i dati di impatto |
|
||
| `/ponytail-help` | guida ai comandi |
|
||
|
||
### Risultati dichiarati e verificati
|
||
|
||
- **Secondo l'autore**, misurato su un repository FastAPI + React: circa il 54% di codice in meno (fino al 94% nei casi più sovraingegnerizzati), costo più basso del 20% circa, esecuzione più veloce del 27% circa, nessun taglio su sicurezza, validazione e accessibilità.
|
||
- **Secondo un test indipendente di JetBrains** (luglio 2026, 80 compiti con Claude Code e Sonnet 5): codice più corto del 15,4% (dato non statisticamente significativo), costo più basso del 10,3% (significativo), qualità invariata. Il guadagno è maggiore dove l'agente tende a costruire troppo e quasi nullo nei compiti già snelli. Il test riguardava compiti di analisi dati, non frontend, e non verificava sicurezza e accessibilità.
|
||
|
||
### Da sapere
|
||
|
||
- **Senza hook non si attiva da sola:** il plugin funziona grazie a un hook che inietta le regole all'inizio di ogni sessione. Nel test di JetBrains, installata come semplice skill senza hook, non si è mai attivata in dieci sessioni. Per questo conviene installarla come plugin (vedi sotto); altrimenti va richiamata a mano ogni volta.
|
||
- **Aspettative:** su compiti normali conta su un risparmio intorno al 10%, non sul 54% dichiarato.
|
||
- **Hook:** il plugin esegue script all'avvio di ogni sessione in Claude Code, Codex e Cursor.
|
||
|
||
## Installazione
|
||
|
||
### Claude Code (plugin, consigliato)
|
||
|
||
Nella sessione di Claude Code:
|
||
|
||
```
|
||
/plugin marketplace add DietrichGebert/ponytail
|
||
/plugin install ponytail@ponytail
|
||
```
|
||
|
||
Installa le sei skill e l'hook di avvio. Poi:
|
||
|
||
```
|
||
/plugin marketplace update ponytail # aggiornamento
|
||
/plugin remove ponytail # rimozione (comando indicato nel README)
|
||
```
|
||
|
||
### Codex (plugin, consigliato)
|
||
|
||
Da terminale:
|
||
|
||
```bash
|
||
codex plugin marketplace add DietrichGebert/ponytail
|
||
codex plugin add ponytail@ponytail
|
||
```
|
||
|
||
Rimozione: `codex plugin remove ponytail`.
|
||
|
||
Per eliminare anche i file di stato che il plugin lascia sul sistema, il README indica di eseguire `node scripts/uninstall.js` dalla cartella del repository.
|
||
|
||
### Claude Code e Codex (solo skill, senza hook)
|
||
|
||
In alternativa, con lo strumento `skills`:
|
||
|
||
```bash
|
||
npx skills add DietrichGebert/ponytail --skill ponytail -g -a claude-code -a codex
|
||
```
|
||
|
||
| Opzione | Significato |
|
||
|---|---|
|
||
| `--skill ponytail` | installa solo la skill principale; `--skill '*'` le installa tutte e sei |
|
||
| `-g` | installazione globale (`~/.claude/skills/`, `~/.codex/skills/`); senza, solo nel progetto corrente |
|
||
| `-a <agente>` | agente di destinazione, ripetibile |
|
||
| `-y` | salta le domande di conferma |
|
||
|
||
Così non c'è l'hook: la skill va richiamata a mano (per esempio scrivendo "ponytail" o "lazy mode"). Gestione con `npx skills list -g`, `npx skills update ponytail` e `npx skills remove ponytail`.
|
||
|
||
### App desktop di Claude e ChatGPT
|
||
|
||
Il README non documenta l'uso nelle app desktop. Il `SKILL.md` di ponytail contiene solo istruzioni, quindi in teoria si può caricare come qualsiasi skill:
|
||
|
||
```bash
|
||
git clone --depth 1 https://github.com/DietrichGebert/ponytail.git
|
||
cd ponytail/skills && zip -r ~/ponytail.zip ponytail
|
||
```
|
||
|
||
- **Claude (desktop o web):** attiva l'esecuzione del codice in **Settings → Capabilities**, poi **Customize → Skills → + → Create skill → Upload a skill**, scegli lo ZIP e attiva l'interruttore.
|
||
- **ChatGPT (desktop o web):** **Skills** nella barra laterale, poi **Create → Upload from your computer**; richiamala con `@`. Le skill caricate su desktop e web non si sincronizzano.
|
||
|
||
Nelle app non ci sono hook, quindi la skill va richiamata esplicitamente in ogni conversazione. Questo uso non è stato verificato.
|
||
|
||
## Fonti
|
||
|
||
- [README di DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail)
|
||
- [SKILL.md di ponytail](https://github.com/DietrichGebert/ponytail/blob/main/skills/ponytail/SKILL.md)
|
||
- [SKILL.md di ponytail-help](https://github.com/DietrichGebert/ponytail/blob/main/skills/ponytail-help/SKILL.md)
|
||
- [ponytail su skills.sh](https://skills.sh/dietrichgebert/ponytail/ponytail)
|
||
- [Ponytail Skill for Claude Code: Does It Really Cut Tokens – JetBrains](https://blog.jetbrains.com/ai/2026/07/ponytail-skill-claude-tested/)
|
||
- [Use skills in Claude – Claude Help Center](https://support.claude.com/en/articles/12512180-use-skills-in-claude)
|
||
- [Skills in ChatGPT – OpenAI Help Center](https://help.openai.com/en/articles/20001066-skills-in-chatgpt)
|