[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-symfony-php-environment-check":3,"mdc-o2fgg0-key":41,"related-org-symfony-php-environment-check":314,"related-repo-symfony-php-environment-check":392},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":36,"sourceUrl":39,"mdContent":40},"php-environment-check","verify PHP runtime environment configuration","Check the PHP runtime with server-info, its version, OS, and loaded extensions. Reach for it when a Mate tool itself fails or a capability is missing and you suspect the environment, a missing extension or an old PHP, rather than the app or its config. Not for diagnosing app behavior (profiler, log investigation) or DI wiring that is present but wrong (service inspection).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"symfony","Symfony","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fsymfony.png",[12,16,19],{"name":13,"slug":14,"type":15},"PHP","php","tag",{"name":17,"slug":18,"type":15},"Configuration","configuration",{"name":20,"slug":21,"type":15},"Diagnostics","diagnostics",30,"https:\u002F\u002Fgithub.com\u002Fsymfony\u002Fai-mate","2026-08-31T09:18:44.931273",null,1,[28,29,30,31,32,33,34,8,35],"ai","debug","dev","development","llm","mcp","model-context-protocol","symfony-ai",{"repoUrl":23,"stars":22,"forks":26,"topics":37,"description":38},[28,29,30,31,32,33,34,8,35],"AI development assistant MCP server for Symfony projects","https:\u002F\u002Fgithub.com\u002Fsymfony\u002Fai-mate\u002Ftree\u002FHEAD\u002Fskills\u002Fphp-environment-check","---\nname: php-environment-check\ndescription: Check the PHP runtime with server-info, its version, OS, and loaded extensions. Reach for it when a Mate tool itself fails or a capability is missing and you suspect the environment, a missing extension or an old PHP, rather than the app or its config. Not for diagnosing app behavior (profiler, log investigation) or DI wiring that is present but wrong (service inspection).\n---\n\n# PHP environment check\n\n`server-info` takes no arguments and returns `php_version`, `operating_system`, `operating_system_family`, and `extensions` (the extensions loaded for this runtime). Calling it is trivial; the judgment is knowing when a failure is the runtime, not the code, and reading the result against what a feature needs.\n\n`server-info` accepts `--format`: `json` to parse the result, `toon` (when `helgesverre\u002Ftoon` is installed) for the smallest context footprint. The loaded-extension list is long, so pass `--format=json` when you only need to test for one extension.\n\n## When to reach for it\n\nReach for `server-info` when a Mate tool fails or behaves oddly while the application under inspection looks fine. That gap usually means the runtime running Mate, not the app.\n\n- **Container inspection returns nothing or errors.** `symfony-services` \u002F `symfony-service-detail` parse the dumped container XML with SimpleXML. If `simplexml` is absent from `extensions`, that parse fails and the service map comes back empty regardless of the app. Check for `simplexml` before assuming the container was never compiled.\n- **Mate itself refuses to run or a feature is missing.** Mate requires PHP >= 8.2. Read `php_version` before blaming config; an old CLI PHP on the box is a common cause.\n- **Path or behavior differs from expectation.** `operating_system_family` (`Windows` vs `Linux`\u002F`Darwin`) explains divergent path handling or line endings.\n\n## Reading\n\n- `extensions` is the loaded list for this SAPI, not the installed-but-disabled list. Absent means not loaded for the runtime Mate is using, which is enough on its own to explain a dependent tool failing.\n- The PHP running the Mate CLI may differ from the one serving the app (different SAPI, different version). `server-info` reports the CLI runtime, so a mismatch here versus what the app runs is itself a finding.\n\nDo not use this to diagnose application behavior. It answers one question: is the environment the reason a tool did not work.\n",{"data":42,"body":43},{"name":4,"description":6},{"type":44,"children":45},"root",[46,54,98,148,155,167,278,284,309],{"type":47,"tag":48,"props":49,"children":50},"element","h1",{"id":4},[51],{"type":52,"value":53},"text","PHP environment check",{"type":47,"tag":55,"props":56,"children":57},"p",{},[58,65,67,73,75,81,82,88,90,96],{"type":47,"tag":59,"props":60,"children":62},"code",{"className":61},[],[63],{"type":52,"value":64},"server-info",{"type":52,"value":66}," takes no arguments and returns ",{"type":47,"tag":59,"props":68,"children":70},{"className":69},[],[71],{"type":52,"value":72},"php_version",{"type":52,"value":74},", ",{"type":47,"tag":59,"props":76,"children":78},{"className":77},[],[79],{"type":52,"value":80},"operating_system",{"type":52,"value":74},{"type":47,"tag":59,"props":83,"children":85},{"className":84},[],[86],{"type":52,"value":87},"operating_system_family",{"type":52,"value":89},", and ",{"type":47,"tag":59,"props":91,"children":93},{"className":92},[],[94],{"type":52,"value":95},"extensions",{"type":52,"value":97}," (the extensions loaded for this runtime). Calling it is trivial; the judgment is knowing when a failure is the runtime, not the code, and reading the result against what a feature needs.",{"type":47,"tag":55,"props":99,"children":100},{},[101,106,108,114,116,122,124,130,132,138,140,146],{"type":47,"tag":59,"props":102,"children":104},{"className":103},[],[105],{"type":52,"value":64},{"type":52,"value":107}," accepts ",{"type":47,"tag":59,"props":109,"children":111},{"className":110},[],[112],{"type":52,"value":113},"--format",{"type":52,"value":115},": ",{"type":47,"tag":59,"props":117,"children":119},{"className":118},[],[120],{"type":52,"value":121},"json",{"type":52,"value":123}," to parse the result, ",{"type":47,"tag":59,"props":125,"children":127},{"className":126},[],[128],{"type":52,"value":129},"toon",{"type":52,"value":131}," (when ",{"type":47,"tag":59,"props":133,"children":135},{"className":134},[],[136],{"type":52,"value":137},"helgesverre\u002Ftoon",{"type":52,"value":139}," is installed) for the smallest context footprint. The loaded-extension list is long, so pass ",{"type":47,"tag":59,"props":141,"children":143},{"className":142},[],[144],{"type":52,"value":145},"--format=json",{"type":52,"value":147}," when you only need to test for one extension.",{"type":47,"tag":149,"props":150,"children":152},"h2",{"id":151},"when-to-reach-for-it",[153],{"type":52,"value":154},"When to reach for it",{"type":47,"tag":55,"props":156,"children":157},{},[158,160,165],{"type":52,"value":159},"Reach for ",{"type":47,"tag":59,"props":161,"children":163},{"className":162},[],[164],{"type":52,"value":64},{"type":52,"value":166}," when a Mate tool fails or behaves oddly while the application under inspection looks fine. That gap usually means the runtime running Mate, not the app.",{"type":47,"tag":168,"props":169,"children":170},"ul",{},[171,221,238],{"type":47,"tag":172,"props":173,"children":174},"li",{},[175,181,183,189,191,197,199,205,207,212,214,219],{"type":47,"tag":176,"props":177,"children":178},"strong",{},[179],{"type":52,"value":180},"Container inspection returns nothing or errors.",{"type":52,"value":182}," ",{"type":47,"tag":59,"props":184,"children":186},{"className":185},[],[187],{"type":52,"value":188},"symfony-services",{"type":52,"value":190}," \u002F ",{"type":47,"tag":59,"props":192,"children":194},{"className":193},[],[195],{"type":52,"value":196},"symfony-service-detail",{"type":52,"value":198}," parse the dumped container XML with SimpleXML. If ",{"type":47,"tag":59,"props":200,"children":202},{"className":201},[],[203],{"type":52,"value":204},"simplexml",{"type":52,"value":206}," is absent from ",{"type":47,"tag":59,"props":208,"children":210},{"className":209},[],[211],{"type":52,"value":95},{"type":52,"value":213},", that parse fails and the service map comes back empty regardless of the app. Check for ",{"type":47,"tag":59,"props":215,"children":217},{"className":216},[],[218],{"type":52,"value":204},{"type":52,"value":220}," before assuming the container was never compiled.",{"type":47,"tag":172,"props":222,"children":223},{},[224,229,231,236],{"type":47,"tag":176,"props":225,"children":226},{},[227],{"type":52,"value":228},"Mate itself refuses to run or a feature is missing.",{"type":52,"value":230}," Mate requires PHP >= 8.2. Read ",{"type":47,"tag":59,"props":232,"children":234},{"className":233},[],[235],{"type":52,"value":72},{"type":52,"value":237}," before blaming config; an old CLI PHP on the box is a common cause.",{"type":47,"tag":172,"props":239,"children":240},{},[241,246,247,252,254,260,262,268,270,276],{"type":47,"tag":176,"props":242,"children":243},{},[244],{"type":52,"value":245},"Path or behavior differs from expectation.",{"type":52,"value":182},{"type":47,"tag":59,"props":248,"children":250},{"className":249},[],[251],{"type":52,"value":87},{"type":52,"value":253}," (",{"type":47,"tag":59,"props":255,"children":257},{"className":256},[],[258],{"type":52,"value":259},"Windows",{"type":52,"value":261}," vs ",{"type":47,"tag":59,"props":263,"children":265},{"className":264},[],[266],{"type":52,"value":267},"Linux",{"type":52,"value":269},"\u002F",{"type":47,"tag":59,"props":271,"children":273},{"className":272},[],[274],{"type":52,"value":275},"Darwin",{"type":52,"value":277},") explains divergent path handling or line endings.",{"type":47,"tag":149,"props":279,"children":281},{"id":280},"reading",[282],{"type":52,"value":283},"Reading",{"type":47,"tag":168,"props":285,"children":286},{},[287,297],{"type":47,"tag":172,"props":288,"children":289},{},[290,295],{"type":47,"tag":59,"props":291,"children":293},{"className":292},[],[294],{"type":52,"value":95},{"type":52,"value":296}," is the loaded list for this SAPI, not the installed-but-disabled list. Absent means not loaded for the runtime Mate is using, which is enough on its own to explain a dependent tool failing.",{"type":47,"tag":172,"props":298,"children":299},{},[300,302,307],{"type":52,"value":301},"The PHP running the Mate CLI may differ from the one serving the app (different SAPI, different version). ",{"type":47,"tag":59,"props":303,"children":305},{"className":304},[],[306],{"type":52,"value":64},{"type":52,"value":308}," reports the CLI runtime, so a mismatch here versus what the app runs is itself a finding.",{"type":47,"tag":55,"props":310,"children":311},{},[312],{"type":52,"value":313},"Do not use this to diagnose application behavior. It answers one question: is the environment the reason a tool did not work.",{"items":315,"total":391},[316,335,348,358,370,376],{"slug":317,"name":317,"fn":318,"description":319,"org":320,"tags":321,"stars":332,"repoUrl":333,"updatedAt":334},"symfony-log-investigation","investigate Symfony application logs","Investigate an error or behavior across Monolog log files when there is no single profile to read, or when tracking something over time or across requests. Use for \"when did this start\", \"how often\", or following one request\u002Fuser through the logs. For a single known request that still has a profile, prefer profiler debugging.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[322,325,328,331],{"name":323,"slug":324,"type":15},"Debugging","debugging",{"name":326,"slug":327,"type":15},"Logs","logs",{"name":329,"slug":330,"type":15},"Observability","observability",{"name":13,"slug":14,"type":15},1159,"https:\u002F\u002Fgithub.com\u002Fsymfony\u002Fai","2026-08-31T09:18:44.585214",{"slug":336,"name":336,"fn":337,"description":338,"org":339,"tags":340,"stars":332,"repoUrl":333,"updatedAt":347},"symfony-profiler-debugging","diagnose Symfony request errors and performance","Diagnose a Symfony request that failed, errored (5xx), or was slow, using the profiler. Use when a specific request misbehaved and the app has the profiler enabled (usually dev). Not for cross-request trends over time (use log investigation) or DI wiring bugs (use service inspection).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[341,342,343,346],{"name":323,"slug":324,"type":15},{"name":329,"slug":330,"type":15},{"name":344,"slug":345,"type":15},"Performance","performance",{"name":13,"slug":14,"type":15},"2026-08-31T09:19:32.021005",{"slug":349,"name":349,"fn":350,"description":351,"org":352,"tags":353,"stars":332,"repoUrl":333,"updatedAt":357},"symfony-request-triage","triage Symfony request failures","First step ONLY when a Symfony request misbehaved and you do not yet know whether the answer is in the profiler, the logs, or the container. One call, then it hands off to the right skill. Skip it entirely and go straight to that skill if you already know the profile token, the log channel or query, or that it is a DI wiring bug.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[354,355,356],{"name":323,"slug":324,"type":15},{"name":20,"slug":21,"type":15},{"name":326,"slug":327,"type":15},"2026-08-31T09:19:36.495282",{"slug":359,"name":359,"fn":360,"description":361,"org":362,"tags":363,"stars":332,"repoUrl":333,"updatedAt":369},"symfony-service-inspection","debug Symfony dependency injection and wiring","Diagnose a Symfony dependency-injection or wiring problem, service not found, wrong implementation injected, an autoconfigured tag not applied, or a factory\u002Fdecorator not doing what you expect. Use for container\u002Fconfig bugs, not runtime request errors (profiler), log trends (log investigation), or a missing PHP extension breaking the tool itself (php environment check).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[364,367,368],{"name":365,"slug":366,"type":15},"Architecture","architecture",{"name":323,"slug":324,"type":15},{"name":13,"slug":14,"type":15},"2026-08-31T09:18:43.894994",{"slug":4,"name":4,"fn":5,"description":6,"org":371,"tags":372,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[373,374,375],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"slug":377,"name":377,"fn":378,"description":379,"org":380,"tags":381,"stars":22,"repoUrl":23,"updatedAt":390},"system-information","inspect PHP runtime and dependency context","Resolve which dependency versions are actually installed, from composer show and composer.lock, when diagnosing version-specific behavior such as a method, argument or class that does not exist in the release that is really running. For the PHP runtime itself (version, OS, loaded extensions) use the php-environment-check skill instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[382,383,386,389],{"name":323,"slug":324,"type":15},{"name":384,"slug":385,"type":15},"Engineering","engineering",{"name":387,"slug":388,"type":15},"Environment Variables","environment-variables",{"name":13,"slug":14,"type":15},"2026-08-31T08:56:58.622457",6,{"items":393,"total":407},[394,400],{"slug":4,"name":4,"fn":5,"description":6,"org":395,"tags":396,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[397,398,399],{"name":17,"slug":18,"type":15},{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"slug":377,"name":377,"fn":378,"description":379,"org":401,"tags":402,"stars":22,"repoUrl":23,"updatedAt":390},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[403,404,405,406],{"name":323,"slug":324,"type":15},{"name":384,"slug":385,"type":15},{"name":387,"slug":388,"type":15},{"name":13,"slug":14,"type":15},2]