Curated library of 41 public AI agent skills for Ruby on Rails development. Organized by category: planning, testing, code-quality, ddd, engines, infrastructure, api, patterns, context, and orchestration. Covers code review, architecture, security, testing (RSpec), engines, service objects, DDD patterns, and TDD automation. Repository workflows remain documented in GitHub but are intentionally excluded from the Tessl tile.
95
93%
Does it follow best practices?
Impact
96%
1.77xAverage score across 41 eval scenarios
Passed
No known issues
| 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 |
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.
MODELING OUTPUT IS NOT IMPLEMENTATION: do not include Ruby implementation code,
migrations, or service bodies unless the user explicitly asks to move from
modeling into build work.Core principle: Model real domain pressure, not textbook DDD vocabulary.
plan-tests and write-tests before implementation.| Mistake | Reality |
|---|---|
| Turning every concept into a service | Many behaviors belong naturally on entities or value objects |
| 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 |
For each domain concept, return a compact entry covering:
plan-tests and write-tests completegenerate-tasks, plan-testsDomain concept: Order | Modeling choice: Aggregate root | Rails home: app/models/order.rb
Invariant: An Order must never transition from cancelled back to active, and its total must always reflect current line items. Order is the single entry point; no external caller may mutate line items or status directly.
Avoid: Do not extract an OrderService just to hold place and cancel — that behavior belongs on the aggregate. Do not introduce OrderRepository unless a non-ActiveRecord persistence backend is required.
Test handoff: First behavior — Order#cancel raises when already cancelled. Spec type: unit model spec (spec/models/order_spec.rb). Implementation deferred until plan-tests selects this spec and write-tests writes it.
Next: plan-tests to select the first failing spec for Order#cancel.
| 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 |
docs
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10
scenario-11
scenario-12
scenario-13
scenario-14
scenario-15
scenario-16
scenario-17
scenario-18
scenario-19
scenario-20
scenario-21
scenario-22
scenario-23
scenario-24
scenario-25
scenario-26
scenario-27
scenario-28
scenario-29
scenario-30
scenario-31
scenario-32
scenario-33
scenario-34
scenario-35
scenario-36
scenario-37
scenario-38
scenario-39
scenario-40
scenario-41
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