sandermuller/boost-core
Sync AI agent config for any PHP project. Author skills, guidelines, and commands once in .ai/ and boost-core publishes them to ten agents, with Composer skill packages, tag scoping, and never clobbering hand-written files.
Architecture fit. Unchanged in principle, and now better evidenced. boost-core remains a source-of-truth compiler sitting in the developer-experience layer: authors write skills, guidelines, and commands once in .ai/, and the package fans them out to ten agent-specific layouts (Claude Code, Cursor, Copilot, Codex, Gemini, Junie, Kiro, OpenCode, Amp, Antigravity). 1.13.0 confirms the pattern extends to a second target dimension beyond agent format — output scope — with project scope and user scope (--scope=user) now both produced from the same content model. The framework-free, no-runtime-dependency posture still holds, and remains the strongest architectural signal: the package can serve Laravel apps, Symfony services, legacy PHP, and non-PHP repos alike. The new ~/.boost/user-scope.php selector file is architecturally coherent — it puts per-machine curation under an explicit declarative config rather than implicit globbing — but it does introduce a second, unversioned configuration surface that is not governed by the repo. That is a legitimate design choice for personal preferences; it is not a place for team policy.
Integration feasibility. Confirmed feasible and now materially less speculative. The release notes resolve several previously open mechanical questions: the entry point is boost sync with a --scope flag, there is a --check mode (used to predict skill-name clashes), sync is idempotent enough to be run repeatedly (syncUserScopeOnce() re-syncs after config edits), and there is an auto-sync helper (BoostAutoSync) suggesting first-class hook integration. Ownership semantics are now explicit: user-scope sync refuses to write over a file boost does not own and refuses to write through a symlink at a target path. That is exactly the guardrail the previous assessment flagged as missing for the silent-overwrite risk, and it is a strong signal of maintainer care. Integration cost is still composer require --dev, a config entry, and a sync invocation, with the blast radius of a bad sync being a diff rather than an incident.
Technical risk. Maturity remains the dominant risk — the community and dependent-base picture has not changed — but the staleness risk has receded. Two consecutive releases (1.12.1 → 1.13.0) with a structured changelog and a dedicated UPGRADING.md anchor indicate an active, disciplined cadence, and the date-anomalous release metadata flagged previously looks increasingly like a data artifact rather than abandonment. What 1.13.0 does establish is the shape of the risk we actually carry: the package will make breaking changes to generated paths and identifiers when the old layout is functionally broken, and it expects you to read migration notes before syncing. Here the change is a genuine bug fix — nested ~/.{agent}/skills/<vendor>__<package>/<skill>/ paths were invisible to Claude Code, so most user-scope skills silently did nothing. That is a correct call, but it means "we pinned and forgot" is a real failure mode, and it means generated-path stability is coupled to third-party agent behavior we do not control. Secondary risks narrow: silent overwrite is now defended against for user scope; skill-name collisions across global packages are detected and reported deterministically (first package by name wins, second reports the clash owner). Remaining supply-chain exposure from running a near-zero-adoption dev dependency in CI is unchanged and still argues for exact pinning.
Key questions.
-user suffix prevents a user-scope skill from shadowing a project skill of the same name — is the reverse also true, and what happens when a project skill and a user skill are both intended to apply?UPGRADING.md breaking changes — are user-scope path layouts treated as semver-breaking, or does 1.13 being a minor release imply generated paths are not covered by semver?--check cover project scope and drift, or only user-scope clash prediction? Can it be the basis of a single CI gate?Stack fit. Adopt as a require-dev dependency in the tooling layer only; never in a production autoload graph. It composes cleanly with pre-commit hooks, Composer scripts, and CI, and contends with no application constraints because it carries no runtime requirements. The scope decision now has two axes rather than one: repo-level .ai/ content (agent-agnostic, shareable across backend, frontend, and infrastructure repos, and therefore a candidate for an org-level convention) and user-scope publication (per-developer, per-machine, governed by ~/.boost/user-scope.php). Treat these as separate adoption decisions with separate governance — the repo-level content is a standard; the user-scope selector is a personal preference file that should not be centrally mandated.
Migration path. Repo-level migration is unchanged and reversible by construction: .ai/ is plain content we own, and every generated artifact can be deleted along with the dev dependency. For user scope, 1.13.0 introduces a real, if small, one-time migration. Sequence it deliberately: read UPGRADING.md#112--113 first, decide whether ~/.boost/user-scope.php is needed (only if globally installed packages publish more skills than a developer wants), then run the sync once and verify that the first-run reaping removed the old nested copies. Note the reaping is deliberately non-destructive — a nested file the developer edited is left behind — so plan a manual sweep for orphaned ~/.{agent}/skills/<vendor>__<package>/ directories, plus any leftover ~/.{agent}/skills/<package-basename>/ folders from the now-removed 0.3 → 0.4 migration. Also note the rename is not cosmetic: backticked skill names, slash commands, and relative skill links in .md files are rewritten, so any internal documentation that references skills by their old qualified names needs a grep and update. Keep the committed-output model as the default for project scope; it makes behavior observable in review.
Compatibility. Verify the supported PHP range against the oldest PHP we still run, and confirm behavior under Composer 2 with a committed lockfile. Because the package is framework-free, compatibility is almost entirely about PHP version and CI runner environment. Two new compatibility checks specific to this release: (a) confirm the reaping logic behaves correctly on case-sensitive Linux CI versus macOS dev machines, since skill names are now filesystem-visible identifiers and collisions across ten agent directories are a realistic failure mode; (b) confirm behavior on developer machines where ~/.{agent}/skills/ is itself a symlink or contains symlinked skills — the release refuses to write through symlinks at target paths, which is the right safety posture but means those developers will see silent no-ops and need to be told why.
Sequencing.
withAgents() to the two or three agents actually in use..ai/ (secrets, customer data, internal hostnames).CODEOWNERS entry for .ai/.--check can serve as the single check command.UPGRADING.md, run one sync, verify the reap, sweep orphans, and decide whether ~/.boost/user-scope.php is needed at all.Maintenance. The recurring cost remains content stewardship, and 1.13.0 adds a modest, well-signposted upgrade tax. Ten output directories still multiply review surface — a one-line guideline change produces ten file edits and invites rubber-stamping — so keep the dedicated .ai/ owner group, the "review at the source, not the diff" convention, and the runbook. New this release: maintain a short user-scope runbook covering the -user naming convention, the ~/.boost/user-scope.php selector, and the expectation that skill identifiers can be renamed between minor versions with automatic link rewriting. Pin to exact versions so upgrades are deliberate; the changelog-plus-UPGRADING.md discipline makes a deliberate upgrade cheap, but only if someone actually reads it.
Support. Still effectively self-support at this adoption level, but the trajectory is encouraging: consecutive releases, a documented upgrade path, and defensive engineering (ownership checks, symlink refusal, deterministic clash resolution, invalid-config-fails-closed with no reaping on error) are the behaviors of a maintainer who expects others to depend on this. MIT license still permits forking, the codebase appears small and readable, and the docs site plus llms.txt remain unusually good for agent-assisted troubleshooting. Keep the internal fork-or-vendor contingency documented in the adoption record with a named owner, and log the single-maintainer dependency as a tracked vendor risk. Downgrade the "abandonment" likelihood slightly; upgrade the "we get surprised by a breaking minor because nobody read the notes" likelihood.
Scaling. Scales linearly and cheaply: no service, no quota, no per-seat cost. The constraint is cognitive, not infrastructural. At ten-plus repos, distribute a shared .ai/ baseline as a private Composer package or submodule and let repos layer local additions rather than copy-pasting directories. Trim the agent list — ten agents is more than most teams read, and each one carried is exposure to format churn. User scope scales differently and worse: it is N developers × M globally installed packages, with the first-package-by-name-wins rule making the effective skill set machine-dependent. If a team standardizes on user-scope skills, the honest answer is that it becomes unmanaged per-machine state — either accept that, or push the content into project scope where it is versioned and reviewable.
Failure modes.
UPGRADING.md before every sync; make this a checklist item, not a virtue.~/.boost/user-scope.php to pin intent, and treat --check output as a required review artifact.~/.boost/user-scope.php — fails closed and reaps nothing, which is safe but means a typo silently blocks publication; validate after edits..ai/ as a public artifact; add a pre-commit secret scan and keep environment-specific values out.Ramp-up. Measured in hours for project scope, plus roughly thirty minutes per developer for the user-scope migration if they use it at all. Installation and first sync are trivial; the real time goes into the content taxonomy workshop and governance rules — realistically half a day for a team lead plus a short onboarding note. Because output is plain text and the tool is developer-facing, onboarding risk stays inside the engineering org and never reaches production availability or customer-facing behavior. Recommendation: pilot, do not standardize — the underlying problem (multi-agent config sprawl) is real, 1.13.0 is evidence of active and careful maintenance, and the opportunity score relative to maturity still supports investment. But two releases do not make a support guarantee, generated-path stability is not yet established as semver-protected, and the maintainer base remains one person. Pilot project scope first, run user scope as a separate opt-in experiment, and revisit the standardization decision at the next minor release.
How can I help you explore Laravel packages today?