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-2/

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

README.md

tile.json