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

{
  "context": "Tests whether the agent wraps multi-step database operations in a transaction, uses SQL sanitization for dynamic queries, keeps module namespaces aligned with directory structure, and includes a README for the module.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Transaction present",
      "description": "The service wraps its multi-step database operations inside `ActiveRecord::Base.transaction` (or equivalent) — not just a single operation",
      "max_score": 14
    },
    {
      "name": "Transaction scope correct",
      "description": "Only the multi-step operations that must be atomic are inside the transaction — NOT the entire `call` method body",
      "max_score": 10
    },
    {
      "name": "SQL sanitization used",
      "description": "Any dynamic raw SQL query uses `ActiveRecord::Base.sanitize_sql` (or a parameterized query with `?` placeholders) rather than string interpolation",
      "max_score": 14
    },
    {
      "name": "No SQL string interpolation",
      "description": "Does NOT construct raw SQL with `\"... #{variable}\"` string interpolation",
      "max_score": 10
    },
    {
      "name": "Module namespace",
      "description": "The service class is wrapped in a module whose name matches the subdirectory under `app/services/`",
      "max_score": 10
    },
    {
      "name": "File path correct",
      "description": "Service file is at `app/services/<module>/<service>.rb` — not flat in `app/services/`",
      "max_score": 8
    },
    {
      "name": "README present",
      "description": "A `README.md` file is created alongside or documenting the service module",
      "max_score": 10
    },
    {
      "name": "Frozen string literal",
      "description": "Service file begins with `# frozen_string_literal: true`",
      "max_score": 8
    },
    {
      "name": "Response format",
      "description": "Return value uses `{ success: true/false, response: { ... } }` structure",
      "max_score": 8
    },
    {
      "name": "Error constants",
      "description": "At least one error message or default value is defined as a Ruby constant rather than an inline string literal",
      "max_score": 8
    }
  ]
}

README.md

tile.json