Laravel Tackle, escrito por Jordan Dalton, es un agente de codificación con IA que se ejecuta como comandos Artisan dentro de una aplicación Laravel. Como arranca con el framework, puede listar rutas, leer excepciones de Telescope, ejecutar consultas SELECT contra la base de datos y llamar a Pint tras editar. La capa de seguridad vive en código PHP: restricciones de rutas, una lista blanca de Artisan y un límite de gasto por sesión son valores de configuración, no texto de prompt que un modelo pueda ignorar. El paquete se apoya en laravel/ai y usa Claude por defecto, pero AI_CODE_PROVIDER permite cambiar a OpenAI, Gemini, Groq o un modelo local mediante Ollama.

El paquete incluye varios agentes. ai:code es un REPL interactivo con modo plan, comandos slash, adjuntos de imagen e historial persistente. ai:run ejecuta una sola tarea con código de salida y --output=json opcional para pipelines. ai:fix inicia una sesión centrada desde una excepción pegada, un issue de Sentry (--sentry=ID) o un issue de GitHub (--issue=N). ai:review lee un diff o pull request y publica comentarios inline con niveles de severidad. ai:upgrade lleva un paquete Composer a una nueva versión mayor siguiendo su propia guía de actualización en vendor/. Un self-healer vigila los jobs de cola y las tareas programadas que fallan, corrige el código en un worktree aislado y abre un pull request. Tackle Remote es un paquete complementario que expone el mismo entorno como interfaz web móvil con solicitudes de aprobación.

Tackle requiere PHP 8.3 y Laravel 12 o 13. Se instala con composer require jordandalton/laravel-tackle y después se publican las configuraciones de laravel/ai y de Tackle. La config/ai.php publicada ya incluye el bloque del proveedor Anthropic, así que basta una ANTHROPIC_API_KEY en el .env. Para Ollama hacen falta AI_CODE_PROVIDER y AI_CODE_MODEL, además de AI_CODE_PRICE_INPUT y AI_CODE_PRICE_OUTPUT en 0, porque el catálogo de precios integrado no tiene tarifa para modelos locales. El agente edita archivos directamente mientras el modo worktree esté desactivado, por lo que conviene confirmar o guardar el trabajo antes de la primera sesión.

El REPL ai:code admite modo plan con --plan: un agente de planificación de solo lectura investiga el código y emite un plan numerado con archivos, cambios y riesgos antes de escribir nada; después se elige Execute, Revise o Cancel. /plan hace lo mismo por tarea dentro de una sesión. El acceso al shell tiene cuatro modos: --off lo rechaza todo y deja disponibles las herramientas de lectura, --approve confirma cada comando (valor por defecto), --allowlist solo permite las entradas de shell_allowlist y --yolo no pregunta nada. Las transcripciones se guardan en storage/ai-code/ y se reanudan en la siguiente ejecución; --session=nombre mantiene historiales separados. Al superar los 60.000 caracteres, Tackle resume automáticamente los intercambios antiguos y conserva los últimos cuatro mensajes literalmente; /compact lo fuerza y /clear descarta el historial.

Todas las reglas de config/tackle.php se comprueban en PHP antes de que se ejecute una herramienta. Valores por defecto: budget_usd en 1,00 (parada estricta, aviso al 80 por ciento), modo shell por entorno (off en producción), una artisan_allowlist por entorno, modo worktree activado por defecto en producción y protected_paths que cubren .env, storage/*, vendor/* y .git/*, bloqueando lectura y escritura para que el agente no pueda citar tus secretos. Los comandos destructivos como migrate:fresh y db:wipe requieren confirmación en terminal. En modo worktree, los cambios van a un worktree git temporal, la estadística de diff por turno se etiqueta como tal y tackle:prune limpia los restos de ejecuciones interrumpidas.

Cada agente carga un TACKLE.md desde la raíz del proyecto al iniciar la sesión. php artisan tackle:init analiza composer.json, el framework de tests y la estructura de app/ para generar un esqueleto con las secciones Conventions, Boundaries y Gotchas. Si no hay TACKLE.md, Tackle recurre a AGENTS.md y luego a CLAUDE.md. El contenido está limitado a 20.000 caracteres y la capa de seguridad se aplica independientemente de lo que diga el archivo.

ai:review ejecuta un agente de solo lectura con ReadFile, Glob y SearchCode sobre un diff, leyendo el archivo completo alrededor de cada función modificada. Uso: php artisan ai:review para cambios preparados y sin preparar, --against=main para una revisión estilo PR, --pr=118 --comment para publicar comentarios inline en GitHub. Los resultados llegan agrupados por archivo en tres niveles de severidad con un veredicto de LGTM, LGTM with minor notes o Needs changes; --fail-on=critical convierte ese veredicto en un código de salida para CI. Cada revisión publicada incrusta un marcador invisible que registra el commit de cabecera cubierto, así que las ejecuciones posteriores solo revisan lo subido desde entonces y terminan pronto con "Nothing new to review" si no ha cambiado; un force-push vuelve a una revisión completa y --full la fuerza. php artisan tackle:install review genera un workflow de GitHub Actions con JordanDalton/tackle-review@v1. Responder a un hallazgo con un comentario /tackle dispara ai:respond: el agente de codificación ejecuta la instrucción, sube el commit a la rama de la PR y responde con el SHA y la estadística de diff. Las PR de forks se rechazan, un checkout que no coincide aborta el proceso y las preguntas simples se responden sin editar nada.

La autorreparación está desactivada por defecto. Con AI_CODE_HEALING_ENABLED=true, la migración publicada y un worker en la cola healer, Tackle escucha los eventos JobFailed y ScheduledTaskFailed. Un agente reparador trabaja entonces sobre un worktree nuevo en una rama tackle/heal-{id} con la clase de excepción, el mensaje, la traza y, si está instalado, la entrada completa de Telescope. Aplica un arreglo mínimo, ejecuta la suite de tests y abre un pull request con su razonamiento o, en modo patch, fusiona en la rama de trabajo y vuelve a despachar el job original. El atributo #[Healable(false)] excluye jobs y AI_CODE_HEALING_THRESHOLD=3 espera tres fallos antes de actuar. Cada intento se registra en la tabla tackle_healing_log, consultable con php artisan tackle:healing-log mediante los filtros --type y --outcome. Si los tests fallan en modo patch, se abre un PR en su lugar, y los jobs del reparador corren con $tries = 1.

tackle:mcp sirve las herramientas de Laravel por MCP sobre stdio, de modo que Claude Code, Cursor o Zed pueden llamar a ListRoutes, QueryDatabase, ReadTelescopeEntry y RunLarastan contra la aplicación. El conjunto expuesto viene de config('tackle.mcp.tools') y por defecto solo incluye herramientas de lectura y análisis. Las guardas de rutas, la lista blanca de Artisan y la restricción SELECT-only siguen vigentes; AskUser y ConfirmAction se rechazan porque los clientes MCP no tienen terminal.

Dos limitaciones a tener en cuenta: el agente no tiene acceso a Internet y trabaja solo con los archivos del workspace, y el límite de gasto se estima a partir del recuento de tokens contra un catálogo de precios integrado, por lo que la facturación real difiere ligeramente. Tackle tiene licencia MIT, actualmente en la v1.27.3 en GitHub, con documentación en tackle.jordandalton.com.