heyosseus/sloppy
Sloppy is a Laravel package by heyosseus that trims boilerplate and speeds up everyday development tasks with a simple, forgiving API. Drop it into any Laravel app to write less code and ship features faster.
Architecture fit
require-dev Composer package with a Laravel service provider and Artisan commands (sloppy:agents, etc.), plus a standalone vendor/bin/sloppy binary. Nothing is loaded in production request paths, so the blast radius of adoption is small and reversible.heyosseus/phpstan-sloppy (includes: vendor/heyosseus/phpstan-sloppy/extension.neon). This reuses the squiggles, baselines, and CI plumbing the team already has. Lowest-friction, highest-leverage.diff, ci), fix pass (fix — Rector + Pint), Pest expectations, CI annotation formats (GitHub/GitLab/SARIF), agent rulesets, hooks, and the MCP server. These are net-new surfaces and need their own review.vendor/bin/sloppy should be reserved for what PHPStan does not do: diff scoping, the fix pass, hooks, MCP.Integration feasibility
composer require --dev lines, a published config/sloppy.php, and one .neon include. The three artifacts a TPM should require the team to read before config work are sloppy rules (authoritative rule list), the config file (exclude, fail_on, architecture, SL301/SL303 layer suffixes), and a read-only scan --path=app.ci --format=github, --format=gitlab, --format=sarif. Paths are repository-root-relative, which matters for monorepos..claude/settings.json, .gemini/settings.json, .codex/hooks.json, and generated rulesets (CLAUDE.md, GEMINI.md, AGENTS.md). That is file mutation inside every developer's workspace — a policy question, not just a technical one.Technical risk
description.md describes an unrelated Eloquent seeder/faker package while every other source describes static analysis. Resolve package identity before security review or internal pitch — this is exactly the shape of a typosquat or a copy-paste metadata error, and it will be the first question a reviewer asks. Also verify the Last release: 2026-11-02 date against the actual tag; a future-dated release is a provenance question.sloppy.php that omitted fail_on or exclude now inherits them), SL501 fingerprints dropped line numbers (re-baseline required), and more code is analyzed (top-level functions, closures, extended base models). Any team that pins loosely and upgrades will see a pipeline stop.Client is not an HTTP client" all received fixes in 1.6 — evidence the rule surface is still settling.CLAUDE.md/GEMINI.md/AGENTS.md is not the effective instruction set in a Boost repo. Verify which one wins before assuming.Key questions
sloppy baseline, and is baseline regeneration a reviewed change or a reflex?/hooks, run from project root) fit the team's onboarding, or will it be silently skipped?Stack fit
sloppy fix — check whether that is additive or competing with an existing Pint/Rector configuration. fix will not overwrite a Rector config it did not write, and Pint runs only on a Laravel project or on changed files, which keeps it fast.--no-dev install path test.Migration path Three phases, each with a different risk profile:
sloppy rules, run scan --path=app, record the pre-existing debt count. Nothing blocks. Outputs are used to size the problem and pick exclude / layer suffixes.sloppy ci --format=<github|gitlab|sarif> into PR jobs with fail_on: none. Run sloppy diff --merge-base locally as the developer-facing view. Measure what actually fires.fail_on, add Pest expectations so "no new findings" is asserted in the suite developers already run, and only then turn on agent hooks for a pilot repo and a single host.The only "migration artifact" is the baseline. sloppy baseline records existing findings (notably SL501 suppressions) so legacy debt stops being reported; PHPStan baseline-growth detection separately stops the PHPStan baseline from silently absorbing new debt. Both need an owner and a review rule.
Compatibility
--allow-parse-errors where a partially broken tree should not fail the job.sloppy.php should be audited against the 1.6 schema before upgrade. A previously ignored option now either warns (unknown key, with "did you mean") or stops the run.mv-moved files, deleted files, and repos with no commits yet are handled as of 1.6. Validate on one monorepo repo before generalizing.agents install --host=gemini --host=codex is repeatable and additive; without --host it wires Claude Code only, as before. --local is unsupported for Gemini/Codex and will skip with a warning. agents uninstall --host=<x> gives scoped rollback.Sequencing
description.md mismatch, confirm the tag/binary surface).scan → rules audit → config (exclude, fail_on: none, layer suffixes).ci --format=… as advisory; two-week measurement window.diff --merge-base to the documented local pre-commit flow.sloppy fix --dry-run as the agent's "done" step, with --no-rector as the fallback.fail_on.Maintenance
CLAUDE.md/GEMINI.md/AGENTS.md via sloppy rules --format=… in the dependency-update script, and review baseline changes as PRs.exclude and layer suffixes will drift within a quarter.Support
--allow-parse-errors escape hatch, agents uninstall --host=… as scoped rollback, and a documented decision point on forking if upstream goes quiet.Scaling
diff/ci with --merge-base (already the default in ci) bound runtime to branch size rather than tree size. Full scan on a mature Laravel app will produce a wall of pre-existing findings — keep it out of the hot path after the initial baseline.watch polls and manipulates the terminal; it is a convenience, not a gate, and hooks explicitly skip the score to stay fast.fail_on decisions — plan the centralization before repo three, not repo ten.Failure modes
fail_on: none permanently. The two-week measurement window with fail_on: none is the mitigation, along with pruning exclude from observed data./hooks trust action and starting Codex from the project root, since hooks invoke php vendor/bin/sloppy from the session directory.SL501 baselines after the 1.6 fingerprint change: baselined entries reappear once until sloppy baseline is re-run.Ramp-up
sloppy rules, understand the three config knobs, learn the diff --merge-base local flow, learn fix --dry-run (note: exits 0 even with pending changes).How can I help you explore Laravel packages today?