CtrlK
BlogDocsLog inGet started
Tessl Logo

igmarin/rails-agent-skills

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

1.77x
Quality

93%

Does it follow best practices?

Impact

96%

1.77x

Average score across 41 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

EXAMPLES.mdskills/ddd/review-domain-boundaries/

DDD Boundaries Review — Examples

Extended patterns for this skill. Read SKILL.md first.

Example: Leakage + Fix

Before — Billing reaches into Fleet internals:

# app/services/billing/invoice_service.rb
class Billing::InvoiceService
  def call(reservation_id)
    reservation = Fleet::Reservation.find(reservation_id)
    reservation.update!(status: :invoiced)  # Billing mutating Fleet state
    create_invoice(reservation)
  end
end

After — Fleet emits an event; Billing reacts:

# Fleet publishes an outcome; Billing subscribes via a job or hook
class Fleet::Reservation < ApplicationRecord
  def complete!
    update!(status: :completed)
    ReservationCompletedJob.perform_later(id)  # Fire-and-forget event
  end
end

# app/services/billing/invoice_service.rb — no Fleet constants
class Billing::InvoiceService
  def call(reservation_id:, amount_cents:)
    create_invoice(reservation_id:, amount_cents:)
  end
end

Finding format:

Severity: High
Contexts: Billing → Fleet
Leaked term: reservation.update!(status: :invoiced)
Risk: Billing owns Fleet state transitions. Changes to Fleet lifecycle break Billing silently.
Smallest credible fix: Fleet emits ReservationCompleted event; Billing reacts without touching Fleet models.

Pitfalls

PitfallWhat to do
"Everything should become a bounded context"Many apps have a few real contexts — over-splitting creates ceremony
Reviewing folders without reviewing languageDirectory structure alone does not prove domain boundaries
Solving leakage with shared utility modulesShared utils hide ownership problems instead of fixing them
Recommending a rewrite firstStart with the smallest credible boundary improvement
One model serving unrelated workflowsDifferent language in the same object = leaked context — separate them
Ownership described as "whoever needs it"A context with no named owner has no boundary — name it first

skills

README.md

server.json

tile.json