engineering-paved-path
Onion backend architecture and frontend UI structure skills, shared by architecture-review and sdd-engineering.
Tags
Compatibility
- Claude Code ≥ 2.1.318
- Windows
- macOS
- verified on 2.1.318
Install
In a Claude Code session
User
Run in a Claude Code session:
/plugin install engineering-paved-path --marketplace lindigo-design/devdigest-marketplaceThe first time, Claude Code asks before it adds the marketplace. Then the plugin's details open; nothing is installed yet.
Choose Install for you (user scope)
Project
Run in a Claude Code session:
/plugin install engineering-paved-path --marketplace lindigo-design/devdigest-marketplaceThe first time, Claude Code asks before it adds the marketplace. Then the plugin's details open; nothing is installed yet.
Choose Install for all collaborators on this repository (project scope)
Then, in your terminal, record the marketplace in the repository for collaborators (running it again is harmless):
claude plugin marketplace add lindigo-design/devdigest-marketplace --scope project
The commands write this .claude/settings.json:
{
"enabledPlugins": {
"engineering-paved-path@lindigo-devdigest": true
},
"extraKnownMarketplaces": {
"lindigo-devdigest": {
"source": {
"source": "github",
"repo": "lindigo-design/devdigest-marketplace"
}
}
}
}Commit it:
git add .claude/settings.jsonCollaborators who trust the folder get the marketplace and the plugin. These plugins come from the marketplace repository itself, so they load without a separate install. Each collaborator needs Claude Code ≥ 2.1.318.
If Claude Code reports the plugin as enabled but not installed, run this once:
claude plugin install engineering-paved-path@lindigo-devdigest --scope projectLocal
Run in a Claude Code session:
/plugin install engineering-paved-path --marketplace lindigo-design/devdigest-marketplaceThe first time, Claude Code asks before it adds the marketplace. Then the plugin's details open; nothing is installed yet.
Choose Install for you, in this repo only (local scope)
.claude/settings.local.json is personal and is not committed.
In your terminal
User
Run in your terminal:
claude plugin install engineering-paved-path --marketplace lindigo-design/devdigest-marketplaceRestart Claude Code, or run /reload-plugins in an open session, to load it.
Project
Run in your terminal:
claude plugin marketplace add lindigo-design/devdigest-marketplace --scope projectclaude plugin install engineering-paved-path@lindigo-devdigest --scope projectRestart Claude Code, or run /reload-plugins in an open session, to load it.
The commands write this .claude/settings.json:
{
"enabledPlugins": {
"engineering-paved-path@lindigo-devdigest": true
},
"extraKnownMarketplaces": {
"lindigo-devdigest": {
"source": {
"source": "github",
"repo": "lindigo-design/devdigest-marketplace"
}
}
}
}Commit it:
git add .claude/settings.jsonCollaborators who trust the folder get the marketplace and the plugin. These plugins come from the marketplace repository itself, so they load without a separate install. Each collaborator needs Claude Code ≥ 2.1.318.
If Claude Code reports the plugin as enabled but not installed, run this once:
claude plugin install engineering-paved-path@lindigo-devdigest --scope projectLocal
Run in your terminal:
claude plugin install engineering-paved-path --marketplace lindigo-design/devdigest-marketplace --scope localRestart Claude Code, or run /reload-plugins in an open session, to load it.
.claude/settings.local.json is personal and is not committed.
Adds ~346 tokens to every session.
Components
Skills · 2
- frontend-ui-architecture
Decides where frontend code lives in a React or Next.js App Router app: components, hooks, helpers, constants, types, state and the client boundary. Use when adding or moving UI files, building a screen, route or feature, splitting a growing component, extracting logic out of a component, reviewing a change for structure, or when a user asks "where should this go?", "how do I structure this?", "split this component" or "this page is too big". Organization only. Not for backend layering (use engineering-paved-path:onion-architecture), hook anti-patterns, performance or testing.
/engineering-paved-path:frontend-ui-architectureyou can start it; Claude also loads it when relevantPreloaded by: architecture-reviewer (architecture-review), implementation-planner (sdd-engineering)
- onion-architecture
Applies onion architecture to a modular TypeScript/Node backend: domain core, ports, application, infrastructure and presentation rings, with dependencies pointing inward only. Use when creating or changing a backend module, route, service, repository, adapter, job handler or database query, when wiring code into the composition root, when reviewing a backend change for layering, or when a user asks "where should this backend code live?", "is this route too fat?", or mentions onion, clean or hexagonal architecture, ports and adapters, or layers. Examples use Fastify, Drizzle and Zod; the rules apply to any modular backend. Not for frontend structure (use engineering-paved-path:frontend-ui-architecture).
/engineering-paved-path:onion-architectureyou can start it; Claude also loads it when relevantPreloaded by: architecture-reviewer (architecture-review), implementation-planner (sdd-engineering)
Try it after install
Check that it loaded
In a session, type / and look for
/engineering-paved-path:List installed plugins with their version, scope and status:
claude plugin listSee its components and what it adds to every session:
claude plugin details engineering-paved-path
Call it
Skills: type
/engineering-paved-path:frontend-ui-architecture,/engineering-paved-path:onion-architecture
Examples from the README
/engineering-paved-path:onion-architecture Where should the code that charges a card live?The ring the code belongs to (domain, ports, application, infrastructure, presentation), the files to create in your module, and which way each import may point.
/engineering-paved-path:onion-architecture Review src/modules/orders for layeringViolations of the inward-only dependency rule, each with the file, the rule it breaks and the fix.
Manage
Update this plugin
In a Claude Code session
/plugin → Installed → engineering-paved-path → Update now
In your terminal
User
claude plugin update engineering-paved-path@lindigo-devdigestProject
claude plugin update engineering-paved-path@lindigo-devdigest --scope projectLocal
claude plugin update engineering-paved-path@lindigo-devdigest --scope localFrom the terminal, restart Claude Code after the update.
Update every plugin from this marketplace
In a Claude Code session
/plugin → Marketplaces → lindigo-devdigest → Update marketplace
In your terminal
Use a Claude Code session.
claude plugin marketplace update without a name only refreshes the listings; it installs no new versions.
Turn on auto-update
In a Claude Code session
/plugin → Marketplaces → lindigo-devdigest → Enable auto-update
In your terminal
Or add autoUpdate to the marketplace entry in your settings file:
{
"extraKnownMarketplaces": {
"lindigo-devdigest": {
"source": {
"source": "github",
"repo": "lindigo-design/devdigest-marketplace"
},
"autoUpdate": true
}
}
}Auto-update is off by default for this marketplace.
Disable
In a Claude Code session
/plugin disable engineering-paved-path@lindigo-devdigestIn your terminal
User
claude plugin disable engineering-paved-path@lindigo-devdigestProject
claude plugin disable engineering-paved-path@lindigo-devdigest --scope projectLocal
claude plugin disable engineering-paved-path@lindigo-devdigest --scope localWhile a plugin that depends on it is enabled (architecture-review, sdd-engineering), Claude Code refuses and prints the command that disables both in order.
Enable
In a Claude Code session
/plugin enable engineering-paved-path@lindigo-devdigestIn your terminal
User
claude plugin enable engineering-paved-path@lindigo-devdigestProject
claude plugin enable engineering-paved-path@lindigo-devdigest --scope projectLocal
claude plugin enable engineering-paved-path@lindigo-devdigest --scope localUninstall
In a Claude Code session
/plugin uninstall engineering-paved-path@lindigo-devdigestIn your terminal
User
claude plugin uninstall engineering-paved-path@lindigo-devdigest --pruneProject
claude plugin uninstall engineering-paved-path@lindigo-devdigest --scope project --pruneLocal
claude plugin uninstall engineering-paved-path@lindigo-devdigest --scope local --prune--prune also removes the dependencies that were installed with it and that no other plugin needs.
For a plugin the project enables, Claude Code asks: disable it for you only, or uninstall it for everyone.
Pin this release
In a Claude Code session
Use the terminal.
In your terminal
User
claude plugin marketplace remove lindigo-devdigestclaude plugin marketplace add lindigo-design/devdigest-marketplace#engineering-paved-path--v1.1.0claude plugin install engineering-paved-path@lindigo-devdigestProject
claude plugin marketplace remove lindigo-devdigestclaude plugin marketplace add lindigo-design/devdigest-marketplace#engineering-paved-path--v1.1.0claude plugin install engineering-paved-path@lindigo-devdigest --scope projectLocal
claude plugin marketplace remove lindigo-devdigestclaude plugin marketplace add lindigo-design/devdigest-marketplace#engineering-paved-path--v1.1.0claude plugin install engineering-paved-path@lindigo-devdigest --scope localA pin applies to the whole catalog, not only to this plugin. Removing the marketplace uninstalls every plugin installed from it and deletes their saved data, so reinstall the others afterwards. To unpin, run the same commands without #engineering-paved-path--v1.1.0.
Latest change
1.1.02026-11-11
Added
- Eval suite
evals/:onion-architectureloads on a backend layering question,frontend-ui-architectureon a component-structure question, neither on an unrelated request (deterministictool_usedgraders; run withclaude plugin eval).
engineering-paved-path
Architecture rules shared by every workflow plugin in this marketplace: backend layering (onion architecture) and frontend UI structure. Knowledge only: no agents, no hooks, nothing runs.
Install
/plugin marketplace add lindigo-design/devdigest-marketplace
/plugin install engineering-paved-path@lindigo-devdigest
You rarely install it by hand: architecture-review and sdd-engineering depend on it and pull it in.
How to use
The skills load on their own when a task matches their description (adding a backend module, deciding where a component goes, reviewing a change for layering). You can also call them directly:
| You type | You get |
|---|---|
/engineering-paved-path:onion-architecture Where should the code that charges a card live? |
The ring the code belongs to (domain, ports, application, infrastructure, presentation), the files to create in your module, and which way each import may point. |
/engineering-paved-path:onion-architecture Review src/modules/orders for layering |
Violations of the inward-only dependency rule, each with the file, the rule it breaks and the fix. |
/engineering-paved-path:frontend-ui-architecture This page component is 600 lines, split it |
A split plan: which parts stay route-local, which become shared components, hooks or pure helpers, and where each file goes. |
/engineering-paved-path:frontend-ui-architecture Where does a date-formatting helper go? |
The folder for it (route-local vs shared), its name, and the import rules that keep layers clean. |
The skills do not assume a folder layout. They look for your backend and UI source roots, existing module folders and the composition root, and ask you when the layout is unclear.
Other plugins use them by name: the architecture-reviewer agent preloads both, and the sdd-engineering planner applies them when it splits work into tasks.
Components
| Type | Name | What it covers |
|---|---|---|
| skill | onion-architecture |
Rings of a backend module, inward-only dependencies, ports and adapters, where routes, services, repositories, jobs and validation go; references for Fastify, Drizzle, Zod, adapters, jobs and server-sent events; worked examples. |
| skill | frontend-ui-architecture |
Where components, hooks, helpers, constants, types and state live in a React / Next.js App Router UI; how to split a component; import layers; the client boundary. |
Skills are namespaced: /engineering-paved-path:<skill>.
Permissions
None. The plugin ships skills only: no agents, hooks, MCP servers or executables, so it adds no tool permissions.
Dependencies
None. This is the base layer.
| Used by | How |
|---|---|
architecture-review |
architecture-reviewer preloads both skills |
sdd-engineering |
implementation-planner applies both when planning |
Evals
evals/ checks behaviour, not only the manifest: a backend layering question loads onion-architecture, a component-structure question loads frontend-ui-architecture, an unrelated request loads neither. The graders are deterministic (tool_used); the agent runs call the model, so a run is paid and CI does not run it.
claude plugin eval ./plugins/engineering-paved-path --runs 1 --ablation none
Later
Planned for minor releases once their source and licence are confirmed or they are written:
security: security rubric and checklists (licence of the original not confirmed yet).guardrails,engineering-insights,mermaid-diagram.- Quality evals for both skills against a sample application (the trigger evals ship in 1.1).
Licence
MIT, see LICENSE. Both skills are adapted from an MIT-licensed course project (© 2026 Ivan Lapa); sources.json records the origin of each skill and CHANGELOG.md the source commit.
See CHANGELOG.md and COMPATIBILITY.md.
Compatibility notes
- Claude Code
- ≥ 2.1.318 (declared minimum; verified on 2.1.318, the CI pin)
- OS
- Windows 10/11, macOS