Use when naming classes, methods, routes in vanilla Rails codebases - enforces concern adjectives (-able/-ible only), no bangs for state, resource naming cascade, and commit message format
From vanilla-railsnpx claudepluginhub zemptime/zemptime-marketplace --plugin vanilla-railsThis skill uses the workspace's default tool permissions.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
37signals naming conventions from production Basecamp codebases.
Every state change flows through this cascade:
| Layer | Pattern | Example |
|---|---|---|
| Concern | Adjective (-able/-ible) | Card::Closeable |
| State model | Noun | Closure |
| Controller | Plural noun | ClosuresController |
| Route | Singular resource | resource :closure |
| Method | Plain verb (no !) | card.close |
| Async enqueue | *_later | notify_watchers_later |
| Sync execute | *_now or plain | notify_watchers_now |
If the cascade doesn't flow, the naming is wrong.
# Wrong
Card::Closing # verb
Card::PinManager # Manager/Handler/Service
Card::Closed # past participle
# Right
Card::Closeable
Card::Pinnable
Card::Assignable
If concern name doesn't end in -able/-ible, STOP and rename immediately. No -ing, -er, -ish, Logic, Management, Handler, Service.
Plain verbs for state changes. ! only when non-bang counterpart exists.
# Wrong # Right
card.close! card.close
card.pin! card.pin_by(user)
card.archive! card.archive
_later always at the end of compound verbs:
notify_watchers_later # enqueues job
notify_watchers_now # actual logic (called by job)
pin_and_notify_later # compound verb
app/models/card/closeable.rb # Model-specific concern
app/models/concerns/eventable.rb # Shared concern
app/models/closure.rb # State record
app/controllers/cards/closures_controller.rb
Present tense, lowercase, no type prefixes:
add pin feature to cards
extract closeable concern
fix closure validation
Not: feat:, fix:, [FEATURE], past tense, title case.
| Red flag | Fix |
|---|---|
| Concern not -able/-ible | Rename immediately |
State method with ! | Remove bang |
post :close in routes | resource :closure |
Async without _later | Add suffix |
ClosureController (singular) | ClosuresController (plural) |
Commit with feat: prefix | Present tense, no prefix |