{"id":51540561,"url":"https://github.com/sandermuller/project-boost-php","last_synced_at":"2026-07-09T13:01:45.811Z","repository":{"id":358601536,"uuid":"1241811147","full_name":"SanderMuller/project-boost-php","owner":"SanderMuller","description":"AI agent skills for PHP application developers. Patterns, conventions, and guidance for non-package projects.","archived":false,"fork":false,"pushed_at":"2026-06-21T21:03:03.000Z","size":1309,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-23T06:04:28.869Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SanderMuller.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-17T21:01:29.000Z","updated_at":"2026-06-07T07:55:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/SanderMuller/project-boost-php","commit_stats":null,"previous_names":["sandermuller/project-boost","sandermuller/project-boost-php"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/SanderMuller/project-boost-php","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SanderMuller%2Fproject-boost-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SanderMuller%2Fproject-boost-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SanderMuller%2Fproject-boost-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SanderMuller%2Fproject-boost-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SanderMuller","download_url":"https://codeload.github.com/SanderMuller/project-boost-php/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SanderMuller%2Fproject-boost-php/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35299763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-09T02:00:07.329Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-09T13:01:44.462Z","updated_at":"2026-07-09T13:01:45.802Z","avatar_url":"https://github.com/SanderMuller.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# project-boost-php\n\n[![Latest Version on Packagist](https://img.shields.io/packagist/v/sandermuller/project-boost-php.svg?style=flat-square)](https://packagist.org/packages/sandermuller/project-boost-php)\n[![GitHub Tests Action Status](https://img.shields.io/github/actions/workflow/status/sandermuller/project-boost-php/run-tests.yml?branch=main\u0026label=tests\u0026style=flat-square)](https://github.com/sandermuller/project-boost-php/actions/workflows/run-tests.yml)\n[![Total Downloads](https://img.shields.io/packagist/dt/sandermuller/project-boost-php.svg?style=flat-square)](https://packagist.org/packages/sandermuller/project-boost-php)\n[![License](https://img.shields.io/packagist/l/sandermuller/project-boost-php.svg?style=flat-square)](LICENSE)\n[![Laravel Boost](https://badge.laravel.cloud/boost-badge.svg?style=flat-square)](https://github.com/laravel/boost)\n\nAI agent skills for PHP application developers — **any framework, or none**. Two framework-agnostic skills (dependency injection, legacy coexistence) plus a `foundation` guideline that frames the codebase as an application, not a package. Rides the [`sandermuller/boost-core`](https://github.com/sandermuller/boost-core) sync engine; ships no code of its own.\n\n![overview image](overview.png)\n\n\u003e For PHP application developers on any framework or none. [`laravel/boost`](https://github.com/laravel/boost) is Laravel-only; `project-boost-php` covers Symfony, plain-PHP, and framework-agnostic apps. Building a Laravel app? Install [`sandermuller/project-boost-laravel`](https://github.com/sandermuller/project-boost-laravel) instead — it layers `laravel/boost` MCP coexistence on the same nine-agent fanout.\n\n## Which package fits your role?\n\n| You're building                          | Install                                                                                       | Ships                                                                                                |\n|------------------------------------------|-----------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|\n| **A PHP application (not a package)**    | **[`sandermuller/project-boost-php`](https://github.com/sandermuller/project-boost-php)**             | **App-dev skills: dependency injection, legacy coexistence + the `foundation` guideline  ← you are here** |\n| A Laravel application                    | [`sandermuller/project-boost-laravel`](https://github.com/sandermuller/project-boost-laravel) | `laravel/boost` MCP coexistence + nine-agent fanout + tag filter + remote skills                     |\n| A framework-agnostic Composer package    | [`sandermuller/package-boost-php`](https://github.com/sandermuller/package-boost-php)         | Package-author skills + `lean` / `gitattributes` commands                                            |\n| A Laravel package                        | [`sandermuller/package-boost-laravel`](https://github.com/sandermuller/package-boost-laravel) | Laravel-package skills + `McpJsonEmitter`                                                            |\n| Your own skill bundle, or custom tooling | [`sandermuller/boost-core`](https://github.com/sandermuller/boost-core)                       | The sync engine. You supply the skills.                                                              |\n\n## What you get\n\n**Two skills** — universally-applicable PHP practices, not tied to any architecture.\n\n| Skill                  | Triggers when                                                                              |\n|------------------------|--------------------------------------------------------------------------------------------|\n| `dependency-injection` | Constructor injection, container hygiene, avoiding service locators.                       |\n| `legacy-coexistence`   | Adding modern PHP (typed properties, readonly, enums) to a 7.x codebase incrementally.     |\n\n**One guideline** — `foundation`. Framework-agnostic application-developer framing: what an app codebase is, how its edges form its real contract, and how to work in it. Always shipped, no tag required.\n\n\u003e Want architecture-specific guidance (DDD layering, repositories, domain modeling)? Those shipped through 0.x but were dropped at 1.0 to keep the default framework-agnostic — copy any you want into your own `.ai/skills/\u003cname\u003e/SKILL.md` (host copies shadow vendor skills), or exclude a shipped skill via `-\u003ewithExcludedSkills(['sandermuller/project-boost-php:\u003cname\u003e'])`.\n\n## How it compares to `laravel/boost`\n\n|                                          | `laravel/boost`                                  | `project-boost-php`                                                              |\n|------------------------------------------|--------------------------------------------------|------------------------------------------------------------------------------|\n| Framework scope                          | Laravel only                                     | **any PHP** — Symfony, plain-PHP, framework-agnostic                         |\n| Skill set                                | Laravel runtime guidelines (Eloquent, Blade, …)  | framework-agnostic app practices (DI, legacy coexistence) + foundation       |\n| Agent reach                              | Laravel apps only (broad agent set)              | **non-Laravel apps too** — same agent set via `boost-core`                   |\n| Tag filter / remote skills / allowlist   | —                                                | via `boost-core` (`withTags()`, `withRemoteSkills()`, `withAllowedVendors()`)|\n| MCP server + Laravel docs API            | ✅                                                | Not in scope; use `laravel/boost` directly in Laravel apps                   |\n\nBoth can sit in the same Laravel app via [`project-boost-laravel`](https://github.com/sandermuller/project-boost-laravel) — the family member designed for that combo.\n\n## Install\n\n```bash\ncomposer require --dev sandermuller/project-boost-php\n```\n\nPHP 8.3+. Pulls in [`sandermuller/boost-core`](https://github.com/sandermuller/boost-core) transitively.\n\n## First run\n\n```bash\nvendor/bin/boost install   # interactive picker — agents + vendor allowlist; writes boost.php\nvendor/bin/boost sync      # fan out skills + guideline to selected agents\n```\n\nThe five skills land in your selected agent skill directories (`.claude/skills/`, `.cursor/skills/`, …); `foundation` merges into each agent's guidelines file (`CLAUDE.md`, `AGENTS.md`, …). Generated dirs are added to `.gitignore` automatically. Edit `.ai/` only — the fan-out regenerates on every sync.\n\n## `boost.php`\n\nMinimal:\n\n```php\n\u003c?php declare(strict_types=1);\n\nuse SanderMuller\\BoostCore\\Config\\BoostConfig;\nuse SanderMuller\\BoostCore\\Enums\\Agent;\n\nreturn BoostConfig::configure()\n    -\u003ewithAgents([Agent::CLAUDE_CODE, Agent::CURSOR, Agent::CODEX])\n    -\u003ewithAllowedVendors(['sandermuller/project-boost-php']);\n```\n\n`withAllowedVendors()` is explicit — a dependency's skills sync only if its package name is listed. Full `BoostConfig` surface is documented in [`boost-core`'s README](https://github.com/sandermuller/boost-core#readme).\n\n## Where do the skills come from?\n\n`project-boost-php`'s two are one source. Skill sources stack:\n\n1. **Hand-authored** in your project's `.ai/skills/` folder. boost-core picks them up automatically; host overrides shadow vendor-shipped versions of the same name.\n2. **Composer-installed catalogs** that ship `resources/boost/skills/`. This package is one example. [`sandermuller/boost-skills`](https://github.com/sandermuller/boost-skills) is another — Sander's personal mix, shared as an illustration of the pattern. Anyone can publish their own.\n3. **External non-Composer sources** via `withRemoteSkills()`. GitHub-published `.skill` bundles or single-skill repos. No Composer required.\n\n(`laravel/boost`'s bundled Laravel skills are a fourth source in Laravel apps — surface them via [`project-boost-laravel`](https://github.com/sandermuller/project-boost-laravel).)\n\n`withAllowedVendors()` gates Composer-scanned vendors (source 2) only. `withTags()` filters sources 2 and 3. Host skills (source 1) bypass both — your project authored them, so the engine treats them as canonical and applies neither filter.\n\n## Coexistence\n\n- **Laravel application?** Install [`sandermuller/project-boost-laravel`](https://github.com/sandermuller/project-boost-laravel) instead. It coexists with `laravel/boost` (MCP server + Laravel docs API) and layers in the family's filtering controls + nine-agent fanout.\n- **Composer package, not an application?** Install [`sandermuller/package-boost-php`](https://github.com/sandermuller/package-boost-php). The five skills here assume an app — the `foundation` framing diverges from package-author rules.\n- **Mixed stack?** Allowlist multiple sources in `boost.php`. Host overrides in `.ai/skills/` shadow vendor copies of the same name; collisions across vendors surface as sync errors with a one-line resolution hint.\n\n## Auto-sync on `composer install`\n\nWire the callback into your own project's `composer.json` so a `composer install` / `composer update` re-syncs:\n\n```json\n\"scripts\": {\n    \"post-install-cmd\": [\"SanderMuller\\\\BoostCore\\\\Scripts\\\\BoostAutoSync::run\"],\n    \"post-update-cmd\":  [\"SanderMuller\\\\BoostCore\\\\Scripts\\\\BoostAutoSync::run\"]\n}\n```\n\n`BOOST_SKIP_AUTOSYNC=1` disables the callback. Full detail in [`boost-core`'s automating-the-sync section](https://github.com/sandermuller/boost-core#automating-the-sync).\n\n## Testing\n\n```bash\ncomposer test\n```\n\nPest suite — sanity tests on the shipped skill + guideline set: skills parse with a `name` matching the filename and a non-empty `description`; guidelines are frontmatter-free and open with a Markdown heading.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandermuller%2Fproject-boost-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsandermuller%2Fproject-boost-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandermuller%2Fproject-boost-php/lists"}