Implement type-safe configuration with anyway_config gem. Use when creating configuration classes, replacing ENV access, or managing application settings. Triggers on configuration, environment variables, settings, secrets, or ENV patterns.
View on GitHubmajesticlabs-dev/majestic-marketplace
majestic-rails
plugins/majestic-rails/skills/anyway-config-coder/SKILL.md
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/majesticlabs-dev/majestic-marketplace/blob/main/plugins/majestic-rails/skills/anyway-config-coder/SKILL.md -a claude-code --skill anyway-config-coderInstallation paths:
.claude/skills/anyway-config-coder/# Anyway Config Coder
Implement type-safe configuration management using the `anyway_config` gem. Never access ENV directly - wrap all configuration in typed classes.
## Core Principle
**Never use ENV directly or Rails credentials.** Create typed configuration classes instead.
```ruby
# WRONG - scattered ENV access
api_key = ENV["GEMINI_API_KEY"]
timeout = ENV.fetch("API_TIMEOUT", 30).to_i
# RIGHT - typed configuration class
class GeminiConfig < Anyway::Config
attr_config :api_key,
timeout: 30
required :api_key
end
# Usage
GeminiConfig.new.api_key
```
## Setup
```ruby
# Gemfile
gem "anyway_config", "~> 2.6"
```
## Configuration Class Structure
### Basic Configuration
```ruby
# config/configs/gemini_config.rb
class GeminiConfig < Anyway::Config
# Define attributes with defaults
attr_config :api_key,
model: "gemini-pro",
timeout: 30,
max_retries: 3
# Mark required attributes
required :api_key
# Computed helpers
def configured?
api_key.present?
end
def base_url
"https://generativelanguage.googleapis.com/v1beta"
end
end
```
### Environment Variable Mapping
Anyway Config automatically maps environment variables:
```ruby
class GeminiConfig < Anyway::Config
attr_config :api_key # GEMINI_API_KEY
attr_config :model # GEMINI_MODEL
attr_config :timeout # GEMINI_TIMEOUT
end
# Custom prefix
class StripeConfig < Anyway::Config
config_name :payment # Uses PAYMENT_* prefix instead of STRIPE_*
attr_config :api_key, # PAYMENT_API_KEY
:webhook_secret
end
```
### Nested Configuration
```ruby
class AppConfig < Anyway::Config
attr_config :name,
:environment,
database: {
host: "localhost",
port: 5432,
pool: 5
},
redis: {
url: "redis://localhost:6379"
}
end
# Access nested values
AppConfig.new.database.host
Ap