An AI agent harness for Laravel — the runtime layer that lets AI agents operate inside your app: reading code, running tools and tests, and taking action, with safety boundaries enforced at the framework level.
Think Claude Code or Codex, but purpose-built for Laravel and installed via Composer. Built on laravel/ai and provider-agnostic — Anthropic (Claude) by default; OpenAI, Gemini, Groq, or local Ollama are two env vars away.
📚 Full documentation → tackle.jordandalton.com
composer require jordandalton/laravel-tackleSet a provider key in .env (Anthropic by default):
ANTHROPIC_API_KEY=sk-ant-...Then start an interactive coding session:
php artisan ai:codeThat's it — see Your First Session for the guided tour. Requires PHP 8.3+ and Laravel 12 or 13.
A family of agents, all sharing one tool infrastructure and safety layer:
| Command | What it does |
|---|---|
ai:code |
Interactive coding agent — reads the codebase, edits files, runs tests, plan mode, slash commands, context compaction. |
ai:run |
The same agent headless — one task, a JSON result, an exit code. For CI and cron. |
ai:fix |
Focused fix session — paste an exception or point it at a Sentry / GitHub issue; it diagnoses, patches, and verifies. |
ai:review |
Read-only diff review with severity levels; posts inline comments on a PR. |
ai:onboard |
A read-only tour of a codebase for a new developer; --write saves docs/ONBOARDING.md. |
ai:upgrade |
Safe major-version Composer upgrades — audit, plan, fix, verify — delivered as a PR. |
ai:eval |
Benchmark the agent against seeded bugs — fix rate, false-fix rate, tokens, cost. |
| Self-healer | Autonomous agent that heals failed jobs, scheduled tasks, and Nightwatch production issues — verifies the fix, opens a PR. |
Plus ai:explain, ai:test, and ai:respond.
Every agent also sees the application map — your real columns and types off the live connection, relationships, scopes, observers, policies, factory states, and the fully resolved middleware and validation on any route, read from the booted application rather than inferred from files. An index of your models rides in every session's prompt; the detail is one tool call away. It's the thing an agent running outside your app can't have.
Every agent is extensible — add your own tools, write new agents, hook the tool lifecycle, or swap the default agent — without forking. And the terminal isn't the only way in: Tackle Remote drives the same harness from your phone's browser, and Tackle Telegram drives it from a chat — outbound-only, so it works from anywhere without your phone needing to reach your machine.
Everything lives at tackle.jordandalton.com:
- Guide — What is Tackle? · Installation · First Session · Configuration · Project Instructions · Session Memory · Safety
- The Agents — interactive · headless · fix · review · onboard · upgrade · eval · self-healing
- Integrations — GitHub · Sentry · Nightwatch · MCP · Remote · Telegram
- Extending — tools · agents · hooks · subagents · models & providers
- Reference — commands · tools
Tackle edits code and runs commands, and the boundaries are enforced in PHP, not by prompting: protected paths, per-environment shell modes, artisan allowlists, spend budgets, and worktree isolation. See Safety.
Two things worth knowing before you start:
- Run it inside a committed git tree so you always have a clean undo (
git checkout -- .). laravel/aiis new and fast-moving. It reshapes itsAgentcontract on most 0.x minors, and an incompatible signature is a compile-time fatal. Tackle supports>=0.1 <0.11and CI runs the suite across that range on PHP 8.3 and 8.4.
composer install
./vendor/bin/pest # run the test suite
./vendor/bin/pint # formatBug reports and pull requests are welcome on GitHub.
If you discover a security issue, please email jordan@daltonsolutions.com rather than opening a public issue.
Laravel Tackle is open-sourced software licensed under the MIT license.
