TL;DR: faf git <url> now grounds every slot in the repo's own files — docker-compose services, Makefile targets, the sibling app dirs where the real stack lives. A polyglot repo (Django + React + Go, no npm workspace) stops reporting type: library / main_language: JavaScript.

In Plain English

Old state. Point faf git at a repo whose real code lives in folders — backend/, frontend/, gateway/ — and it only read the root. The root was a package.json with husky in it. So: "it's a JavaScript library." On a Django + React + Go platform, every line was wrong.

Fix. It walks one level in. Sibling dirs, each with their own manifest, become type: fullstack with the real languages and a # found: polyglot: line that shows its work. It reads docker-compose.yml for the services that are actually running, and the Makefile for the real test command.

New state. Point it at a real repo and every slot is backed by a file you can open — a checkable fact, not a guess.

bunx faf git future-agi/future-agi

Before → after

Same command, same repo (future-agi/future-agi — Django + React + Go):

slot7.9.07.10.0
typelibraryfullstack
main_languageJavaScriptPython (Django · backend); Go (backend); TypeScript (React · frontend)
stack.database—PostgreSQL · ClickHouse
commands.test—cd futureagi && make test
goal"Repo-level tooling…""" (honest — left for a human)

# found: polyglot: agentcc-gateway/ (Go), fi-collector/ (Go), frontend/ (TypeScript), futureagi/ (Python) — the CLI shows why it classified the way it did.

What 7.10.0 reads

  • Sibling app dirs — ≥2 folders each with their own language manifest, a frontend and a backend among them → fullstack, aggregated main_language, polyglot rationale. No new project type — monorepo / enterprise slots are a separate tool.
  • docker-compose*.yml — service images → stack.database (postgres / clickhouse / mysql), stack.runtime (kafka / rabbitmq / temporal), stack.hosting (Docker Compose).
  • Makefile / justfile / Taskfile — targets → commands.test / build / lint. Finds a nested one (cd futureagi && make test) and prefers the primary backend's.
  • .env.example → security.secrets + security.example.
  • Cleaner prose extraction — HTML comment blocks (asset notes, TODO markers) and rows of nav links no longer leak into a slot.

File-facts lead. The README still fills the goal and the 6 Ws — the human story a manifest doesn't hold.

Try it

Any GitHub repo — no clone, no config:

bunx faf git facebook/react bunx faf git future-agi/future-agi

Pin the version:

bunx faf-cli@7.10.0 git <owner/repo>

Both faf and faf-cli are on npm at 7.10.0 — same bits. brew install wolfe-jam/faf/faf-cli for a kept install.

Where it came from

future-agi/future-agi#2443 — a contributor asked for an AGENTS.md authored from a project.faf. Running faf git on that repo returned library / JavaScript / no stack — a wrong answer, on the free CLI, about a real platform. FAF don't lie. The fix was to stop looking only at the root.

Technical details

  • Version: 7.10.0 (September 2, 2026) — faf-cli + faf
  • Tests: 1384 / 1384
  • Score: ✪ Trophy 100% (dogfooded)
  • New readers: docker-compose, Makefile / justfile / Taskfile, .env.example, sibling-dir manifests
  • Not in scope: a monorepo project type, 33-slot always-on, structured per-package fields — a separate tool
  • Platforms: CI matrix ubuntu + macOS