> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel PAO — outil d'optimisation des sorties pour les agents IA

> Présentation de laravel/pao. Package officiel Laravel qui compresse au format JSON les sorties de PHPUnit, Pest, PHPStan et Artisan dans les environnements d'agents IA, réduisant la consommation de tokens jusqu'à 99,8 %.

## Introduction

[laravel/pao](https://github.com/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.

```mermaid theme={null}
graph TD
    A["Exécution d'outil<br>(PHPUnit/Pest/PHPStan/Artisan)"] --> B{"Environnement<br>d'agent IA ?"}
    B -->|Yes| C["Sortie compressée en JSON"]
    B -->|No| D["Sortie normale<br>(inchangée)"]
    C --> E["L'agent IA traite<br>en économisant des tokens"]
    D --> F["Un humain lit la sortie normalement"]
```

## 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.

```bash theme={null}
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.

<Info>
  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.
</Info>

## Agents IA pris en charge

PAO détecte automatiquement les agents IA suivants.

| Agent          | Méthode de détection                            |
| -------------- | ----------------------------------------------- |
| GitHub Copilot | Variables d'environnement comme `COPILOT_MODEL` |
| Claude Code    | `CLAUDECODE` ou `CLAUDE_CODE`                   |
| Cursor         | `CURSOR_AGENT`                                  |
| Gemini CLI     | `GEMINI_CLI`                                    |
| Devin          | Fichier `/opt/.devin`                           |
| Codex          | Variables 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)**

```json theme={null}
{
  "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.

```json theme={null}
{
  "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

```json theme={null}
{
  "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.

<Card title="Dépôt laravel/pao" icon="github" href="https://github.com/laravel/pao">
  Le code source et la liste à jour des outils et agents pris en charge se trouvent ici.
</Card>


## Related topics

- [Mises à jour Laravel — mai 2026](/fr/blog/changelog/202605.md)
- [Créer un agent personnalisé pour Boost](/fr/advanced/boost-custom-agent.md)
- [Laravel et le développement IA](/fr/ai.md)
- [laravel/agent-skills — la collection officielle de skills d'agents IA Laravel](/fr/blog/agent-skills-introduction.md)
- [GitHub Copilot SDK pour Laravel](/fr/packages/laravel-copilot-sdk/index.md)
