The AI clean-up in FrankenKeys runs on the phone, and that is true on every phone it installs on. What is not the same on every phone is which engine does the work. There are two, they are chosen automatically, and the difference is worth knowing before you judge the result.
One thing to say first: the clean-up is English only. Both model clients are created with the English language option and the rules engine is written around English, so it is English that gets fixed. Typing, prediction, autocorrect and swipe work in all thirty languages; the rewrites do not. Open studio.forgedev.forgeboard.engine.NanoEngine in the unobfuscated build and the language is there in the options.
Tier one: the rules engine, everywhere
Every FrankenKeys install carries a deterministic text pipeline: de-clutter, grammar, tone (professional, casual, bullets), case changes, emoji stripping, condense. It is pure string transformation, no model, no I/O, and it runs in a few milliseconds on a whole field. It is what you get on a phone with no on-device model, and it is the fallback on every phone when the model tier errors, times out, or is busy.
It is honest to call this modest. It fixes capitalisation, terminal punctuation, doubled words and a catalogue of common slips. It does not understand your sentence. It is also the only tier that is guaranteed to exist, which is why it exists.
Tier two: Gemini Nano, through Android's AICore
On supported phones, Android ships a system service called AICore that hosts Google's Gemini Nano model. Apps reach it through the ML Kit GenAI libraries, over a binder connection to that service. FrankenKeys uses three of those: Proofreading, Rewriting and the free-form Prompt API. The model runs in AICore's process, not the keyboard's, which matters twice: it costs the keyboard no memory, and it needs no network permission in the keyboard's manifest. The one permission it does add is the bind to the AICore service, and it is on the permission list for that reason.
Google's ML Kit documentation states the privacy property directly: "Input, inference, and output data is processed locally".
Which phones, per Google
I am not going to maintain a device list of my own, because Google maintains the real one and it changes. As of 2026-09-06, the ML Kit GenAI overview says the feature APIs (Proofreading, Rewriting, Summarization, Image Description) are available on Pixel 9 and later, Samsung Galaxy S25 and S26 series and recent Fold and Flip models, and a list of phones from OnePlus, OPPO, Xiaomi, vivo, Honor, Motorola, realme, iQOO, POCO, Lenovo, Sharp and Sony, "with plans to expand support". The Prompt API has a narrower list that varies by which Nano version the phone carries.
Two more conditions from the same documentation:
- The Proofreading API "requires Android API level 26 or higher", which is moot here because FrankenKeys needs Android 10 anyway.
- "This API is not supported on devices with an unlocked bootloader." If you have unlocked yours, you get tier one.
Which tier you are on, without guessing
Open FrankenKeys settings, AI engine. The page reports whether the phone has AICore at all, and whether the Proofreading and Rewriting tier and the Prompt tier are available, downloadable, downloading or unavailable. The keyboard probes the model variants rather than trusting the default request, because the Prompt client asks for a specific variant by default and reports "unavailable" on phones that can run a different one perfectly well.
What the model is not allowed to do
Even on tier two, the keyboard does not let the model write your sentence. When a typed sentence goes idle for 900 milliseconds with the setting enabled, the keyboard asks for a correction and shows the result as a chip. There is an auto mode for typed sentences, off by default, that applies the rules-tier fix with an undo offer; for typed text the model tier is never applied silently. Dictation is the one place a model's correction is applied, and only because you asked for it: with Hold it until you send on, the default, the transcript is tidied when you tap send and inserted as one edit with one undo. Every candidate, typed or dictated, is measured against the original: rejected if the edit distance exceeds 35 percent of the original's length, rejected if the result is more than 40 percent longer, and for dictation also rejected if it changes a number or drops words that were said, in which case the rules tier's tidy is used. Fragments under 24 characters or four words are never offered a fix. Those numbers are constants in a class called SentenceFix, chosen so that a fix can remove filler, add a capital and fix a handful of spellings, and cannot quietly swap your sentence for the model's.
The in-keyboard chat panel, on phones with the Prompt tier, keeps its transcript in memory only, never serialises it, drops it when you leave the field unless you have turned on session keeping, and refuses to open in password or incognito fields. The hint it sends the model about the field is a category label, never the field's contents.
The honest limitation
Google decides which phones get AICore. Nothing I can do changes that list, and a phone from 2022 is not going to appear on it. On those phones FrankenKeys is a keyboard with a rules-based tidy-up, and I would rather you knew that from this page than from the settings screen.
Where to check
- developers.google.com/ml-kit/genai: the supported-device lists, the "processed locally" statement, and the per-API pages.
- developers.google.com/ml-kit/genai/proofreading/android: the API 26 and unlocked-bootloader conditions.
- The FrankenKeys AI engine settings page: what your phone reports.
studio.forgedev.forgeboard.engine.SentenceFixin the decompiled build: the 35 percent, 40 percent, 24 character and 900 millisecond constants.
Two tiers, one promise. The promise is the same on both: nothing you type leaves the phone, because the app has no way to send it.