TL;DR: We studied how Boris Cherny (creator of Claude Code) structures his projects - subagents, slash commands, MCP servers, Bun runtime - and built a 12-test integration suite that validates all of it. Now .faf detects and preserves the complete Claude Code ecosystem. Every publish passes Boris-Flow or it doesn't ship.

The Problem

Claude Code has evolved. It's not just CLAUDE.md anymore. Modern Claude Code projects have:

  • .claude/agents/*.md - Specialized subagents for different tasks
  • .claude/commands/*.md - Custom slash commands
  • .claude/settings.json - Permissions and configuration
  • .mcp.json - MCP server integrations (Slack, BigQuery, Sentry)
  • Bun runtime detection (bun.lockb)

If your AI context format doesn't understand this structure, you're working with half a blueprint. Context drift is inevitable.

The Inspiration

Boris Cherny created Claude Code. His setup is the reference implementation:

  • 5 subagents for specialized tasks
  • Custom slash commands for workflows
  • MCP servers for external services
  • Bun as the runtime
  • Everything wired together

We asked: what if .faf could detect all of this automatically? What if we could validate that detection with real tests?

The Insight

Don't guess what a Claude Code project looks like. Model it on the creator's actual setup. Then test against that model.

Boris-Flow: The Test Suite

12 integration tests that must pass before any faf-cli publish:

Boris-Flow integration tests running - all 12 tests passing
View full test output
$ ./tests/boris-flow.test.sh
๐ŸŽ๏ธBORIS-FLOW INTEGRATION TEST

๐ŸŽ๏ธ Using local build: /Users/wolfejam/FAF/cli/dist/cli.js

1๏ธโƒฃ Testing --version...
โœ… faf --version (got: 3.4.4)

2๏ธโƒฃ Creating Claude Code project...
โœ… Created Claude Code structure

3๏ธโƒฃ Testing faf init...
โœ… faf init created project.faf

4๏ธโƒฃ Checking type detection...
โœ… Detected CLI type (got: cli-ts)

5๏ธโƒฃ Checking language detection...
โœ… Language detected (got: TypeScript)

6๏ธโƒฃ Checking Claude Code detection...
โœ… claude_code section exists
โœ… Claude Code detected: true
โœ… Subagents detected (got: 2)

7๏ธโƒฃ Testing faf auto...
โœ… faf auto maintained score (67 โ†’ 67)

8๏ธโƒฃ Filling human context...
โœ… human-set commands succeeded

9๏ธโƒฃ Testing final score...
โœ… Final score is 100% (got: 100%)

๐Ÿ”Ÿ Testing non-TTY safety...
โœ… faf enhance safe in non-TTY (100 โ†’ 100)

๐Ÿ† BORIS-FLOW: ALL 12 TESTS PASSED

โœ… Demo ready
โœ… Safe to publish
   Final score: 100%

If any test fails, the publish stops. No exceptions.

What .faf Now Detects

Run faf init on a Claude Code project and the output includes:

claude_code:
  detected: true
  claude_md: true
  subagents:
    - code-reviewer
    - test-runner
    - docs-writer
  commands:
    - pubpro
    - deploy
  permissions:
    - Bash(npm:*)
    - Read(**)
  mcp_servers:
    - slack
    - bigquery

Complete metadata. Ready for any AI to understand your Claude Code setup instantly.

Live Bi-Sync Demo

We also shipped faf demo sync - a live demonstration of bidirectional sync:

$ faf demo sync

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ FAF BI-SYNC DEMO                            โ”‚
โ”‚ Live demonstration of .faf <-> CLAUDE.md syncโ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Starting demo...
โ”œโ”€ Files detected:
โ”‚  ๐Ÿ“„ project.faf
โ”‚  CLAUDE.md

T=39.589s  ๐ŸŒ€ CLAUDE.md  -> editing...
T=40.092s  ๐Ÿ”— Change detected: "DEMO rule added"
T=40.602s  โšก project.faf synced (9ms)

T=41.603s  ๐ŸŒ€ project.faf  -> editing...
T=42.108s  ๐Ÿ”— Change detected: "demo_marker updated"
T=42.610s  โšก CLAUDE.md synced (1ms)

T=43.611s  ๐ŸŒ€ CLAUDE.md  -> editing...
T=44.111s  ๐Ÿ”— Change detected: "context update"
T=44.612s  โšก project.faf synced (1ms)

3 changes  ยท  3 syncs  ยท  avg 4ms  ยท  0 conflicts

Demo complete - no files changed.

โœจ Try: faf bi-sync - Set up real bi-sync for your project

Every faf-cli user can now demo bi-sync to their team. Built-in evangelism.

Try the interactive web demo โ†’

Why This Matters

Context drift happens when your AI doesn't know your project structure. With Boris-Flow:

BeforeAfter
AI guesses your setupAI knows your exact Claude Code structure
Subagents invisibleSubagents listed by name
MCP servers unknownMCP servers detected
Runtime assumedBun/Node detected from lockfile
Permissions unclearPermissions extracted from settings.json

One format. Complete AI context. Zero drift.

Try It

brew install faf-cli faf init && faf auto

That's it. Your Claude Code structure is now captured in project.faf.

For the brave:

cd your-project npx faf-cli yolo

Downloads faf-cli via npx and runs yolo โ€” init + auto + aggressive extraction in one command. May take a minute on first run.

Get Started

Install faf-cli and run Boris-Flow yourself.

GitHub

View Tests

See the 12 tests that validate every publish.

boris-flow.test.sh

The FAF Tier System

At FAF-Score 100% AI is optimized. No more guessing, peak AI performance is activated ๐Ÿ† Gold Code mode enabled

ScoreTierMeaning
๐Ÿ† 100%Gold CodeAI Optimized
๐Ÿฅ‡ 99%+GoldExceptional
๐Ÿฅˆ 95%+SilverExcellent
๐Ÿฅ‰ 85%+BronzeProduction ready
๐ŸŸข 70%+GreenGood foundation
๐ŸŸก 55%+YellowNeeds work
๐Ÿ”ด <55%RedCritical gaps

The Numbers

  • v3.4.4 - Released January 7, 2026
  • 12/12 - Boris-Flow tests pass
  • 609/629 - Full test suite (20 intentionally skipped)
  • 100% - FAF score on faf-cli itself
  • 4ms - Average bi-sync time
  • 20,000+ - npm downloads