M3

marckohlbrugge/37signals-skills

开发工具
685 stars 质量 73 趋势 73

Agent skills and a reference guide that teach AI coding assistants to write Rails the 37signals way — extracted from Fizzy, Campfire, and 100+ of DHH's code reviews.

概览

Agent skills and a reference guide that teach AI coding assistants to write Rails the 37signals way — extracted from Fizzy, Campfire, and 100+ of DHH's code reviews.

README

37signals Skills

Agent skills and a reference guide that teach AI coding assistants to write Rails the 37signals way — extracted from Fizzy, Campfire, and 100+ of DHH’s code reviews.

Unofficial. This is a community project based on 37signals’ public code and discussions — not affiliated with or endorsed by 37signals.

Drop the skills into Claude Code or Cursor and your agent starts applying the same patterns 37signals uses: rich domain models over service objects, state as records, CRUD-everything routing, fixtures over factories, vanilla Rails over gems.

The Skills

Skill What it covers Invocation
rails-best-practices-core Architecture, naming, modeling patterns, REST routing, authorization — the baseline for all Rails work Automatic
rails-hotwire-realtime Turbo Streams/Frames, morphing, Stimulus, ActionCable, presence, optimistic UI, web push On demand
rails-jobs Active Job design, _later/_now conventions, Solid Queue, recurring tasks, retry policy On demand
rails-migrations Safe schema changes, staged rollouts, script backfills, multi-DB/multi-adapter setups On demand
rails-security-multitenancy Path-based tenancy, Identity→Session→User auth, scoped lookups, SSRF, CSRF, rate limiting On demand
rails-testing Minitest + fixtures, coverage budget, Turbo/broadcast assertions, multi-tenant test wiring On demand
rails-webhooks Outbox delivery, failure classification, delinquency circuit breakers, payload signing On demand
dhh Review code like DHH would — direct, opinionated, allergic to over-engineering /dhh

“On demand” skills are marked disable-model-invocation: true so they don’t bloat every request — invoke them explicitly (e.g. as a slash command) or let the core skill point to them.

Installation

Claude Code

Copy the skills you want into your personal or project skills directory:

git clone https://github.com/marckohlbrugge/37signals-skills.git

# Personal (all projects)
cp -R 37signals-skills/skills/* ~/.claude/skills/

# Or per-project
cp -R 37signals-skills/skills/* your-app/.claude/skills/

Then ask for a review with /dhh, or just write Rails code — the core skill activates automatically.

Cursor

# Per-project
cp -R 37signals-skills/skills/* your-app/.cursor/skills/

Codex

Copy the skills into your global Codex skills directory:

git clone https://github.com/marckohlbrugge/37signals-skills.git
mkdir -p ~/.agents/skills
cp -R 37signals-skills/skills/* ~/.agents/skills/

Codex can invoke skills explicitly with $skill-name (for example, $dhh) or automatically when a task matches the skill description. Restart Codex if the new skills do not appear.

Other agents

Each skill is a plain SKILL.md with YAML frontmatter (Agent Skills format). Most SKILL.md-compatible tools can load them as-is, or paste the contents into your system prompt / rules file.

Staying up to date

Clone the repo somewhere permanent and symlink instead of copying:

ln -s "$(pwd)/37signals-skills/skills/"* ~/.claude/skills/

For Codex:

mkdir -p ~/.agents/skills
ln -s "$(pwd)/37signals-skills/skills/"* ~/.agents/skills/

Then git pull to get updates.

The Guide

The skills are distilled from a longer-form reference covering ~35 topics, kept in guide/. It was extracted from analyzing 265 pull requests in 37signals’ Fizzy codebase — not just the final code, but the reviews, trade-offs, and iterations that led to it.

Core Rails: Routing · Controllers · Models · Views

Frontend: Hotwire · Stimulus · CSS · Accessibility · Mobile

Backend: Authentication · Multi-Tenancy · Database · Background Jobs · Caching · Performance

Real-time & Communication: ActionCable · Notifications · Email

Features: Webhooks · Workflows · Watching · Filtering · AI/LLM Integration

Rails Components: Active Storage · Action Text

Infrastructure & Testing: Security Checklist · Testing · Configuration · Observability

Philosophy & People: Development Philosophy · What They Avoid · DHH · Jason Zimdars · Jorge Manrubia

Quick Start: The 37signals Way

  1. Rich domain models over service objects
  2. CRUD controllers over custom actions
  3. Concerns for horizontal code sharing
  4. Records as state over boolean columns
  5. Database-backed everything (no Redis)
  6. Build it yourself before reaching for gems
  7. Ship to learn - prototype quality is valid
  8. Vanilla Rails is plenty - maximize what Rails gives you

Important Caveats

LLM-Generated Content: This guide and these skills were largely produced by an LLM (Claude) analyzing source code, PR descriptions, and code snippets. There may be hallucinations or inaccuracies. Take everything with a grain of salt and verify against actual implementations.

Code License: Code examples extracted from Fizzy are licensed under the O’Saasy License. Please review that license before using code snippets in your projects.

Acknowledgements

  • 37signals for open-sourcing their codebases and giving the community a window into how they build software
  • Rob Zolkos for his work identifying and cataloging the most educational PRs
  • Claude Code for creating this guide through iterative deep-dive research sessions

Further Reading

Disclaimer

This is an unofficial project created by analyzing publicly available code and discussions. It is not affiliated with or endorsed by 37signals.

License

Code examples extracted from Fizzy are licensed under the O’Saasy License. All analysis, commentary, skills, and original content in this repo is licensed under MIT.

View this README on GitHub

推荐工具

换一个关键词,或者移除筛选条件。

安装

npx skillfish add marckohlbrugge/37signals-skills