Справочник

Справочник по CLI

CLI cradle — тонкий HTTP-клиент для cradle-server, конфигурация и полный каталог команд.

CLI cradle — это тонкий HTTP-клиент, который общается с cradle-server. Он никогда не работает с базой данных напрямую и не загружает runner-модели — каждая команда делает HTTP-запрос к admin API.

cradle <subcommand>

Файл конфигурации

Конфигурация хранится в ~/.cradle/cli-config.json (переопределить можно через $CRADLE_CONFIG_DIR):

{
  "servers": {
    "default":    { "url": "http://127.0.0.1:31416", "apiKey": "ck_live_…" },
    "production": { "url": "https://cradle.company.local", "apiKey": "ck_live_…" }
  },
  "currentServer": "default",
  "currentProject": "personal"
}

cradle login --url <url> --key <key> [--name <profile>] записывает сервер, делает его текущим и проверяет /admin/health. cradle servers list / use / remove переключают профили.

Переключение проекта

Каждый запрос несёт X-Cradle-Project: <currentProject> из конфига. cradle projects use <slug> обновляет этот заголовок локально. Admin-ключи могут переключать привязку; scoped-ключи должны использовать свой проект (сервер вернёт 403 при несоответствии).

Режимы вывода

--json превращает любую команду в чистый JSON-поток для jq:

cradle agents execute <id> --text "ping" --json | jq '.replies[0].text'
cradle keys list --json | jq '.[] | select(.scopes | contains(["admin:*"]))'
cradle models list --json | jq '.system.totalRamGb'

Без --json вывод — цветная, выровненная текстовая таблица.

Каталог команд

cradle init               # сохранить конфиг + проверить health
cradle login              # сохранить credentials сервера
cradle servers            # list / use / remove

cradle server init        # bootstrap headless cradle-server (systemd, operator-driven)
cradle server package     # собрать deployable zip для целевого Linux-хоста

cradle remote show        # конфигурация удалённой GPU-ноды
cradle remote set         # настроить удалённую GPU-ноду (без SSH-push)
cradle remote pool probe  # проверить здоровье всех нод пула
cradle remote pool plan   # план autoscaler (operator-driven, без исполнения)

cradle tenants list              # реестр тенантов на одном хосте
cradle tenants create <id>       # bootstrap нового тенант-инстанса
cradle tenants start <id>        # systemctl start cradle-server-<id>
cradle tenants stop <id>         # systemctl stop cradle-server-<id>
cradle tenants credentials <id>  # показать client-credentials.json для тенанта

cradle health             # probe /admin/health

cradle projects list      # все проекты на сервере
cradle projects create <slug> [--name --description]
cradle projects use <slug>                   # локально — отправит X-Cradle-Project в следующем вызове

cradle agents list                           # отфильтровано по текущему проекту
cradle agents show <id>
cradle agents execute <id> --text "…"        # one-shot, возвращает {replies:[…]}
cradle agents create --template <slug>       # использует встроенные шаблоны агентов

cradle kb list                               # базы знаний в текущем проекте

cradle models list                           # каталог + установленные + вердикт совместимости
cradle models list --recommended             # топ OpenLLM Leaderboard
cradle models check <catalogId>              # hardware-вердикт для одной модели
cradle models pull <catalogId>               # скачивание через SSE

cradle keys list                             # все API-ключи (plaintext не показывается)
cradle keys create --name … --scopes a:b,c:d --project <id>   # plaintext показывается ОДИН РАЗ
cradle keys revoke <id>                       # soft delete

cradle tickets list [--status pending]
cradle tickets show <id>

cradle channels list                          # отфильтровано по текущему проекту

cradle completion bash                        # скрипт автодополнения

Команды записи отказываются корректно, если endpoint ещё не реализован: они печатают not implemented … (Phase N+) и выходят с кодом 2 — никогда без молчаливого no-op.

Server bootstrap (cradle server init)

Это оператор-driven способ развернуть headless cradle-server на удалённой машине (jump-host / закрытый контур). CLI никогда не пушит по SSH; оператор запускает команду на целевом сервере.

# на целевом сервере от root:
cradle server init \
  --data-dir /var/lib/cradle/tenant-a \
  --port 31416 \
  --bind 0.0.0.0 \
  --service-name cradle-server-tenant-a

Команда создаёт data directory, bootstrap SQLite БД и первый admin:* ключ, пишет и активирует systemd-unit, ждёт /admin/health и записывает client-credentials.json (mode 0600) в data directory. Повторный запуск в той же data directory идемпотентен.

Ключевые флаги

ФлагПо умолчаниюНазначение
--data-dir/var/lib/cradleSQLite, модели, credentials
--port31416порт HTTP API
--bind0.0.0.0bind host (127.0.0.1 только локально)
--usercradleOS-пользователь systemd-сервиса
--service-namecradle-serverимя systemd-unit
--skip-systemdfalseтолько bootstrap БД, без сервиса
--dry-runfalseвывести план, не трогая систему
--scopesadmin:*scopes для сгенерированного client-ключа

Dev / non-systemd режим

cradle server init --data-dir /tmp/cradle-test --skip-systemd

Это делает bootstrap БД и записывает admin-ключ в client-credentials.json, не запуская сервис. Сервер вручную стартует через cradle-server --data-dir /tmp/cradle-test.

Удалённый GPU (cradle remote)

Настройте удалённую llama.cpp / vLLM-ноду без пуша команд с клиента. cradle remote set только сохраняет конфигурацию; фактические SSH-команды выводятся для оператора, чтобы он запустил их на jump-хосте.

cradle remote set \
  --host gpu-1.local --user cradle \
  --ssh-key-path /root/.ssh/gpu-1 \
  --remote-port 8080 --model-path /models/qwen3-8b.gguf

cradle remote show

Для нескольких нод cradle remote pool probe делает health-check каждой ноды, а cradle remote pool plan печатает план scale-up / scale-down с командами для оператора. Autoscaler сам никогда не исполняет SSH или облачные API-вызовы.

Bash completion

cradle completion bash > /usr/local/etc/bash_completion.d/cradle
# или для пользователя:
cradle completion bash >> ~/.bashrc

Скрипт покрывает top-level команды и один уровень subcommand.