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
Use this skill when managing Hanami 2.x application settings.
Core principle: Settings are typed, validated, and loaded from environment variables. They are the single source of truth for configuration.
| Scenario | Approach |
|---|---|
| Define a setting | setting :database_url, constructor: Types::String |
| Define with default | setting :port, default: 2300, constructor: Types::Integer |
| Define optional setting | setting :api_key, constructor: Types::String.optional |
| Enum validation | constructor: Types::String.enum("debug", "info", "warn") |
| Access in Action | Hanami.app[:settings].database_url |
| Access in provider | target[:settings].database_url |
| Inject via Deps | include Deps["settings"] |
| Required setting | Omit default: — missing env var raises at boot |
config/settings.rb# config/settings.rb
# frozen_string_literal: true
module MyApp
class Settings < Hanami::Settings
setting :database_url, constructor: Types::String
setting :port, default: 2300, constructor: Types::Integer
setting :host, default: "localhost", constructor: Types::String
setting :session_secret, constructor: Types::String
setting :api_key, constructor: Types::String.optional
setting :log_level, default: "info", constructor: Types::String.enum("debug", "info", "warn", "error")
end
end| Setting | Environment Variable |
|---|---|
database_url | DATABASE_URL |
port | PORT |
session_secret | SESSION_SECRET |
api_key | API_KEY |
Use .env files for local development (supported via the dotenv gem).
# In an Action
Hanami.app[:settings].database_url
# In a provider
target[:settings].session_secret
# In a service object (injected)
include Deps["settings"]
settings.database_urlBoot the app with hanami server or bundle exec hanami console to confirm all required settings are present and correctly typed. Required settings (no default:) raise immediately at boot if the corresponding environment variable is missing — this is the intended failure mode.
# Quick console check
bundle exec hanami console
Hanami.app[:settings].inspectSlice-level settings override or extend app settings:
# slices/api/config/slice.rb
class Slice < Hanami::Slice
config.settings do
setting :api_key, constructor: Types::String
end
end| Related Skill | When to chain |
|---|---|
| register-provider | Providers read settings via target[:settings]. Define settings before writing providers. |
| inject-dependencies | Settings can be injected via Deps["settings"]. |
| configure-slice | Slices can define their own settings. |
| create-app | Generated apps include config/settings.rb. Define settings after scaffolding. |
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