384 384
385To turn the feature off, set [`emojiCompletionEnabled`](/docs/en/settings#available-settings) to `false` in `settings.json`. This disables both the suggestion popup and the inline replacement.385To turn the feature off, set [`emojiCompletionEnabled`](/docs/en/settings#available-settings) to `false` in `settings.json`. This disables both the suggestion popup and the inline replacement.
386 386
387## Check spelling as you type
388
389Claude Code can underline misspelled words in the prompt input while you type. It checks only the text in the input box, never Claude's replies or your files. It also checks nothing while the input box is in [shell mode](#shell-mode-with-prefix), `Ctrl+R` history search, or [voice dictation](/docs/en/voice-dictation).
390
391Spell checking is off by default, and Claude Code checks nothing in [screen reader mode](/docs/en/accessibility). Requires Claude Code v2.1.235 or later.
392
393### Prerequisites
394
395* Install [aspell](https://github.com/GNUAspell/aspell), [hunspell](https://github.com/hunspell/hunspell), or [ispell](https://en.wikipedia.org/wiki/Ispell) and make sure it's on your `PATH`. Claude Code runs the first of the three it finds, in that order, on every platform, including a `.cmd` shim a package manager installs on Windows.
396* To check that the program is on your `PATH`, run `aspell --version`, `hunspell --version`, or `ispell -v` in your terminal. A "command not found" error means it isn't on your `PATH` yet.
397
398### Turn spell checking on or off
399
400Claude Code reads the [`spellcheck`](/docs/en/settings#available-settings) setting from three places, and ignores it in a project's `.claude/settings.json` and `.claude/settings.local.json`. Turn it on from whichever one you use:
401
402<Tabs>
403 <Tab title="User settings">
404 Add `spellcheck` to `~/.claude/settings.json`. It applies in every project you open, like the rest of your [user settings](/docs/en/settings#settings-files):
405
406 ```json theme={null}
407 {
408 "spellcheck": { "enabled": true }
409 }
410 ```
411 </Tab>
412
413 <Tab title="Command line">
414 Save `spellcheck` in a JSON file, such as `spellcheck.json`:
415
416 ```json theme={null}
417 {
418 "spellcheck": { "enabled": true }
419 }
420 ```
421
422 Then pass the file to `--settings`. It applies to that session only:
423
424 ```bash theme={null}
425 claude --settings spellcheck.json
426 ```
427 </Tab>
428
429 <Tab title="Managed settings">
430 Add `spellcheck` to one of your organization's [managed settings sources](/docs/en/permissions#managed-settings). It applies to every user who receives those settings, and they can't turn it off:
431
432 ```json theme={null}
433 {
434 "spellcheck": { "enabled": true }
435 }
436 ```
437 </Tab>
438</Tabs>
439
440To check that spell checking is on, type a misspelled word and a space. Claude Code underlines the word. If it doesn't, see [When Claude Code underlines nothing](#when-claude-code-underlines-nothing). To turn spell checking off again, set `enabled` to `false` in the same place, or remove `spellcheck`.
441
442To choose which of the three programs Claude Code runs, which dictionary it uses, or the underline color, add any of these fields next to `enabled`, in the same place:
443
444* `checker`: `aspell`, `hunspell`, or `ispell`. Claude Code doesn't fall back from a checker you name, and treats any other value as `auto`.
445* `language`: a dictionary name in your checker's form, such as `en_GB`. Claude Code ignores any value that isn't a plain dictionary name, such as a path or a name with spaces, and the checker uses its default dictionary.
446* `color`: a color name such as `yellow`, or a `#rrggbb`, `#rgb`, `rgb(r,g,b)`, `ansi256(n)`, or `ansi:<name>` value. Claude Code uses your theme's error color by default and for any value it doesn't recognize.
447
448For example, this `spellcheck` setting runs hunspell with its `en_GB` dictionary and underlines words in yellow. It works the same in `~/.claude/settings.json`, in the file you pass to `--settings`, and in managed settings:
449
450```json theme={null}
451{
452 "spellcheck": {
453 "enabled": true,
454 "checker": "hunspell",
455 "language": "en_GB",
456 "color": "yellow"
457 }
458}
459```
460
461If more than one of the three places has a `spellcheck` setting, Claude Code uses only one of them: managed settings first, then `--settings`, then user settings. It doesn't combine fields from two places. For example, when `--settings` sets `spellcheck`, a `language` in your user settings has no effect.
462
463### What Claude Code underlines
464
465Shortly after you pause typing, Claude Code underlines the words the dictionary doesn't know. It leaves the word you're still typing alone until you move past it, and it never changes your text. It also skips text that looks like code:
466
467* Commands such as `/help`, `@` mentions, URLs, file paths, and flags such as `--verbose`
468* Words with digits, underscores, or a capital letter after the first, and text in backticks
469
470Claude Code also skips Chinese, Japanese, Korean, Thai, Lao, Khmer, and Myanmar text.
471
472Claude Code has no word list of its own: a word is misspelled when your checker says so. To stop Claude Code from underlining a word, add the word to your checker's personal dictionary, following the checker's own documentation. Claude Code picks up the new word after you restart it.
473
474### When Claude Code underlines nothing
475
476Claude Code underlines nothing when it can't keep a checker running:
477
478* No checker is installed, or the one you named in `checker` is missing
479* The checker fails twice in a row, at startup or later in the session. Claude Code restarts it after the first failure and stops checking after the second, until you restart Claude Code
480* The checker takes more than 15 seconds to answer, three times. Each time, Claude Code leaves the words it was waiting on unmarked; after the third, it stops checking until you restart Claude Code
481
482To find out which of these happened, start `claude --debug` with spell checking on and type a word. Then look for the `[spellcheck]` lines in the debug log at `~/.claude/debug/<session-id>.txt`. One line names the program Claude Code started, or lists the ones it looked for and didn't find. Later lines say why it stopped. A missing-dictionary error there means the checker has no dictionary for your `language` value, or no default one when `language` is unset. Install one, or set `language` to a dictionary you have.
483
387## Side questions with /btw484## Side questions with /btw
388 485
389Use `/btw` to ask a question about your current work without adding to the conversation history.486Use `/btw` to ask a question about your current work without adding to the conversation history.