CtrlK
BlogDocsLog inGet started
Tessl Logo

igmarin/hanakai-yaku

Curated library of atomic AI agent skills for Hanami, dry-rb, and ROM Ruby development. Covers actions, slices, repositories, relations, changesets, providers, DI, operations, TDD, CLI, views, routing, and validation. Shared Ruby process skills have moved to ruby-core-skills. Uses Markdown + Front-matter architecture.

92

1.33x
Quality

94%

Does it follow best practices?

Impact

92%

1.33x

Average score across 35 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-5/

{
  "context": "Checks whether the final artifact follows the create-slice instructions from the published hanakai-yaku tile.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "instruction-1",
      "description": "The submitted artifact follows this skill instruction: Use this skill when creating and configuring Hanami 2.x Slices.",
      "max_score": 10
    },
    {
      "name": "instruction-2",
      "description": "The submitted artifact follows this skill instruction: **Verify:** Run `hanami routes` and confirm the new slice's routes appear in the output.",
      "max_score": 10
    },
    {
      "name": "instruction-3",
      "description": "The submitted artifact follows this skill instruction: **Register the Slice** in the app:",
      "max_score": 10
    },
    {
      "name": "instruction-4",
      "description": "The submitted artifact follows this skill instruction: **Define Slice routes** in `slices/<name>/config/routes.rb`:",
      "max_score": 10
    },
    {
      "name": "instruction-5",
      "description": "The submitted artifact follows this skill instruction: **Verify:** Run `hanami routes` and confirm `/api/users` and `/api/users/:id` are listed.",
      "max_score": 10
    },
    {
      "name": "instruction-6",
      "description": "The submitted artifact follows this skill instruction: **Verify:** Boot the app (`hanami console`) and resolve the imported component: `MyApp::Slices::Api::Container[\"main.repositories.users\"]`.",
      "max_score": 10
    },
    {
      "name": "instruction-7",
      "description": "The submitted artifact follows this skill instruction: **Verify:** In `hanami console`, confirm the consuming slice can resolve the exported key.",
      "max_score": 10
    },
    {
      "name": "instruction-8",
      "description": "The submitted artifact follows this skill instruction: **Keep Slices self-contained**. A Slice should be able to function independently. Minimize cross-slice dependencies.",
      "max_score": 10
    },
    {
      "name": "instruction-9",
      "description": "The submitted artifact follows this skill instruction: **Use Slices for bounded contexts** — common examples include `slice :api` for public endpoints, `slice :admin` for dashboards, `slice :billing` for payments, and `slice :main` for the default web application.",
      "max_score": 10
    },
    {
      "name": "instruction-10",
      "description": "The submitted artifact follows this skill instruction: **Circular slice dependencies**: Slices should be acyclic. If Slice A imports from Slice B, Slice B must not import from Slice A.",
      "max_score": 10
    }
  ]
}

README.md

tile.json