Терминал
Оболочка в каталоге проекта прямо на машине сервера. Чат агента закрывает почти всё, но не всё: посмотреть лог, дёрнуть тест, поправить что-то руками — быстрее сделать самому, чем тратить на это ответ модели.

Дорога сюда: меню чата («Терминал», рядом с «Git проекта»), шапка браузера файлов, адрес /terminal?cwd=<каталог>.
Только хозяину
Все ручки терминала проходят проверку владельца. Гостевому ключу — даже с полным доступом к своим проектам — оболочка на машине не полагается: из неё видно всё, а не область ключа. Ключ на чтение отсекается там же. Клиенты пункт гостю не показывают, но решает сервер: 403.
В панели VS Code этого экрана нет — у редактора терминал свой, настоящий, на той же машине.
Оболочка переживает уход клиента
Терминал живёт в памяти api: закрыли вкладку, телефон уснул — оболочка и её вывод на месте. Сервер помнит последние 256 КБ вывода и при повторном подключении отдаёт их целиком.
Без единого зрителя оболочка живёт полчаса, завершившаяся — ещё десять минут, чтобы показать код выхода тому, кто вернётся. Открытых оболочек одновременно — не больше восьми.
Внизу экрана — другие открытые терминалы, чтобы вернуться к ним.
Псевдотерминал: где он есть, а где нет
| Где | Как запускается | pty |
|---|---|---|
| приложение на Linux и macOS | Bun.spawn({ terminal }) в том же процессе | да |
| докер | тот же вызов, но в соседнем процессе bun -e … | да |
| приложение на Windows | каналы: pwsh -NoLogo -NoProfile -Command - (или powershell.exe) | нет |
Без pty оболочка работает построчно: команда уходит целиком по Enter, эха нет (клиент печатает ввод сам), подсказок по Tab и Ctrl+C некому доставить, курсорные программы не работают. Клиент честно показывает это плашкой.
Свою оболочку задаёт CLAUDER_SHELL; по умолчанию — $SHELL, иначе /bin/bash, на Windows — pwsh, если стоит, иначе powershell.exe.
Пароль, набранный в терминале, нигде не остаётся
ssh, sudo, gh auth login спрашивают пароль сами. Сервер видит, что идёт скрытый ввод — по настоящему признаку терминала, а не по словам приглашения, — и набранное не оседает ни на экране, ни в истории клиента, ни в сохранённом выводе.
Агенту пароли передают иначе — карточкой, см. Секреты и безопасный режим.
Клиенты
- Веб (и приложение на рабочем столе, и панель iOS) — xterm.js, полная эмуляция, цвета из темы.
idтерминала стоит в адресе, поэтому перезагрузка страницы подключается к той же оболочке. - Android — полной эмуляции нет: вывод показывается текстом, вычищенным от ANSI-последовательностей, ввод — строкой по Enter, а клавиш, которых нет на экранной клавиатуре, — кнопками: Ctrl+C, Tab, стрелки истории, Esc, Ctrl+D. Этого хватает на «дёрнуть тест, посмотреть лог»;
vimиtop— в веб-морду.