Curated library of 42 public AI agent skills for Ruby on Rails development, plus 5 callable workflow skills. Organized by category: planning, testing, code-quality, ddd, engines, infrastructure, api, patterns, context, orchestration, and workflows. Covers code review, architecture, security, testing (RSpec), engines, service objects, DDD patterns, and TDD automation.
96
96%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Risky
Do not use without reviewing
Core principle: Model real domain pressure, not textbook DDD vocabulary.
DO NOT introduce repositories, aggregates, or domain events just to sound "DDD".
DO NOT fight Rails defaults when a normal model or service expresses the domain clearly.
ALWAYS start from domain invariants, ownership, and lifecycle before choosing a pattern.plan-tests and write-tests before implementation.| DDD concept | Rails-first default | Avoid by default | Typical home |
|---|---|---|---|
| Entity | ActiveRecord model when persisted identity matters | Extra wrapper object with no added meaning | app/models/ |
| Value object | PORO — immutable, equality by value | Shoving logic into helpers or primitives | app/models/ or near the domain |
| Aggregate root | The model that guards invariants and is the single entry point | Splitting invariants across multiple models | app/models/ |
| Domain service | PORO for behavior spanning multiple entities | Arbitrary model chosen just to hold code | app/services/ |
| Application service | Orchestrator for one use case | Fat controller or callback chains | app/services/ |
| Repository | Only when a real persistence boundary exists beyond ActiveRecord | Repositories for every query | app/repositories/ (rare) |
| Domain event | Explicit object when multiple downstream consumers justify it | Callback-driven hidden side effects | app/events/ or project namespace |
When using this skill, return for each domain concept:
generate-tasks, plan-tests, etc.# app/models/money.rb
class Money
attr_reader :amount_cents, :currency
def initialize(amount_cents, currency = "USD")
@amount_cents, @currency = Integer(amount_cents), currency.upcase.freeze
freeze
end
def ==(other) = other.is_a?(Money) && amount_cents == other.amount_cents && currency == other.currency
endSee assets/examples.md for detailed Application Service and Domain Event examples.
| Mistake | Reality |
|---|---|
| Turning every concept into a service | Many behaviors belong naturally on entities or value objects |
| Creating repositories for all reads and writes | ActiveRecord already provides a strong default persistence boundary |
| Treating aggregates as folder names only | Aggregates exist to protect invariants, not to look architectural |
| Adding domain events for one local callback | Events justify their cost only when multiple downstream consumers exist |
| Pattern choice justified only with "DDD says so" | The reason must be an invariant, ownership boundary, or clear coordination need |
| Same invariant enforced from multiple unrelated entry points | Single aggregate root guards state transitions — one entry point per invariant |
| New abstractions that increase indirection without clarifying ownership | If the boundary is unclear after modeling, the abstraction is premature |
| Skill | When to chain |
|---|---|
| define-domain-language | When the terms are not clear enough to model yet |
| review-domain-boundaries | When the modeling problem is really a context boundary problem |
| generate-tasks | After the tactical design is clear and ready for implementation planning |
| plan-tests | When the next step is choosing the best first failing spec |
| apply-code-conventions | When validating the modeling choice against Rails simplicity and repo conventions |
build
docs
mcp_server
skills
api
generate-api-collection
implement-graphql
code-quality
apply-code-conventions
apply-stack-conventions
assets
snippets
code-review
refactor-code
respond-to-review
review-architecture
security-check
context
load-context
setup-environment
ddd
define-domain-language
model-domain
review-domain-boundaries
engines
create-engine
create-engine-installer
document-engine
extract-engine
release-engine
review-engine
test-engine
upgrade-engine
infrastructure
implement-background-job
implement-hotwire
optimize-performance
review-migration
seed-database
version-api
orchestration
skill-router
patterns
create-service-object
implement-calculator-pattern
write-yard-docs
planning
create-prd
generate-tasks
plan-tickets
testing
plan-tests
test-service
triage-bug
write-tests
workflows