CtrlK
BlogDocsLog inGet started
Tessl Logo

igmarin/rails-agent-skills

Curated library of 39 AI agent skills for Ruby on Rails development. Organized by category: planning, testing, code-quality, ddd, engines, infrastructure, api, patterns, context, orchestration, and workflows. Includes 5 callable workflow skills (rails-tdd-loop, rails-review-flow, rails-setup-flow, rails-quality-flow, rails-engines-flow) for complete development cycles. Covers code review, architecture, security, testing (RSpec), engines, service objects, DDD patterns, and TDD automation.

95

1.20x
Quality

98%

Does it follow best practices?

Impact

95%

1.20x

Average score across 35 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-13/

{
  "context": "Tests whether the agent implements the full 5-layer Auth→Client→Fetcher→Builder→DomainEntity pattern with correct file placement, class structure, and constants as prescribed for Ruby API client integrations.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Auth file exists",
      "description": "app/services/weather_service/auth.rb exists and defines a class named Auth within a module namespace",
      "max_score": 5
    },
    {
      "name": "Client file exists",
      "description": "app/services/weather_service/client.rb exists and defines a class named Client within the same module namespace",
      "max_score": 5
    },
    {
      "name": "Fetcher file exists",
      "description": "app/services/weather_service/fetcher.rb exists and defines a class named Fetcher within the same module namespace",
      "max_score": 5
    },
    {
      "name": "Builder file exists",
      "description": "app/services/weather_service/builder.rb exists and defines a class named Builder within the same module namespace",
      "max_score": 5
    },
    {
      "name": "Domain entity file exists",
      "description": "A domain entity file (e.g. reading.rb) exists in app/services/weather_service/ and defines a class within the module namespace",
      "max_score": 5
    },
    {
      "name": "Auth self.default",
      "description": "Auth class defines a self.default class method that reads credentials from configuration (not hardcoded values)",
      "max_score": 8
    },
    {
      "name": "Auth token caching",
      "description": "Auth#token method caches the token in an instance variable (pattern: return @token if @token)",
      "max_score": 8
    },
    {
      "name": "Client::Error class",
      "description": "Client class defines a nested Error class inheriting from StandardError",
      "max_score": 8
    },
    {
      "name": "Client constants",
      "description": "Client class defines MISSING_CONFIGURATION_ERROR string constant, DEFAULT_TIMEOUT, and DEFAULT_RETRIES numeric constants",
      "max_score": 8
    },
    {
      "name": "Fetcher DI constructor",
      "description": "Fetcher initializer accepts client as positional argument and data_builder and default_query as keyword arguments",
      "max_score": 8
    },
    {
      "name": "Fetcher constants",
      "description": "Fetcher class defines MAX_RETRIES and RETRY_DELAY_IN_SECONDS constants",
      "max_score": 7
    },
    {
      "name": "Builder attribute filtering",
      "description": "Builder#build method uses slice (or select/filter) to restrict output fields to a whitelist — does NOT return all raw API fields",
      "max_score": 8
    },
    {
      "name": "Entity ATTRIBUTES constant",
      "description": "Domain entity defines an ATTRIBUTES frozen array constant listing the whitelisted field names",
      "max_score": 8
    },
    {
      "name": "Entity DEFAULT_QUERY constant",
      "description": "Domain entity defines a DEFAULT_QUERY string constant containing a SQL or query string",
      "max_score": 7
    },
    {
      "name": "README present",
      "description": "A README.md file is present in the module directory",
      "max_score": 5
    }
  ]
}

README.md

tile.json