From sauce
Use when reviewing a project's public surface for implementation details that leaked through. Triggers on: leaky abstraction, implementation detail exposed, coupling to dependency, file extension choice, config key naming, API surface review, public interface audit, dependency name in user-facing surface, internal detail leaked, would this break if we swapped libraries
How this skill is triggered — by the user, by Claude, or both
Slash command
/sauce:reviewing-abstraction-boundariesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Identify where internal implementation details have leaked through to the public surface of a project. The goal: your users should never need to know or care which libraries, engines, or data structures you use internally.
Identify where internal implementation details have leaked through to the public surface of a project. The goal: your users should never need to know or care which libraries, engines, or data structures you use internally.
Core principle: If you can't swap an internal dependency without changing something your users touch, you've found a leaked abstraction.
For each public surface, ask:
If I replaced [internal dependency] with a different one, would my users need to change anything?
If yes, you've found a leak. The severity depends on how many users are affected and how hard migration would be.
| Surface | Example leak | What it should be |
|---|---|---|
| File extensions | .tera (exposes template engine) | .die (project's own concept) |
| Config keys | jinja_options | template_options |
| CLI flags | --postgres-host | --db-host |
| Error messages | "Tera syntax error on line 5" | "Template syntax error on line 5" |
| API responses | {"orm_id": 42} | {"id": 42} |
| Directory names | migrations/diesel/ | migrations/ |
| Environment vars | REDIS_URL (when it's "the cache") | CACHE_URL |
| Documentation | "Uses Jinja2 syntax" (when engine could change) | "Uses template syntax (powered by Jinja2)" |
Not every mention of a dependency is a leak. REDIS_URL is fine if Redis is a deliberate, user-chosen infrastructure component. It's a leak when Redis is an implementation detail of your caching layer that users shouldn't need to know about.
Fix now (high blast radius, grows over time):
Fix soon (moderate blast radius):
Note for later (low blast radius):
The key factor: how many instances accumulate over time? A config key is set once. A file extension is used on every template file in every template repo. The file extension is more urgent.
.tera files is easy. A thousand is a migration project.npx claudepluginhub raiderrobert/sauce --plugin sauceDetects leaky abstractions in PHP codebases including interface implementation details, framework (Symfony/Laravel/Doctrine) leakage into domain, concrete returns from abstract methods, and infrastructure concerns.
Audits entire codebase for structural quality, file sprawl, thin wrappers, leaked logic, spaghetti growth, and dependency freshness via context7. Encourages code-judo simplifications.
Discovers architectural friction — shallow modules, god files, duplication, coupling — and proposes structural refactors with competing interface options and a project-local RFC.