La scommessa di JAZ è quasi provocatoria: ciò che molti framework per agenti LLM costruiscono con sistemi di memoria, tool manuali e pipeline di auto-miglioramento può essere compresso in un solo primitive, invoke, poco più dell'agent loop stesso. Il gruppo di ricerca che ha sviluppato JAZ non aggiunge componenti esterni: al contrario, espone un unico primitive basato su LLM e una serie di hook per vincoli e monitoraggio. La tesi è che la complessità non vada moltiplicata, ma ridotta al confine tra codice e contesto.

Il punto tecnico centrale è la definizione di invoke. Non si tratta di un semplice wrapper per chiamate a funzione: invoke è il loop più semplice che soddisfa due proprietà. La prima è che l'LLM può scrivere codice eseguibile arbitrario, incluse chiamate ricorsive a invoke. La seconda è che tutto ciò che è visibile all'LLM — gli input di invoke e la cronologia di interazione con l'ambiente di codice — è rappresentato come variabili nell'ambiente stesso. In questo modo la memoria non è un sottosistema separato: emerge dallo stato del codice. Il design parte da un principio di linguaggio: invoke come primitiva che rappresenta una funzione la cui implementazione viene fornita a runtime dall'LLM a ogni chiamata.

Meno componenti, più superficie di esecuzione

Per validare il primitive, il team ha testato invoke usando solo prompting, senza tool progettati a mano, senza harness specializzato e senza sistemi esterni come memoria o file system. Su flussi di lavoro a lungo orizzonte che richiedono richiamo oltre la finestra di contesto, JAZ invoke supera Letta (MemGPT) dell'8% a metà del costo sulla porzione di StuLife più incentrata sul richiamo. Sul miglioramento continuo, JAZ invoke supera ACE del 4% a costo inferiore su AppWorld. Questi dati segnalano qualcosa di strutturale: se un primitive essenziale ottiene risultati competitivi contro sistemi specializzati, la memoria esterna e i moduli di auto-miglioramento potrebbero essere, in molti casi, ingegneria aggiuntiva che compensa la mancanza di integrazione con l'ambiente di codice.

Per chi opera stack self-hosted, la riduzione dei componenti ha implicazioni dirette. Meno servizi esterni significano meno superfici di integrazione, meno spostamento di dati e un TCO potenzialmente più basso. Un framework che non richiede memoria vettoriale gestita o servizi di orchestrazione separati si avvicina a un deployment locale in cui il controllo resta nelle mani del team. Ma l'essenzialità sposta il rischio: l'esecuzione di codice arbitrario e le chiamate ricorsive a invoke ampliano la superficie di esecuzione. In un contesto on-premise o air-gapped, la sandboxing e il monitoraggio degli hook diventano il nuovo confine di fiducia. Non è più il database dei ricordi a dover essere governato, ma il runtime che esegue il codice prodotto dall'LLM.

Il segnale per l'ecosistema degli agenti

La direzione indicata da JAZ non è neutrale per i fornitori di framework specializzati. Se un loop minimale riesce a coprire casi d'uso per cui erano stati progettati sistemi dedicati, la pressione si sposta sulla giustificazione di ogni componente aggiuntivo. Chi vende memoria come servizio o pipeline di self-improvement deve dimostrare un valore che vada oltre ciò che lo stato del codice già offre. Allo stesso tempo, la semplicità di invoke non elimina la complessità: la sposta verso la qualità del prompting, la progettazione degli hook e la sicurezza del runtime. Gli ingegneri che valutano deployment on-premise devono quindi ragionare su un diverso trade-off: meno infrastruttura dati, più rigore nell'isolamento dell'esecuzione. AI-RADAR offre framework analitici su /llm-onpremise per esaminare questi trade-off senza semplificarli.

Il punto non è se JAZ sia migliore in assoluto, ma se la complessità aggiunta da strati specializzati sia davvero necessaria quando l'ambiente di codice è già parte del contesto dell'LLM. La risposta, almeno sui benchmark citati, lascia aperta una domanda scomoda per chi ha costruito interi stack sull'idea che l'agent loop da solo non bastasse.