Creator · iuhoay
Last updated · Sep 1, 2026
Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mai
Creator · iuhoay
Last updated · Sep 1, 2026
Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mai
Creator · iuhoay
Last updated · Sep 1, 2026
Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mai
Creator · iuhoay
Last updated · Sep 1, 2026
Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mai
Do not auto-install
Install targets
Codex install prompt
Install the "vanilla-rails" agent skill from https://github.com/iuhoay/skills/tree/main/vanilla-rails/skills/vanilla-rails. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mailers, routes, or form objects; when adding a custom action versus a nested resource; when extracting a service, form, query, or interactor; or when deciding where business logic lives. Also use for Rails reviews and simplification. Do not wait for the user to say "vanilla rails" or "service object". Skip migrations, gem/dependency bumps, CSS/JS/view-only work, credentials, and non-Rails tasks. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"iuhoay-vanilla-rails","task":"Install vanilla-rails","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Code review, repo analysis, testing, CI, GitHub, DevOps, and developer workflow skills.
Scenario
GitHub automation
I need my agent to triage GitHub issues, review pull requests, and summarize repository changes.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add iuhoay/skills --skill vanilla-rails
Maintenance
fresh
14d since push
Risk
Needs review
License is unclear
GitHub quality
52
59/100 Quality · 67/100 Trust
Coverage tags
Review notes
License is unclear · Permission surface may require sandboxing
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
PromisingUseful candidate, but compare it with alternatives before adopting.
Trust
Do not auto-installTrust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
Audit
Needs reviewA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Choose a stronger alternative or inspect the source manually before any install attempt.
Stars
52 GitHub stars
Repo activity
52 stars, 1 forks
Maintenance
14d since push
License
Unknown
Install
npx skills add iuhoay/skills --skill vanilla-rails
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add iuhoay/skills --skill vanilla-railsDo not use when
Alternative
1.9K Stars
npx skills add yanliudesign/mono-color-skill --skill mono-color
Alternative
61.0K Stars
npx skills add mvanhorn/last30days-skill -g
Alternative
38.4K Stars
npx skills add Imbad0202/academic-research-skills
Alternative
256.3K Stars
npx skills add mattpocock/skills --skill grill-me
Agent safety v2
Sparse or mixed signals. Useful for discovery, but not for autonomous installation.
Test manually in an isolated workspace and compare against safer alternatives.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill may drive a browser or interact with web pages.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/iuhoay-vanilla-rails/install
Agent should check
Copy prompt
Task: Use vanilla-rails in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/iuhoay-vanilla-rails/install
Install command: npx skills add iuhoay/skills --skill vanilla-rails
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/iuhoay-vanilla-rails/install
LLM text format
/api/skills/iuhoay-vanilla-rails/install?format=text
Find alternatives
/api/skills/search?q=vanilla-rails&limit=3
Agent prompt
Use vanilla-rails for this task. Review https://www.openagentskill.com/api/skills/iuhoay-vanilla-rails/install, then install with: npx skills add iuhoay/skills --skill vanilla-railsRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/iuhoay-vanilla-rails
LLM text
/api/registry/manifest/iuhoay-vanilla-rails?format=text
Install alias
/api/registry/install/iuhoay-vanilla-rails
Recommend
/api/registry/recommend?task=Use%20vanilla-rails%20in%20an%20agent%20workflow&limit=3
Agent fit
GitHub automation
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Prototype with this skill first; keep a fallback candidate ready.
Role in stack
Fallback candidate
Primary fit
GitHub automation
Trust label
Prototype first
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Trust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
GitHub adoption
CHECK52 GitHub stars
Stars/forks activity
CHECK52 stars, 1 forks; issue activity unavailable in current metadata
Recent maintenance
PASS14d since push
License clarity
CHECKUnknown
Good signals
Review before install
Recommended action
Choose a stronger alternative or inspect the source manually before any install attempt.
Quality profile
Useful candidate, but compare it with alternatives before adopting.
Workflow fit
Manage repositories
I need my agent to triage GitHub issues, review pull requests, and summarize repository changes.
Automate repeated work
I need my agent to automate a repeated workflow across tools and files.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Workflow fit
Turn skills into distribution
A workflow for turning newly indexed skills into SEO briefs, social drafts, comparison pages, and reusable publishing workflows.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Find, compare, and synthesize
A workflow for agents that gather sources, compare claims, summarize long material, and draft useful research briefs.
Alternative shortlist
Similar skills that may fit this task.
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
Academic Research Skills for Claude Code: research → write → review → revise → finalize
A relentless interview to sharpen a plan or design.
--- name: vanilla-rails description: > Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mailers, routes, or form objects; when adding a custom action versus a nested resource; when extracting a service, form, query, or interactor; or when deciding where business logic lives. Also use for Rails reviews and simplification. Do not wait for the user to say "vanilla rails" or "service object". Skip migrations, gem/dependency bumps, CSS/JS/view-only work, credentials, and non-Rails tasks. allowed-tools: - Grep - Glob - Read - Task ---
# Vanilla Rails
Default architecture when writing Rails, from the Vanilla Rails philosophy of 37signals/Basecamp. Apply it while implementing — do not wait for a review command or for the user to name the philosophy.
## Based on Fizzy
This skill is informed by [Fizzy](https://github.com/basecamp/fizzy) - a production Rails application from 37signals.
**Key Fizzy patterns:** - Controllers call Active Record directly: `@board.update!(board_params)`, `@card.comments.create!(comment_params)` - Models composed of concerns: `include Closeable, Golden, Postponable, Watchable` - State tracked with dedicated models: `has_one :closure`, `has_one :goldness` - No `app/services/` directory - Complex multi-step processes use plain objects or ActiveRecord models with state
## Quick Start
Vanilla Rails embraces Rails's built-in patterns and avoids premature abstraction:
**Core Philosophy:** Thin controllers that directly invoke a rich domain model. No service layers or other artifacts unless genuinely justified.
``` ┌─────────────────────────────────────────┐ │ CONTROLLERS │ │ (Thin - HTTP concerns only) │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ MODELS │ │ (Rich - Business logic lives here) │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ ACTIVE RECORD / DATABASE │ └─────────────────────────────────────────┘ ```
**Core Rule:** Don't add layers beyond what Rails provides unless you have a clear, justified reason.
## Default constraint
This skill is the house style for Rails work, not an optional review lens. When loaded during implementation, apply the principles below while writing code. Do not ask which review command to run.
**Do:** - Put domain logic on the model, or a namespaced concern of that model - Keep controllers to params + one model call - Prefer a new nested resource over a custom controller action - Keep jobs and mailers shallow: `_later` enqueues, `_now` does the work on the model
**Do not introduce** `app/services/`, `app/queries/`, interactors, managers, or handlers unless the bar in [When Services Are Actually OK](#when-services-are-actually-ok) is met — and say so in the change.
**Skip this overlay for** migrations, gem/dependency bumps, CSS/JS, view-only markup, credentials, and anything that is not Rails application code.
## Explicit commands
Use these only when the user asks to review, analyze, or plan a simplification — not as the default response to Rails implementation:
1. **Review code changes** - `/vanilla-rails:review` 2. **Analyze codebase** - `/vanilla-rails:analyze` 3. **Plan simplification** - `/vanilla-rails:simplify [goal]`
## Core Principles
### The Three Rules
1. **Thin Controllers** - Controllers only parse params and invoke model methods 2. **Rich Domain Model** - Business logic belongs in models 3. **No Premature Abstraction** - Don't create service layers by default
### Common Anti-Patterns
| Anti-Pattern | Example | Fix | |--------------|---------|-----| | Fat service | 100-line service with domain logic | Move logic to model | | Anemic model | Model with only attributes and associations | Add business methods | | Controller as orchestrator | Controller calling multiple services | Call rich model methods | | Premature service | Simple CRUD wrapped in service | Use plain Active Record | | Service explosion | DoSomethingService for every action | Most should be model methods |
See [Anti-Patterns Reference](references/anti-patterns.md) for complete list.
### When Services Are Actually OK
Services are justified when: - Coordinating multiple models (orchestration, not domain logic) - External API interactions - Multi-step workflows with transaction boundaries - Operations that don't naturally belong to any single model
**Fizzy uses plain objects for this:**
```ruby # Multi-step signup with ActiveModel::Model class Signup include ActiveModel::Model
validates :email_address, format: { with: URI::MailTo::EMAIL_REGEXP } validates :full_name, presence: true
def create_identity @identity = Identity.find_or_create_by!(email_address: email_address) @identity.send_magic_link(for: :sign_up) end
def complete # Complex account creation with rollback handling end end ```
**Fizzy uses ActiveRecord models for stateful operations:**
```ruby # Stateful import with status tracking class Account::Import < ApplicationRecord enum :status, %w[ pending processing completed failed ].index_by(&:itself), default: :pending
def process(start: nil, callback: nil) processing! # Import logic with ZIP file handling mark_completed rescue => e mark_as_failed raise e end end ```
## Style Preferences
### Conditional Returns
Prefer expanded conditionals over guard clauses (unless returning early at method start for non-trivial bodies).
```ruby # Bad - Guard clause def todos_for_new_group ids = params.require(:todolist)[:todo_ids] return [] unless ids @bucket.recordings.todos.find(ids.split(",")) end
# Good - Expanded conditional def todos_for_new_group if ids = params.require(:todolist)[:todo_ids] @bucket.recordings.todos.find(ids.split(",")) else [] end end ```
### Method Ordering
1. `class` methods 2. `public` methods (with `initialize` at top) 3. `private` methods
Order methods vertically by invocation order to help readers follow code flow.
### CRUD Controllers
Model endpoints as REST operations. Don't add custom actions - introduce new resources instead.
```ruby # Bad resources :cards do post :close post :reopen end
# Good resources :cards do resource :closure end ```
### Visibility Modifiers
No newline under visibility modifiers; indent content under them.
```ruby class SomeClass def some_method # ... end
private def some_private_method # ... end end ```
If a module only has private methods, mark `private` at top with extra newline but don't indent.
### Async Operations
Write shallow job classes that delegate to domain models: - Use `_later` suffix for methods that enqueue jobs - Use `_now` suffix for synchronous methods
```ruby # Fizzy pattern: _later enqueues, _now does the work module Event::Relaying extend ActiveSupport::Concern
included do after_create_commit :relay_later end
def relay_later Event::RelayJob.perform_later(self) end
def relay_now # actual implementation end end
class Event::RelayJob < ApplicationJob def perform(event) event.relay_now end end ```
### Bang Methods
Only use `!` for methods with a counterpart without `!`. Don't use `!` to flag destructive actions.
## Pattern Catalog
| Pattern | Use When | Reference | |---------|----------|-----------| | Plain Active Record | Simple CRUD, no coordination needed | [plain-activerecord.md](references/patterns/plain-activerecord.md) | | Rich Model API | Complex behavior single model should own | [rich-models.md](references/patterns/rich-models.md) | | Concern | Shared behavior across models, or organizing one rich model | [concerns.md](references/patterns/concerns.md) | | Delegated Type | "Is-a" relationships with shared identity | [delegated-type.md](references/patterns/delegated-type.md) | | Service/Form | Only when genuinely justified | [when-to-use-services.md](references/patterns/when-to-use-services.md) |
## Red Flags (Over-Engineering)
Run `/vanilla-rails:analyze` to detect:
- 🔴 Service objects for simple operations - 🔴 Business logic in services instead of models - 🔴 Controllers with more than 10 lines - 🔴 "Managers", "Handlers", "Processors" that are just proxies - ⚠️ Anemic models (attributes + associations only) - ⚠️ Domain logic scattered across service objects - ⚠️ Unnecessary abstraction layers
## Examples
See [examples/](examples/) directory for before/after comparisons showing the Vanilla Rails approach.
## Philosophy
> "Vanilla Rails is plenty." - DHH
Most applications don't need layers beyond what Rails provides. Embrace: - `ActiveRecord` models as the home of business logic - Controllers as thin wrappers around model calls - Callbacks and concerns for code organization - Jobs and mailers called from models when appropriate
Resist: - Service layers as default architecture - Premature extraction - "Clean Architecture" for simple CRUD - Pattern-driven development
For more depth, read the [Vanilla Rails blog post](https://dev.37signals.com/vanilla-rails-is-plenty/).
Decision snapshot
recent repository activity
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for vanilla-rails, ready for a manual X post.
A practical pick for source-backed research: vanilla-rails: Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers,... 52 stars https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=x
Listing + install path for vanilla-rails: https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=x Install: npx skills add iuhoay/skills --skill vanilla-rails
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to iuhoay but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails/audit)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)iuhoay
@iuhoay
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Do not auto-install
mono-color
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
1.9K StarsLast30days Skill
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
61.0K StarsAcademic Research Skills
Academic Research Skills for Claude Code: research → write → review → revise → finalize
38.4K Starsgrill-me
A relentless interview to sharpen a plan or design.
256.3K StarsDo not auto-install
Install targets
Codex install prompt
Install the "vanilla-rails" agent skill from https://github.com/iuhoay/skills/tree/main/vanilla-rails/skills/vanilla-rails. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mailers, routes, or form objects; when adding a custom action versus a nested resource; when extracting a service, form, query, or interactor; or when deciding where business logic lives. Also use for Rails reviews and simplification. Do not wait for the user to say "vanilla rails" or "service object". Skip migrations, gem/dependency bumps, CSS/JS/view-only work, credentials, and non-Rails tasks. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"iuhoay-vanilla-rails","task":"Install vanilla-rails","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Code review, repo analysis, testing, CI, GitHub, DevOps, and developer workflow skills.
Scenario
GitHub automation
I need my agent to triage GitHub issues, review pull requests, and summarize repository changes.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add iuhoay/skills --skill vanilla-rails
Maintenance
fresh
14d since push
Risk
Needs review
License is unclear
GitHub quality
52
59/100 Quality · 67/100 Trust
Coverage tags
Review notes
License is unclear · Permission surface may require sandboxing
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
PromisingUseful candidate, but compare it with alternatives before adopting.
Trust
Do not auto-installTrust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
Audit
Needs reviewA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Choose a stronger alternative or inspect the source manually before any install attempt.
Stars
52 GitHub stars
Repo activity
52 stars, 1 forks
Maintenance
14d since push
License
Unknown
Install
npx skills add iuhoay/skills --skill vanilla-rails
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add iuhoay/skills --skill vanilla-railsDo not use when
Alternative
1.9K Stars
npx skills add yanliudesign/mono-color-skill --skill mono-color
Alternative
61.0K Stars
npx skills add mvanhorn/last30days-skill -g
Alternative
38.4K Stars
npx skills add Imbad0202/academic-research-skills
Alternative
256.3K Stars
npx skills add mattpocock/skills --skill grill-me
Agent safety v2
Sparse or mixed signals. Useful for discovery, but not for autonomous installation.
Test manually in an isolated workspace and compare against safer alternatives.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill may drive a browser or interact with web pages.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/iuhoay-vanilla-rails/install
Agent should check
Copy prompt
Task: Use vanilla-rails in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/iuhoay-vanilla-rails/install
Install command: npx skills add iuhoay/skills --skill vanilla-rails
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/iuhoay-vanilla-rails/install
LLM text format
/api/skills/iuhoay-vanilla-rails/install?format=text
Find alternatives
/api/skills/search?q=vanilla-rails&limit=3
Agent prompt
Use vanilla-rails for this task. Review https://www.openagentskill.com/api/skills/iuhoay-vanilla-rails/install, then install with: npx skills add iuhoay/skills --skill vanilla-railsRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/iuhoay-vanilla-rails
LLM text
/api/registry/manifest/iuhoay-vanilla-rails?format=text
Install alias
/api/registry/install/iuhoay-vanilla-rails
Recommend
/api/registry/recommend?task=Use%20vanilla-rails%20in%20an%20agent%20workflow&limit=3
Agent fit
GitHub automation
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Prototype with this skill first; keep a fallback candidate ready.
Role in stack
Fallback candidate
Primary fit
GitHub automation
Trust label
Prototype first
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Trust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
GitHub adoption
CHECK52 GitHub stars
Stars/forks activity
CHECK52 stars, 1 forks; issue activity unavailable in current metadata
Recent maintenance
PASS14d since push
License clarity
CHECKUnknown
Good signals
Review before install
Recommended action
Choose a stronger alternative or inspect the source manually before any install attempt.
Quality profile
Useful candidate, but compare it with alternatives before adopting.
Workflow fit
Manage repositories
I need my agent to triage GitHub issues, review pull requests, and summarize repository changes.
Automate repeated work
I need my agent to automate a repeated workflow across tools and files.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Workflow fit
Turn skills into distribution
A workflow for turning newly indexed skills into SEO briefs, social drafts, comparison pages, and reusable publishing workflows.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Find, compare, and synthesize
A workflow for agents that gather sources, compare claims, summarize long material, and draft useful research briefs.
Alternative shortlist
Similar skills that may fit this task.
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
Academic Research Skills for Claude Code: research → write → review → revise → finalize
A relentless interview to sharpen a plan or design.
--- name: vanilla-rails description: > Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mailers, routes, or form objects; when adding a custom action versus a nested resource; when extracting a service, form, query, or interactor; or when deciding where business logic lives. Also use for Rails reviews and simplification. Do not wait for the user to say "vanilla rails" or "service object". Skip migrations, gem/dependency bumps, CSS/JS/view-only work, credentials, and non-Rails tasks. allowed-tools: - Grep - Glob - Read - Task ---
# Vanilla Rails
Default architecture when writing Rails, from the Vanilla Rails philosophy of 37signals/Basecamp. Apply it while implementing — do not wait for a review command or for the user to name the philosophy.
## Based on Fizzy
This skill is informed by [Fizzy](https://github.com/basecamp/fizzy) - a production Rails application from 37signals.
**Key Fizzy patterns:** - Controllers call Active Record directly: `@board.update!(board_params)`, `@card.comments.create!(comment_params)` - Models composed of concerns: `include Closeable, Golden, Postponable, Watchable` - State tracked with dedicated models: `has_one :closure`, `has_one :goldness` - No `app/services/` directory - Complex multi-step processes use plain objects or ActiveRecord models with state
## Quick Start
Vanilla Rails embraces Rails's built-in patterns and avoids premature abstraction:
**Core Philosophy:** Thin controllers that directly invoke a rich domain model. No service layers or other artifacts unless genuinely justified.
``` ┌─────────────────────────────────────────┐ │ CONTROLLERS │ │ (Thin - HTTP concerns only) │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ MODELS │ │ (Rich - Business logic lives here) │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ ACTIVE RECORD / DATABASE │ └─────────────────────────────────────────┘ ```
**Core Rule:** Don't add layers beyond what Rails provides unless you have a clear, justified reason.
## Default constraint
This skill is the house style for Rails work, not an optional review lens. When loaded during implementation, apply the principles below while writing code. Do not ask which review command to run.
**Do:** - Put domain logic on the model, or a namespaced concern of that model - Keep controllers to params + one model call - Prefer a new nested resource over a custom controller action - Keep jobs and mailers shallow: `_later` enqueues, `_now` does the work on the model
**Do not introduce** `app/services/`, `app/queries/`, interactors, managers, or handlers unless the bar in [When Services Are Actually OK](#when-services-are-actually-ok) is met — and say so in the change.
**Skip this overlay for** migrations, gem/dependency bumps, CSS/JS, view-only markup, credentials, and anything that is not Rails application code.
## Explicit commands
Use these only when the user asks to review, analyze, or plan a simplification — not as the default response to Rails implementation:
1. **Review code changes** - `/vanilla-rails:review` 2. **Analyze codebase** - `/vanilla-rails:analyze` 3. **Plan simplification** - `/vanilla-rails:simplify [goal]`
## Core Principles
### The Three Rules
1. **Thin Controllers** - Controllers only parse params and invoke model methods 2. **Rich Domain Model** - Business logic belongs in models 3. **No Premature Abstraction** - Don't create service layers by default
### Common Anti-Patterns
| Anti-Pattern | Example | Fix | |--------------|---------|-----| | Fat service | 100-line service with domain logic | Move logic to model | | Anemic model | Model with only attributes and associations | Add business methods | | Controller as orchestrator | Controller calling multiple services | Call rich model methods | | Premature service | Simple CRUD wrapped in service | Use plain Active Record | | Service explosion | DoSomethingService for every action | Most should be model methods |
See [Anti-Patterns Reference](references/anti-patterns.md) for complete list.
### When Services Are Actually OK
Services are justified when: - Coordinating multiple models (orchestration, not domain logic) - External API interactions - Multi-step workflows with transaction boundaries - Operations that don't naturally belong to any single model
**Fizzy uses plain objects for this:**
```ruby # Multi-step signup with ActiveModel::Model class Signup include ActiveModel::Model
validates :email_address, format: { with: URI::MailTo::EMAIL_REGEXP } validates :full_name, presence: true
def create_identity @identity = Identity.find_or_create_by!(email_address: email_address) @identity.send_magic_link(for: :sign_up) end
def complete # Complex account creation with rollback handling end end ```
**Fizzy uses ActiveRecord models for stateful operations:**
```ruby # Stateful import with status tracking class Account::Import < ApplicationRecord enum :status, %w[ pending processing completed failed ].index_by(&:itself), default: :pending
def process(start: nil, callback: nil) processing! # Import logic with ZIP file handling mark_completed rescue => e mark_as_failed raise e end end ```
## Style Preferences
### Conditional Returns
Prefer expanded conditionals over guard clauses (unless returning early at method start for non-trivial bodies).
```ruby # Bad - Guard clause def todos_for_new_group ids = params.require(:todolist)[:todo_ids] return [] unless ids @bucket.recordings.todos.find(ids.split(",")) end
# Good - Expanded conditional def todos_for_new_group if ids = params.require(:todolist)[:todo_ids] @bucket.recordings.todos.find(ids.split(",")) else [] end end ```
### Method Ordering
1. `class` methods 2. `public` methods (with `initialize` at top) 3. `private` methods
Order methods vertically by invocation order to help readers follow code flow.
### CRUD Controllers
Model endpoints as REST operations. Don't add custom actions - introduce new resources instead.
```ruby # Bad resources :cards do post :close post :reopen end
# Good resources :cards do resource :closure end ```
### Visibility Modifiers
No newline under visibility modifiers; indent content under them.
```ruby class SomeClass def some_method # ... end
private def some_private_method # ... end end ```
If a module only has private methods, mark `private` at top with extra newline but don't indent.
### Async Operations
Write shallow job classes that delegate to domain models: - Use `_later` suffix for methods that enqueue jobs - Use `_now` suffix for synchronous methods
```ruby # Fizzy pattern: _later enqueues, _now does the work module Event::Relaying extend ActiveSupport::Concern
included do after_create_commit :relay_later end
def relay_later Event::RelayJob.perform_later(self) end
def relay_now # actual implementation end end
class Event::RelayJob < ApplicationJob def perform(event) event.relay_now end end ```
### Bang Methods
Only use `!` for methods with a counterpart without `!`. Don't use `!` to flag destructive actions.
## Pattern Catalog
| Pattern | Use When | Reference | |---------|----------|-----------| | Plain Active Record | Simple CRUD, no coordination needed | [plain-activerecord.md](references/patterns/plain-activerecord.md) | | Rich Model API | Complex behavior single model should own | [rich-models.md](references/patterns/rich-models.md) | | Concern | Shared behavior across models, or organizing one rich model | [concerns.md](references/patterns/concerns.md) | | Delegated Type | "Is-a" relationships with shared identity | [delegated-type.md](references/patterns/delegated-type.md) | | Service/Form | Only when genuinely justified | [when-to-use-services.md](references/patterns/when-to-use-services.md) |
## Red Flags (Over-Engineering)
Run `/vanilla-rails:analyze` to detect:
- 🔴 Service objects for simple operations - 🔴 Business logic in services instead of models - 🔴 Controllers with more than 10 lines - 🔴 "Managers", "Handlers", "Processors" that are just proxies - ⚠️ Anemic models (attributes + associations only) - ⚠️ Domain logic scattered across service objects - ⚠️ Unnecessary abstraction layers
## Examples
See [examples/](examples/) directory for before/after comparisons showing the Vanilla Rails approach.
## Philosophy
> "Vanilla Rails is plenty." - DHH
Most applications don't need layers beyond what Rails provides. Embrace: - `ActiveRecord` models as the home of business logic - Controllers as thin wrappers around model calls - Callbacks and concerns for code organization - Jobs and mailers called from models when appropriate
Resist: - Service layers as default architecture - Premature extraction - "Clean Architecture" for simple CRUD - Pattern-driven development
For more depth, read the [Vanilla Rails blog post](https://dev.37signals.com/vanilla-rails-is-plenty/).
Decision snapshot
recent repository activity
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for vanilla-rails, ready for a manual X post.
A practical pick for source-backed research: vanilla-rails: Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers,... 52 stars https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=x
Listing + install path for vanilla-rails: https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=x Install: npx skills add iuhoay/skills --skill vanilla-rails
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to iuhoay but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails/audit)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)iuhoay
@iuhoay
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Do not auto-install
mono-color
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
1.9K StarsLast30days Skill
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
61.0K StarsAcademic Research Skills
Academic Research Skills for Claude Code: research → write → review → revise → finalize
38.4K Starsgrill-me
A relentless interview to sharpen a plan or design.
256.3K StarsDo not auto-install
Install targets
Codex install prompt
Install the "vanilla-rails" agent skill from https://github.com/iuhoay/skills/tree/main/vanilla-rails/skills/vanilla-rails. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mailers, routes, or form objects; when adding a custom action versus a nested resource; when extracting a service, form, query, or interactor; or when deciding where business logic lives. Also use for Rails reviews and simplification. Do not wait for the user to say "vanilla rails" or "service object". Skip migrations, gem/dependency bumps, CSS/JS/view-only work, credentials, and non-Rails tasks. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"iuhoay-vanilla-rails","task":"Install vanilla-rails","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Code review, repo analysis, testing, CI, GitHub, DevOps, and developer workflow skills.
Scenario
GitHub automation
I need my agent to triage GitHub issues, review pull requests, and summarize repository changes.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add iuhoay/skills --skill vanilla-rails
Maintenance
fresh
14d since push
Risk
Needs review
License is unclear
GitHub quality
52
59/100 Quality · 67/100 Trust
Coverage tags
Review notes
License is unclear · Permission surface may require sandboxing
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
PromisingUseful candidate, but compare it with alternatives before adopting.
Trust
Do not auto-installTrust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
Audit
Needs reviewA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Choose a stronger alternative or inspect the source manually before any install attempt.
Stars
52 GitHub stars
Repo activity
52 stars, 1 forks
Maintenance
14d since push
License
Unknown
Install
npx skills add iuhoay/skills --skill vanilla-rails
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add iuhoay/skills --skill vanilla-railsDo not use when
Alternative
1.9K Stars
npx skills add yanliudesign/mono-color-skill --skill mono-color
Alternative
61.0K Stars
npx skills add mvanhorn/last30days-skill -g
Alternative
38.4K Stars
npx skills add Imbad0202/academic-research-skills
Alternative
256.3K Stars
npx skills add mattpocock/skills --skill grill-me
Agent safety v2
Sparse or mixed signals. Useful for discovery, but not for autonomous installation.
Test manually in an isolated workspace and compare against safer alternatives.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill may drive a browser or interact with web pages.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/iuhoay-vanilla-rails/install
Agent should check
Copy prompt
Task: Use vanilla-rails in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/iuhoay-vanilla-rails/install
Install command: npx skills add iuhoay/skills --skill vanilla-rails
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/iuhoay-vanilla-rails/install
LLM text format
/api/skills/iuhoay-vanilla-rails/install?format=text
Find alternatives
/api/skills/search?q=vanilla-rails&limit=3
Agent prompt
Use vanilla-rails for this task. Review https://www.openagentskill.com/api/skills/iuhoay-vanilla-rails/install, then install with: npx skills add iuhoay/skills --skill vanilla-railsRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/iuhoay-vanilla-rails
LLM text
/api/registry/manifest/iuhoay-vanilla-rails?format=text
Install alias
/api/registry/install/iuhoay-vanilla-rails
Recommend
/api/registry/recommend?task=Use%20vanilla-rails%20in%20an%20agent%20workflow&limit=3
Agent fit
GitHub automation
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Prototype with this skill first; keep a fallback candidate ready.
Role in stack
Fallback candidate
Primary fit
GitHub automation
Trust label
Prototype first
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Trust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
GitHub adoption
CHECK52 GitHub stars
Stars/forks activity
CHECK52 stars, 1 forks; issue activity unavailable in current metadata
Recent maintenance
PASS14d since push
License clarity
CHECKUnknown
Good signals
Review before install
Recommended action
Choose a stronger alternative or inspect the source manually before any install attempt.
Quality profile
Useful candidate, but compare it with alternatives before adopting.
Workflow fit
Manage repositories
I need my agent to triage GitHub issues, review pull requests, and summarize repository changes.
Automate repeated work
I need my agent to automate a repeated workflow across tools and files.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Workflow fit
Turn skills into distribution
A workflow for turning newly indexed skills into SEO briefs, social drafts, comparison pages, and reusable publishing workflows.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Find, compare, and synthesize
A workflow for agents that gather sources, compare claims, summarize long material, and draft useful research briefs.
Alternative shortlist
Similar skills that may fit this task.
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
Academic Research Skills for Claude Code: research → write → review → revise → finalize
A relentless interview to sharpen a plan or design.
--- name: vanilla-rails description: > Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mailers, routes, or form objects; when adding a custom action versus a nested resource; when extracting a service, form, query, or interactor; or when deciding where business logic lives. Also use for Rails reviews and simplification. Do not wait for the user to say "vanilla rails" or "service object". Skip migrations, gem/dependency bumps, CSS/JS/view-only work, credentials, and non-Rails tasks. allowed-tools: - Grep - Glob - Read - Task ---
# Vanilla Rails
Default architecture when writing Rails, from the Vanilla Rails philosophy of 37signals/Basecamp. Apply it while implementing — do not wait for a review command or for the user to name the philosophy.
## Based on Fizzy
This skill is informed by [Fizzy](https://github.com/basecamp/fizzy) - a production Rails application from 37signals.
**Key Fizzy patterns:** - Controllers call Active Record directly: `@board.update!(board_params)`, `@card.comments.create!(comment_params)` - Models composed of concerns: `include Closeable, Golden, Postponable, Watchable` - State tracked with dedicated models: `has_one :closure`, `has_one :goldness` - No `app/services/` directory - Complex multi-step processes use plain objects or ActiveRecord models with state
## Quick Start
Vanilla Rails embraces Rails's built-in patterns and avoids premature abstraction:
**Core Philosophy:** Thin controllers that directly invoke a rich domain model. No service layers or other artifacts unless genuinely justified.
``` ┌─────────────────────────────────────────┐ │ CONTROLLERS │ │ (Thin - HTTP concerns only) │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ MODELS │ │ (Rich - Business logic lives here) │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ ACTIVE RECORD / DATABASE │ └─────────────────────────────────────────┘ ```
**Core Rule:** Don't add layers beyond what Rails provides unless you have a clear, justified reason.
## Default constraint
This skill is the house style for Rails work, not an optional review lens. When loaded during implementation, apply the principles below while writing code. Do not ask which review command to run.
**Do:** - Put domain logic on the model, or a namespaced concern of that model - Keep controllers to params + one model call - Prefer a new nested resource over a custom controller action - Keep jobs and mailers shallow: `_later` enqueues, `_now` does the work on the model
**Do not introduce** `app/services/`, `app/queries/`, interactors, managers, or handlers unless the bar in [When Services Are Actually OK](#when-services-are-actually-ok) is met — and say so in the change.
**Skip this overlay for** migrations, gem/dependency bumps, CSS/JS, view-only markup, credentials, and anything that is not Rails application code.
## Explicit commands
Use these only when the user asks to review, analyze, or plan a simplification — not as the default response to Rails implementation:
1. **Review code changes** - `/vanilla-rails:review` 2. **Analyze codebase** - `/vanilla-rails:analyze` 3. **Plan simplification** - `/vanilla-rails:simplify [goal]`
## Core Principles
### The Three Rules
1. **Thin Controllers** - Controllers only parse params and invoke model methods 2. **Rich Domain Model** - Business logic belongs in models 3. **No Premature Abstraction** - Don't create service layers by default
### Common Anti-Patterns
| Anti-Pattern | Example | Fix | |--------------|---------|-----| | Fat service | 100-line service with domain logic | Move logic to model | | Anemic model | Model with only attributes and associations | Add business methods | | Controller as orchestrator | Controller calling multiple services | Call rich model methods | | Premature service | Simple CRUD wrapped in service | Use plain Active Record | | Service explosion | DoSomethingService for every action | Most should be model methods |
See [Anti-Patterns Reference](references/anti-patterns.md) for complete list.
### When Services Are Actually OK
Services are justified when: - Coordinating multiple models (orchestration, not domain logic) - External API interactions - Multi-step workflows with transaction boundaries - Operations that don't naturally belong to any single model
**Fizzy uses plain objects for this:**
```ruby # Multi-step signup with ActiveModel::Model class Signup include ActiveModel::Model
validates :email_address, format: { with: URI::MailTo::EMAIL_REGEXP } validates :full_name, presence: true
def create_identity @identity = Identity.find_or_create_by!(email_address: email_address) @identity.send_magic_link(for: :sign_up) end
def complete # Complex account creation with rollback handling end end ```
**Fizzy uses ActiveRecord models for stateful operations:**
```ruby # Stateful import with status tracking class Account::Import < ApplicationRecord enum :status, %w[ pending processing completed failed ].index_by(&:itself), default: :pending
def process(start: nil, callback: nil) processing! # Import logic with ZIP file handling mark_completed rescue => e mark_as_failed raise e end end ```
## Style Preferences
### Conditional Returns
Prefer expanded conditionals over guard clauses (unless returning early at method start for non-trivial bodies).
```ruby # Bad - Guard clause def todos_for_new_group ids = params.require(:todolist)[:todo_ids] return [] unless ids @bucket.recordings.todos.find(ids.split(",")) end
# Good - Expanded conditional def todos_for_new_group if ids = params.require(:todolist)[:todo_ids] @bucket.recordings.todos.find(ids.split(",")) else [] end end ```
### Method Ordering
1. `class` methods 2. `public` methods (with `initialize` at top) 3. `private` methods
Order methods vertically by invocation order to help readers follow code flow.
### CRUD Controllers
Model endpoints as REST operations. Don't add custom actions - introduce new resources instead.
```ruby # Bad resources :cards do post :close post :reopen end
# Good resources :cards do resource :closure end ```
### Visibility Modifiers
No newline under visibility modifiers; indent content under them.
```ruby class SomeClass def some_method # ... end
private def some_private_method # ... end end ```
If a module only has private methods, mark `private` at top with extra newline but don't indent.
### Async Operations
Write shallow job classes that delegate to domain models: - Use `_later` suffix for methods that enqueue jobs - Use `_now` suffix for synchronous methods
```ruby # Fizzy pattern: _later enqueues, _now does the work module Event::Relaying extend ActiveSupport::Concern
included do after_create_commit :relay_later end
def relay_later Event::RelayJob.perform_later(self) end
def relay_now # actual implementation end end
class Event::RelayJob < ApplicationJob def perform(event) event.relay_now end end ```
### Bang Methods
Only use `!` for methods with a counterpart without `!`. Don't use `!` to flag destructive actions.
## Pattern Catalog
| Pattern | Use When | Reference | |---------|----------|-----------| | Plain Active Record | Simple CRUD, no coordination needed | [plain-activerecord.md](references/patterns/plain-activerecord.md) | | Rich Model API | Complex behavior single model should own | [rich-models.md](references/patterns/rich-models.md) | | Concern | Shared behavior across models, or organizing one rich model | [concerns.md](references/patterns/concerns.md) | | Delegated Type | "Is-a" relationships with shared identity | [delegated-type.md](references/patterns/delegated-type.md) | | Service/Form | Only when genuinely justified | [when-to-use-services.md](references/patterns/when-to-use-services.md) |
## Red Flags (Over-Engineering)
Run `/vanilla-rails:analyze` to detect:
- 🔴 Service objects for simple operations - 🔴 Business logic in services instead of models - 🔴 Controllers with more than 10 lines - 🔴 "Managers", "Handlers", "Processors" that are just proxies - ⚠️ Anemic models (attributes + associations only) - ⚠️ Domain logic scattered across service objects - ⚠️ Unnecessary abstraction layers
## Examples
See [examples/](examples/) directory for before/after comparisons showing the Vanilla Rails approach.
## Philosophy
> "Vanilla Rails is plenty." - DHH
Most applications don't need layers beyond what Rails provides. Embrace: - `ActiveRecord` models as the home of business logic - Controllers as thin wrappers around model calls - Callbacks and concerns for code organization - Jobs and mailers called from models when appropriate
Resist: - Service layers as default architecture - Premature extraction - "Clean Architecture" for simple CRUD - Pattern-driven development
For more depth, read the [Vanilla Rails blog post](https://dev.37signals.com/vanilla-rails-is-plenty/).
Decision snapshot
recent repository activity
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for vanilla-rails, ready for a manual X post.
A practical pick for source-backed research: vanilla-rails: Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers,... 52 stars https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=x
Listing + install path for vanilla-rails: https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=x Install: npx skills add iuhoay/skills --skill vanilla-rails
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to iuhoay but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails/audit)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)iuhoay
@iuhoay
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Do not auto-install
mono-color
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
1.9K StarsLast30days Skill
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
61.0K StarsAcademic Research Skills
Academic Research Skills for Claude Code: research → write → review → revise → finalize
38.4K Starsgrill-me
A relentless interview to sharpen a plan or design.
256.3K StarsDo not auto-install
Install targets
Codex install prompt
Install the "vanilla-rails" agent skill from https://github.com/iuhoay/skills/tree/main/vanilla-rails/skills/vanilla-rails. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mailers, routes, or form objects; when adding a custom action versus a nested resource; when extracting a service, form, query, or interactor; or when deciding where business logic lives. Also use for Rails reviews and simplification. Do not wait for the user to say "vanilla rails" or "service object". Skip migrations, gem/dependency bumps, CSS/JS/view-only work, credentials, and non-Rails tasks. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"iuhoay-vanilla-rails","task":"Install vanilla-rails","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Code review, repo analysis, testing, CI, GitHub, DevOps, and developer workflow skills.
Scenario
GitHub automation
I need my agent to triage GitHub issues, review pull requests, and summarize repository changes.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add iuhoay/skills --skill vanilla-rails
Maintenance
fresh
14d since push
Risk
Needs review
License is unclear
GitHub quality
52
59/100 Quality · 67/100 Trust
Coverage tags
Review notes
License is unclear · Permission surface may require sandboxing
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
PromisingUseful candidate, but compare it with alternatives before adopting.
Trust
Do not auto-installTrust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
Audit
Needs reviewA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Choose a stronger alternative or inspect the source manually before any install attempt.
Stars
52 GitHub stars
Repo activity
52 stars, 1 forks
Maintenance
14d since push
License
Unknown
Install
npx skills add iuhoay/skills --skill vanilla-rails
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add iuhoay/skills --skill vanilla-railsDo not use when
Alternative
1.9K Stars
npx skills add yanliudesign/mono-color-skill --skill mono-color
Alternative
61.0K Stars
npx skills add mvanhorn/last30days-skill -g
Alternative
38.4K Stars
npx skills add Imbad0202/academic-research-skills
Alternative
256.3K Stars
npx skills add mattpocock/skills --skill grill-me
Agent safety v2
Sparse or mixed signals. Useful for discovery, but not for autonomous installation.
Test manually in an isolated workspace and compare against safer alternatives.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill may drive a browser or interact with web pages.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/iuhoay-vanilla-rails/install
Agent should check
Copy prompt
Task: Use vanilla-rails in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20vanilla-rails%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/iuhoay-vanilla-rails/install
Install command: npx skills add iuhoay/skills --skill vanilla-rails
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/iuhoay-vanilla-rails/install
LLM text format
/api/skills/iuhoay-vanilla-rails/install?format=text
Find alternatives
/api/skills/search?q=vanilla-rails&limit=3
Agent prompt
Use vanilla-rails for this task. Review https://www.openagentskill.com/api/skills/iuhoay-vanilla-rails/install, then install with: npx skills add iuhoay/skills --skill vanilla-railsRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/iuhoay-vanilla-rails
LLM text
/api/registry/manifest/iuhoay-vanilla-rails?format=text
Install alias
/api/registry/install/iuhoay-vanilla-rails
Recommend
/api/registry/recommend?task=Use%20vanilla-rails%20in%20an%20agent%20workflow&limit=3
Agent fit
GitHub automation
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Prototype with this skill first; keep a fallback candidate ready.
Role in stack
Fallback candidate
Primary fit
GitHub automation
Trust label
Prototype first
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Trust Score v5 found insufficient evidence for agent installation. Treat this as discovery material, not an executable recommendation.
GitHub adoption
CHECK52 GitHub stars
Stars/forks activity
CHECK52 stars, 1 forks; issue activity unavailable in current metadata
Recent maintenance
PASS14d since push
License clarity
CHECKUnknown
Good signals
Review before install
Recommended action
Choose a stronger alternative or inspect the source manually before any install attempt.
Quality profile
Useful candidate, but compare it with alternatives before adopting.
Workflow fit
Manage repositories
I need my agent to triage GitHub issues, review pull requests, and summarize repository changes.
Automate repeated work
I need my agent to automate a repeated workflow across tools and files.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Workflow fit
Turn skills into distribution
A workflow for turning newly indexed skills into SEO briefs, social drafts, comparison pages, and reusable publishing workflows.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Find, compare, and synthesize
A workflow for agents that gather sources, compare claims, summarize long material, and draft useful research briefs.
Alternative shortlist
Similar skills that may fit this task.
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
Academic Research Skills for Claude Code: research → write → review → revise → finalize
A relentless interview to sharpen a plan or design.
--- name: vanilla-rails description: > Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers, rich models, no service/query/interactor layer unless genuinely justified. Load this skill when creating or editing controllers, models, jobs, concerns, mailers, routes, or form objects; when adding a custom action versus a nested resource; when extracting a service, form, query, or interactor; or when deciding where business logic lives. Also use for Rails reviews and simplification. Do not wait for the user to say "vanilla rails" or "service object". Skip migrations, gem/dependency bumps, CSS/JS/view-only work, credentials, and non-Rails tasks. allowed-tools: - Grep - Glob - Read - Task ---
# Vanilla Rails
Default architecture when writing Rails, from the Vanilla Rails philosophy of 37signals/Basecamp. Apply it while implementing — do not wait for a review command or for the user to name the philosophy.
## Based on Fizzy
This skill is informed by [Fizzy](https://github.com/basecamp/fizzy) - a production Rails application from 37signals.
**Key Fizzy patterns:** - Controllers call Active Record directly: `@board.update!(board_params)`, `@card.comments.create!(comment_params)` - Models composed of concerns: `include Closeable, Golden, Postponable, Watchable` - State tracked with dedicated models: `has_one :closure`, `has_one :goldness` - No `app/services/` directory - Complex multi-step processes use plain objects or ActiveRecord models with state
## Quick Start
Vanilla Rails embraces Rails's built-in patterns and avoids premature abstraction:
**Core Philosophy:** Thin controllers that directly invoke a rich domain model. No service layers or other artifacts unless genuinely justified.
``` ┌─────────────────────────────────────────┐ │ CONTROLLERS │ │ (Thin - HTTP concerns only) │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ MODELS │ │ (Rich - Business logic lives here) │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ ACTIVE RECORD / DATABASE │ └─────────────────────────────────────────┘ ```
**Core Rule:** Don't add layers beyond what Rails provides unless you have a clear, justified reason.
## Default constraint
This skill is the house style for Rails work, not an optional review lens. When loaded during implementation, apply the principles below while writing code. Do not ask which review command to run.
**Do:** - Put domain logic on the model, or a namespaced concern of that model - Keep controllers to params + one model call - Prefer a new nested resource over a custom controller action - Keep jobs and mailers shallow: `_later` enqueues, `_now` does the work on the model
**Do not introduce** `app/services/`, `app/queries/`, interactors, managers, or handlers unless the bar in [When Services Are Actually OK](#when-services-are-actually-ok) is met — and say so in the change.
**Skip this overlay for** migrations, gem/dependency bumps, CSS/JS, view-only markup, credentials, and anything that is not Rails application code.
## Explicit commands
Use these only when the user asks to review, analyze, or plan a simplification — not as the default response to Rails implementation:
1. **Review code changes** - `/vanilla-rails:review` 2. **Analyze codebase** - `/vanilla-rails:analyze` 3. **Plan simplification** - `/vanilla-rails:simplify [goal]`
## Core Principles
### The Three Rules
1. **Thin Controllers** - Controllers only parse params and invoke model methods 2. **Rich Domain Model** - Business logic belongs in models 3. **No Premature Abstraction** - Don't create service layers by default
### Common Anti-Patterns
| Anti-Pattern | Example | Fix | |--------------|---------|-----| | Fat service | 100-line service with domain logic | Move logic to model | | Anemic model | Model with only attributes and associations | Add business methods | | Controller as orchestrator | Controller calling multiple services | Call rich model methods | | Premature service | Simple CRUD wrapped in service | Use plain Active Record | | Service explosion | DoSomethingService for every action | Most should be model methods |
See [Anti-Patterns Reference](references/anti-patterns.md) for complete list.
### When Services Are Actually OK
Services are justified when: - Coordinating multiple models (orchestration, not domain logic) - External API interactions - Multi-step workflows with transaction boundaries - Operations that don't naturally belong to any single model
**Fizzy uses plain objects for this:**
```ruby # Multi-step signup with ActiveModel::Model class Signup include ActiveModel::Model
validates :email_address, format: { with: URI::MailTo::EMAIL_REGEXP } validates :full_name, presence: true
def create_identity @identity = Identity.find_or_create_by!(email_address: email_address) @identity.send_magic_link(for: :sign_up) end
def complete # Complex account creation with rollback handling end end ```
**Fizzy uses ActiveRecord models for stateful operations:**
```ruby # Stateful import with status tracking class Account::Import < ApplicationRecord enum :status, %w[ pending processing completed failed ].index_by(&:itself), default: :pending
def process(start: nil, callback: nil) processing! # Import logic with ZIP file handling mark_completed rescue => e mark_as_failed raise e end end ```
## Style Preferences
### Conditional Returns
Prefer expanded conditionals over guard clauses (unless returning early at method start for non-trivial bodies).
```ruby # Bad - Guard clause def todos_for_new_group ids = params.require(:todolist)[:todo_ids] return [] unless ids @bucket.recordings.todos.find(ids.split(",")) end
# Good - Expanded conditional def todos_for_new_group if ids = params.require(:todolist)[:todo_ids] @bucket.recordings.todos.find(ids.split(",")) else [] end end ```
### Method Ordering
1. `class` methods 2. `public` methods (with `initialize` at top) 3. `private` methods
Order methods vertically by invocation order to help readers follow code flow.
### CRUD Controllers
Model endpoints as REST operations. Don't add custom actions - introduce new resources instead.
```ruby # Bad resources :cards do post :close post :reopen end
# Good resources :cards do resource :closure end ```
### Visibility Modifiers
No newline under visibility modifiers; indent content under them.
```ruby class SomeClass def some_method # ... end
private def some_private_method # ... end end ```
If a module only has private methods, mark `private` at top with extra newline but don't indent.
### Async Operations
Write shallow job classes that delegate to domain models: - Use `_later` suffix for methods that enqueue jobs - Use `_now` suffix for synchronous methods
```ruby # Fizzy pattern: _later enqueues, _now does the work module Event::Relaying extend ActiveSupport::Concern
included do after_create_commit :relay_later end
def relay_later Event::RelayJob.perform_later(self) end
def relay_now # actual implementation end end
class Event::RelayJob < ApplicationJob def perform(event) event.relay_now end end ```
### Bang Methods
Only use `!` for methods with a counterpart without `!`. Don't use `!` to flag destructive actions.
## Pattern Catalog
| Pattern | Use When | Reference | |---------|----------|-----------| | Plain Active Record | Simple CRUD, no coordination needed | [plain-activerecord.md](references/patterns/plain-activerecord.md) | | Rich Model API | Complex behavior single model should own | [rich-models.md](references/patterns/rich-models.md) | | Concern | Shared behavior across models, or organizing one rich model | [concerns.md](references/patterns/concerns.md) | | Delegated Type | "Is-a" relationships with shared identity | [delegated-type.md](references/patterns/delegated-type.md) | | Service/Form | Only when genuinely justified | [when-to-use-services.md](references/patterns/when-to-use-services.md) |
## Red Flags (Over-Engineering)
Run `/vanilla-rails:analyze` to detect:
- 🔴 Service objects for simple operations - 🔴 Business logic in services instead of models - 🔴 Controllers with more than 10 lines - 🔴 "Managers", "Handlers", "Processors" that are just proxies - ⚠️ Anemic models (attributes + associations only) - ⚠️ Domain logic scattered across service objects - ⚠️ Unnecessary abstraction layers
## Examples
See [examples/](examples/) directory for before/after comparisons showing the Vanilla Rails approach.
## Philosophy
> "Vanilla Rails is plenty." - DHH
Most applications don't need layers beyond what Rails provides. Embrace: - `ActiveRecord` models as the home of business logic - Controllers as thin wrappers around model calls - Callbacks and concerns for code organization - Jobs and mailers called from models when appropriate
Resist: - Service layers as default architecture - Premature extraction - "Clean Architecture" for simple CRUD - Pattern-driven development
For more depth, read the [Vanilla Rails blog post](https://dev.37signals.com/vanilla-rails-is-plenty/).
Decision snapshot
recent repository activity
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for vanilla-rails, ready for a manual X post.
A practical pick for source-backed research: vanilla-rails: Apply Vanilla Rails (37signals/Basecamp) as the default architecture when writing or changing Rails code: thin controllers,... 52 stars https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=x
Listing + install path for vanilla-rails: https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=x Install: npx skills add iuhoay/skills --skill vanilla-rails
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to iuhoay but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails/audit)
[](https://www.openagentskill.com/skills/iuhoay-vanilla-rails?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)iuhoay
@iuhoay
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Do not auto-install
mono-color
Generate original one-ink or controlled two-ink editorial images from any theme, sentence, article idea, object, or reference photo. Always use this skill when the user asks for 单色海报、双色印刷、单色调视觉、蓝色/绿色孔版印刷、risograph、网点照片、复古或当代编辑排版、zine poster, monochrome editorial poster, duotone print, or asks to use the mono-color style. It uses an adaptive white, gray, or pale-beige substrate, no more than two printing inks, active negative space, terse human language, and strong serif/grotesk/mono typography without making retro styling the default or copying a source composition, wording, logo, or artwork. Produce both the final generation prompt and the generated raster image unless the user explicitly asks for prompt only.
1.9K StarsLast30days Skill
Research the last 30 days across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web, then synthesize a grounded brief for an AI agent.
61.0K StarsAcademic Research Skills
Academic Research Skills for Claude Code: research → write → review → revise → finalize
38.4K Starsgrill-me
A relentless interview to sharpen a plan or design.
256.3K StarsPermission surface
shell or command execution, filesystem or document access
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness
Permission surface
shell or command execution, filesystem or document access
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness
Permission surface
shell or command execution, filesystem or document access
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness
Permission surface
shell or command execution, filesystem or document access
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness