Skip to content
Lesson 10 of 1283% of the course

Fix a Claude Code status line that shows nothing

Find out why your Claude Code status line is empty or broken with the one-paste check in Statusline Studio, and fix the common causes: permissions, missing jq, settings that are overridden, fonts and colours.

Video coming soonFix a Claude Code status line that shows nothingUntil then, the lesson below walks through every step.

When a status line script fails, Claude Code does not show an error. It shows nothing. That makes problems look mysterious, but the causes are few and well known. Statusline Studio has a check that finds them in one paste.

Run the one-paste check

Click Not working? (next to the code, or in the install guide). The guide shows a command that starts with bash <<'STATUSLINE_CHECK'. Click Copy check, paste it into a terminal and press Enter.

The one-paste check and the usual fixes.

It checks, in order of how often each goes wrong:

  1. That the script exists in ~/.claude/
  2. That it is executable, or that settings.json runs it through its interpreter, which needs no permission
  3. That every tool it needs is installed, like jq, with the command that installs it on your system (winget in Git Bash, brew on macOS, apt on Linux)
  4. That ~/.claude/settings.json exists, is valid JSON and has the statusLine setting
  5. That the project you are in does not set its own status line in .claude/settings.json or .claude/settings.local.json
  6. That no settings file turns the status line off with "disableAllHooks": true
  7. That the script runs with sample data, and what it prints or which error it gives (a Bash script without jq says so here too)

Each problem is shown with a red cross and the fix under it. When everything passes it prints the output, and the only thing left to do is restart Claude Code.

Fix the permission problem

A script saved from a browser always loses its executable permission. That only matters when settings.json runs the file itself ("command": "~/.claude/statusline.sh"): Claude Code then gets "Permission denied" and shows nothing.

chmod +x ~/.claude/statusline.sh

The same happens when you download a new version over the old one. The studio's settings.json and its install command avoid it for good: they run the script through its interpreter (bash ~/.claude/statusline.sh), which does not need the permission.

Find a script stuck in Downloads

The script has to live in ~/.claude/. If you downloaded it more than once, your browser may have named it statusline (1).sh.

ls ~/Downloads/*statusline*
cp ~/.claude/statusline.sh ~/.claude/statusline.sh.bak
mv ~/Downloads/statusline.sh ~/.claude/statusline.sh

The second line keeps the script you had as statusline.sh.bak. Skip it on a first install, when there is nothing to keep.

Install a missing tool

"jq: command not found" means the Bash version needs jq:

sudo apt install jq      # Debian, Ubuntu
brew install jq          # macOS
winget install jqlang.jq # Windows: Git Bash does not include it

Or switch the studio to Python or Node.js and install again. They need only their interpreter:

sudo apt install python3            # Debian, Ubuntu (Node.js: nodejs)
brew install python                 # macOS (Node.js: node)
winget install Python.Python.3.14   # Windows (Node.js: OpenJS.NodeJS.LTS)

On Windows a python.org install has no python3; the install command then writes python or py -3 into the setting.

Check that nothing overrides your settings

You changed settings.json but nothing changed? Three reasons:

  • Claude Code was not restarted
  • The project has its own .claude/settings.json or .claude/settings.local.json with a statusLine, which wins in that project
  • A typo makes the JSON invalid, and Claude Code ignores the file

The one-paste check finds typos with jq, Python or Node.js, whichever you have. Or run one of these yourself (on Windows, python in place of python3):

jq empty ~/.claude/settings.json && echo "settings.json is valid"
python3 -m json.tool ~/.claude/settings.json >/dev/null && echo "settings.json is valid"
node -e 'JSON.parse(require("fs").readFileSync(process.argv[1], "utf8"))' ~/.claude/settings.json && echo "settings.json is valid"

When it works in one folder but not in another

Claude Code runs the status line only in a folder you trusted, because the line is a command it runs. In a new folder, accept the trust dialog when Claude Code asks, and the line appears.

Each fix comes with the command to copy.

Two settings turn it off everywhere. "disableAllHooks": true in a settings file switches your status line off too; the check looks for it. And where an organisation manages Claude Code with allowManagedHooksOnly, only the status line from its managed settings runs. Ask whoever manages it.

To see why the line stays blank, start Claude Code with claude --debug. It logs what the script writes to stderr, and a run it skipped because the folder is not trusted yet.

Fix icons, colours and empty git segments

  • Boxes or question marks instead of icons: your terminal font lacks those symbols. Pick a Nerd Font in your terminal, or set Icons to Text in Theme and install again.
  • Colours are missing or look wrong: your terminal may not support 24-bit colour. Turn off 24-bit colour in Theme and install again.
  • Git segments are empty: they only show inside a git repository, and git must be installed (git --version).

The next lesson builds the second kind of status line: the rows Claude Code shows for its subagents.

Your progress stays in this browser only.
Contact