Vai al contenuto principale

Introduzione

laravel/pao è un pacchetto che ottimizza l’output degli strumenti di sviluppo PHP per gli agenti AI. PAO (PHP Agent-Optimized output) converte automaticamente l’output verboso di PHPUnit, Pest, Paratest, PHPStan e Laravel Artisan in JSON compatto e strutturato. Man mano che molti agenti AI, incluso GitHub Copilot, sono passati a modelli di prezzo basati sul numero di token, la riduzione dell’output degli strumenti si è tradotta direttamente in una riduzione dei costi. PAO è progettato per risolvere questo problema ed è previsto come dipendenza predefinita degli starter kit di Laravel.

Perché è importante

Con gli agenti AI sempre più integrati nel flusso di sviluppo, il numero di token dell’output degli strumenti si traduce direttamente in costi e velocità di risposta. In un progetto con 1.000 test, l’output di PHPUnit può essere di migliaia di righe, ma all’agente AI servono solo “successo/fallimento, numero e punti di fallimento”. PAO comprime queste informazioni in un oggetto JSON di dimensioni ridotte.
  • Output dei test: riduzione dei token fino al 99,8%
  • Output PHPStan: fornisce solo le informazioni necessarie in JSON strutturato
  • Output Artisan: rimuove codici ANSI, caratteri di bordatura e spazi bianchi, riducendo fino al 75%

Installazione

Compatibile con PHP 8.3 o superiore, PHPUnit 12-13 / Pest 4-5 / Paratest / PHPStan / Laravel 12 o superiore.
composer require laravel/pao --dev
Funziona semplicemente installandolo. PAO si aggancia automaticamente a PHPUnit, Pest, Paratest e PHPStan tramite l’autoloader di Composer. Nei progetti Laravel il service provider viene rilevato automaticamente e viene abilitata anche l’ottimizzazione dell’output di Artisan.
PAO si attiva solo quando rileva un ambiente di agente AI. Quando è un umano ad eseguire direttamente dal terminale, è completamente disabilitato e l’output normale rimane inalterato.

Agenti AI supportati

PAO rileva automaticamente i seguenti agenti AI.
AgenteMetodo di rilevamento
GitHub CopilotVariabili d’ambiente come COPILOT_MODEL
Claude CodeCLAUDECODE o CLAUDE_CODE
CursorCURSOR_AGENT
Gemini CLIGEMINI_CLI
DevinFile /opt/.devin
CodexVariabili d’ambiente come CODEX_SANDBOX

Prima / Dopo

Output dei test (PHPUnit / Pest)

Una suite di 1.000 test viene convertita come segue. Prima (senza PAO)
PHPUnit 12.5.14 by Sebastian Bergmann and contributors.

.............................................................   61 / 1002 (  6%)
.............................................................  122 / 1002 ( 12%)
...
..........................                                    1002 / 1002 (100%)

Time: 00:00.321, Memory: 46.50 MB

OK (1002 tests, 1002 assertions)
Dopo (con PAO)
{
  "tool": "phpunit",
  "result": "passed",
  "tests": 1002,
  "passed": 1002,
  "duration_ms": 321
}
L’output ha sempre dimensioni costanti indipendentemente dal numero di test. In caso di fallimento sono inclusi percorso del file, numero di riga e messaggio di fallimento.

Output di plugin come coverage

L’output aggiuntivo dei plugin di Pest come --coverage o --profile viene incluso nell’array raw dopo aver rimosso codici ANSI e decorazioni.
{
  "tool": "pest",
  "result": "passed",
  "tests": 1002,
  "passed": 1002,
  "duration_ms": 1520,
  "raw": [
    "Http/Controllers/Controller 100.0%",
    "Models/User 0.0%",
    "Total: 33.3 %"
  ]
}

Output PHPStan

{
  "tool": "phpstan",
  "result": "failed",
  "errors": 2,
  "error_details": {
    "/app/Http/Controllers/Controller.php": [
      {
        "line": 9,
        "message": "Method Controller::index() should return int but returns string.",
        "identifier": "return.type"
      },
      {
        "line": 14,
        "message": "Call to an undefined method Controller::doesNotExist().",
        "identifier": "method.notFound"
      }
    ]
  }
}

Output di Laravel Artisan

Dall’output di comandi come php artisan about vengono rimossi codici ANSI, caratteri di bordatura, separatori a puntini e spazi bianchi. Prima (senza PAO) — 2.111 caratteri
  Environment ................................................................
  Application Name ................................................... Laravel
  Laravel Version ..................................................... 13.3.0
  PHP Version .......................................................... 8.5.4
  Debug Mode ......................................................... ENABLED
Dopo (con PAO) — 535 caratteri
 Environment ..
 Application Name .. Laravel
 Laravel Version .. 13.3.0
 PHP Version .. 8.5.4
 Debug Mode .. ENABLED
Con comandi come about, db:show e migrate:status si può ottenere una riduzione dei token fino al 75%.

Integrazione negli starter kit di Laravel

PAO è previsto come dipendenza predefinita degli starter kit di Laravel. Creando un nuovo progetto viene installato automaticamente e puoi iniziare subito lo sviluppo con agenti AI mantenendo bassi i costi in token.

Conclusioni

laravel/pao funziona semplicemente installandolo e si attiva solo negli ambienti degli agenti AI, senza alcun impatto sul workflow di sviluppo esistente. È un pacchetto che vale la pena valutare per qualsiasi progetto PHP/Laravel che voglia ridurre i costi di sviluppo con agenti AI.

Repository laravel/pao

Trovi qui il codice sorgente e l’elenco aggiornato di strumenti e agenti supportati.
Ultima modifica il 13 luglio 2026