TL;DR: Birth DNA on every fresh .faf. The Relentless 6-W extractor reads your manifest and README, fills human_context from sources, never fakes. Turbo-Cat detects 200+ formats — Python, Rust, PHP, all in. faf export --grok closes the Grok interop loop. Browser extensions earn their own App-Type. And init, auto, git now flow through one shared pipeline — they can't drift.

What's Restored

Three capabilities went quiet in v6.0. v6.8 brings them back, sharper.

Birth DNA. Every fresh .faf now ships with a .faf-dna birth certificate — a separate file by design, so the certificate can't drift if the score evolves. New faf dna command renders the birth → growth journey at any point.

Relentless 6-W extractor. faf auto now fills the six W's — who, what, why, where, when, how — from your package.json and README signals. Sourced-or-empty. No fabricated guesses, no hallucinated context. If the README has it, the slot has it. If the README doesn't, the slot stays empty.

Turbo-Cat format-finder. ~200-format manifest detection. Non-npm ecosystems — Python, Rust, PHP, all of them — get real main_language and stack.build values instead of "Unknown". Drop FAF into any repo, it recognizes what you actually built it with.

What's New

faf export --grok — wires the hosted Grok MCP into .grok/config.toml. Opt-in, idempotent, non-destructive: existing mcp_servers entries are preserved. The Grok-side interop loop now closes alongside the existing AGENTS / Cursor / Gemini exporters.

extension App-Type. Browser extensions (Manifest V3, manifest_version) now classify correctly with a 16-slot shape — no backend, no API type. Previously misclassified as Svelte web apps with phantom REST APIs. Detection fires before framework heuristics now, so this can't happen again.

One Shared Pipeline

Three commands used to do their own thing for fresh .faf creation: faf init, faf auto, faf git <url>. Three code paths, three possible drift surfaces. One bug-fix to one would leave the other two behind.

v6.8 unifies them. A new module — src/detect/assemble.ts — exports a single assembleFreshFaf primitive. init, auto, and git all route through it. Drift between them is now structurally impossible.

Same command surfaces, richer output: faf init produces a fully-filled .faf instead of a sparse scaffold. faf git <url> fills slots beyond bare manifest detection. faf auto's the reference behavior; the others match it.

Improved

  • exports map — bun consumers resolve faf-cli cleanly. The downstream FAF MCP servers no longer need a workaround bridge.
  • Windows CI — real test timeout on every invocation. The recurring red is root-caused, not papered over.
  • WJTTC spec-conformance — the shared @faf/specification corpus runs in isolated CI. Real contract drift detection at every push.

Try It

bunx faf auto

Or install globally:

npm install -g faf-cli@6.8.0

GitHub

Source, release notes, the 18-commit story.

faf-cli

npm

Install the latest. faf-cli + faf shipped in lockstep.

faf-cli

The Numbers

  • v6.8.0 — Released May 30, 2026
  • 762/762 — Tests passing (was 716 at v6.7.1)
  • 18 commits — Since the last shipped release
  • 9/9 slots — project.faf at 🏆 Trophy 100%
  • 28,480 + 1,021faf-cli + faf on npm (dual-publish lockstep)
  • 65,000+ — FAF ecosystem grand total · ~2× faf-cli · 22 packages across npm + PyPI + crates.io