Saltar al contenido principal

Introducción

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.

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

Agentes de IA con los que funciona

PAO detecta automáticamente los siguientes agentes de IA.
AgenteMétodo de detección
GitHub CopilotVariables de entorno como COPILOT_MODEL
Claude CodeCLAUDECODE o CLAUDE_CODE
CursorCURSOR_AGENT
Gemini CLIGEMINI_CLI
DevinArchivo /opt/.devin
CodexVariables 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)
{
  "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.
{
  "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

{
  "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.

Repositorio laravel/pao

Aquí puedes consultar el código fuente y la lista más reciente de herramientas y agentes compatibles.
Última modificación el 13 de julio de 2026