Ponytail 5 (regole, review, audit, installazione), graphify v0.9.91, catalogo di claude-plugins-official e numeri aggiornati delle altre schede. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
156 lines
11 KiB
Markdown
156 lines
11 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 (ottobre 2026):** circa 92.300 installazioni tramite `npx skills` (su skills.sh dal 12 giugno 2026); il repository ha circa 164.600 stelle e 8.900 fork su GitHub. Ultima versione rilevata: 5.2.0 (13 ottobre 2026)
|
||
- **Controlli di sicurezza su skills.sh:** Gen Agent Trust Hub, Socket e Snyk superati
|
||
|
||
## A cosa serve
|
||
|
||
Fa scrivere all'agente la modifica più piccola che risolve davvero il compito, evitando soluzioni sovraingegnerizzate. L'idea è far ragionare l'agente come "lo sviluppatore senior più pigro della stanza": il codice migliore è quello che non scrivi. Pigro sulla soluzione, mai sulla modifica: deve comunque completare tutto ciò che il compito richiede.
|
||
|
||
## Cosa fa
|
||
|
||
### Quando si attiva
|
||
|
||
Su qualsiasi compito di programmazione (scrivere, correggere, rifattorizzare, rivedere, scegliere dipendenze) e quando scrivi "ponytail", "be lazy", "simplest solution", "yagni" o ti lamenti di codice sovraingegnerizzato o gonfio.
|
||
|
||
Una volta attiva resta accesa per tutta la sessione, finché non scrivi "stop ponytail" o "normal mode" (o `/ponytail off`).
|
||
|
||
### Come lavora
|
||
|
||
1. **Capisce prima di scrivere.** Legge il compito e il codice coinvolto, elenca tutto ciò che la modifica deve toccare (chiamanti, test, fixture, configurazione, esportazioni) e controlla che cosa potrebbe rompere per gli utenti. Questo è l'ambito; le funzionalità in più no.
|
||
2. **Sale una "scala"** e si ferma al primo gradino che funziona del tutto:
|
||
1. Serve davvero? Funzionalità, opzioni e flessibilità non richieste si saltano e si nominano in una riga. A una richiesta vaga ("costruiscimi X") risponde con la versione minima che fa il lavoro principale.
|
||
2. Esiste già nel codice del progetto? Lo riusa come fa il codice circostante.
|
||
3. Lo fanno la libreria standard o la piattaforma? Le usa, a meno che il progetto abbia un componente suo.
|
||
4. Lo fa una dipendenza già installata? La usa; non ne aggiunge una per poche righe.
|
||
5. Si può fare in una riga leggibile a colpo d'occhio?
|
||
6. Altrimenti, il minimo codice che funziona.
|
||
3. **Lascia un controllo.** La logica nuova non banale (un ramo, un ciclo, un parser, soldi o sicurezza, uno script nuovo) esce con un piccolo test o un controllo basato su `assert`. Le modifiche banali non ne hanno bisogno.
|
||
4. **Chiude con uno o due righe:** che cosa ha saltato o non ha verificato, e ogni rischio da conoscere.
|
||
|
||
Altre regole: niente astrazioni, wrapper, opzioni o codice "per il futuro" non richiesti; meglio cancellare che aggiungere; un commento solo per il perché che il codice non mostra. Nella correzione di un bug cerca prima tutti i chiamanti della funzione e corregge la causa una volta sola nel codice condiviso. Il codice spostato o unito conserva validazione e gestione degli errori. Una scorciatoia con un limite noto riceve un commento nella forma `shortcut: <il limite>, <quando passare a una soluzione migliore>`.
|
||
|
||
**Cosa non taglia mai:** validazione ai confini di fiducia, gestione degli errori che evita perdite di dati, sicurezza, accessibilità, la calibrazione che richiede l'hardware reale e tutto ciò che hai chiesto esplicitamente.
|
||
|
||
Esempio dal README: per "aggiungi un selettore di data al frontend" senza la skill l'agente scrive 335 righe tra libreria e calendario fatto a mano; con ponytail riusa il componente `Input` del progetto con `type="date"` (il browser fornisce il calendario) in un file da 10 righe.
|
||
|
||
### Livelli di intensità
|
||
|
||
| Livello | Comportamento |
|
||
|---|---|
|
||
| `lite` | fa quello che chiedi, ma indica in una riga l'alternativa più piccola; scegli tu |
|
||
| `full` | applica le regole sopra (predefinito) |
|
||
| `ultra` | mette in discussione anche la richiesta: prima di costruire contesta ciò che il bisogno non giustifica |
|
||
| `off` | disattiva |
|
||
|
||
Il livello predefinito si cambia con la variabile d'ambiente `PONYTAIL_DEFAULT_MODE` o con il campo `defaultMode` in `~/.config/ponytail/config.json`.
|
||
|
||
### Comandi
|
||
|
||
Il plugin completo comprende sei skill, richiamabili con i comandi `/` in Claude Code e negli altri agenti che le supportano (in Codex con `$ponytail:<nome>`, per esempio `$ponytail:ponytail-review`):
|
||
|
||
| Comando | Funzione |
|
||
|---|---|
|
||
| `/ponytail [lite\|full\|ultra\|off]` | attiva la modalità o ne cambia il livello; senza argomento la accende se è spenta, altrimenti mostra il livello |
|
||
| `/ponytail-review` | rivede le modifiche correnti come lo sviluppatore senior che viene chiamato quando qualcosa si rompe: errori, sicurezza, carico reale, codice a rischio senza test, punti lenti e cosa tagliare. Ogni segnalazione dice che cosa fa il codice, cosa va storto, come correggerlo e cosa succede se non lo fai. Puoi indicare l'obiettivo: `uncommitted`, `staged`, `branch` o il link a una PR |
|
||
| `/ponytail-audit` | lo stesso controllo su tutto il repository: ne mappa il codice e ordina i problemi per priorità |
|
||
| `/ponytail-debt` | raccoglie in un registro i commenti `shortcut:` rimandati |
|
||
| `/ponytail-gain` | mostra i dati di impatto misurati nel benchmark |
|
||
| `/ponytail-help` | guida ai comandi |
|
||
|
||
### Risultati dichiarati e verificati
|
||
|
||
- **Secondo l'autore** (Ponytail 5, benchmark in Claude Code con Opus 5.5: 39 compiti, compreso un repository reale FastAPI + React, 5 esecuzioni ciascuno, con e senza la skill): circa 53% di codice in meno, 41% di tempo in meno, 26% di costo in meno e 45% di token in meno. Il 98% della logica a rischio esce con un test, contro il 68% senza la skill. Sui sei compiti di sicurezza (SQL injection, path traversal, token falsificati, limitazione delle richieste, righe CSV malformate, cache) ha superato tutte le 30 esecuzioni.
|
||
- **Secondo un test indipendente di JetBrains** (luglio 2026, 80 compiti con Claude Code e Sonnet 5, su una versione precedente): 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
|
||
|
||
- **Aspettative:** i numeri dell'autore sono i suoi; su compiti normali, indipendentemente, conta su un risparmio intorno al 10%.
|
||
- **Hook:** il plugin per Claude Code e Codex (e gli hook per Cursor) esegue due piccoli script Node.js all'avvio e durante la sessione. Serve `node` nel `PATH`; senza, le skill funzionano ma ogni chiamata dell'hook mostra un errore innocuo `node: command not found`. In Codex vanno approvati da `/hooks`.
|
||
- **Senza hook niente attivazione automatica:** nel test di JetBrains, installata come semplice skill senza hook, la versione allora corrente non si è mai attivata in dieci sessioni. Con il solo `npx skills` conviene aggiungere anche `AGENTS.md` del repository al progetto, oppure usare il plugin.
|
||
- **File lasciati fuori dal plugin:** scrive un file di stato (`~/.claude/.ponytail-active`), `~/.config/ponytail/config.json`, uno script per la barra di stato in `~/.claude/` e, se accetti il suggerimento, una voce `statusLine` in `~/.claude/settings.json`.
|
||
- **Provenienza:** il README avverte di installarlo solo da `DietrichGebert/ponytail` su GitHub o da `@dietrichgebert/ponytail` su npm; il progetto non distribuisce mai file `.exe` o `.dll`.
|
||
|
||
## Installazione
|
||
|
||
### Claude Code (plugin, consigliato)
|
||
|
||
Nella sessione di Claude Code, **come due messaggi separati** (il README avverte che altrimenti l'installazione non funziona):
|
||
|
||
```
|
||
/plugin marketplace add DietrichGebert/ponytail
|
||
```
|
||
|
||
```
|
||
/plugin install ponytail@ponytail
|
||
```
|
||
|
||
Installa le sei skill e gli hook. Poi:
|
||
|
||
```
|
||
/plugin marketplace update ponytail # aggiornamento
|
||
/plugin remove ponytail # rimozione
|
||
```
|
||
|
||
### Codex (plugin, consigliato)
|
||
|
||
Da terminale:
|
||
|
||
```bash
|
||
codex plugin marketplace add DietrichGebert/ponytail
|
||
codex plugin add ponytail@ponytail
|
||
```
|
||
|
||
Poi apri `codex`, vai su `/hooks`, controlla e approva i due hook, e avvia una nuova conversazione. Lo stesso comando vale per l'app desktop di Codex: riavviala dopo l'installazione. Rimozione: `codex plugin remove ponytail`.
|
||
|
||
Per eliminare anche i file di stato lasciati fuori dal plugin, esegui `node scripts/uninstall.js` dalla cartella del repository **prima** del comando di rimozione (lo script è un file del plugin, e rimuovendolo prima sparirebbe), oppure da un clone separato.
|
||
|
||
### 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
|
||
```
|
||
|
||
Per averle tutte e sei: `--skill '*'`.
|
||
|
||
| Opzione | Significato |
|
||
|---|---|
|
||
| `--skill ponytail` | installa solo la skill principale; `--skill '*'` le installa tutte e sei senza domande |
|
||
| `-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 ci sono gli hook né le regole sempre attive: per averle copia `AGENTS.md` del repository nel progetto, altrimenti richiama la skill a mano (per esempio scrivendo "ponytail"). Gestione con `npx skills list -g`, `npx skills update ponytail` e, per rimuovere tutte e sei, `npx skills remove ponytail ponytail-audit ponytail-debt ponytail-gain ponytail-help ponytail-review` (con gli stessi `-a` e `-g` dell'installazione).
|
||
|
||
Per gli altri agenti (Cursor, Copilot, Gemini, OpenCode, Windsurf e altri) il progetto ha una guida per ciascuno in [INSTALL.md](https://github.com/DietrichGebert/ponytail/blob/main/INSTALL.md); in genere basta copiare `AGENTS.md` nel progetto.
|
||
|
||
### 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)
|
||
- [INSTALL.md di ponytail](https://github.com/DietrichGebert/ponytail/blob/main/INSTALL.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)
|