Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Writes Symfony PHP — DI container, bundles, Doctrine, Messenger, Security voters, console commands. For Laravel / Eloquent / Artisan use `laravel`. For framework-free PHP use `php-coder`.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Use this skill for all Symfony-specific code generation and editing tasks, especially when working with:
services.yaml)This skill extends the base php-coder skill and applies Symfony conventions on top of the project's general PHP rules.
When the task is understanding how a Symfony app boots, wires its container, routes requests, or fails at runtime — defer to project-analysis-symfony first, then return here for the edit. This skill assumes the kernel/container layout is already known.
→ First apply the php-coder skill for general PHP rules.
Then add these Symfony-specific checks:
bin/console exists, composer.json lists symfony/framework-bundle.composer.lock for the framework-bundle major. 5.x → 6.x → 7.x differs in attribute routing, voter signatures, and Messenger DSN shape.src/Module/<Name>/), or DDD-style. Do not enforce a layout the project does not use.config/packages/<env>/, services.yaml autowiring vs explicit bindings, config/bundles.php.App\Service\Foo, not custom string IDs.public: true to make tests pass.new on classes that have collaborators.AbstractController only when the project doesRequest or a DTO; delegate business logic; return a Response variant#[Route] attributes on 6.x+; YAML routes only where the project already does.#[MapRequestPayload] / #[MapQueryString] (7.x+) for request DTOs when the project uses them.ParamConverter / argument resolvers for entities only when the project uses them.#[Assert\NotBlank], #[Assert\Email]) on 6.x+.ConstraintViolationListInterface — never compose error arrays by hand.#[AutoconfigureTag] or YAML tags, never an injected array of FQCNs.#[AsDecorator] (6.1+); respect priority.Container::get in application code.config/routes/.<resource>_<action> (user_show, invoice_list).#[IsGranted], #[RateLimit] at the route level, not inside the controller body.requirements: for path parameter constraints; do not validate in the controller.JsonResponse, API Platform, or redirects with flash.ConstraintViolationList → application/problem+json; DTOs / serializer groups, not raw entities.MessageHandlerInterface (5.x) or #[AsMessageHandler] (6.x+).framework.messenger.routing in config/packages/messenger.yaml.failure_transport explicitly — without it, failed messages disappear.#[AsEventListener] (6.1+) or EventSubscriberInterface — match the project's convention.UserRegistered, OrderPaid); one side-effect per subscriber.kernel.request / kernel.response — wrong priority is a frequent bug source.config/packages/security.yaml (main, API, admin).#[IsGranted] on actions; $this->isGranted() only when the result drives downstream logic.ParameterBagInterface or #[Autowire(param: ...)] — never $_ENV directly..env (+ .env.test); production values in deployment config.config/packages/<bundle>.yaml; env overrides under config/packages/<env>/.addSelect or EAGER when always needed.EntityManager::wrapInTransaction() for multi-write atomicity.PreFlush, PostUpdate) — no domain logic there unless the project already does.doctrine:migrations:diff; review before commit.up() and down().{% extends %} / {% include %} / macros.|raw only when content is provably safe.#[AsCommand] (6.x+); one command class per intent; constructor injection.--limit, --time-limit, graceful SIGTERM shutdown.OutputInterface — never echo.new on classes with collaborators.$_ENV / $_SERVER direct access — go through the parameter bag.public: true to make tests pass — use the test container.public: true.#[IsGranted] is a no-op if the controller is not a service (autoconfigure handles it by default).failure_transport is opt-in; without it, failures vanish.cache:clear in prod before debugging "config not applied".composer.lock before assuming 6.x patterns work.A DEPENDENCY PROVES A LIBRARY IS AVAILABLE. ONLY THE ENTRY POINT AND THE
ROUTER PROVE WHICH APPLICATION SHAPE IS RUNNING.
`symfony/*` PACKAGES WITH NO SKELETON MARKER IS A THIRD STATE, AND THIS SKILL
DOES NOT APPLY TO IT.
Symfony ships its ORM, container, collections and HTTP layer as independently installable packages, usable with no framework present — a published distribution model, not one consumer's arrangement. An application built that way has a custom entry point and a custom router. Routing it here offers a CLI that does not exist, a request-validation primitive that is not wired, and a routes file that was never there: every suggestion confidently wrong, and the reason visible only from the entry point.
The probe set, and its cost. A fixed set of filesystem existence checks plus one manifest read — no directory walk, no content scan, and never re-derived per session. Any ONE marker present means the framework is real:
| Probe | Meaning |
|---|---|
bin/console | the console entry point the skeleton writes |
config/bundles.php | the bundle registry |
config/services.yaml | the DI service config |
symfony/* in composer.json with none of those markers is
components-without-the-framework. Say so and route away from this skill rather
than answering as though the framework were there.
Implemented deterministically in src/install/detect_php_shape.ts
(detectPhpShape), whose PROBE_PATHS is this table and whose verdict names
what a wrong route would have offered.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
日本語の概要は準備中です。原文の説明を表示しています。
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
日本語の概要は準備中です。原文の説明を表示しています。
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
日本語の概要は準備中です。原文の説明を表示しています。
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
日本語の概要は準備中です。原文の説明を表示しています。