TL;DR: Claude Code-native context that just works. Every session in a .faf project now opens with one line — faf: context ✪ 100% — fresh — backed by quiet, parseable output, typed results, and a deterministic parity hash any engine can verify. 35 tools.
The Heartbeat
Context is a relay. Every Claude Code session start is a handover — and the baton is one line:
faf: context ✪ 100% — fresh
faf: context refreshed — ✪ 100%
faf: CLAUDE.md created — ○ 10% A native SessionStart hook refreshes CLAUDE.md's faf-managed block from project.faf, then reports in. When nothing changed, nothing is written — no churn, just the heartbeat. The line does three jobs at once: it proves the integration is alive (a silent hook is indistinguishable from a broken one), it grounds Claude (“a current .faf exists, score 100%, don't re-derive the project”), and it puts the ✪ seal in front of you every single session. Directories without a .faf stay fully silent — the hook never speaks where it has no business.
Installed Explicitly — Never Silently
The hook goes in through faf_setup, tool #35. It shows you the exact settings JSON and the exact path before anything is written. Confirm, and it merges non-destructively into your project's .claude/settings.json — every existing key and hook preserved, re-runs idempotent. remove: true takes out exactly the faf hook and nothing else.
A Trust Edition that silently edited your settings would refute its own headline. So this one, doesn't.
Quiet. Typed. Provable.
Quiet: tool output carries no emoji — plain, parseable, scriptable. Tier glyphs use the quiet ladder ♡ ○ ● ◇ ◆ ★ ✪ — geometric symbols that render identically everywhere. One predictable format, no toggle. Even the generated CLAUDE.md block is quiet now: canonical What This Is / Stack / Context, matching faf-cli's export exactly.
Typed: the data tools return structuredContent with published outputSchema — agents parse structures, humans read text, neither gets noise.
Provable: every score carries a determinism parity hash — a SHA-256 over the canonical score projection, bound to the input bytes. Any conformant engine (faf-cli, the Rust kernel, this server) reproduces it, and a third party can check sha256(projection) === parityHash without trusting us. The ✪ trust receipt wraps score + parity into a self-verifying artifact that means the same thing in a terminal, a CI log, and a report. FAF don't lie — and now you can verify that for yourself.
Enhanced Interop — a Fix, Not a Feature
Straight talk: the interop tools used to overwrite AGENTS.md, GEMINI.md, .cursorrules, and CLAUDE.md wholesale. Anything you'd written was lost. That was a bug, and it's fixed — every write now goes through a non-destructive injector. A structured .faf block owns the top of the file; everything you've written below is preserved; re-runs update the block in place. And a build-failing write-guard makes the old behavior impossible to reintroduce. Your files are enhanced, never replaced.
Try It
Or one-click: grab the .mcpb from the release and drop it on Claude Desktop. Then, in Claude Code: “run faf_setup” — preview the hook, confirm, and your next session opens with the baton in hand.
The Numbers
- v5.8.0 — Released June 11, 2026
- 35 tools — verified live on
tools/list - 547 tests, 0 fail — every pillar has its own WJTTC guard
- 🏆 100% — Trophy score, parity-hashed
- IANA —
application/vnd.faf+yaml·application/vnd.fafm+yaml
