/analyse-with-phpstan
Analyse PHP code with PHPStan via the playground API. Tests across all PHP versions (7.2–8.5) and reports errors grouped by version. Supports configuring level, strict rules, and bleeding edge.
Claude Code
$ npx -y skills add phpstan/phpstan --skill analyse-with-phpstan --agent claude-code
Codex
$ npx skills add phpstan/phpstan --skill analyse-with-phpstan -a codex -y
Cursor
$ npx skills add phpstan/phpstan --skill analyse-with-phpstan -a cursor -y
Gemini CLI
$ npx skills add phpstan/phpstan --skill analyse-with-phpstan -a gemini-cli -y
GitHub Copilot
$ npx skills add phpstan/phpstan --skill analyse-with-phpstan -a github-copilot -y
OpenCode
$ npx skills add phpstan/phpstan --skill analyse-with-phpstan -a opencode -y
Windsurf
$ npx skills add phpstan/phpstan --skill analyse-with-phpstan -a windsurf -y
SKILL.md
analyse-with-phpstan.SKILL.mdname: analyse-with-phpstan
description: Analyse PHP code with PHPStan via the playground API. Tests across all PHP versions (7.2–8.5) and reports errors grouped by version. Supports configuring level, strict rules, and bleeding edge.
argument-hint: <php-code-or-file>
disable-model-invocation: false
Analyse PHP code with PHPStan
Analyse PHP code using the PHPStan playground API at `https://api.phpstan.org/analyse`. This runs PHPStan across PHP versions 7.2–8.5 and returns errors for each version.
The code to analyse: `$ARGUMENTS`
Step 1: Prepare the code
Get the PHP code to analyse. If `$ARGUMENTS` is a file path, read the file contents. The code must start with `<?php`.
Step 2: Determine settings
Unless the user specified otherwise, use these defaults:
- **level**: `"10"` (strictest)
- **strictRules**: `false`
- **bleedingEdge**: `false`
- **treatPhpDocTypesAsCertain**: `true`
If the user asked for strict rules or bleeding edge, set those to `true`.
Step 3: Call the playground API
Submit the code via POST:
curl -s -X POST 'https://api.phpstan.org/analyse' \
-H 'Content-Type: application/json' \
-d '{
"code": "<PHP code, JSON-escaped>",
"level": "<level>",
"strictRules": <true|false>,
"bleedingEdge": <true|false>,
"treatPhpDocTypesAsCertain": <true|false>,
"saveResult": true
}'The code value must be properly JSON-escaped (escape quotes, backslashes, newlines).
Step 4: Parse the response
The response JSON contains:
- `versionedErrors` — array of objects, one per PHP version, each with:
- `phpVersion` — integer encoding: e.g. `80400` = PHP 8.4, `70400` = PHP 7.4
- `errors` — array of error objects with `message`, `line`, `identifier`, `tip` (optional), `ignorable`
- `id` — UUID for the saved result
Convert `phpVersion` integers to readable strings: `Math.floor(v / 10000)` `.` `Math.floor((v % 10000) / 100)`.
Step 5: Present results as markdown
Output the results in this format:
Playground link
`https://phpstan.org/r/<id>`
Settings used
**Level:** `<level>` | **Strict rules:** yes/no | **Bleeding edge:** yes/no
Errors
Group consecutive PHP versions that have identical errors (same messages, lines, and identifiers) into ranges. For example, if PHP 7.2–8.3 all report the same errors, show them as one group.
If all PHP versions report identical errors, show a single group:
**All PHP versions (no differences):**
| Line | Error | Identifier | |------|-------|------------| | 10 | `Parameter #1 $foo expects string, int given.` | `argument.type` |
If errors differ across versions, show separate groups:
**PHP 8.0 – 8.5:**
| Line | Error | Identifier | |------|-------|------------| | 10 | `Parameter #1 $foo expects string, int given.` | `argument.type` |
**PHP 7.2 – 7.4:**
No errors.
If there are no errors on any PHP version, say: **No errors found on any PHP version.**
Read more
name: analyse-with-phpstan description: Analyse PHP code with PHPStan via the playground API. Tests across all PHP versions (7.2–8.5) and reports errors grouped by version. Supports configuring level, strict rules, and bleeding edge. argument-hint: <php-code-or-file> disable-model-invocation: false
Analyse PHP code with PHPStan
Analyse PHP code using the PHPStan playground API at `https://api.phpstan.org/analyse`. This runs PHPStan across PHP versions 7.2–8.5 and returns errors for each version.
The code to analyse: `$ARGUMENTS`
Step 1: Prepare the code
Get the PHP code to analyse. If `$ARGUMENTS` is a file path, read the file contents. The code must start with `<?php`.
Step 2: Determine settings
Unless the user specified otherwise, use these defaults:
- **level**: `"10"` (strictest)
- **strictRules**: `false`
- **bleedingEdge**: `false`
- **treatPhpDocTypesAsCertain**: `true`
If the user asked for strict rules or bleeding edge, set those to `true`.
Step 3: Call the playground API
Submit the code via POST:
curl -s -X POST 'https://api.phpstan.org/analyse' \
-H 'Content-Type: application/json' \
-d '{
"code": "<PHP code, JSON-escaped>",
"level": "<level>",
"strictRules": <true|false>,
"bleedingEdge": <true|false>,
"treatPhpDocTypesAsCertain": <true|false>,
"saveResult": true
}'The code value must be properly JSON-escaped (escape quotes, backslashes, newlines).
Step 4: Parse the response
The response JSON contains:
- `versionedErrors` — array of objects, one per PHP version, each with:
- `phpVersion` — integer encoding: e.g. `80400` = PHP 8.4, `70400` = PHP 7.4
- `errors` — array of error objects with `message`, `line`, `identifier`, `tip` (optional), `ignorable`
- `id` — UUID for the saved result
Convert `phpVersion` integers to readable strings: `Math.floor(v / 10000)` `.` `Math.floor((v % 10000) / 100)`.
Step 5: Present results as markdown
Output the results in this format:
Playground link
`https://phpstan.org/r/<id>`
Settings used
**Level:** `<level>` | **Strict rules:** yes/no | **Bleeding edge:** yes/no
Errors
Group consecutive PHP versions that have identical errors (same messages, lines, and identifiers) into ranges. For example, if PHP 7.2–8.3 all report the same errors, show them as one group.
If all PHP versions report identical errors, show a single group:
**All PHP versions (no differences):**
| Line | Error | Identifier | |------|-------|------------| | 10 | `Parameter #1 $foo expects string, int given.` | `argument.type` |
If errors differ across versions, show separate groups:
**PHP 8.0 – 8.5:**
| Line | Error | Identifier | |------|-------|------------| | 10 | `Parameter #1 $foo expects string, int given.` | `argument.type` |
**PHP 7.2 – 7.4:**
No errors.
If there are no errors on any PHP version, say: **No errors found on any PHP version.**
Other skills on phpstan.
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about analyse-with-phpstan.
- Which coding agents can use analyse-with-phpstan?
- analyse-with-phpstan installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

