Standard Workflow

Dogfooding guide for any project type

TypeScript Python Rust Go

"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

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

npm install -g my-awesome-cli

## Usage

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, package manager, and project type.

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
  • Detects stack from package files
  • Generates project.faf with honest initial score
✓ 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."

Records birth DNA, shows AI context is first-class, foundation committed before implementation.

Step 5: Build your project

When: After foundation committed
src/
  index.ts
  cli.ts
  commands/
tests/
  cli.test.ts

AI assistants have context from day 1. No "add docs later" technical debt.

Step 6: Auto-detect new context

Command: faf auto Expected score: 70–85%
faf auto

Turbo-Cat scans your codebase (153 format types), detects frameworks and config, grows score 42% → 78%.

✓ 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: 85%+ (◇ Bronze) or 100% (✪ Trophy)
faf go
? What database does this project use?
  › PostgreSQL
    MongoDB
    None

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

Result: 85%+ ◇ Bronze (production-ready) or 100% ✪ Trophy (perfect)

Step 8: Keep context fresh

Frequency: Before major releases
# 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

✗ 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

✗ 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

✗ 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)
# 2. Structure — npm init -y
# 3. Generate .faf (42%) — faf init
# 4. Commit foundation
# 5. Build (weeks of work...)
# 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

npm init -y
npm install typescript @types/node
faf init
# Detects: TypeScript, npm, Node.js

Python

poetry init
faf init
# Detects: Python, poetry

Rust

cargo init
faf init
# Detects: Rust, cargo, Native runtime

Go

go mod init github.com/user/project
faf init
# Detects: Go, go modules

FAQ

When exactly should I run faf init?

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.

Can I edit project.faf manually?

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

Do I need CLAUDE.md?

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

How often should I run faf auto?

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