Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add garrettw/php-arch-skills --skill application-layergit clone --depth 1 https://github.com/garrettw/php-arch-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/garrettw/php-arch-skills/application-layer)<a href="https://agentmods.dev/skills/garrettw/php-arch-skills/application-layer"><img src="https://agentmods.dev/badge/skills/garrettw/php-arch-skills/application-layer/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/garrettw/php-arch-skills/application-layer"><img src="https://agentmods.dev/badge/skills/garrettw/php-arch-skills/application-layer.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00055 | $0.02224 |
| Opus 5.5 | $0.00022 | $0.00890 |
| Sonnet 5.5 | $0.00011 | $0.00445 |
| Haiku 4.5 | $0.00006 | $0.00222 |
Grade A, and why
application-layer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 102 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Application Layer & CQRS Patterns for PHP
Service Layer = Application Layer
In DDD terminology, the Service Layer is interchangeable with the Application Layer. A service (also called a handler, operation, action, or interactor) represents one business use case: it orchestrates and coordinates work, controls the transaction, and manages side effects. It does not make business decisions — it is a workflow, not a business rule. The actual decisions live in the domain (rich objects, policies, or a table module). See service-layer.md for the full definition, benefits, the overuse anti-pattern, and how it sits above the domain-modeling spectrum. A Command/Handler here is the in-process expression of a use case; the distribution-patterns skill covers exposing that same use case remotely as a coarse-grained Remote Facade.
When to Use a Service Layer (and the Anti-Pattern to Avoid)
Use a Service Layer whenever more than one delivery channel (HTTP, CLI, queue) needs the same orchestration, or when you want a clear, testable entry point per use case. But do not overuse it: the common failure is Controller → Service → Repository → Entity where the entity is anemic and the service holds all the logic. That is a Transaction Script wearing extra indirection — the fault is an anemic domain, not the pattern. Push business rules down into the domain; keep the service as pure orchestration.
When to Use CQRS (and When NOT to)
CQRS separates read and write models, but adds complexity. Use CQRS only when a bounded context has genuinely divergent read/write workloads. Skip CQRS for simple CRUD, interfaces without complex reads, or early-stage projects where premature separation slows delivery.
| Use CQRS For | Use Simple Controller/Repository For |
|---|---|
| Bounded contexts with divergent read/write workloads | Simple CRUD, single operation per endpoint |
| A read model with 10+ projections or dedicated reporting | Single or few read paths |
| Scaling reads and writes independently | Uniform access patterns |
What ships with it
3 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 102 lines · 55 tokens per session scan A c4db86995584
application-layer is a skill published in the GitHub repository garrettw/php-arch-skills (14 stars, last pushed 2mo ago), licensed MPL-2.0. It adds 55 tokens to every session and 2,224 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
bitrix-console-commands
Bitrix CLI bitrix.php — make: generators (module, controller, tablet, service, event, message, agent), orm:annotate, messenger:consume, own Symfony Console commands in module .settings.php. Use when scaffolding code or writing CLI/cron jobs.
bitrix-components
Bitrix components — class.php, params, template overrides, resultmodifier/componentepilog, result cache, paged lists, SEF, Controllerable AJAX. Use when building, overriding or caching components in /local.
bitrix-request-response
Application, Context, HttpRequest (query/post/JSON body), HttpResponse, Json/AjaxJson/Redirect/file responses, cookies, Converter, Uri, UuidGenerator. Use instead of $GET/$POST, header(), setcookie() or jsonencode().
bitrix-http-client
Bitrix\Main\Web\HttpClient — legacy get/post/download, PSR-18 sendRequest, async requests, httpclientoptions, HttpDebug logging, SSRF protection, GeoIp\Manager. Use for outgoing HTTP calls, webhooks, file downloads and IP geolocation.
bun-api
Bun runtime API reference for TypeScript scripts. Covers Bun.serve() HTTP/HTTP/2 server with routes and WebSockets, fetch() transport options, proxies and Bun.FetchSession connection pools, Bun.ModuleGraph multi-instance apps, Bun.file(), Bun.write(), Bun.$() shell, Bun.spawn(), Bun.Glob, Bun.env, bun:sqlite…
laravel
Laravel mastery skill. Eloquent ORM, service container, queues, events, Sanctum/Passport auth, Pest testing. Triggers on: /godmode:laravel, "laravel app", "eloquent", "artisan", "blade".