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 score

What 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 rails and/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.rbbackend + Rails
gem 'sinatra' / Roda / Grape / Hanamibackend + that framework
gem 'mcp' (official SDK) / known MCP gemsmcp
thor / GLI / gemspec executablescli
Bare Gemfile / pure gemspec, no host gemslibrary — 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 score

Open 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 Gemfile as Rails · eval the Gemfile DSL · know every gem on rubygems.org · fully roll up engines/monorepos yet.

If this saves you a wrong agent brief, a star helps the next project find it.

Star faf-cli