Curated library of 16 public Ruby AI agent skills: 10 atomic skills (YARD docs, service objects, calculator pattern, API clients, DDD, bug triage, code review, skill routing), 5 process-discipline skills (TDD, refactoring, review, security, test planning), and 1 planning skill (TDD task generation). Zero agents — this is a foundational library consumed by framework-specific tiles like rails-agent-skills and hanakai-yaku.
95
96%
Does it follow best practices?
Impact
95%
1.05xAverage score across 16 eval scenarios
Passed
No known issues
Extended patterns for this skill. Read SKILL.md first.
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
endAfter — 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
endFinding 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.| Pitfall | What to do |
|---|---|
| "Everything should become a bounded context" | Many apps have a few real contexts — over-splitting creates ceremony |
| Reviewing folders without reviewing language | Directory structure alone does not prove domain boundaries |
| Solving leakage with shared utility modules | Shared utils hide ownership problems instead of fixing them |
| Recommending a rewrite first | Start with the smallest credible boundary improvement |
| One model serving unrelated workflows | Different 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 |
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
skills
code-quality
respond-to-review
ddd
define-domain-language
model-domain
review-domain-boundaries
docs
write-yard-docs
orchestration
skill-router
patterns
create-service-object
implement-calculator-pattern
planning
generate-tdd-tasks
process
testing
triage-bug