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
Extended examples and patterns for engine creation.
Scenario: Build an engine that provides authentication (login/logout) to host apps.
rails plugin new auth_engine --mountable --full| Aspect | Requirement |
|---|---|
| Host must provide | User model with email and password_digest attributes; mount route in host routes |
| Engine exposes | SessionsController, AuthenticationHelper, require_login before_action |
| Configuration | user_class (default: "User"), session_key (default: :user_id) |
# lib/auth_engine.rb
require "auth_engine/version"
require "auth_engine/configuration"
require "auth_engine/engine"
module AuthEngine
class << self
def configuration
@configuration ||= Configuration.new
end
def configure
yield(configuration)
end
end
end
# lib/auth_engine/configuration.rb
module AuthEngine
class Configuration
attr_accessor :user_class, :session_key
def initialize
@user_class = "User"
@session_key = :user_id
end
end
end
# lib/auth_engine/engine.rb
module AuthEngine
class Engine < ::Rails::Engine
isolate_namespace AuthEngine
initializer "auth_engine.controller_helpers" do
ActiveSupport.on_load(:action_controller) do
include AuthEngine::AuthenticationHelper
end
end
end
end# app/controllers/auth_engine/sessions_controller.rb
module AuthEngine
class SessionsController < ApplicationController
def create
user = AuthEngine.configuration.user_class.constantize.find_by(email: params[:email])
if user&.authenticate(params[:password])
session[AuthEngine.configuration.session_key] = user.id
redirect_to main_app.root_path
else
flash.now[:alert] = "Invalid credentials"
render :new
end
end
def destroy
session.delete(AuthEngine.configuration.session_key)
redirect_to main_app.root_path
end
end
end# spec/dummy/config/routes.rb
Rails.application.routes.draw do
mount AuthEngine::Engine => "/auth"
end
# spec/dummy/app/models/user.rb
class User < ApplicationRecord
has_secure_password
endScenario: Engine that provides shared background job processing capabilities.
rails plugin new job_engine --fullKey difference: No routes, no isolate_namespace, but needs Rails initialization hooks.
# lib/job_engine/engine.rb
module JobEngine
class Engine < ::Rails::Engine
# No isolate_namespace - jobs live in host app namespace
initializer "job_engine.configure_queue_adapter" do |app|
app.config.active_job.queue_adapter = :solid_queue if defined?(SolidQueue)
end
end
end| Mistake | Why It Fails | Correct Approach |
|---|---|---|
class User < ::User | Hard-coded host dependency | config.user_class = "User" then constantize |
| Auto-running migrations in initializer | Database errors on boot | Use generators for migrations, never auto-apply |
| Polluting host app routes | Namespace collision | Use isolate_namespace for mountable engines |
| No dummy app | Can't test integration | Always create dummy app with rails plugin new |
| Config as hash | No validation, hard to document | Config class with explicit attributes |
See TESTING.md for detailed testing patterns.
Quick verification:
# Inside engine directory
cd spec/dummy
bundle exec rails routes | grep engine_name # Verify routes
bundle exec rspec spec/requests # Integration tests
bundle exec rspec spec/lib/configuration_spec # Config tests
grep -r "::User\|::Account" ../lib # No hard-coded constantsdocs
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