[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-symfony-system-information":3,"mdc-jjj6zv-key":44,"related-org-symfony-system-information":598,"related-repo-symfony-system-information":607},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":39,"sourceUrl":42,"mdContent":43},"system-information","inspect PHP runtime and dependency context","Inspect the runtime and dependency context of the PHP application Mate is attached to — PHP version, OS, and loaded extensions via the server-info tool, plus installed package versions from composer.lock — when diagnosing environment- or version-specific behavior such as a missing extension or a version mismatch (an API that does not exist in the release that is actually installed).",{"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,22],{"name":13,"slug":14,"type":15},"PHP","php","tag",{"name":17,"slug":18,"type":15},"Engineering","engineering",{"name":20,"slug":21,"type":15},"Debugging","debugging",{"name":23,"slug":24,"type":15},"Environment Variables","environment-variables",30,"https:\u002F\u002Fgithub.com\u002Fsymfony\u002Fai-mate","2026-07-23T06:05:48.208242",null,1,[31,32,33,34,35,36,37,8,38],"ai","debug","dev","development","llm","mcp","model-context-protocol","symfony-ai",{"repoUrl":26,"stars":25,"forks":29,"topics":40,"description":41},[31,32,33,34,35,36,37,8,38],"AI development assistant MCP server for Symfony projects","https:\u002F\u002Fgithub.com\u002Fsymfony\u002Fai-mate\u002Ftree\u002FHEAD\u002Fskills\u002Fsystem-information","---\nname: system-information\ndescription: >-\n  Inspect the runtime and dependency context of the PHP application Mate is attached to —\n  PHP version, OS, and loaded extensions via the server-info tool, plus installed package\n  versions from composer.lock — when diagnosing environment- or version-specific behavior\n  such as a missing extension or a version mismatch (an API that does not exist in the\n  release that is actually installed).\n---\n\n# System Information\n\nUse this skill when a problem might depend on the **environment or the installed\ndependency versions** rather than the code: a missing or misconfigured extension,\nbehavior that only reproduces on a specific PHP\u002FOS version, or a bug that looks like a\nversion mismatch — a method, argument, or class that does not exist in the release that\nis actually installed.\n\n## Capabilities\n\n| Need | Use |\n|---|---|\n| PHP version, OS, OS family, loaded extensions | `server-info` MCP tool (one call) |\n| Installed version of a package | `composer show \u003Cvendor\u002Fpackage>` |\n| Installed versions of a family of packages | `composer show '\u003Cvendor>\u002F\u003Cprefix>*'` |\n| Authoritative record of every installed version | `composer.lock` (`packages` \u002F `packages-dev`) |\n\n`server-info` reports the runtime only — it does **not** return package versions. Use\nComposer for those.\n\n## Runtime checks\n\n1. **Start with the `server-info` tool** for PHP version, OS, OS family, and loaded\n   extensions — prefer it over `php -v`, `php -m`, or `uname`.\n2. **Confirm a required extension is loaded** before blaming the code. If it is absent\n   from `server-info`, the fix is an environment\u002Fconfiguration change, not a code change.\n\n## Resolving package versions\n\n`composer.json` declares *constraints* (what is allowed); `composer.lock` records what is\n*actually installed*. For \"what is really running\", trust the lock, not the constraint.\n\n- **One package:** `composer show symfony\u002Fconsole` → installed version plus details.\n- **A family:** `composer show 'symfony\u002Fai-*'` → every matching package and its version.\n- **Machine-readable:** `composer show --format=json symfony\u002Fconsole`.\n- **No Composer binary, or you want the raw record:** look the package up by `name` under\n  `packages` in `composer.lock` and read its `version` field — do not load the whole lock\n  file into context.\n\nMonorepo \u002F path-repo note: locally linked packages (for example symlinked `symfony\u002Fai-*`\nin this repository) report `dev-main` or a path reference instead of a semver tag — that\nis the working copy, not a released version.\n\n## Diagnosing a version mismatch\n\n1. Identify the package behind the failing API — the namespace usually maps to it\n   (`Symfony\\Component\\Console\\…` → `symfony\u002Fconsole`).\n2. Read the **installed** version with `composer show \u003Cpackage>` (or from `composer.lock`).\n3. Compare it against the version the code expects: a method or argument added in a newer\n   minor, or removed\u002Frenamed in a newer major, is the classic signature.\n4. Report the gap precisely — name the package, the installed version, and the required\n   one: *\"symfony\u002Fconsole is 6.4 (installed), but the code calls a 7.1 API.\"*\n\n## Rules\n\n- Reach for `server-info` and `composer show` first; they are cheaper and more structured\n  than reading `composer.lock` or `php -m` wholesale.\n- Report only the *one or two* facts that change the diagnosis (e.g. \"ext-intl is not\n  loaded\", \"symfony\u002Fconsole is 6.4, the code uses a 7.1 API\") — never the full extension\n  dump or the entire lock file.\n- Never run state-changing commands. `composer show` is read-only; `composer require`,\n  `composer update`, and `composer install` are not. This skill is read-only inspection.\n",{"data":45,"body":46},{"name":4,"description":6},{"type":47,"children":48},"root",[49,57,71,78,195,212,218,281,287,320,415,436,442,507,513],{"type":50,"tag":51,"props":52,"children":53},"element","h1",{"id":4},[54],{"type":55,"value":56},"text","System Information",{"type":50,"tag":58,"props":59,"children":60},"p",{},[61,63,69],{"type":55,"value":62},"Use this skill when a problem might depend on the ",{"type":50,"tag":64,"props":65,"children":66},"strong",{},[67],{"type":55,"value":68},"environment or the installed\ndependency versions",{"type":55,"value":70}," rather than the code: a missing or misconfigured extension,\nbehavior that only reproduces on a specific PHP\u002FOS version, or a bug that looks like a\nversion mismatch — a method, argument, or class that does not exist in the release that\nis actually installed.",{"type":50,"tag":72,"props":73,"children":75},"h2",{"id":74},"capabilities",[76],{"type":55,"value":77},"Capabilities",{"type":50,"tag":79,"props":80,"children":81},"table",{},[82,101],{"type":50,"tag":83,"props":84,"children":85},"thead",{},[86],{"type":50,"tag":87,"props":88,"children":89},"tr",{},[90,96],{"type":50,"tag":91,"props":92,"children":93},"th",{},[94],{"type":55,"value":95},"Need",{"type":50,"tag":91,"props":97,"children":98},{},[99],{"type":55,"value":100},"Use",{"type":50,"tag":102,"props":103,"children":104},"tbody",{},[105,126,143,160],{"type":50,"tag":87,"props":106,"children":107},{},[108,114],{"type":50,"tag":109,"props":110,"children":111},"td",{},[112],{"type":55,"value":113},"PHP version, OS, OS family, loaded extensions",{"type":50,"tag":109,"props":115,"children":116},{},[117,124],{"type":50,"tag":118,"props":119,"children":121},"code",{"className":120},[],[122],{"type":55,"value":123},"server-info",{"type":55,"value":125}," MCP tool (one call)",{"type":50,"tag":87,"props":127,"children":128},{},[129,134],{"type":50,"tag":109,"props":130,"children":131},{},[132],{"type":55,"value":133},"Installed version of a package",{"type":50,"tag":109,"props":135,"children":136},{},[137],{"type":50,"tag":118,"props":138,"children":140},{"className":139},[],[141],{"type":55,"value":142},"composer show \u003Cvendor\u002Fpackage>",{"type":50,"tag":87,"props":144,"children":145},{},[146,151],{"type":50,"tag":109,"props":147,"children":148},{},[149],{"type":55,"value":150},"Installed versions of a family of packages",{"type":50,"tag":109,"props":152,"children":153},{},[154],{"type":50,"tag":118,"props":155,"children":157},{"className":156},[],[158],{"type":55,"value":159},"composer show '\u003Cvendor>\u002F\u003Cprefix>*'",{"type":50,"tag":87,"props":161,"children":162},{},[163,168],{"type":50,"tag":109,"props":164,"children":165},{},[166],{"type":55,"value":167},"Authoritative record of every installed version",{"type":50,"tag":109,"props":169,"children":170},{},[171,177,179,185,187,193],{"type":50,"tag":118,"props":172,"children":174},{"className":173},[],[175],{"type":55,"value":176},"composer.lock",{"type":55,"value":178}," (",{"type":50,"tag":118,"props":180,"children":182},{"className":181},[],[183],{"type":55,"value":184},"packages",{"type":55,"value":186}," \u002F ",{"type":50,"tag":118,"props":188,"children":190},{"className":189},[],[191],{"type":55,"value":192},"packages-dev",{"type":55,"value":194},")",{"type":50,"tag":58,"props":196,"children":197},{},[198,203,205,210],{"type":50,"tag":118,"props":199,"children":201},{"className":200},[],[202],{"type":55,"value":123},{"type":55,"value":204}," reports the runtime only — it does ",{"type":50,"tag":64,"props":206,"children":207},{},[208],{"type":55,"value":209},"not",{"type":55,"value":211}," return package versions. Use\nComposer for those.",{"type":50,"tag":72,"props":213,"children":215},{"id":214},"runtime-checks",[216],{"type":55,"value":217},"Runtime checks",{"type":50,"tag":219,"props":220,"children":221},"ol",{},[222,264],{"type":50,"tag":223,"props":224,"children":225},"li",{},[226,238,240,246,248,254,256,262],{"type":50,"tag":64,"props":227,"children":228},{},[229,231,236],{"type":55,"value":230},"Start with the ",{"type":50,"tag":118,"props":232,"children":234},{"className":233},[],[235],{"type":55,"value":123},{"type":55,"value":237}," tool",{"type":55,"value":239}," for PHP version, OS, OS family, and loaded\nextensions — prefer it over ",{"type":50,"tag":118,"props":241,"children":243},{"className":242},[],[244],{"type":55,"value":245},"php -v",{"type":55,"value":247},", ",{"type":50,"tag":118,"props":249,"children":251},{"className":250},[],[252],{"type":55,"value":253},"php -m",{"type":55,"value":255},", or ",{"type":50,"tag":118,"props":257,"children":259},{"className":258},[],[260],{"type":55,"value":261},"uname",{"type":55,"value":263},".",{"type":50,"tag":223,"props":265,"children":266},{},[267,272,274,279],{"type":50,"tag":64,"props":268,"children":269},{},[270],{"type":55,"value":271},"Confirm a required extension is loaded",{"type":55,"value":273}," before blaming the code. If it is absent\nfrom ",{"type":50,"tag":118,"props":275,"children":277},{"className":276},[],[278],{"type":55,"value":123},{"type":55,"value":280},", the fix is an environment\u002Fconfiguration change, not a code change.",{"type":50,"tag":72,"props":282,"children":284},{"id":283},"resolving-package-versions",[285],{"type":55,"value":286},"Resolving package versions",{"type":50,"tag":58,"props":288,"children":289},{},[290,296,298,304,306,311,313,318],{"type":50,"tag":118,"props":291,"children":293},{"className":292},[],[294],{"type":55,"value":295},"composer.json",{"type":55,"value":297}," declares ",{"type":50,"tag":299,"props":300,"children":301},"em",{},[302],{"type":55,"value":303},"constraints",{"type":55,"value":305}," (what is allowed); ",{"type":50,"tag":118,"props":307,"children":309},{"className":308},[],[310],{"type":55,"value":176},{"type":55,"value":312}," records what is\n",{"type":50,"tag":299,"props":314,"children":315},{},[316],{"type":55,"value":317},"actually installed",{"type":55,"value":319},". For \"what is really running\", trust the lock, not the constraint.",{"type":50,"tag":321,"props":322,"children":323},"ul",{},[324,342,359,375],{"type":50,"tag":223,"props":325,"children":326},{},[327,332,334,340],{"type":50,"tag":64,"props":328,"children":329},{},[330],{"type":55,"value":331},"One package:",{"type":55,"value":333}," ",{"type":50,"tag":118,"props":335,"children":337},{"className":336},[],[338],{"type":55,"value":339},"composer show symfony\u002Fconsole",{"type":55,"value":341}," → installed version plus details.",{"type":50,"tag":223,"props":343,"children":344},{},[345,350,351,357],{"type":50,"tag":64,"props":346,"children":347},{},[348],{"type":55,"value":349},"A family:",{"type":55,"value":333},{"type":50,"tag":118,"props":352,"children":354},{"className":353},[],[355],{"type":55,"value":356},"composer show 'symfony\u002Fai-*'",{"type":55,"value":358}," → every matching package and its version.",{"type":50,"tag":223,"props":360,"children":361},{},[362,367,368,374],{"type":50,"tag":64,"props":363,"children":364},{},[365],{"type":55,"value":366},"Machine-readable:",{"type":55,"value":333},{"type":50,"tag":118,"props":369,"children":371},{"className":370},[],[372],{"type":55,"value":373},"composer show --format=json symfony\u002Fconsole",{"type":55,"value":263},{"type":50,"tag":223,"props":376,"children":377},{},[378,383,385,391,393,398,400,405,407,413],{"type":50,"tag":64,"props":379,"children":380},{},[381],{"type":55,"value":382},"No Composer binary, or you want the raw record:",{"type":55,"value":384}," look the package up by ",{"type":50,"tag":118,"props":386,"children":388},{"className":387},[],[389],{"type":55,"value":390},"name",{"type":55,"value":392}," under\n",{"type":50,"tag":118,"props":394,"children":396},{"className":395},[],[397],{"type":55,"value":184},{"type":55,"value":399}," in ",{"type":50,"tag":118,"props":401,"children":403},{"className":402},[],[404],{"type":55,"value":176},{"type":55,"value":406}," and read its ",{"type":50,"tag":118,"props":408,"children":410},{"className":409},[],[411],{"type":55,"value":412},"version",{"type":55,"value":414}," field — do not load the whole lock\nfile into context.",{"type":50,"tag":58,"props":416,"children":417},{},[418,420,426,428,434],{"type":55,"value":419},"Monorepo \u002F path-repo note: locally linked packages (for example symlinked ",{"type":50,"tag":118,"props":421,"children":423},{"className":422},[],[424],{"type":55,"value":425},"symfony\u002Fai-*",{"type":55,"value":427},"\nin this repository) report ",{"type":50,"tag":118,"props":429,"children":431},{"className":430},[],[432],{"type":55,"value":433},"dev-main",{"type":55,"value":435}," or a path reference instead of a semver tag — that\nis the working copy, not a released version.",{"type":50,"tag":72,"props":437,"children":439},{"id":438},"diagnosing-a-version-mismatch",[440],{"type":55,"value":441},"Diagnosing a version mismatch",{"type":50,"tag":219,"props":443,"children":444},{},[445,466,492,497],{"type":50,"tag":223,"props":446,"children":447},{},[448,450,456,458,464],{"type":55,"value":449},"Identify the package behind the failing API — the namespace usually maps to it\n(",{"type":50,"tag":118,"props":451,"children":453},{"className":452},[],[454],{"type":55,"value":455},"Symfony\\Component\\Console\\…",{"type":55,"value":457}," → ",{"type":50,"tag":118,"props":459,"children":461},{"className":460},[],[462],{"type":55,"value":463},"symfony\u002Fconsole",{"type":55,"value":465},").",{"type":50,"tag":223,"props":467,"children":468},{},[469,471,476,478,484,486,491],{"type":55,"value":470},"Read the ",{"type":50,"tag":64,"props":472,"children":473},{},[474],{"type":55,"value":475},"installed",{"type":55,"value":477}," version with ",{"type":50,"tag":118,"props":479,"children":481},{"className":480},[],[482],{"type":55,"value":483},"composer show \u003Cpackage>",{"type":55,"value":485}," (or from ",{"type":50,"tag":118,"props":487,"children":489},{"className":488},[],[490],{"type":55,"value":176},{"type":55,"value":465},{"type":50,"tag":223,"props":493,"children":494},{},[495],{"type":55,"value":496},"Compare it against the version the code expects: a method or argument added in a newer\nminor, or removed\u002Frenamed in a newer major, is the classic signature.",{"type":50,"tag":223,"props":498,"children":499},{},[500,502],{"type":55,"value":501},"Report the gap precisely — name the package, the installed version, and the required\none: ",{"type":50,"tag":299,"props":503,"children":504},{},[505],{"type":55,"value":506},"\"symfony\u002Fconsole is 6.4 (installed), but the code calls a 7.1 API.\"",{"type":50,"tag":72,"props":508,"children":510},{"id":509},"rules",[511],{"type":55,"value":512},"Rules",{"type":50,"tag":321,"props":514,"children":515},{},[516,550,562],{"type":50,"tag":223,"props":517,"children":518},{},[519,521,526,528,534,536,541,543,548],{"type":55,"value":520},"Reach for ",{"type":50,"tag":118,"props":522,"children":524},{"className":523},[],[525],{"type":55,"value":123},{"type":55,"value":527}," and ",{"type":50,"tag":118,"props":529,"children":531},{"className":530},[],[532],{"type":55,"value":533},"composer show",{"type":55,"value":535}," first; they are cheaper and more structured\nthan reading ",{"type":50,"tag":118,"props":537,"children":539},{"className":538},[],[540],{"type":55,"value":176},{"type":55,"value":542}," or ",{"type":50,"tag":118,"props":544,"children":546},{"className":545},[],[547],{"type":55,"value":253},{"type":55,"value":549}," wholesale.",{"type":50,"tag":223,"props":551,"children":552},{},[553,555,560],{"type":55,"value":554},"Report only the ",{"type":50,"tag":299,"props":556,"children":557},{},[558],{"type":55,"value":559},"one or two",{"type":55,"value":561}," facts that change the diagnosis (e.g. \"ext-intl is not\nloaded\", \"symfony\u002Fconsole is 6.4, the code uses a 7.1 API\") — never the full extension\ndump or the entire lock file.",{"type":50,"tag":223,"props":563,"children":564},{},[565,567,572,574,580,582,588,590,596],{"type":55,"value":566},"Never run state-changing commands. ",{"type":50,"tag":118,"props":568,"children":570},{"className":569},[],[571],{"type":55,"value":533},{"type":55,"value":573}," is read-only; ",{"type":50,"tag":118,"props":575,"children":577},{"className":576},[],[578],{"type":55,"value":579},"composer require",{"type":55,"value":581},",\n",{"type":50,"tag":118,"props":583,"children":585},{"className":584},[],[586],{"type":55,"value":587},"composer update",{"type":55,"value":589},", and ",{"type":50,"tag":118,"props":591,"children":593},{"className":592},[],[594],{"type":55,"value":595},"composer install",{"type":55,"value":597}," are not. This skill is read-only inspection.",{"items":599,"total":29},[600],{"slug":4,"name":4,"fn":5,"description":6,"org":601,"tags":602,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[603,604,605,606],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":13,"slug":14,"type":15},{"items":608,"total":29},[609],{"slug":4,"name":4,"fn":5,"description":6,"org":610,"tags":611,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[612,613,614,615],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":13,"slug":14,"type":15}]