TL;DR: faf-cli v8 authors a new era: the Always33 engine. Same score,
everywhere. faf-cli still fills 21 slots, and the 12 enterprise slots stay slotignored. Upgrading from v7? Run faf auto once. It marks the 12
enterprise slots slotignored, and your score is back.
In Plain English
Old state. Through v7.16, faf score counted 21 slots. The
always-33 scorers counted 33. The same file could get two different numbers.
Fix. faf-cli now scores with the always-33 kernel. Slots that are not
applicable to a project are marked slotignored, and do not score.
New state. One number. faf-cli gives your file the same score as every other FAF tool.
npm install -g faf-cli@8.0.1 faf autoHomebrew: brew install wolfe-jam/faf/faf-cli. To try it without installing: npx faf-cli auto or pnpm dlx faf auto.
What happened since Discoverable
One blog, one arc. The last faf-cli write-up was v7.16 The Discoverable Edition. Short tour to today:
- v7.16.2:
faf compileemits FAFb wire v2, the same bytes as the faf-fafb golden. Not a blog. - v8.0.0: The Always33 Edition. This is the log entry for the stretch.
- v8.0.1: pnpm installs work. faf-cli gets its scoring kernel from npm, not a folder inside the package.
This post opens the Always33 series, one release at a time. The overview is The Always33 Suite.
What v8 is
The Always33 engine. faf-cli scores every .faf with the
vendored always-33 kernel (Rust, compiled to WASM), the same engine behind every FAF
score. Through v7.16, faf score counted only slots 1 to 21. We checked it against the reference
always-33 scorer on the project.faf of all 80 FAF repos: same score on every
one.
Your 21 slots, and the 12 enterprise slots in view. faf-cli fills the 21
base slots. faf init, faf auto and faf git mark the
12 enterprise slots (infra, app, ops) slotignored unless your app type uses
them, and faf score lists all 33.
Upgrading: run faf auto once
This is the breaking part. A .faf without the 12 enterprise markers now counts
them as empty: 21 filled is 21 of 33, which is 64%. Run faf auto. It writes the
markers and the score returns. We tested four v7 files:
56 → 100 · 56 → 100 · 58 → 100 · 52 → 100Anything that gates on faf score, such as a CI threshold, should re-check its
number after upgrading.
Also in v8
tbdandtodo, in any case, are placeholders. They count as empty.- A command can carry its own note. In
project.faf,build: bun run build — clean, bundle cli+index, then tscbecomes a command with a#comment inAGENTS.md. The note never ends up in a line someone would run. init --forcekeeps the life it ends. A reset writes the old birth record intopriorLineage, andfaf dnaprints each earlier life.- Older
.faf-dnafiles that carrybirthWeightnow read as the birth score. The file is never rewritten. faf demowrites its sample the faf-cli way, 21 slots plus the 12 enterprise markers, and scores ✪ 100%.
Try it
Install (npm or Homebrew):
npm install -g faf-cli@8.0.1 brew install wolfe-jam/faf/faf-cliThen, in your project:
faf auto faf scoreMore depth: The Always33 Suite · CHANGELOG · repo.
Technical details
- Version: 8.0.1 (September 30, 2026); 8.0.0 shipped September 26
- Edition: The Always33 Edition
- Scoring: always-33 kernel (Rust → WASM); faf-cli fills 21 slots, the 12 enterprise slots
slotignored - Verified: same score as the reference scorer on 80 FAF repos
- Tests: 2075
- Packages: npm
faf-cli· Homebrewwolfe-jam/faf/faf-cli
Feedback welcome
Questions, nits, suggestions: guide the next version. Tell us what you want to see.
