> ## 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 — Herramienta de optimización de salida para agentes de IA

> Presentación de laravel/pao. Paquete oficial de Laravel que comprime la salida de PHPUnit, Pest, PHPStan y Artisan a formato JSON en entornos de agente de IA, reduciendo el consumo de tokens hasta un 99,8 %.

## Introducción

[laravel/pao](https://github.com/laravel/pao) es un paquete que optimiza la salida de las herramientas de desarrollo PHP para agentes de IA. **PAO (PHP Agent-Optimized output)** convierte automáticamente la salida verbosa de PHPUnit, Pest, Paratest, PHPStan y Laravel Artisan en un JSON estructurado y compacto.

Como muchos agentes de IA, incluido GitHub Copilot, han migrado a modelos de precios basados en el número de tokens, reducir la salida de las herramientas se traduce directamente en reducir costes. PAO se ha diseñado para resolver este problema y está previsto que se integre como dependencia por defecto de los starter kits de Laravel.

```mermaid theme={null}
graph TD
    A["Ejecución de herramienta<br>(PHPUnit/Pest/PHPStan/Artisan)"] --> B{"¿Entorno de<br>agente de IA?"}
    B -->|Sí| C["Comprime la salida a JSON"]
    B -->|No| D["Salida normal<br>(sin cambios)"]
    C --> E["El agente de IA procesa<br>ahorrando tokens"]
    D --> F["El humano lo revisa como siempre"]
```

## Por qué es importante

A medida que los agentes de IA se integran más profundamente en el flujo de desarrollo, el número de tokens de salida de las herramientas se relaciona directamente con el coste y la velocidad de respuesta.

En un proyecto con 1.000 tests, la salida de PHPUnit ocupa miles de líneas, pero el agente de IA solo necesita saber "éxito/fallo, número, ubicación de los fallos". PAO comprime esa información en un objeto JSON de una sola cifra en tamaño.

* **Salida de tests**: reducción de tokens de hasta el 99,8 %
* **Salida de PHPStan**: entrega solo la información necesaria en JSON estructurado
* **Salida de Artisan**: hasta el 75 % de reducción eliminando códigos ANSI, caracteres de recuadro y espacios

## Instalación

Requiere PHP 8.3 o superior, y funciona con PHPUnit 12–13 / Pest 4–5 / Paratest / PHPStan / Laravel 12 o superior.

```bash theme={null}
composer require laravel/pao --dev
```

Con solo instalarlo, ya funciona. PAO se engancha automáticamente en PHPUnit, Pest, Paratest y PHPStan a través del autoloader de Composer. En proyectos Laravel se detecta automáticamente el service provider y se activa también la optimización de la salida de Artisan.

<Info>
  PAO se activa solo si detecta un entorno de agente de IA. Si un humano lo ejecuta directamente en la terminal, se desactiva por completo y se mantiene la salida normal.
</Info>

## Agentes de IA con los que funciona

PAO detecta automáticamente los siguientes agentes de IA.

| Agente         | Método de detección                       |
| -------------- | ----------------------------------------- |
| GitHub Copilot | Variables de entorno como `COPILOT_MODEL` |
| Claude Code    | `CLAUDECODE` o `CLAUDE_CODE`              |
| Cursor         | `CURSOR_AGENT`                            |
| Gemini CLI     | `GEMINI_CLI`                              |
| Devin          | Archivo `/opt/.devin`                     |
| Codex          | Variables de entorno como `CODEX_SANDBOX` |

## Before / After

### Salida de tests (PHPUnit / Pest)

Una suite de 1.000 tests se transforma como sigue.

**Before (sin 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)
```

**After (con PAO)**

```json theme={null}
{
  "tool": "phpunit",
  "result": "passed",
  "tests": 1002,
  "passed": 1002,
  "duration_ms": 321
}
```

Independientemente del número de tests, la salida tiene siempre un tamaño constante. Si algún test falla, se incluyen la ruta del archivo, el número de línea y el mensaje de fallo.

### Salida de plugins como cobertura

La salida adicional de plugins de Pest como `--coverage` o `--profile` se incluye en un array `raw` con los códigos ANSI y adornos eliminados.

```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 %"
  ]
}
```

### Salida de 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"
      }
    ]
  }
}
```

### Salida de Laravel Artisan

De la salida de comandos como `php artisan about` se eliminan códigos ANSI, caracteres de recuadro, separadores de puntos y espacios.

**Before (sin PAO): 2.111 caracteres**

```
  Environment ................................................................
  Application Name ................................................... Laravel
  Laravel Version ..................................................... 13.3.0
  PHP Version .......................................................... 8.5.4
  Debug Mode ......................................................... ENABLED
```

**After (con PAO): 535 caracteres**

```
 Environment ..
 Application Name .. Laravel
 Laravel Version .. 13.3.0
 PHP Version .. 8.5.4
 Debug Mode .. ENABLED
```

En comandos como `about`, `db:show` o `migrate:status` se puede esperar una reducción de tokens de hasta el 75 %.

## Integración con los starter kits de Laravel

Está previsto que PAO se integre como dependencia por defecto de los starter kits de Laravel. Al crear un nuevo proyecto se instalará automáticamente y podrás empezar de inmediato el desarrollo con agentes de IA controlando el coste de tokens.

## Conclusión

`laravel/pao` funciona con solo instalarlo y solo se activa en entornos de agente de IA, por lo que no afecta en absoluto al flujo de desarrollo existente. Es un paquete cuya adopción vale la pena considerar en cualquier proyecto PHP o Laravel que quiera reducir los costes de desarrollo con agentes de IA.

<Card title="Repositorio laravel/pao" icon="github" href="https://github.com/laravel/pao">
  Aquí puedes consultar el código fuente y la lista más reciente de herramientas y agentes compatibles.
</Card>


## Related topics

- [laravel/agent-skills — Colección oficial de skills para agentes de IA de Laravel](/es/blog/agent-skills-introduction.md)
- [Nuevo ecosistema de análisis de código de Laravel — surveyor / ranger / roster](/es/blog/laravel-ecosystem-analysis.md)
- [Laravel Agent Detector — Paquete de detección de agentes de IA](/es/blog/agent-detector-introduction.md)
- [Actualización de Laravel — Mayo de 2026](/es/blog/changelog/202605.md)
- [Laravel y el desarrollo con IA](/es/ai.md)
