Curated library of atomic skills and personas for Hanami, dry-rb, and ROM Ruby development. Covers actions, slices, repositories, relations, changesets, providers, DI, operations, TDD, CLI, views, routing, validation, and 10 orchestration personas. Shared Ruby process skills have moved to ruby-core-skills. Uses Markdown + Front-matter architecture.
95
95%
Does it follow best practices?
Impact
96%
1.20xAverage score across 45 eval scenarios
Passed
No known issues
Orchestrates project onboarding: from context discovery through provider configuration to DI implementation. Chains three skills through four phases with verification gates.
- Context MUST be fully loaded before any configuration work.
DO NOT proceed without a complete slice map, provider inventory, and settings summary.
If the app cannot load context (broken boot), fix that first.
- DO NOT configure providers without understanding existing ones.
- DO NOT implement DI without registered providers.
- DO NOT use direct container calls outside of providers.
- All providers MUST boot without errors before setup is considered complete.
- The test suite MUST pass with DI configured.Example — provider file (config/providers/redis.rb):
Hanami.app.register_provider(:redis) do
prepare do
require "redis"
end
start do
settings = target["settings"]
register("redis", Redis.new(url: settings.redis_url))
end
stop do
target["redis"].quit
end
endExample — corresponding settings entry (config/settings.rb):
module MyApp
class Settings < Hanami::Settings
setting :redis_url, constructor: Types::String
end
endQuality Check:
ENV.fetch in providers).include Deps[...].Example — action with DI (app/actions/users/create.rb):
module MyApp
module Actions
module Users
class Create < MyApp::Action
include Deps["operations.users.create"]
def handle(request, response)
result = create.(request.params[:user])
response.status = result.success? ? 201 : 422
end
end
end
end
endExample — operation as DI consumer (app/operations/users/create.rb):
module MyApp
module Operations
module Users
class Create
include Deps["redis", "repositories.users"]
def call(params)
# redis and repositories.users are injected automatically
end
end
end
end
endExample — test with constructor injection:
RSpec.describe MyApp::Operations::Users::Create do
subject(:operation) { described_class.new(redis: fake_redis, "repositories.users": fake_repo) }
let(:fake_redis) { instance_double(Redis) }
let(:fake_repo) { instance_double(MyApp::Repositories::Users) }
it "creates a user" do
# ...
end
endQuality Check:
bundle exec hanami console --env=development
# or for a quick boot check:
bundle exec hanami db migrate --dry-run 2>&1 | head -20bundle exec rspec| Scenario | Recovery |
|---|---|
| App fails to boot (missing settings) | Define the missing setting in config/settings.rb with proper type constructor. Re-run boot. |
| Provider fails to start (connection refused) | Verify the external service is running. If it's optional, wrap startup in a rescue block. |
| Deps key not found | Verify the provider's registration key matches the Deps key exactly. Check for typos. |
| Test fails after DI (nil dependency) | Ensure the test passes the dependency through the constructor. Check the key name. |
| ROM auto_registration missing a slice | Verify the slice path is correct. Check that relations follow the expected directory structure. |
## Hanami Setup Complete
### Context
- Slices: [N] discovered — [list]
- Providers: [N] configured — [list]
- Settings: [N] defined — [summary]
### Providers
- [provider] — registered as "[key]" — [status: new/verified]
### Dependency Injection
- Actions using DI: [N]
- Operations using DI: [N]
- Test patterns verified: Yes / No
### Verification
- App boots: Yes / No
- Tests pass: [N] passed, [N] failed
- Warnings: [any issues to address].tessl-plugin
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
scenario-36
scenario-37
scenario-38
scenario-39
scenario-40
scenario-41
scenario-42
scenario-43
scenario-44
scenario-45
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
personas
providers
configure-providers
implement-di
review-security
routing
define-routes
slices
configure-slice
create-slice
extract-slice
review-slice-boundaries
test-slice