Passer au contenu principal

Introduction

laravel/pao est un package qui optimise les sorties des outils de développement PHP pour les agents IA. PAO (PHP Agent-Optimized output) convertit automatiquement les sorties verbeuses de PHPUnit, Pest, Paratest, PHPStan et Laravel Artisan en JSON structuré et compact. Alors que de nombreux agents IA — dont GitHub Copilot — sont passés à des tarifs basés sur le nombre de tokens, réduire la sortie des outils devient directement synonyme d’économies. PAO est conçu pour répondre à ce besoin et sera intégré comme dépendance par défaut des starter kits Laravel.

Pourquoi c’est important

À mesure que les agents IA s’intègrent profondément dans le flux de développement, le nombre de tokens en sortie des outils impacte directement le coût et le temps de réponse. Sur un projet comptant 1 000 tests, la sortie de PHPUnit atteint plusieurs milliers de lignes, alors que l’agent IA n’a besoin que de « succès/échec, nombre, points d’échec ». PAO compresse ces informations en un objet JSON d’un ordre de grandeur plus petit.
  • Sortie de tests : jusqu’à 99,8 % de tokens en moins
  • Sortie PHPStan : JSON structuré ne fournissant que l’essentiel
  • Sortie Artisan : suppression des codes ANSI, filets et espaces, réduction jusqu’à 75 %

Installation

PHP 8.3 et supérieur, PHPUnit 12-13 / Pest 4-5 / Paratest / PHPStan / Laravel 12 et supérieur.
composer require laravel/pao --dev
L’installation suffit. PAO se branche automatiquement à PHPUnit, Pest, Paratest et PHPStan via l’autoloader Composer. Dans un projet Laravel, le service provider est auto-détecté et l’optimisation des sorties Artisan est activée.
PAO ne s’active que lorsqu’il détecte un environnement d’agent IA. Lors d’une exécution manuelle dans un terminal, il est totalement inactif et la sortie normale est préservée.

Agents IA pris en charge

PAO détecte automatiquement les agents IA suivants.
AgentMéthode de détection
GitHub CopilotVariables d’environnement comme COPILOT_MODEL
Claude CodeCLAUDECODE ou CLAUDE_CODE
CursorCURSOR_AGENT
Gemini CLIGEMINI_CLI
DevinFichier /opt/.devin
CodexVariables d’environnement comme CODEX_SANDBOX

Avant / Après

Sortie de tests (PHPUnit / Pest)

Une suite de 1 000 tests est convertie comme suit. Avant (sans 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)
Après (avec PAO)
{
  "tool": "phpunit",
  "result": "passed",
  "tests": 1002,
  "passed": 1002,
  "duration_ms": 321
}
Quel que soit le nombre de tests, la sortie reste de taille constante. En cas d’échec, la sortie inclut chemin, numéro de ligne et message d’échec.

Sortie de plugins (coverage, etc.)

Les sorties additionnelles des plugins Pest comme --coverage ou --profile sont incluses dans un tableau raw après suppression des codes ANSI et de la décoration.
{
  "tool": "pest",
  "result": "passed",
  "tests": 1002,
  "passed": 1002,
  "duration_ms": 1520,
  "raw": [
    "Http/Controllers/Controller 100.0%",
    "Models/User 0.0%",
    "Total: 33.3 %"
  ]
}

Sortie 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"
      }
    ]
  }
}

Sortie Laravel Artisan

La sortie de commandes comme php artisan about voit ses codes ANSI, filets, points de séparation et espaces supprimés. Avant (sans PAO) — 2 111 caractères
  Environment ................................................................
  Application Name ................................................... Laravel
  Laravel Version ..................................................... 13.3.0
  PHP Version .......................................................... 8.5.4
  Debug Mode ......................................................... ENABLED
Après (avec PAO) — 535 caractères
 Environment ..
 Application Name .. Laravel
 Laravel Version .. 13.3.0
 PHP Version .. 8.5.4
 Debug Mode .. ENABLED
Une économie de tokens jusqu’à 75 % est réaliste sur about, db:show, migrate:status, etc.

Intégration dans les starter kits Laravel

PAO sera intégré comme dépendance par défaut des starter kits Laravel. Toute nouvelle création de projet l’installera automatiquement, permettant de démarrer un développement assisté par IA en maîtrisant d’emblée le coût en tokens.

Conclusion

laravel/pao fonctionne dès l’installation et ne s’active que dans un environnement d’agent IA, il n’impacte donc en rien le flux de développement existant. Tout projet PHP ou Laravel souhaitant maîtriser le coût du développement assisté par IA a intérêt à l’évaluer.

Dépôt laravel/pao

Le code source et la liste à jour des outils et agents pris en charge se trouvent ici.
Dernière modification le 13 juillet 2026