Коротко — чаще всего причина не в самом Claude Code, а в каком‑то проектно‑локальном окружении/файле, который при отрисовке статуса даёт «мусор» (есть невидимые символы, лишние escape‑последовательности, или меняется поведение терминала). Что проверить и как диагностировать — пошагово:
1) Изоляция
- Попробуйте из той же папки запустить CLI из другого терминала/эмулятора или через подсовывание переменных:
- TERM=dumb claude-code ...
- или CI=true claude-code ...
Если в этих условиях всё норм, значит проблема — в выводе/escape‑seq/прогрессбаре.
2) Сравнить окружение «внутри» папки и «снаружи»
- До захода в проект: env | sort > /tmp/env.before
- Внутри проекта: env | sort > /tmp/env.after
- diff /tmp/env.before /tmp/env.after
Ищите переменные, которые появляются/меняются (direnv/.env/.envrc часто меняют окружение).
3) Проверить, не вводятся управляющие символы/escape‑последовательности из файлов проекта
- Найти файлы, содержащие ESC (\x1b) или другие контролы:
- grep -R --line-number $'\x1b' .
- grep -R -nP '\x1b\[' . (ANSI CSI sequences)
- Искать нетипичные символы в имени текущей директории:
- printf '%s\n' "$PWD" | sed -n 'l'
- ls -lb
4) Поиск локальных конфигов, расширений и hooks
- direnv: есть ли .envrc? (direnv автоматически подставляет переменные)
- autoenv, .env, .env.local, .claude*, .claudecode*, .vscode/ (workspace settings) — вы уже смотрели settings.json, но есть и другие файлы.
- Git hooks (./.git/hooks) — могут выполнять скрипты при действиях CLI.
Команда: find . -maxdepth 3 -type f -name '.*' -o -name '*claude*' -o -name '*.env*' -print
5) Логи и режим отладки
- Запустите Claude Code в verbose/debug режиме, если есть флаг --debug/--log-level (или проверьте ~/.config/claude-code / $XDG_CONFIG_HOME/claude-code на логи).
- Посмотрите, что именно приложение кладёт в статус — часто в логе видно, откуда берётся текст.
6) Поведение «звёздочки» и дублирования
- Если при каждом «думательном» тике строка дописывается (вместо перезаписи), значит CLI не выводит CR (carriage return) или не использует последовательности очистки строки. Это зависит от переменной TERM и от того, считает ли приложение, что терминал поддерживает ANSI. Проверьте TERM: echo $TERM. Попробуйте TERM=xterm-256color или TERM=vt100.
7) Пробная стратегия «исключения»
- Скопируйте проект в /tmp/clone и по одному удаляйте/восстанавливайте скрытые файлы (.envrc, .git, .vscode и т.д.), пока баг не появится/исчезнет — так отловите виновника.
- Запустите в пустом каталоге и монтируйте/подключайте по одному компоненту проекта.
8) Дополнительно
- Проверьте кодировку файлов (UTF‑8 vs CRLF) — CRLF (\r) могут ломать перезапись строки: grep -R $'\r' .
- Откат/переустановка плагинов/расширений, если CLI интегрируется с ними.
- Если есть возможность, запустите с записью stdout в файл (claude-code … > out.txt 2>&1) и посмотрите, какие байты реально идут в поток (od -An -t x1 out.txt).
Что сделать сейчас (короткий чек‑лист)
- env diff (ищем env vars)
- echo $TERM; попробуйте TERM=dumb и/or CI=true
- grep на \x1b и \r в репозитории
- запустить с --debug / посмотреть логи в ~/.config
- клонировать проект в другое место / удалить по одному скрытым файлам
Если хотите, пришлите:
- вывод env до/после (можно только отличия),
- значение $TERM,
- пример «сырых» байтов из stdout (out.txt -> od -An -t x1),
и я помогу проанализировать дальше.