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

{
  "context": "Tests whether the agent uses Ruby constants for error messages and defaults, writes YARD documentation on public methods, creates class-only (static) services when no instance state is needed, and produces a README for the module.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Error message constants",
      "description": "At least two error messages or default values are defined as Ruby constants (ALL_CAPS names) rather than inline string or numeric literals",
      "max_score": 12
    },
    {
      "name": "YARD on self.call",
      "description": "The `.call` class method has a YARD comment block (starts with `# @param` or `# @return` or `##`)",
      "max_score": 10
    },
    {
      "name": "YARD on other public methods",
      "description": "At least one other public method (besides `.call`) has a YARD comment block",
      "max_score": 8
    },
    {
      "name": "Class-only service used",
      "description": "At least one helper or validator class uses only class methods (no instance variables, no `new`) for stateless operations",
      "max_score": 12
    },
    {
      "name": "No instance state in class-only service",
      "description": "The class-only service does NOT define `initialize`, `attr_reader`, or instance variables",
      "max_score": 10
    },
    {
      "name": "README present",
      "description": "A `README.md` file is created that documents the module's purpose and public interface",
      "max_score": 10
    },
    {
      "name": "Frozen string literal",
      "description": "Every service file begins with `# frozen_string_literal: true`",
      "max_score": 8
    },
    {
      "name": "Response format",
      "description": "The main service returns `{ success: true/false, response: { ... } }` for both success and failure",
      "max_score": 10
    },
    {
      "name": "Module namespace matches directory",
      "description": "Service file is under `app/services/<module>/` and the Ruby module name matches that directory",
      "max_score": 8
    },
    {
      "name": "Constants not duplicated inline",
      "description": "The defined constants are actually used in the code — no same string/number appears as both a constant definition AND a duplicated literal elsewhere in the same file",
      "max_score": 12
    }
  ]
}

README.md

tile.json