Agenti AI coding sul Mac: la guida pratica
Perché Scegliere un Assistente AI Locale
Ti è mai capitato di essere nel pieno di una sessione di coding, con il flow che finalmente funziona, e boom — internet decide di abbandonarti? L'assistente AI basato su cloud diventa completamente inutile, e ti ritrovi a fissare il codice chiedendoti cosa fare adesso.
È quello che è successo a me di recente. E mi ha spinto a esplorare finalmente un agent AI per coding che girasse interamente in locale. Quello che ho scoperto mi ha sorpreso: con la giusta configurazione, puoi ottenere prestazioni sorprendentemente valide su Apple Silicon, spesso superiori a soluzioni specificamente ottimizzate per Mac.
La Configurazione Che Funziona
Dopo un bel po' di test e benchmark, ecco la configurazione che ha dato i migliori risultati sul mio M1 Max con 64GB di memoria unificata:
Stack principale:
- llama.cpp compilato con accelerazione Metal
- Gemma 4 26B-A4B in formato GGUF (quantizzato a Q4)
- Modello draft MTP (Multi-Token Prediction) per decoding speculativo
- Proiettore multimodale Gemma 4 per supporto screenshot
- Pi come agent di coding da terminale
Non è la configurazione più potente che potresti teoricamente costruire, ma è il punto ottimale per l'usabilità reale. Vuoi velocità misurata in token al secondo, non minuti per risposta.
I Numeri Che Contano
Ho eseguito benchmark consistenti usando questo prompt su tutte le configurazioni:
"Scrivi una funzione Python compatta che analizza un unified diff e restituisce i percorsi dei file modificati. Poi spiega due casi limite."
Ogni test ha generato circa 128 token, offrendo un confronto equo della velocità di generazione.
Prestazioni di Base:
Far girare Gemma 4 direttamente tramite llama.cpp con Metal ci ha dato 58.2 token al secondo. È utilizzabile, ma onestamente? Risultava lento durante le sessioni di coding reali, dove fai molte chiamate tool e aspetti le risposte.
La Differenza MTP:
Qui le cose si fanno interessanti. Il Multi-Token Prediction permette al modello di "ipotizzare" più token in anticipo, accettando le predizioni corrette e facendo rollback su quelle sbagliate. Con il modello draft MTP Q8 abilitato, le prestazioni sono schizzate a 72.2 token al secondo — un miglioramento del 24% senza alcun cambiamento al modello principale.
L'elaborazione del prompt è rimasta essenzialmente uguale (circa 297-299 token/secondo), ma la velocità di generazione è quello che conta per i workflow degli agent. Non stai inviando nuovi prompt continuamente — stai aspettando che il modello generi risposte, prenda decisioni ed esegua tool.
Ho testato conteggi di draft token da 1 a 6, e sul mio M1 Max, 3 draft token rappresentano il punto ottimale. Valori sopra 4 iniziavano effettivamente a rallentare le cose, il che ha senso — più speculazione significa più lavoro sprecato quando le predizioni sono sbagliate.
llama.cpp vs. MLX: Il Vincitore Inaspettato
Ecco cosa mi ha colto di sorpresa: mi aspettavo che MLX (il framework ML nativo di Apple) dominasse, dato che è specificamente ottimizzato per Apple Silicon. La realtà è stata diversa.
| Runtime | Generazione tok/s | |---------|------------------| | llama.cpp Metal + MTP | 72.2 | | llama.cpp Metal | 58.2 | | MLX-LM (Unsloth 4-bit) | 45.8 | | MLX-LM (standard 4-bit) | 43.9 | | MLX-LM (OptiQ 4-bit) | 38.1 |
Llama.cpp con MTP è risultato circa il 58% più veloce della migliore configurazione MLX. Gli anni di lavoro di ottimizzazione investiti in llama.cpp hanno chiaramente dato i loro frutti — gira eccellentemente su macOS nonostante sia cross-platform.
Aggiungere Capacità Visive
Per un'esperienza completa di agent di coding, vuoi poter inviare screenshot. Forse vuoi che l'agent veda cosa ha costruito, o reviewi un cambiamento UI che hai appena fatto.
Il problema? Solo Gemma 4 12B è nativamente multimodale. Il modello 26B che stiamo usando ha bisogno del proiettore multimodale esterno caricato insieme.
Quando ho aggiunto il proiettore --mmproj a llama.cpp, ha correttamente pubblicizzato le capacità multimodali a Pi, e gli output degli strumenti immagine hanno iniziato a fluire correttamente. E cosa più importante, questo non ha introdotto alcun rallentamento misurabile — la velocità di generazione è rimasta a 72.2 token al secondo.
L'Esperienza Reale
Con questa configurazione, stai guardando circa 17GB di file modello (16GB per il modello principale, più la head MTP e il proiettore). Per qualcuno con 64GB di memoria unificata, è completamente gestibile.
Pi come agent offre un'interfaccia terminal pulita che si aggancia all'API compatibile OpenAI che la modalità server di llama.cpp espone. Questo significa che puoi usarlo con qualsiasi strumento che supporti il formato API di OpenAI, dandoti flessibilità senza lock-in.
Il beneficio più grande? Quando la tua connessione internet salta — e succederà, nel momento peggiore possibile — continui a programmare. L'agent potrebbe essere leggermente più lento delle alternative cloud, ma è abbastanza reattivo da mantenere il tuo workflow.
Come Iniziare
Devi compilare llama.cpp con il supporto Metal abilitato. Il progetto ha una documentazione solida per build su macOS, e una volta compilato, la modalità server ti offre quell'endpoint compatibile OpenAI.
Per i modelli, le quantizzazioni GGUF di Unsloth su Hugging Face sono ben ottimizzate. Vorrai la quantizzazione Q4_K_XL per il modello principale e il modello draft MTP Q8 corrispondente.
Regola il tuo valore --spec-draft-n-max — inizia da 3 e testa da 1 a 6 per trovare quello che funziona meglio sul tuo hardware specifico. Configurazioni Apple Silicon diverse potrebbero avere punti ottimali diversi.
Ne Vale la Pena?
Se programmi regolarmente con assistenti AI e hai l'hardware necessario (minimo 16GB, 32GB+ consigliati), assolutamente sì. L'indipendenza dalla connettività internet da sola vale il prezzo del biglietto, e con MTP che porta le velocità di generazione in territori genuinamente utilizzabili, l'esperienza è sorprendentemente raffinata.
Non raggiungerai l'intelligenza di classe GPT-4 con questi modelli open, ma per completamento codice, refactoring, assistenza al debugging e task generali di coding agent? È più capace di quanto la maggior parte delle persone si aspetti, ed è tuo — gira in locale, in privato, senza picchi di latenza o interruzioni del servizio.
Gli strumenti sono maturati significativamente. Se hai provato modelli locali in passato e sei rimasto deluso dalla velocità, prova questa configurazione. MTP cambia le regole del gioco in modo considerevole.