AI DX

Docs lie. Tests don’t.

AI DX for your codebase: conventions AI agents can’t silently bypass — and an AI-run dev environment around them.

Using an AI agent? Point it at getff.ai/llms.txt https://getff.ai/llms.txt

Source-available (FSL-1.1-ALv2 → Apache-2.0 after 2 years). Deterministic. Local-first. $0 LLM calls in CI — enforced by a test.

AI DX on both sides of the keyboard

01The pain

Your agent ignores your rules.

CLAUDE.md and AGENTS.md are prose. The spec itself says the agent “simply parses the text you provide”. Parsing is not enforcement.

as any creeps back.

Conventions you never wrote down break silently. Conventions you DID write down break politely.

Tests pass, protection doesn’t.

LLM-generated tests are often tautological: green, and guarding nothing.

0220 seconds each. No narration needed.

git commit — pre-commit gate
→ An agent adds as any; the pre-commit hook kills it before CI even wakes up.
make self-audit — doc drift
→ A claim in AGENTS.md stops being true; make self-audit fails and names the exact line.

03How it works

  1. 01Write the convention once — a rule file, not a prompt.
  2. 02getff compiles it into native gates: ESLint/husky for npm; for cargo, the demo today is clippy, with cargo-deny on the roadmap. No custom runtime, no LLM in the loop.
  3. 03It fails early — edit-time→pre-commit→pre-push→CI. CI is the last resort, not the first. → How it works in detail

04Feel it in 90 seconds

bash
$ git clone https://github.com/artyhoo/getff$ cd getff && npm install$ make self-audit            # green: every AGENTS.md claim verified# now open AGENTS.md, break any enforcement line, run it again$ make self-audit                    # red: the gate names the claim that lied

That AGENTS.md is not a mock. It is the live root doc of this repo. Open the framework's own AGENTS.md

05Install

One command

Run it from your project root. It copies the rules, wires the git hooks and CI, and asks before it touches your dependencies. Once they are installed, it proves that a rule fires.

bash
$ git clone https://github.com/artyhoo/getff /tmp/rt && bash /tmp/rt/setup ts-server

Or start with the Claude Code plugin

The plugin gives your agent skills, helper agents, and session hooks. It never touches your git hooks or CI. Run the installer when you want rules that fail the build.

claude
/plugin marketplace add artyhoo/getff
/plugin install getff@getff

Every install path — the plugin never silently mutates your git or CI. The hard layer (hooks + CI gates) is one explicit opt-in command.

06Honest limits

getff — honest limits
  • Stacks today, each with its live maturity label from the framework:
    • ts-server — beta Default TS lane; it shares the manifest-rendered multi-stack rule pack with react-next — no ts-server-specific rules beyond it. (verified 2026-09-14)
    • react-next — beta Wires three custom rules by default (two more behind AIF_STRICT_RUNTIME=1) on top of the shared manifest-rendered rule pack. (verified 2026-09-14)
    • react-spa — early Wires two custom rules by default (two more behind AIF_STRICT_RUNTIME=1); the rule-pack is still growing. (verified 2026-09-14)
    • react-native — experimental Ships stack scaffold + templates; no custom rule is wired yet. (verified 2026-09-14)
    • python — alpha Non-npm lane — ast-grep + ruff only; the npm custom-rule engine does not apply. (verified 2026-09-14)
    • cargo — alpha cargo-deny ships as a starter config no workflow runs; the clippy bans are the enforced lane (CI-failing when violated). (verified 2026-09-14)
    • go — alpha The forbidigo ban ships as .golangci.yml on a fresh repo, or as getff-golangci.yml when you already have one (inert locally until you opt in); the delivered CI workflow runs it build-failing in both cells; rule generation is deferred (operator, 2026-09-09). (verified 2026-09-14)
  • The executable AGENTS.md you can open today is this repository's own. Generating one for your project is on the roadmap, not shipped.
  • The source is public under the Functional Source License (FSL-1.1-ALv2). Each release becomes Apache 2.0 on its second anniversary.

07Get updates