From grimoire
Applies convention-over-configuration principle to reduce boilerplate and speed onboarding when designing project structures, frameworks, or tooling setups.
How this skill is triggered — by the user, by Claude, or both
Slash command
/grimoire:apply-convention-over-configurationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Encode the common case as a default so developers only configure deviations.
Encode the common case as a default so developers only configure deviations.
Adopted by: Every major web framework post-2005 — Rails, Spring Boot, Django, Laravel, Angular CLI, Next.js, NestJS — all ship opinionated defaults rather than requiring upfront configuration. Impact: Rails vs. J2EE (2005) demonstrated a 60–80% reduction in boilerplate configuration files for equivalent functionality. New developer onboarding time drops from days (explicit config systems) to hours (convention-based) because the project structure is already familiar. Why best: Explicit configuration requires each team to re-decide settled questions (where do models live? how are routes named?) — producing N divergent answers across projects. Conventions encode collective wisdom once; every subsequent project inherits it for free. Deviations are immediately visible because they require explicit config.
Sources: DHH, "Rails Doctrine" (rubyonrails.org/doctrine), Spring Boot reference docs, Django design philosophies (djangoproject.com/design-philosophies)
List the recurring structural decisions in your domain:
Make the common case require zero configuration:
UserController → automatically handles /users routesmodels/ → automatically loaded as a model*_test.rb → automatically discovered by the test runnerIf it requires a config entry to do the standard thing, the convention is missing.
When a project departs from the convention, require an explicit declaration at the deviation point — not a global config file that re-describes the default:
# Bad — re-states the convention explicitly
class User < ApplicationRecord
self.table_name = "users" # this IS the convention; remove it
end
# Good — only configure when deviating
class User < ApplicationRecord
self.table_name = "people" # explicit deviation
end
Write a single reference listing all conventions. New developers read this once. Don't document configuration options for cases the convention already handles.
Test: give a new team member a task that requires finding an existing file. If they need a guided tour or a map, the convention isn't strong enough.
UserController lives in controllers/, OrderController must also live in controllers/ — partial conventions are worse than noneDocumenting defaults as if they were config options. If a developer needs to write
table_name = "users" to get the default behavior, the convention isn't working.
Convention without discoverability. A convention that can't be discovered by reading the code is magic — add a visible hook or naming pattern that makes the wiring obvious.
Over-conventionalizing. Genuine one-off decisions don't need a convention. Only standardize what recurs across every project in the domain.
npx claudepluginhub jeffreytse/grimoire --plugin grimoireDefines coding conventions and standards for AI collaboration: naming rules, code style, folder structure, and environment variable conventions.
Analyzes multi-language projects (Java, Kotlin, TypeScript, Python, Rust, Go) to extract etalon classes, patterns, and layer-based architecture. Generates convention documents and rules in .claude/convention/.
Generates tailored Development Principles for CLAUDE.md by auto-detecting project structure, monorepo setup, tech stack including TypeScript, React, Python, Django, and user preferences via interactive questions.