CtrlK
BlogDocsLog inGet started
Tessl Logo

igmarin/rails-agent-skills

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

1.38x
Quality

99%

Does it follow best practices?

Impact

98%

1.38x

Average score across 26 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-1/

{
  "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