# Spell checking — catch typos while you write

Misspelled words are underlined in every prompt field, with replacements a tap away. You choose the dictionaries; you bring them.

Status: Shipped

Every field where you write a prompt — the conversation composer, an agent's
system and welcome messages, the auto-enrichment prompt — underlines misspelled
words and offers replacements. It runs entirely on your device: nothing you type
is sent anywhere for it. Spell checking is a local convenience, the same one your
keyboard already gives you elsewhere.

![A prompt field with three misspelled words underlined in red; the context menu
on the last one lists replacement suggestions above the field's own actions and a
"Spell-check options…" entry.](/images/spell_check_suggestions.png)

## Why it matters

You build an agent by writing to it — a system prompt is code you author in
prose. A typo in an instruction is a bug, and the ones that slip through are the
ones you stop seeing after the third read. A quiet red underline catches them
while you write, so the prompt you save is the prompt you meant.

## How it works

Turn it on under **Settings → Spell checking**, or from the **"Spell-check
options…"** entry in any prompt field's context menu (right-click or
long-press). The same controls appear in both places: a switch to enable it and,
where the platform supports it, a list of dictionaries to check against.

Misspelled words get a red underline. Open the context menu on one and the top
entries are replacements — pick one and it's swapped in. Spell checking runs
entirely on your device against dictionaries already installed there; nothing you
type is sent anywhere for it.

Where the dictionaries come from depends on the platform:

- **On Android** the app uses the system spell checker — the same one your
  keyboard uses. The language follows your keyboard settings, so there's no
  separate dictionary list to manage.
- **On a desktop (Linux) build** the app checks against the spell-check
  dictionaries installed on your system. The options screen lists exactly the
  ones it finds, and you tick the languages you want; you can select several at
  once and a word only counts as misspelled when none of them accept it. With no
  language ticked, your system locale is used.

![The Spell checking settings page: an enable switch and a "Dictionaries" list of
the languages installed on the system, one of them ticked, with a note explaining
they come from the enchant library.](/images/spell_check_settings.png)

### Getting it working on Linux

The app uses **[enchant](https://abiword.github.io/enchant/)** — the standard
Linux spell-check library — which it loads at runtime (`libenchant-2`). enchant
doesn't hold any words itself; it hands the checking to a **backend**
(**hunspell** is the usual one) and reads that backend's **per-language
dictionaries**. So a working setup is three things: the enchant library, a
backend, and at least one dictionary. Install them from your distribution:

```bash
# Debian / Ubuntu
sudo apt install libenchant-2-2 hunspell-en-us
#   more languages: hunspell-de-de, hunspell-fr, hunspell-es, …

# Fedora
sudo dnf install enchant2 hunspell-en

# Arch
sudo pacman -S enchant hunspell hunspell-en_us
```

Each extra `hunspell-<language>` package you install adds that language to the
dictionary list in **Settings → Spell checking** the next time you launch the
app. If enchant isn't installed at all, spell checking simply stays off — nothing
breaks.

Bring-your-own extends here too: just as you bring your own model and your own
tools, on desktop you bring your own dictionaries.

## What it doesn't do yet

- **No bundled dictionaries.** The app checks against dictionaries your system
  already has; it doesn't ship or download any. On a desktop build with none
  installed, spell checking simply stays off until you add one.
- **No custom word list.** You can't yet teach it a project-specific word (a
  product name, an acronym) to stop flagging — it checks against the installed
  dictionaries as they are.
- **Android follows the keyboard.** On Android the checking language tracks your
  keyboard, so there's no in-app language picker there.

More in [Features](/docs/features): [Providers — bring your own LLM](/docs/features/providers) · [On-device models — run fully offline](/docs/features/embedded-models) · [Agents — the thing you build](/docs/features/agents) · [Tools — giving an agent more than the model knows](/docs/features/tools) · [Workspaces — keep your work in scopes](/docs/features/workspaces) · [Conversations — how a turn runs](/docs/features/conversations) · [Attachments — images and files in a message](/docs/features/attachments) · [Context management — what the model still sees](/docs/features/context-management) · [Background turns — replies that keep running](/docs/features/background-turns) · [Local-first & private by design](/docs/features/local-first) · [Sync — your data across your devices](/docs/features/sync) · [Sharing — move agents, tools and providers as a file](/docs/features/sharing) · [Marketplace — find and publish shared agents, tools and providers](/docs/features/marketplace) · [Running a Couchbase Edge Server](/docs/features/couchbase-edge-server)

---

[Bring Your LM](/) · [Docs](/docs/features) · [Marketplace](/marketplace)

[Articles](/articles) · [Releases](/releases) · [Bundle Format](/marketplace/bundle-format) · [Marketplace Terms](/terms) · [App Privacy](/privacy) · [Website Privacy](/website-privacy) · [Open Source](/open-source) · [llms.txt](/llms.txt)
