Opinionated Rails 8 starter for Codex CLI, built on 37signals/Basecamp conventions.
- Propshaft
- Importmap
- Hotwire (Turbo + Stimulus)
- Solid Queue/Cache/Cable
- SQLite
- Minitest + Fixtures
- rubocop-rails-omakase
See docs/ARCHITECTURE.md for full details.
- Long, specific prompts -> Codex CLI (
gpt-5.2-codex high) - End prompts with
$ask-questions-if-underspecifiedwhen needed - Ask codex to run full gate
- Run
bin/cibefore merging (lint + security + tests + signoff) - Use
bin/ci --no-signofffor local dev - Invoke
$create-prto open a PR with required labels - PR labels flow into Release Drafter -> cut a release when ready
docs/ARCHITECTURE.md— Rails-first structure and patterns to avoid. Use when shaping app layout.docs/BASECAMP_RAILS_GUIDE.md— practical Rails workflow + deploy norms. Use when deciding dev/test/deploy defaults.docs/CODEX_CLI.md— where Codex skills/history live. Use when working on agent tooling.docs/CONCURRENCY.md— Real-time patterns and concurrent writes. Use when adding ActionCable or Turbo Streams.docs/ERROR_HANDLING.md— Exception strategy and resilience. Use when adding rescue blocks or external services.docs/MULTI_TENANCY.md— acts_as_tenant patterns. Use when adding models or writing queries.docs/PERFORMANCE.md— Query budgets and baselines. Use when optimizing or adding eager loading.docs/PRINCIPLES.md— core Rails principles + testing posture. Use for architectural tradeoffs.docs/STYLE.md— Ruby style + lint baseline. Use when editing or setting lint rules.
ask-questions-if-underspecified— Clarify before implementingbrave-search— Web search without a browsercreate-pr— Branch, commit, and open a PRfrontend-design— Distinctive UI generation (no AI slop)game-changing-featureshumanizer— Strip AI writing patternsimprove-from-last-day— Audit recent Codex sessions for doc improvementsseo-audit- SEO auditui-ux-pro-max- UI/UX and design system things
scripts/committer— Safe commit helper (stages only listed paths)scripts/docs-list— List docs with front-matter summariesscripts/browser-tools— Chrome DevTools CLI (macOS)scripts/trash.ts— Move files to trash instead of rmbin/coverage_insights— Coverage analysis with priority-based recommendations
Required PR labels -> tests on self-hosted runner -> Release Drafter builds changelog -> publish when ready. See .github/workflows/ for details.
- Use this template (or fork)
- Update
AGENTS.mdwith your contact info and project-specific rules - Customize
docs/for your domain - Generate the Rails app:
rails new . --skip-jbuilder - Restore customized CI gate —
rails newoverwritesbin/ciandconfig/ci.rbwith defaults. Replaceconfig/ci.rbwith the full gate:CI.run do skip_signoff = ARGV.include?("--no-signoff") step "Setup", "bin/setup --skip-server" step "Style: Ruby", "bundle exec rubocop" step "Style: YAML", "yamllint ." step "Security: Bundler audit", "bundle exec bundle-audit check --update" step "Security: Brakeman", "bundle exec brakeman --exit-on-warn --no-pager" step "Security: Importmap audit", "bin/importmap audit" step "Tests: All", "bin/rails test:all" if success? && !skip_signoff step "Signoff", "gh signoff" elsif !success? failure "CI failed.", "Fix issues and retry." end end
- Add lint + security gems to Gemfile:
gem "rubocop-rails-omakase", require: false group :development, :test do gem "brakeman" gem "bundler-audit" end
- Run
bundle install && bin/ci --no-signoffto verify
Rails 8 defaults already include Propshaft, Importmap, Solid Queue/Cache/Cable, and SQLite. See docs/ARCHITECTURE.md for stack rationale.
Inspired by github.com/steipete and his agent-skills repository. Rails conventions informed by 37signals/Basecamp.