Set up your project
Richter is accurate only once it knows your app's shape: which subsystems are entry surfaces, which helpers dispatch jobs, your real base branch, your frontend stack. You can set that up two ways.
With an agent (recommended)
Richter ships two invoke-only skills.
/richter-setup (or ask your agent to "set up Richter") inspects the project, proposes config/richter.php, and, only if you say yes, scaffolds a CI comment workflow and registers the MCP server in .mcp.json. It shows you every edit before writing it.
/richter-review reviews the current branch graph-first: it runs the report, triages the reached entry points (unexpected reach, missing test references, security and gate annotations), walks the findings, and closes with an advisory verdict. It recommends changes and leaves the decision with you.
To make the skills available:
- With boost-core: add
sandermuller/richtertowithAllowedVendors([...])in yourboost.php, then runvendor/bin/boost sync. - With laravel/boost: they are discovered as a third-party AI package. An existing install may need
boost:updateor a package selection.
Or paste these prompts to any agent
Two prompts, so CI stays opt-in. The first one points the agent at the same checklist the /richter-setup skill follows, which is on disk after composer require. One list, so the two routes cannot drift apart.
Configure
Set up Richter for this Laravel project. Read
vendor/sandermuller/richter/resources/boost/skills/richter-setup/SKILL.mdand follow its configuration checklist. It lists every key worth setting and how to decide each one. Inspect the code, then propose the edits toconfig/richter.php: show me each change and get my OK, and write nothing unasked. Also flag any Laravel Brain config the checklist names that would fix a mis-classified route at the source.
Add the CI advisory comment
Add a GitHub Actions workflow that posts the Richter report as an advisory PR comment. First check whether Richter is already wired into an existing workflow and integrate there instead of adding a duplicate. Make the whole job non-blocking, least-privilege (
permissions: contents: read, pull-requests: write), triggered onpull_request(notpull_request_target), checkout withfetch-depth: 0, runphp artisan richter:detect-changes --base=<PR base sha> --markdownand post it as a sticky comment. Show me the file before creating it.