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
94%
Does it follow best practices?
Impact
92%
1.33xAverage score across 35 eval scenarios
Passed
No known issues
Audit slice isolation. Every slice should be a self-contained module — dependencies across boundaries must be intentional and through public interfaces.
DO NOT flag intentional cross-slice communication (actions calling other slices' actions).
DO flag any direct import of another slice's repository, relation, or operation.
EVERY finding MUST cite the specific file and line as evidence.require or reference another slice's repository, relation, operation, or changeset?A direct import of another slice's internal repository is a Critical violation:
# slices/main/actions/users/export.rb ← inside the `main` slice
require 'slices/admin/repositories/user_repo' # ❌ crosses slice boundary
module Main
module Actions
module Users
class Export < Main::Action
def handle(request, response)
repo = Admin::Repositories::UserRepo.new # ❌ direct internal coupling
# ...
end
end
end
end
endThe correct approach is to expose data through a public action or shared kernel, not by importing an internal repository directly.
| Slice | Actions (public API) | Internal modules || # | Severity | Slice A | Slice B | File | Line | Finding | Recommendation || # | Severity | Slice A | Slice B | File | Line | Finding | Recommendation |
|---|---|---|---|---|---|---|---|
| 1 | Critical | main | admin | slices/main/actions/users/export.rb | 2 | Direct require of admin slice repository slices/admin/repositories/user_repo | Expose data via a public admin action or move shared logic to a shared kernel |
| 2 | Suggestion | billing | main | slices/billing/operations/charge.rb | 14 | Duplicates main's EmailValidator logic inline | Extract EmailValidator to lib/ shared kernel and require from both slices |
| 3 | Note | reporting | — | slices/reporting/providers/db_provider.rb | 8 | Registers a global :db key that shadows the app-level provider | Consider scoping the key to reporting.db to avoid potential conflicts |
| Skill | When to chain |
|---|---|
| load-context | Always first — discover slices before reviewing boundaries |
| extract-slice | After extraction, verify no boundary violations were introduced |
| slice-lifecycle | Part of the slice development lifecycle agent |
docs
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10
scenario-11
scenario-12
scenario-13
scenario-14
scenario-15
scenario-16
scenario-17
scenario-18
scenario-19
scenario-20
scenario-21
scenario-22
scenario-23
scenario-24
scenario-25
scenario-26
scenario-27
scenario-28
scenario-29
scenario-30
scenario-31
scenario-32
scenario-33
scenario-34
scenario-35
skills
actions
build-json-api
create-action
handle-errors
validate-params
context
load-context
db
create-changeset
create-repository
define-relation
write-migration
dry-monads
handle-result-pattern
dry-rb
create-operation
create-validation-contract
providers
configure-providers
implement-di
review-security
routing
define-routes
slices
configure-slice
create-slice
extract-slice
review-slice-boundaries
test-slice