Skip to content

Windows: программы получают только нужное окружение; установщик Mac не подменяет работающую программу - #18

Merged
audit0 merged 2 commits into
mainfrom
claude/design-redesign-no1k6b
Sep 28, 2026

Conversation

@audit0

@audit0 audit0 commented Sep 28, 2026

Copy link
Copy Markdown
Owner

Пункты 6 и 7 из списка улучшений («Что ещё можно улучшить?»).

Windows: окружение запускаемых программ

Раньше restic, Claude Code, docker и остальные программы получали всё окружение человека, менялся только PATH. На Mac им передаётся только нужное.

  • Свой RESTIC_PASSWORD подменял пароль, введённый в OffLoadAI. restic берёт его вместо пароля из stdin, и «Из iCloud» отвечал «пароль не подходит», хотя пароль верный. Проверено на настоящем restic 0.16.4.
  • ANTHROPIC_API_KEY или CLAUDE_CODE_USE_BEDROCK меняли вход Claude Code и то, куда уходит список файлов. Экран согласия при этом обещает «в Anthropic, по подписке».

Теперь запускаемые программы получают только:

  • системные переменные: каталоги Windows, профиль, временную папку;
  • куда подключаться Docker (DOCKER_HOST, DOCKER_CONTEXT, DOCKER_CONFIG);
  • где лежат машины VirtualBox (VBOX_USER_HOME).

Claude Code сверх этого получает папку своих настроек и входа (CLAUDE_CONFIG_DIR), путь к Git Bash, прокси и сертификаты прокси. Это нужно, чтобы он работал так же, как в терминале человека. Ключи API и выбор другого облака в этот список не входят.

Установщик Mac

Раньше установщик ждал закрытия OffLoadAI 5 секунд и заменял программу в любом случае.

  • Во время копирования OffLoadAI спрашивает, прервать ли его, и ждёт ответа. Установщик за это время ставил новую версию под работающую программу, и человек продолжал работать в старой, думая, что обновился.
  • Старую версию он удалял до того, как скопировал новую. Прерванная или сорвавшаяся установка оставляла человека без программы.

Теперь:

  • Установщик ждёт до минуты и подсказывает ответить в окне программы. Если программа так и не закрылась, установка отменяется, ничего не тронув.
  • Ищутся только программы своего пользователя (pgrep -U). OffLoadAI, открытый в чужой сессии, установку не блокирует.
  • Новая версия копируется рядом со старой, у копии проверяется подпись, и она встаёт на место прежней переименованием. Если шаг сорвался, прежняя версия возвращается на место, а недокопия убирается.

То же сделано в install-local.sh. README описывает новое поведение.

Проверка

  • Windows. Всё решение собирается на Linux: 0 ошибок, 0 предупреждений. Новые проверки в Offload.Checks: фильтр окружения и настоящий запуск программы, которая печатает свою переменную. Выполняются в CI на Windows.

  • Фильтр на деле. Настоящий Runner из Offload.Core запускал на Linux /usr/bin/env, при этом в окружении были заданы RESTIC_PASSWORD, ANTHROPIC_API_KEY и CLAUDE_CODE_USE_BEDROCK. До запущенной программы дошли только DOCKER_CONTEXT, PATH, SYSTEMROOT и TEMP.

  • Установщик. Шаг установки прогнан в zsh 5.9 с заглушками pgrep, osascript, ditto, codesign и mv. Сценарии:

    • обновление и первая установка;
    • программа закрылась, программа не закрылась;
    • сорвалось копирование, сорвалась проверка подписи;
    • сорвалось каждое из переименований, сорвался и возврат прежней версии;
    • на месте программы висячая ссылка.

    install.sh и install-local.sh прошли все 13 проверок. Старый install.sh не прошёл 9 из них: ставил новую версию под работающую программу, а при сорвавшемся копировании оставлял место пустым.

  • Не проверено. Живьём на macOS и Windows не запускал.

Не менял

  • Установщик Windows. Он и так останавливается, если программа не закрылась за 10 секунд, и копирует один файл поверх старого.
  • Окружение на Mac. Там уже передаётся только нужное.

🤖 Generated with Claude Code

https://claude.ai/code/session_019g9zXsGLHyDxJzGtUAQUVY


Generated by Claude Code

…на Mac

Раньше restic, Claude Code, docker и остальные получали всё окружение человека, менялся только PATH.
Свой RESTIC_PASSWORD подменял пароль, введённый в OffLoadAI (restic берёт его вместо stdin и отвечает
«wrong password» — проверено на restic 0.16.4), а ANTHROPIC_API_KEY или CLAUDE_CODE_USE_BEDROCK меняли
вход Claude Code и то, куда уходит список файлов.

Теперь передаются только системные переменные (каталоги Windows, профиль, временная папка), куда
подключаться Docker и где лежат машины VirtualBox. Claude Code сверх этого получает папку своих
настроек и входа, путь к Git Bash, прокси и сертификаты прокси. Проверки: фильтр и настоящий запуск
программы, которая печатает своё окружение.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019g9zXsGLHyDxJzGtUAQUVY
Раньше установщик ждал закрытия OffLoadAI 5 секунд и заменял его всё равно: если шло копирование и
программа спрашивала, прервать ли его, человек оставался в старой версии. А старую версию он удалял
до копирования новой — прерванная установка оставляла без программы.

Теперь:
- ждёт до минуты и подсказывает ответить в окне программы; не закрылась — установка отменяется,
  ничего не тронув;
- ищет только программы своего пользователя (pgrep -U), чужая сессия установку не блокирует;
- новая версия копируется рядом, проверяется подпись копии, и встаёт на место прежней
  переименованием; сорвалось — прежняя возвращается на место, недокопия убирается.

То же в install-local.sh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019g9zXsGLHyDxJzGtUAQUVY
@audit0
audit0 merged commit 1f996e0 into main Sep 28, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants