---
name: freestyle_vm_claude
description: "Freestyle VM с установленным Claude Code CLI — vmId, team, как ходить с MacBook"
metadata: 
  node_type: memory
  type: reference
  originSessionId: 83a653b0-cc55-4f6d-8bb4-682309eaa6a7
---

Freestyle VM (Debian 13 trixie, x86_64, 4 ядра, 7.8GB RAM, 16GB диск, root):
- vmId: `ihafuhuh1h3f8w9o9p97`, team: `4a656cf5-82e8-4bf0-86b3-f82f6e0fe880`
- Доступ с MacBook: `npx freestyle@latest vm exec <vmId> "<cmd>" --team <team>` (неинтерактивно) или `vm ssh` (интерактивно). Токен Freestyle закеширован в `~/.config/freestyle/stack-auth.json` — повторный браузер-логин не нужен.
- Claude Code 2.1.181 установлен глобально через npm (Node v24.16 в nvm). Симлинки `/usr/local/bin/{claude,node}` → чтобы был в PATH неинтерактивной exec-сессии (иначе nvm-bin не подхватывается).
- **Авторизация Claude на VM НЕ настроена** (по решению юзера) — интерактивный `claude` login через exec невозможен; при надобности предзагрузить креды (`~/.claude/.credentials.json`) или ANTHROPIC_API_KEY.
- `vm exec` неинтерактивный non-login shell: `.bashrc`/`.profile` не сорсятся, PATH = `/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin`, **`$HOME` НЕ задан** → ollama/инструменты падают (`$HOME is not defined`); всегда `export HOME=/root`.

**Архитектура Freestyle (разобрано 2026-06-18):**
- **Авто-suspend по простою** (`state: suspending`→`suspended`, persistence `sticky`). exec/ssh будит, но первый вызов после сна висит 30–60с+. Долгие операции (model pull) рвутся, если VM уснёт посреди → держать в бодрствовании (поллинг) и доводить до конца.
- **Диск персистится** (sticky): ollama-бинарь/пакеты пережили suspend. Но незавершённый `ollama pull` ollama выкидывает целиком — нужен `success`.
- **Egress IP**: `23.93.94.17`, San Jose California **US**, резидентский Sonic Telecom (`*.dynamic.sonic.net`), динамический.
- **Входящий доступ ТОЛЬКО HTTPS через маппинг своего домена → порт VM** (`vm domain`/domain-mappings, `vm create --port` дефолт 3000). Сырого публичного TCP/UDP нет. Без домена публичного URL нет.
- **WireGuard** (`vm` VPC/VPN) = сплит-туннель в VPC (AllowedIPs=VPC CIDR), доступ к внутренним IP VM; НЕ full-tunnel наружу, NAT не предусмотрен.
- **Вывод: под телефонный always-on прокси Freestyle не годится** (suspend + только HTTPS-ingress). Для прокси — обычный VPS (mac mini / VPS 193.108.113.35). Решение юзера 2026-06-18: Freestyle под прокси отброшен.

**Claude Code на VM подключён к z.ai (выбранный путь 2026-06-18):** `/root/.claude/settings.json` → `{"env":{"ANTHROPIC_BASE_URL":"https://api.z.ai/api/anthropic","ANTHROPIC_AUTH_TOKEN":"<z.ai key>","API_TIMEOUT_MS":"3000000"}}`. Маппинг Claude-имён→GLM на стороне z.ai (server-side). settings.json `env` подхватывается и `claude -p`, и интерактивным — профиль не нужен. **БЛОКЕР: z.ai вернул `429 [1113] Insufficient balance or no resource package` — нужен баланс/пакет (GLM Coding Plan) на аккаунте.** Цепочка проверена реальным `claude -p` — конфиг и ключ валидны, упёрлись только в баланс. После пополнения заработает без правок. z.ai = свой офиц. провайдер (разрешён, см. [[harvested_free_key_repos_refuse]]).

**Gemma-задача (отброшена в пользу z.ai):** ollama 0.30.10 + claude-code-router 2.0.0 (`ccr`, симлинк `/usr/local/bin/ccr`) остались установлены. Модель так и не докачана. Локальная E4B на CPU слаба в агентности — z.ai (GLM) лучше.
