TL;DR: faf-cli 7.6.0 understands Ruby projects
the way you do — from gem names and light layout, not from the fact that a Gemfile exists. Kill line: Gemfile alone ≠ Rails. Pure gems stay pure gems.
npx --yes faf-cli@7.6.0 --version cd your-project && npx --yes faf-cli@7.6.0 auto npx --yes faf-cli@7.6.0 scoreWhat it is
The Ruby Edition is content-aware Ruby detection in faf-cli. You run faf auto in a project with a Gemfile, Gemfile.lock, or *.gemspec; it classifies
from gems and layout you already ship, then writes durable context into project.faf so AI agents know what they’re standing in.
It classifies your project as one of:
- MCP server — gem
mcp(official SDK), fast-mcp, rails-mcp-server, and related client gems - Backend — Rails (
gem railsand/or classic layout), Sinatra, Roda, Grape, Hanami - CLI — Thor, GLI, Commander, gemspec executables
- Library — bare Gemfile / pure gemspec, no host signals. Gems stay gems.
Also recorded: package manager (bundler / rubygems), framework label, and an inspectable found-line. Not a black box. Static parse only — the CLI does not execute your Gemfile.
Why it exists
Every Ruby project can have a Gemfile. Not every Ruby project is Rails.
Libraries, CLIs, Sinatra apps, and Rails apps all ship Bundler files. Filename-only tooling treats them as the same thing — often “a Rails app” — and the agent brief invents models, controllers, and routes you don’t have.
Wrong brief: “Rails app — add a controller.”
Right brief: library · or backend + Rails ·
because the gems (or layout) said so.
Rails already encoded the shape: the rails gem, then config/application.rb / routes, then other frameworks by gem name. The Ruby Edition exists so the first fact agents get is what the project actually is.
What’s in it for Ruby devs
- Agents that match the repo. Rails stays Rails. A pure gem stays a library. No invented ActiveRecord scaffolding by default.
- Zero new config. No tags, no extra manifest — it reads the Gemfile / lock / gemspec you already ship.
- Honest unknowns. Unrecognized gems fall through to
library— not a fake Rails label.
| Your project looks like… | What agents get |
|---|---|
gem 'rails' and/or config/application.rb | backend + Rails |
gem 'sinatra' / Roda / Grape / Hanami | backend + that framework |
gem 'mcp' (official SDK) / known MCP gems | mcp |
thor / GLI / gemspec executables | cli |
Bare Gemfile / pure gemspec, no host gems | library — stays a library |
Try it
Needs Node (or Bun). No account for the CLI. Pin 7.6.0 — don’t rely on a stale global.
npx --yes faf-cli@7.6.0 --version cd your-project npx --yes faf-cli@7.6.0 auto npx --yes faf-cli@7.6.0 scoreOpen project.faf — read project.type and the # found: line: bare library → library (and tech_stack stays Ruby, not Rails). Rails gem or layout → backend + Rails.
RED or Yellow score on a new repo is normal — human slots empty. Detection ≠ Trophy. Shape first; fill who/what/why when you want ✪ 100%.
Daily use: npm install -g faf@7.6.0 (short name) or faf-cli@7.6.0, then faf auto && faf score.
Cold-checked on the public registry for this pin.
Bounds
- Does: static classify from Gemfile / Gemfile.lock / gemspec + light Rails layout (gem names · paths). Does not execute Ruby.
- Does not: treat every
Gemfileas Rails · eval the Gemfile DSL · know every gem on rubygems.org · fully roll up engines/monorepos yet.
Feedback welcome
Missed a gem you ship with? Wrong shape on a real engine or monorepo? Tell us — we will build more. The detection map grows from what Ruby developers actually use.
If this saves you a wrong agent brief, a star helps the next project find it.
Star faf-cli