FAF Dogfooding Guide

Standard Workflow for Any Project

Works with TypeScript, Python, Rust, Go, and more

Philosophy

"README first, .faf second, code third."

You can't generate meaningful AI context from an empty repository. Start with what you're building, then add context, then code.

Quick Start

Prerequisites: Install faf-cli

npm install -g faf-cli

The 8-Step Workflow

Step 1: Create Your README

When: Day 1, before any code
Time: 5-10 minutes

Write a README that answers:

  • WHAT - What does this project do?
  • WHY - Why does it exist? What problem does it solve?
  • WHO - Who is building it? Who is it for?
  • HOW - How do you install/use it?
# Example README.md

# My Awesome CLI

A command-line tool for managing project tasks efficiently.

## Why

Tired of juggling multiple task managers? This CLI brings everything into your terminal.

## Installation

```bash
npm install -g my-awesome-cli
```

## Usage

```bash
my-cli add "Write documentation"
my-cli list
```
Result: Human-readable project definition

Step 2: Add Basic Project Structure

When: After README

Create your language-specific configuration:

# For TypeScript/JavaScript:
npm init -y

# For Python:
poetry init  # or create pyproject.toml

# For Rust:
cargo init

# For Go:
go mod init github.com/user/project

This gives faf-cli the context it needs to detect:

  • Language (TypeScript, Python, Rust, Go)
  • Package manager (npm, poetry, cargo, go modules)
  • Project type (CLI, library, web-app)

Step 3: Generate project.faf

Command: faf init
Expected Score: 30-50%
cd your-project
faf init

What happens:

  • Reads your README (extracts WHO, WHAT, WHY, HOW)
  • Detects project type from files (CLI, web-app, library, etc.)
  • Detects stack from package.json/pyproject.toml/Cargo.toml
  • Generates project.faf with honest initial score

Output:

✓ Generated project.faf (42% - 9/21 slots filled)

Missing context:
  - Database (if applicable)
  - CI/CD pipeline
  - Hosting platform

Run `faf go` to improve your score!
Result: project.faf created with 30-50% score (honest baseline)

Step 4: Commit the Foundation

When: Before writing implementation code
git add README.md package.json project.faf
git commit -m "Add project foundation

- README defines purpose and usage
- package.json defines dependencies
- project.faf provides AI context (42%)

AI-ready before first line of code."

Why commit now:

  • Records "birth DNA" (starting score)
  • Shows AI context is first-class, not afterthought
  • Foundation committed before implementation

Step 5: Build Your Project

When: After foundation committed

Now write your actual implementation:

src/
  index.ts
  cli.ts
  commands/
tests/
  cli.test.ts

Benefits:

  • AI assistants (Claude, Copilot, etc.) have context from day 1
  • No "add docs later" technical debt
  • Clear definition before implementation

Step 6: Auto-Detect New Context

Command: faf auto
Expected Score: 70-85%

After significant development, let Turbo-Cat discover what you've built:

faf auto

What it does:

  • Turbo-Cat scans your codebase (153 format types)
  • Detects test frameworks, build tools, config files
  • Updates project.faf with discovered context
  • Grows score from 42% → 78%

Example discoveries:

✓ Found: vitest.config.ts → Testing: Vitest
✓ Found: .github/workflows → CI/CD: GitHub Actions
✓ Found: vercel.json → Hosting: Vercel

Updated project.faf (78% - 16/21 slots filled)

Step 7: Refine to 100%

Command: faf go
Target Score: 85%+ (Bronze) or 100% (Trophy)

Before release, fill remaining gaps through interactive Q&A:

faf go

Interactive questions:

? What database does this project use?
  › PostgreSQL
    MongoDB
    None

? Where is this deployed?
  › Vercel
    AWS
    Self-hosted

? Who is the primary audience?
  › Developers
    End users
    Internal team
Result: 85%+ 🥉 Bronze (production-ready) or 100% 🏆 Trophy (perfect)

Step 8: Keep Context Fresh

Frequency: Before major releases

Periodically update as your project evolves:

# After adding new features
faf auto

# Before releases
faf go

Your project.faf stays synchronized with your codebase.

Score Progression

StageScoreTierMeaning
After faf init30-50%🟡 YellowHonest baseline
After faf auto70-85%🥉 BronzeProduction-ready
After faf go85-100%🥇 Gold / 🏆 TrophyExcellent / Perfect

Common Mistakes

❌ Mistake #1: Code First, Docs Later

# Write 1000 lines of code...
git commit -m "Initial implementation"

# Then try to add docs
echo "# Project" > README.md
faf init  # Score: 15% 😞

Problem: Low score, missed context during development

❌ Mistake #2: Empty Repo Init

mkdir new-project && cd new-project
git init
faf init  # Score: 0% - Nothing to extract!

Problem: Can't extract WHO/WHAT/WHY from empty repo

❌ Mistake #3: Never Update

faf init  # 6 months ago...
# Add Vite, Vitest, Vercel, tests...
# Never run faf auto
# project.faf still shows 42% (outdated!)

Problem: Stale context doesn't reflect current project

✅ Correct Workflow

# 1. README (WHO/WHAT/WHY)
echo "# My CLI Tool\n\nManages tasks efficiently..." > README.md

# 2. Structure
npm init -y

# 3. Generate .faf (42%)
faf init

# 4. Commit foundation
git commit -m "Add project foundation"

# 5. Build (weeks of work...)
# ...code, tests, configs...

# 6. Update context (78%)
faf auto

# 7. Refine before v1.0 (100%)
faf go

Result: Perfect context from day 1, grows with your project

Language-Specific Examples

TypeScript/Node.js

# Setup
npm init -y
npm install typescript @types/node

# Generate
faf init

# Detects: TypeScript, npm, Node.js

Python

# Setup
poetry init

# Generate
faf init

# Detects: Python, poetry

Rust

# Setup
cargo init

# Generate
faf init

# Detects: Rust, cargo, Native runtime

Go

# Setup
go mod init github.com/user/project

# Generate
faf init

# Detects: Go, go modules

FAQ

Q: When exactly should I run faf init?

A: After you have a README and basic structure (package.json, Cargo.toml, etc.), but before writing implementation code. This gives you 30-50% initial context.

Q: Can I edit project.faf manually?

A: Yes! It's just YAML. But faf go provides a nicer interactive UI.

Q: Do I need CLAUDE.md?

A: No. project.faf works with ALL AIs. CLAUDE.md is optional for Claude-specific prose.

Q: How often should I run faf auto?

A: After significant changes (new frameworks, deployment setup, testing added). Usually once mid-development and before releases.

Key Takeaways

  1. README first - Define what you're building (WHO/WHAT/WHY)
  2. project.faf second - Generate AI context with faf init
  3. Code third - Build with AI context from day 1
  4. Let it grow - Use faf auto to detect new context
  5. Refine before release - Use faf go to reach 85%+
  6. Honest scores - 30% → 70% → 100% is normal progression
  7. Keep it fresh - Update as your project evolves

Quick Reference

CommandWhenPurpose
faf initAfter README + structureGenerate initial project.faf (30-50%)
faf autoMid-developmentAuto-detect new context (→ 70-85%)
faf goBefore releaseInteractive refinement (→ 100%)
faf scoreAnytimeCheck current score
faf bi-syncOptionalGenerate CLAUDE.md