From faf
Expert in the .faf format for persistent project context across AI tools. Scores AI-readiness, syncs context to CLAUDE.md, and manages the faf-cli toolkit. Use when working with .faf files or the FCL doctrine.
How this skill is triggered — by the user, by Claude, or both
Slash command
/faf:faf-expertThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The `.faf` file is **Persistent Project Context for AI** — a single source of truth that survives across sessions, tools, and AI assistants.
.faf?The .faf file is Persistent Project Context for AI — a single source of truth that survives across sessions, tools, and AI assistants.
application/vnd.faf+yaml (registered Oct 30, 2025)project.faf versions with your code; every clone gets full AI contextThe credo: FAF defines. MD instructs. AI codes.
.faf files.faf ↔ CLAUDE.md (or AGENTS.md, .cursorrules, GEMINI.md).faf work to the broader receipts: IANA, Anthropic PR #2759, MCP Registrybunx faf # Bun — zero install, fastest
npx faf # npm — works everywhere
npm install -g faf-cli # global install
brew install faf-cli # Homebrew
faf is the verb across every surface: bunx faf, npx faf, /faf (Claude Code plugin), faf (global). Bare faf is shorthand for faf auto — same behavior, fewer keystrokes.
faf init → faf auto → faf go → 🏆 Trophy 100%
| Command | What it does |
|---|---|
faf init | Create a project.faf scaffold for your project |
faf auto | Auto-detect stack, fill what's detectable, score |
faf go | Guided interview to fill the remaining slots → Trophy |
faf score | Check current AI-readiness (0–100%) |
faf sync | Push .faf → CLAUDE.md (and friends) |
faf compile | .faf → .fafb binary (sealed, portable, deterministic) |
faf check | Validate .faf structure |
faf info | Version + system info |
Run faf --help for the full 26-command set.
From v6.6.0 onward, faf-cli recommends only 🏆 Trophy.
| Tier | Score | Status |
|---|---|---|
| 🏆 Trophy | 100% | AI never has to guess |
| ★ Gold | 99%+ | 1 slot from Trophy |
| ◆ Silver | 95%+ | Close — keep going |
| ◇ Bronze | 85%+ | Interim — keep going |
| ● Green | 70%+ | Interim — keep going |
| ● Yellow | 55%+ | AI flipping coins |
| ○ Red | <55% | AI working blind |
| ♡ White | 0% | No context at all |
Why all-or-nothing? Architectural, not aspirational:
Layer 4 AI tooling ← AI optimised by complete FCL
Layer 3 Agents ← can act because FCL is complete
Layer 2 MD instructions ← can be regenerated correctly
Layer 1 .faf (FCL) ← 🏆 Trophy = complete = foundation
100% on Layer 1 makes Layers 2–4 work. Sub-100% degrades every layer above — instructions miss context, agents guess, AI optimisation can't happen.
🏆 is the only emoji. Sub-Trophy tiers use geometric Unicode (★ ◆ ◇ ● ○ ♡). The retired medal ladder (🥇🥈🥉🟢🟡🔴🤍) is history.
v6.6.0 ships a 21-type canonical ladder — 19 detectable + 1 owner-attested + 1 curated-knowledge:
Detectable: documentation · cli · library · sdk · wasm · html · frontend · website · mobile · mcp · backend · data-science · fullstack · svelte · framework · monorepo-root · mcpaas · saas · enterprise
Owner-attested (non-app): about — represents another codebase (public About Repo for a private source). Inherits the source's Trophy via owner attestation.
Curated knowledge: encyclopedia — structured, git-versioned knowledge surface (FAFipedia and similar). Project + human slots, 9 active. Content is .fafi files (inclusion markers, same parser as .faf).
The CLI auto-detects via # found: rationale next to type::
project:
type: cli # found: package.json bin
Read the rationale; refute by inspection. Glass Hood doctrine — the CLI shows its work.
faf_version: 3.0
app_type: cli
project:
name: my-project
goal: One-line elevator pitch
main_language: TypeScript
stack:
framework: React
backend: Node.js
db: PostgreSQL
api: REST
css: Tailwind
state: Zustand
pkg_manager: bun
hosting: Vercel
build: vite
cicd: GitHub Actions
runtime: Node 20+
connection: prisma
human_context:
who: target users
what: one-line description
why: the problem this solves
where: where it ships
when: production since YYYY-MM
how: install/usage command
v6.6.0 uses Mk4 canonical slot names in user-facing docs: db (was database), framework (was frontend), css (was css_framework), state (was state_management), api (was api_type), pkg_manager (was package_manager). 36k+ existing .faf files continue scoring correctly via read-time aliasing.
.faf is the canonical Foundational Context Layer (FCL). CLAUDE.md / AGENTS.md / .cursorrules / GEMINI.md are downstream prose renders that READ .faf to save AI time. They never write back automatically.
.faf ←── 8ms ──→ CLAUDE.md (push: always one-way)
AGENTS.md
.cursorrules
GEMINI.md
faf sync --pull (MD → .faf backfill) is Trophy-gated — blocked below 100% to prevent overwriting canonical slots with prose drift.
application/vnd.faf+yaml at iana.org/assignments/media-types/application/vnd.faf+yaml — registered 2025-10-30| You want to... | Go here |
|---|---|
| Install + start using the CLI | github.com/Wolfe-Jam/faf-cli |
| Read the v6.6 release | CHANGELOG — The Trophy Edition |
| Understand the FCL / Trophy doctrine | docs/SCORING.md |
| Set up bi-sync | docs/SYNC.md |
| Visit the format home | faf.one |
| Pin context to AI tools | Run faf export — generates AGENTS.md, .cursorrules, GEMINI.md from your .faf |
FAF defines. MD instructs. AI codes. v6.6.0 — The Trophy Edition. How no-score became a score.
npx claudepluginhub wolfe-jam/faf-cliConfigures IANA-registered .faf files for persistent AI project context, MCP server setup, championship scoring, and bi-directional sync across Claude, Cursor, Gemini, Windsurf.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.