Curated library of AI agent skills for Ruby on Rails development. Covers code review, architecture, security, testing (RSpec), engines, service objects, DDD patterns, and workflow automation.
98
99%
Does it follow best practices?
Impact
98%
1.38xAverage score across 26 eval scenarios
Passed
No known issues
{
"context": "Tests whether the agent implements correct error wrapping, credential safety, configuration validation, and HTTP resilience patterns in the Auth and Client layers of an API integration.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Auth includes HTTParty",
"description": "Auth class includes HTTParty (or equivalent HTTP library include) rather than using Net::HTTP directly",
"max_score": 5
},
{
"name": "Auth credential validation",
"description": "Auth initializer raises an error (any exception) when required credentials are blank/nil — does NOT silently accept missing credentials",
"max_score": 10
},
{
"name": "No hardcoded credentials",
"description": "Auth class reads credentials from Rails configuration or environment variables — no literal credential strings appear in the source files",
"max_score": 10
},
{
"name": "Auth token caching",
"description": "Auth#token (or equivalent method) caches the fetched token in an instance variable and returns the cached value on subsequent calls",
"max_score": 8
},
{
"name": "Client::Error class",
"description": "Client defines a nested Error class inheriting from StandardError (not from RuntimeError or a generic base)",
"max_score": 10
},
{
"name": "HTTP error wrapping",
"description": "Client's request method rescues HTTParty::Error (or equivalent HTTP library error) and re-raises as Client::Error",
"max_score": 10
},
{
"name": "JSON error wrapping",
"description": "Client's request method rescues JSON::ParserError and re-raises as Client::Error",
"max_score": 10
},
{
"name": "Timeout configured",
"description": "Client or Auth configures a timeout (DEFAULT_TIMEOUT constant or timeout option passed to HTTP calls) — not left at default/unlimited",
"max_score": 8
},
{
"name": "Missing config raises Client::Error",
"description": "Client initializer raises Client::Error (using MISSING_CONFIGURATION_ERROR or similar message) when token or host is blank",
"max_score": 10
},
{
"name": "Retry constant",
"description": "Client or Fetcher defines DEFAULT_RETRIES (or equivalent) as a numeric constant — retry count is not a magic number inline",
"max_score": 9
},
{
"name": "Spec covers error path",
"description": "client_spec.rb contains at least one test case for error handling (network failure, JSON parse error, or missing configuration)",
"max_score": 10
}
]
}api-rest-collection
create-prd
ddd-boundaries-review
ddd-rails-modeling
ddd-ubiquitous-language
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
generate-tasks
mcp_server
rails-architecture-review
rails-background-jobs
rails-bug-triage
rails-code-conventions
rails-code-review
rails-engine-compatibility
rails-engine-docs
rails-engine-extraction
rails-engine-installers
rails-engine-release
rails-engine-reviewer
rails-engine-testing
rails-graphql-best-practices
rails-migration-safety
rails-review-response
rails-security-review
rails-skills-orchestrator
rails-stack-conventions
rails-tdd-slices
refactor-safely
rspec-best-practices
rspec-service-testing
ruby-service-objects
strategy-factory-null-calculator
ticket-planning
yard-documentation