brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Apply SOLID principles and design patterns to backend code with judgment and restraint. Use this skill whenever the user asks to refactor, review, clean up, restructure, or improve the design of backend code (services, APIs, domain logic, data access, handlers, jobs) — or
Claude Code
$ npx -y skills add FernandoJRR/solidifier --skill solidifier --agent claude-code
Codex
$ npx skills add FernandoJRR/solidifier --skill solidifier -a codex -y
Cursor
$ npx skills add FernandoJRR/solidifier --skill solidifier -a cursor -y
Gemini CLI
$ npx skills add FernandoJRR/solidifier --skill solidifier -a gemini-cli -y
GitHub Copilot
$ npx skills add FernandoJRR/solidifier --skill solidifier -a github-copilot -y
OpenCode
$ npx skills add FernandoJRR/solidifier --skill solidifier -a opencode -y
Windsurf
$ npx skills add FernandoJRR/solidifier --skill solidifier -a windsurf -y
name: solidifier description: Apply SOLID principles and design patterns to backend code with judgment and restraint. Use this skill whenever the user asks to refactor, review, clean up, restructure, or improve the design of backend code (services, APIs, domain logic, data access, handlers, jobs) — or mentions SOLID, design patterns, coupling, separation of concerns, testability, or "this code is hard to change/test." Also use when generating new backend modules that should be well-structured. Works in any backend language (Python, TypeScript/Node, Java, Go, C#, etc.). It scopes changes to specified parts of the codebase and reads a configurable rigor level so the depth of refactoring matches what the user wants.
This skill guides the application of SOLID principles and design patterns to backend codebases. Its job is not to maximize the number of principles and patterns visible in the code — it is to make code **easier to understand and cheaper to change**, using SOLID and patterns *only where they pay for themselves*.
The user provides backend code (a file, module, service, or a target area) and wants it improved, reviewed, or built well. They may also specify how invasive the work should be.
SOLID and design patterns are means, not ends. The goal is always the same: code that a competent engineer can read, reason about, test, and modify without fear. Before introducing *any* abstraction, interface, or pattern, it must earn its place by reducing real, present complexity or absorbing a real, likely-to-occur axis of change.
The most common failure mode in backend design is **over-engineering**: interfaces with a single permanent implementation, factories that wrap a single constructor, strategy hierarchies for variation that does not exist, layers of indirection that hide logic rather than clarify it. This is "design slop" and it is just as bad as tangled spaghetti — sometimes worse, because it looks principled.
Two rules that override everything else:
If a refactor adds more indirection than it removes complexity, **do not do it** — explain why instead.
1. **Read the configuration** (see `references/configuration.md`). Look for a `.solidifier.json` (or `solidifier` key in the project config) in the target area or project root. If none exists, use the defaults below and mention that the user can create one to tune behavior. The config sets the rigor level, the scope, and any principle/pattern toggles.
2. **Scope the work.** Apply changes *only* to the files, directories, or modules the user named or the config's `scope` globs cover. Do not refactor adjacent code, do not reorganize the whole project, and do not rename things outside the target unless required for the change to compile. State the scope you're operating on before making changes.
3. **Diagnose before prescribing.** Read the target code and identify *actual* design problems — name the specific SOLID violation or the specific smell, and say what concrete pain it causes (hard to test, change ripples, duplicated logic, etc.). A principle is not violated just because the code is simple. Skip code that is already fine; "already well-structured, no change needed" is a valid and valuable outcome.
4. **Apply with restraint, matched to the rigor level.** For each problem worth fixing, choose the lightest intervention that resolves it. Prefer extracting a function over a class, a class over an interface, an interface over a pattern, a known pattern over a bespoke framework. Honor the configured rigor level (below).
5. **Justify every change.** For each refactor, state in one or two sentences: which principle/pattern, what problem it fixes, and what it costs. If you introduced an abstraction, name the second concrete use case that justifies it. If you can't name one, reconsider.
6. **Preserve behavior.** Refactoring must not change observable behavior. Keep public contracts stable unless the user asked otherwise. If tests exist, they must still pass; if they don't, note which behaviors a test should pin down.
The dial controls **how invasive the work is and how high the justification bar sits** — not how many patterns to cram in. Restraint applies at every level. Default is `conservative`.
There is intentionally no "ma
A coding-agent skill that applies SOLID principles and design patterns to backend code — with judgment and restraint. The goal is not to maximize the number of principles or patterns in the code.
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.