Перейти к содержимому

CLI

nrz — официальный CLI для разработки и деплоя на платформе ONREZA. Написан на Rust, включает локальный эмулятор платформенных API (KV, D1, Context).

CLI спроектирован для автономного использования LLM-агентами:

  • --json глобальный флаг (NRZ_JSON=1) — машинный вывод в stdout
  • --token глобальный флаг (NRZ_TOKEN) — аутентификация без device flow
  • --workspace глобальный флаг (NRZ_WORKSPACE) — выбор workspace
  • --env глобальный флаг (NRZ_ENV) — выбор окружения
  • JSON output: один объект в stdout, ошибки {"error": "..."}, exit code 1
  • Human output: цветной текст в stderr (по умолчанию)

Linux/macOS:

Окно терминала
curl -fsSL https://raw.githubusercontent.com/ONREZA/nrz-cli/main/install.sh | bash

Windows (PowerShell):

Окно терминала
iwr -useb https://raw.githubusercontent.com/ONREZA/nrz-cli/main/install.ps1 | iex
Окно терминала
npm i -g @onreza/nrz
# или
pnpm i -g @onreza/nrz
# или
bun i -g @onreza/nrz

Скачайте бинарник для вашей платформы из GitHub Releases:

  • nrz-linux-x64 — Linux x86_64
  • nrz-macos-x64 — macOS Intel
  • nrz-macos-arm64 — macOS Apple Silicon
  • nrz-windows-x64.exe — Windows x86_64

Все команды поддерживают следующие глобальные флаги:

ФлагПеременная окруженияОписание
--jsonNRZ_JSON=1Машиночитаемый JSON вывод
--token <token>NRZ_TOKENAPI токен для аутентификации
--workspace <slug>NRZ_WORKSPACEWorkspace slug
--env <env>NRZ_ENVОкружение (production/preview/development или ID)

Инициализирует проект: создаёт onreza.toml, определяет фреймворк, опционально создаёт проект на платформе.

Окно терминала
nrz init [OPTIONS]
ФлагОписание
--name <name>Имя проекта (по умолчанию: имя директории)
--skip-detectionПропустить автоопределение фреймворка
--createСоздать проект на платформе
--project-id <id>Привязать существующий проект по ID
Окно терминала
# Интерактивная инициализация
nrz init
# Создать проект на платформе
nrz init --create --name my-project
# Привязать существующий проект
nrz init --project-id proj_abc123

Привязывает текущую директорию к проекту на платформе.

Окно терминала
nrz link [dir] [OPTIONS]
ФлагОписание
dirПуть к директории проекта (по умолчанию: .)
--project-id <id>ID проекта (пропустить интерактивный выбор)
Окно терминала
# Интерактивный выбор проекта
nrz link
# Привязка по ID
nrz link --project-id proj_abc123

Запускает локальный dev-сервер с эмуляцией платформенных API.

Окно терминала
nrz dev [dir] [OPTIONS]
ФлагОписание
dirПуть к директории проекта (по умолчанию: .)
--alias <name>Запустить алиас из [dev.aliases] в onreza.toml
--command <cmd>Команда запуска (переопределяет конфиг)
--port, -p <port>Порт dev-сервера (по умолчанию: 4321)
--inspectВключить Node.js inspector (порт 9229)
--inspect-brkВключить inspector с остановкой на старте
Окно терминала
# Автодетект фреймворка
nrz dev
# Использовать алиас
nrz dev --alias staging
# Другой порт + inspector
nrz dev --port 3000 --inspect

Валидирует build output и манифест проекта.

Окно терминала
nrz build [dir] [OPTIONS]
ФлагОписание
dirПуть к директории проекта (по умолчанию: .)
--skip-validationПропустить валидацию манифеста
Окно терминала
nrz build
nrz build ./my-app --skip-validation

Деплоит проект на платформу ONREZA.

Окно терминала
nrz deploy [dir] [OPTIONS]
ФлагОписание
dirПуть к директории проекта (по умолчанию: .)
--prodProduction деплой
--project-id <id>ID проекта (пропустить автоопределение)
--skip-migrationsПропустить миграции БД
--skip-buildПропустить шаг сборки
--build-command <cmd>Кастомная команда сборки
--skip-env-checkПропустить проверку env переменных
Окно терминала
# Деплой preview
nrz deploy
# Production деплой
nrz deploy --prod
# С кастомной сборкой
nrz deploy --build-command "npm run build:staging"

Управление проектами.

Окно терминала
nrz projects <subcommand>
СубкомандаОписание
list [--limit <n>]Список проектов
create --name <name>Создать проект
info <id>Информация о проекте
update <id>Обновить настройки проекта
delete <id>Удалить проект

Create флаги:

ФлагОписание
--name <name>Обязательно — имя проекта
--display-name <name>Отображаемое имя
--git-url <url>URL Git репозитория
--branch <branch>Git ветка (по умолчанию: main)
--framework <fw>Фреймворк (astro, nuxt, sveltekit, nitro)
--install-command <cmd>Команда установки зависимостей
--build-command <cmd>Команда сборки
--output-directory <dir>Директория сборки
--linkПривязать к текущей директории

Delete флаги:

ФлагОписание
idОбязательно — ID проекта
--forceПропустить подтверждение

Update флаги:

ФлагОписание
--display-name <name>Отображаемое имя
--git-url <url>URL Git репозитория
--branch <branch>Git ветка
--framework <fw>Фреймворк
--install-command <cmd>Команда установки
--build-command <cmd>Команда сборки
--output-directory <dir>Директория сборки
--root-directory <dir>Корневая директория
--node-version <ver>Версия Node.js
Окно терминала
# Список проектов
nrz projects list
# Создать и привязать
nrz projects create --name my-app --framework astro --link
# Информация
nrz projects info proj_abc123
# Обновить
nrz projects update proj_abc123 --build-command "npm run build"
# Удалить
nrz projects delete proj_abc123 --force

Список деплоев проекта.

Окно терминала
nrz deployments [OPTIONS]
ФлагОписание
--limit <n>Максимальное количество (по умолчанию: 10)
--project-id <id>ID проекта
Окно терминала
nrz deployments
nrz deployments --limit 20

Просмотр runtime логов проекта.

Окно терминала
nrz logs [OPTIONS]
ФлагОписание
--deployment-id <id>Фильтр по ID деплоя
--project-id <id>ID проекта
--limit <n>Количество записей (по умолчанию: 50)
--search <query>Поисковый запрос
Окно терминала
nrz logs
nrz logs --search "error" --limit 100

Откат к предыдущему деплою.

Окно терминала
nrz rollback [OPTIONS]
ФлагОписание
--deployment-id <id>ID деплоя для отката (по умолчанию: текущий live)
--project-id <id>ID проекта
Окно терминала
nrz rollback
nrz rollback --deployment-id dep_xyz789

Управление локальной D1-совместимой SQLite базой данных.

Окно терминала
nrz db <subcommand>
СубкомандаОписание
shellИнтерактивная SQLite консоль
execute <sql>Выполнить SQL запрос
infoИнформация о БД (таблицы, размер)
resetСброс БД
pushВыполнить SQL на удалённой D1
migrateУправление миграциями

Execute флаги:

ФлагОписание
sqlSQL запрос (используйте - для чтения из stdin)
--file <path>Прочитать SQL из файла

Reset флаги:

ФлагОписание
--forceПропустить подтверждение
--remoteСбросить удалённую D1 БД
--project-id <id>ID проекта

Push флаги:

ФлагОписание
sqlSQL запрос (используйте - для чтения из stdin)
--file <path>Прочитать SQL из файла
--project-id <id>ID проекта

Migrate субкоманды:

СубкомандаОписание
create <name>Создать новый файл миграции
applyПрименить pending миграции
statusСтатус миграций

Migrate apply флаги:

ФлагОписание
--remoteПрименить на удалённой D1
--dry-runПоказать SQL без выполнения
--project-id <id>ID проекта

Migrate status флаги:

ФлагОписание
--remoteПроверить удалённую D1
--project-id <id>ID проекта
Окно терминала
# Интерактивная консоль
nrz db shell
# Выполнить запрос
nrz db execute "SELECT * FROM users"
nrz db execute --file ./query.sql
# Информация о БД
nrz db info
# Сброс локальной БД
nrz db reset --force
# Сброс удалённой БД
nrz db reset --remote --force --project-id proj_abc123
# Миграции
nrz db migrate create add_users_table
nrz db migrate apply
nrz db migrate apply --remote
nrz db migrate status
# Push на удалённую БД
nrz db push "ALTER TABLE users ADD COLUMN email TEXT"

Управление локальным KV Store.

Окно терминала
nrz kv <subcommand>
СубкомандаОписание
get <key>Получить значение
set <key> <value>Установить значение
remove <key>Удалить ключ
list [--prefix <p>] [--limit <n>]Список ключей
clear [--force]Очистить все данные
Окно терминала
# Установить значение
nrz kv set user:123 '{"name": "John"}'
# С TTL (1 час)
nrz kv set session:abc token123 --ttl 3600
# Получить
nrz kv get user:123
# Список с префиксом
nrz kv list --prefix user: --limit 50
# Удалить
nrz kv remove user:123
# Очистить
nrz kv clear --force

Управление переменными окружения проекта.

Окно терминала
nrz env <subcommand>
СубкомандаОписание
listСписок переменных
set <key> <value>Установить переменную
remove <key>Удалить переменную
pull [file]Скачать в файл (по умолчанию: .env.local)
push [file]Загрузить из файла (по умолчанию: .env.local)
validateПроверить по декларациям в onreza.toml

Set флаги:

ФлагОписание
--secretПометить как секретную

Push флаги:

ФлагОписание
--overwriteПерезаписать существующие
--dry-runПоказать что будет загружено
--secretПометить все как секретные
--declared-onlyТолько объявленные в onreza.toml
Окно терминала
# Список
nrz env list
# Установить
nrz env set API_URL https://api.example.com
nrz env set API_KEY secret123 --secret
# Удалить
nrz env remove API_URL
# Pull/Push
nrz env pull
nrz env pull .env.staging
nrz env push
nrz env push --overwrite --dry-run
# Валидация
nrz env validate

Управление кастомными доменами.

Окно терминала
nrz domains <subcommand>
ФлагОписание
--project-id <id>ID проекта (пропустить автоопределение)
СубкомандаОписание
listСписок доменов
add <domain>Добавить домен
remove <domain_id>Удалить домен
verify <domain_id>Проверить DNS

Add флаги:

ФлагОписание
--environment-id <id>ID окружения (по умолчанию: production)
Окно терминала
nrz domains list
nrz domains add example.com
nrz domains verify dom_abc123
nrz domains remove dom_abc123

Управление workspaces.

Окно терминала
nrz workspace <subcommand>
СубкомандаОписание
listСписок workspaces
switch <slug>Переключить default workspace
Окно терминала
nrz workspace list
nrz workspace switch my-team

Аутентификация через OAuth 2.0 Device Flow.

Окно терминала
nrz login

Команда автоматически:

  1. Создаёт device flow запрос
  2. Открывает браузер с URL для подтверждения
  3. Ожидает подтверждения пользователя
  4. Сохраняет токен в ~/.config/nrz/credentials.json

Выход из платформы.

Окно терминала
nrz logout [OPTIONS]
ФлагОписание
--allВыйти из всех workspaces
Окно терминала
nrz logout
nrz logout --all

Информация о текущем пользователе.

Окно терминала
nrz whoami

Обновление CLI до последней версии.

Окно терминала
nrz upgrade [OPTIONS]
ФлагОписание
--forceОбновить даже если уже последняя версия
--version <tag>Конкретная версия (например, v0.1.5)
Окно терминала
nrz upgrade
nrz upgrade --version v0.1.5

onreza.toml — единый конфиг проекта, коммитится в git.

#:schema https://raw.githubusercontent.com/onreza/nrz-cli/main/onreza.schema.json
[project]
id = "proj_abc123"
name = "my-project"
workspace = "my-team"
[dev]
command = "npm run dev"
port = 4321
host = "127.0.0.1"
data_dir = ".onreza/data"
db_name = "dev.db"
[dev.aliases]
network = "npm run dev -- --host 0.0.0.0"
staging = "npm run dev -- --host 0.0.0.0 --port 3001"
[build]
command = "npm run build"
output_dirs = ["dist", ".output", "build"]
[deploy]
skip_migrations = false
[migrations]
dir = "migrations"
[db]
default_env = "development"
[env]
strict = false
[env.declarations]
DATABASE_URL = "sensitive"
PUBLIC_API_URL = "plain"
OPTIONAL_VAR = { visibility = "plain", required = false }

Декларирует переменные окружения проекта:

  • strict = truenrz env push загружает только переменные из [env.declarations]
  • Строка "sensitive" / "plain" — shorthand, переменная обязательна
  • Table { visibility = "...", required = false } — для необязательных переменных

Используется в:

  • nrz env push — определяет is_secret для каждой переменной
  • nrz env validate — проверяет required переменные
  • nrz deploy — pre-flight проверка перед деплоем

Для использования в CI/CD передайте токен через переменную окружения:

Окно терминала
export NRZ_TOKEN="nrz_xxx"
nrz deploy --prod

Пример для GitHub Actions:

- name: Deploy to ONREZA
env:
NRZ_TOKEN: ${{ secrets.ONREZA_TOKEN }}
run: |
nrz deploy --prod

OAuth 2.0 Device Authorization Grant (RFC 8628) — механизм аутентификации CLI.

POST /v1/device

Ответ:

{
"device_code": "abc123def456...",
"user_code": "ABCD-1234",
"verification_uri": "https://app.onreza.app/device",
"verification_uri_complete": "https://app.onreza.app/device?code=ABCD-1234",
"expires_in": 300,
"interval": 5
}
POST /v1/device/token

Успешный ответ (200):

{
"access_token": "nrz_xxxxxxxxxxxxxxxx",
"token_type": "Bearer",
"workspace_slug": "my-workspace",
"workspace_name": "My Workspace"
}

Ошибки:

СтатусОшибкаОписание
400authorization_pendingПользователь ещё не подтвердил
400slow_downСлишком частый polling
400expired_tokenDevice code истёк
400invalid_grantDevice code не найден
КодОписание
200Успешный запрос
400Некорректный запрос
401Не авторизован
403Доступ запрещён
404Ресурс не найден
409Конфликт (например, параллельный деплой)
429Rate limit
EndpointLimit
/v1/device10 запросов/минуту с IP
/v1/device/token60 запросов/минуту
Остальные API1000 запросов/минуту

При превышении лимита возвращается статус 429 с заголовком Retry-After.