ailiteracynepal 🇳🇵
Text size

Chapter 02 · Section IV · 8 min read

2.4 Terminal config: shell integration, status line, theme

Small ergonomic wins for the terminal side of Claude Code — shell integration, the status line, colour themes. Trivial to set up, and each one saves a few seconds every hour.

Claude Code runs inside your terminal, which means anything your terminal already does — shell completion, prompt customisation, colour themes — can be enlisted to make the CLI feel like it belongs. Three settings do most of the work.

Shell integration

Enable tab-complete for claude subcommands, flags, session ids, and slash commands:

# bash / zsh
eval "$(claude completion bash)"   # or `zsh`

# fish
claude completion fish | source

Drop that in your ~/.bashrc / ~/.zshrc / fish config. Restart the shell. claude --<TAB> now completes flags; claude -r <TAB> completes recent session IDs.

Status line

The status line is the one-line summary Claude Code shows at the top of the session. It reports the model, permission mode, token count, and cost so far. You can customise it via a statusline shell command in settings:

{
  "statusline": {
    "command": "~/.claude/bin/statusline.sh"
  }
}

The command is called on a short interval with a JSON blob on stdin — model, cost, working directory. Whatever it prints on stdout becomes the status line.

For most people the default is fine. Reach for a custom status line when you want to surface something the default omits — the current git branch, a project-local warning, the remaining budget.

Theme

/config opens the settings palette; theme is one of the entries. Options: light, dark, system.

system follows your OS setting — the safest default. light and dark are the honest names. There is no “solarised”: Claude Code deliberately does not ship a dozen themes.

Small nice-to-haves

  • --no-color — disable ANSI colours entirely. Good for CI logs.
  • --verbose — extra logging, useful when diagnosing tool call issues.
  • ALN_NO_ANIMATIONS=1 — disables spinner animations. Handy in some remote terminals that render them poorly.

Check your understanding

Quick check

Which of these gets you tab-completion for `claude` subcommands, flags, and session IDs?