Non-negotiable rules:
- Load
references/stack.md first, then only the task-relevant references.
- Inspect
composer.json and composer.lock before applying version-specific APIs. Recommend Laravel 13 for new applications and explicit upgrades; never silently upgrade an existing application during unrelated work.
- No business logic in controllers. Controllers validate (Form Request), delegate (Action), return (API Resource). Nothing else.
- No returning Eloquent models directly. Every response goes through an API Resource.
- No inline validation. All validation lives in Form Request classes.
- No
$guarded = []. Every model uses explicit $fillable.
- No raw queries. Use Eloquent or query builder with parameter bindings.
- No bare
queue:work. All queue processing uses Horizon.
Model::shouldBeStrict() must be enabled in AppServiceProvider::boot().
laravel
Inputs
$request: The Laravel task, bug, feature, or subsystem being worked on
Goal
Route Laravel work through the correct project conventions so the implementation follows the existing backend architecture instead of generic framework defaults.
Step 0: Read the stack contract
Always start with:
That establishes the locked runtime, package, and architecture choices for this Laravel surface.
For a new application, a framework-version decision, or a Laravel 12 to 13 upgrade, also read:
Success criteria: The project's Laravel stack choices are explicit before implementation starts.
Step 1: Load only the relevant references
Use the routing table to pick reference files that match the actual task. Do not bulk-load the full reference tree.
| Task |
Read |
| Starting a session / understanding the stack |
references/stack.md |
| New application, framework version choice, Laravel 12 to 13 upgrade |
references/upgrading.md |
| Creating or modifying files, folder conventions |
references/folder-structure.md |
| API routes, versioning, middleware |
references/routing.md |
| Creating or editing a controller |
references/controller-pattern.md |
| Adding validation to a request |
references/form-requests.md |
| Creating or editing a model, relationships, scopes |
references/eloquent-models.md |
| API response transformation, pagination, filtering |
references/api-resources.md |
| Business logic, Actions, DTOs, service providers |
references/service-layer.md |
| Authentication, tokens, roles, policies |
references/auth.md |
| Migrations, seeders, factories, query optimization |
references/database.md |
| Error responses, exception handling |
references/error-handling.md |
| Logging configuration, structured logging |
references/logging.md |
| Redis caching, cache invalidation, TTL strategy |
references/caching.md |
| Jobs, queues, events, Horizon, broadcasting |
references/queues-jobs.md |
| Writing tests (feature or unit) |
references/testing.md |
| Security hardening, CORS, rate limiting, webhooks |
references/security.md |
| API documentation generation |
references/api-docs.md |
| Telescope, Horizon dashboard, Pulse, health checks |
references/observability.md |
| Laravel/Filament integration boundary |
references/filament.md, then use the laravel-filament skill for Filament code |
| Docker setup, CI/CD, deployment |
references/docker.md |
| Notifications, email, SMS |
references/notifications-mail.md |
| File uploads, S3, media library |
references/file-storage.md |
| Task scheduling, cron jobs |
references/scheduling.md |
| AI agents, text/image/audio generation, embeddings, RAG |
references/ai-sdk.md |
| AI-assisted development, Boost setup, guidelines, skills |
references/boost.md |
| MCP servers, exposing app to AI clients, tools/resources/prompts |
references/mcp.md |
Multiple tasks? Read multiple files. The references are self-contained.
Success criteria: Only the task-relevant Laravel conventions are in play.
Step 2: Implement with the core Laravel guardrails
Keep these rules active:
- controllers validate, delegate, and return
- responses go through API Resources
- list endpoints paginate
- models use explicit
$fillable
- mutations use the correct Action or transaction pattern
- queues use the project's queue and Horizon conventions
Success criteria: The change matches the project’s Laravel architecture instead of framework-default shortcuts.
Step 3: Verify with the narrowest relevant checks
Use the smallest verification loop that matches the task:
- PHPUnit or Pest tests
- focused artisan or framework checks
- static analysis or linting if already part of the repo workflow
- for framework upgrades, the dependency and regression checks in
references/upgrading.md
Success criteria: The change is validated in the way this Laravel project expects.
Guardrails
- Do not inline the whole Laravel handbook in
SKILL.md.
- Do not skip
references/stack.md.
- Do not return raw Eloquent models directly.
- Do not put business logic in controllers.
- Do not apply Laravel 13-only APIs to a Laravel 12 project unless the task includes the upgrade.
- Do not pin today's Laravel patch release; use the supported
^13.0 constraint and the lockfile.
- Do not add
disable-model-invocation; this is a normal domain skill.
When To Load References
Output Contract
Report:
- the detected Laravel major and whether Laravel 13 was recommended or already in use
- which Laravel references were loaded
- the architecture pattern chosen
- the change made
- the verification run
1---2name: laravel3description: Write and change Laravel the way THIS project already does it, with Laravel 13 as the recommended baseline for new applications and explicit compatibility handling for existing versions. Carries the real controller/Action/Resource boundaries and conventions for thin controllers, Form Request validation, strict Eloquent, API Resources, Horizon queues, caching, auth, observability, and the Laravel AI/Boost/MCP stack. Use when a task touches this project's Laravel code and should follow its backend conventions rather than generic or outdated framework defaults.4---5
6<EXTREMELY-IMPORTANT>
7This skill is a routing shell over the reference set, not a place to retype the whole Laravel playbook.
8
9Non-negotiable rules:
101. Load `references/stack.md` first, then only the task-relevant references.
112. Inspect `composer.json` and `composer.lock` before applying version-specific APIs. Recommend Laravel 13 for new applications and explicit upgrades; never silently upgrade an existing application during unrelated work.
123. **No business logic in controllers.** Controllers validate (Form Request), delegate (Action), return (API Resource). Nothing else.
134. **No returning Eloquent models directly.** Every response goes through an API Resource.
145. **No inline validation.** All validation lives in Form Request classes.
156. **No `$guarded = []`.** Every model uses explicit `$fillable`.
167. **No raw queries.** Use Eloquent or query builder with parameter bindings.
178. **No bare `queue:work`.** All queue processing uses Horizon.
189. **`Model::shouldBeStrict()`** must be enabled in `AppServiceProvider::boot()`.
19</EXTREMELY-IMPORTANT>
20
21# laravel
22
23## Inputs
24
25- `$request`: The Laravel task, bug, feature, or subsystem being worked on
26
27## Goal
28
29Route Laravel work through the correct project conventions so the implementation follows the existing backend architecture instead of generic framework defaults.
30
31## Step 0: Read the stack contract
32
33Always start with:
34
35- `references/stack.md`
36
37That establishes the locked runtime, package, and architecture choices for this Laravel surface.
38
39For a new application, a framework-version decision, or a Laravel 12 to 13 upgrade, also read:
40
41- `references/upgrading.md`
42
43**Success criteria**: The project's Laravel stack choices are explicit before implementation starts.
44
45## Step 1: Load only the relevant references
46
47Use the routing table to pick reference files that match the actual task. Do not bulk-load the full reference tree.
48
49| Task | Read |
50|------|------|
51| Starting a session / understanding the stack | `references/stack.md` |
52| New application, framework version choice, Laravel 12 to 13 upgrade | `references/upgrading.md` |
53| Creating or modifying files, folder conventions | `references/folder-structure.md` |
54| API routes, versioning, middleware | `references/routing.md` |
55| Creating or editing a controller | `references/controller-pattern.md` |
56| Adding validation to a request | `references/form-requests.md` |
57| Creating or editing a model, relationships, scopes | `references/eloquent-models.md` |
58| API response transformation, pagination, filtering | `references/api-resources.md` |
59| Business logic, Actions, DTOs, service providers | `references/service-layer.md` |
60| Authentication, tokens, roles, policies | `references/auth.md` |
61| Migrations, seeders, factories, query optimization | `references/database.md` |
62| Error responses, exception handling | `references/error-handling.md` |
63| Logging configuration, structured logging | `references/logging.md` |
64| Redis caching, cache invalidation, TTL strategy | `references/caching.md` |
65| Jobs, queues, events, Horizon, broadcasting | `references/queues-jobs.md` |
66| Writing tests (feature or unit) | `references/testing.md` |
67| Security hardening, CORS, rate limiting, webhooks | `references/security.md` |
68| API documentation generation | `references/api-docs.md` |
69| Telescope, Horizon dashboard, Pulse, health checks | `references/observability.md` |
70| Laravel/Filament integration boundary | `references/filament.md`, then use the `laravel-filament` skill for Filament code |
71| Docker setup, CI/CD, deployment | `references/docker.md` |
72| Notifications, email, SMS | `references/notifications-mail.md` |
73| File uploads, S3, media library | `references/file-storage.md` |
74| Task scheduling, cron jobs | `references/scheduling.md` |
75| AI agents, text/image/audio generation, embeddings, RAG | `references/ai-sdk.md` |
76| AI-assisted development, Boost setup, guidelines, skills | `references/boost.md` |
77| MCP servers, exposing app to AI clients, tools/resources/prompts | `references/mcp.md` |
78
79Multiple tasks? Read multiple files. The references are self-contained.
80
81**Success criteria**: Only the task-relevant Laravel conventions are in play.
82
83## Step 2: Implement with the core Laravel guardrails
84
85Keep these rules active:
86
87- controllers validate, delegate, and return
88- responses go through API Resources
89- list endpoints paginate
90- models use explicit `$fillable`
91- mutations use the correct Action or transaction pattern
92- queues use the project's queue and Horizon conventions
93
94**Success criteria**: The change matches the project’s Laravel architecture instead of framework-default shortcuts.
95
96## Step 3: Verify with the narrowest relevant checks
97
98Use the smallest verification loop that matches the task:
99
100- PHPUnit or Pest tests
101- focused artisan or framework checks
102- static analysis or linting if already part of the repo workflow
103- for framework upgrades, the dependency and regression checks in `references/upgrading.md`
104
105**Success criteria**: The change is validated in the way this Laravel project expects.
106
107## Guardrails
108
109- Do not inline the whole Laravel handbook in `SKILL.md`.
110- Do not skip `references/stack.md`.
111- Do not return raw Eloquent models directly.
112- Do not put business logic in controllers.
113- Do not apply Laravel 13-only APIs to a Laravel 12 project unless the task includes the upgrade.
114- Do not pin today's Laravel patch release; use the supported `^13.0` constraint and the lockfile.
115- Do not add `disable-model-invocation`; this is a normal domain skill.
116
117## When To Load References
118
119- `references/stack.md`
120 Always.
121
122- then only the task-relevant files under `references/`
123
124## Output Contract
125
126Report:
127
1281. the detected Laravel major and whether Laravel 13 was recommended or already in use
1292. which Laravel references were loaded
1303. the architecture pattern chosen
1314. the change made
1325. the verification run