Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

CLI

aura eval <file.aura>  [--strict] [--dry-run] [--frozen]
                       [--allow-read=<dir>]... [--allow-env[=A,B]] [--allow-imports-io]
                       [--hermetic] [--max-steps=N] [--max-memory=MB] [--stats]
                       [--format json|json-flat|yaml|toml] [-o out] [--registry-dir=<dir>]
aura check <file.aura> [--strict] [--hermetic]
aura docs --agent [-o <file>]
aura fmt <files...> [--check]
aura types <file.aura> --lang rust|ts|go [--out <file>]
aura add <path>@vX.Y.Z [--from <file>] [--registry-dir=<dir>]
aura --version

eval

Вычисляет манифест со всеми импортами и печатает результат.

ФлагДействие
--strictпредупреждения анализа (всех модулей) блокируют; лишние поля схем — ошибка E0513
--dry-runполное вычисление, но ни вывод, ни aura.lock не записываются; отчёт [dry-run] read/would write
--frozenзависимости строго по aura.lock (E0403 при расхождении), лок не переписывается — режим CI
--allow-read=<dir>право на read_file() внутри каталога (повторяемый). Относительный путь в read_file() читается от папки самого манифеста, поэтому вывод не зависит от того, откуда запущен aura (D37)
--allow-env[=A,B]право на env(): список имён либо все
--hermeticникакого I/O: env() и read_file() — это E0505 где угодно. Несовместим с флагами --allow-*
--allow-imports-ioвыдать импортам права корня
--max-steps=Nсколько выражений вычисление может выполнить, прежде чем остановится с E0325. По умолчанию десять миллионов
--max-memory=MBсколько мебибайт значений оно может создать, прежде чем остановится с E0326. По умолчанию 256
--statsнапечатать в stderr, сколько шагов и байтов израсходовано
--formatjson (по умолчанию) / json-flat / yaml / toml
-o, --output <file>записать в файл вместо stdout
--registry-dir=<dir>каталог кэша пакетов (по умолчанию ~/.aura/registry)

check

Только lex + parse + статический анализ — быстрый гейт для pre-commit и CI.

--hermetic дополнительно требует, чтобы манифест не выполнял ввода-вывода: env() и read_file() где угодно в нём или в том, что он импортирует, - это E0505. Решается статически, поэтому check отвечает без вычисления - в том числе для веток, которые этот запуск не прошёл бы:

$ aura check --hermetic deploy.aura
[E0505] Error: env() is not allowed in hermetic mode
   ╭─[ deploy.aura:4:11 ]

Он нужен, когда вывод манифеста не должен зависеть ни от чего, кроме его текста: гейт в CI на каталог манифестов или сборка, которую хочется воспроизвести на другой машине. eval --hermetic требует того же и подходит, когда манифесту нет доверия.

Скрипт, написанный для приложения с функциями хоста (D35), импортирует их как import "host:geo" as geo. У CLI хоста нет, поэтому eval останавливается с E0007, а check перечисляет, что скрипту нужно от приложения, которое его запустит, и завершается с кодом 0:

$ aura check routing.aura
note: provided by the application at run time, this script calls:
  geo.region (1 argument)
  flags.enabled (2 arguments)
ok: routing.aura

docs

aura docs --agent печатает полный справочник по языку — синтаксис, стандартную библиотеку, все коды диагностик, — собранный из определений самого компилятора. Это около четырёх тысяч токенов: достаточно мало, чтобы отдать ИИ-ассистенту целиком.

Смысл печатать его из бинарника, а не давать ссылку на страницу, — в версиях: вывод описывает тот aura, который его произвёл, и не может разойтись с ним, как это бывает с размещённым в сети документом.

Полезнее всего дать ассистенту забрать справку самому. Одна строка в вашем AGENTS.md, CLAUDE.md или аналоге:

Before writing or editing .aura files, run `aura docs --agent` for the complete
language reference.

Либо закоммитить — для ассистентов, которые читают файлы, но не запускают команды:

$ aura docs --agent -o AURA.md

Тот же текст публикуется по адресу /llms.txt для инструментов, которые ходят по сети.

fmt

Канонический форматтер: отступы (2 пробела/уровень по токен-глубине), внутристрочные пробелы, колоночное выравнивание прогонов name = value, key: value и арок cond вместе с хвостовыми комментариями. Строки и содержимое block strings не трогаются; поток токенов гарантированно не меняется, форматирование идемпотентно. --check — только проверить (exit 1 при отличиях).

types

Генерация типов host-языка из объявлений type и enum:

aura types config.aura --lang ts

Шесть встроенных типов полей отображаются так:

AuraRustTypeScriptGo
StringStringstringstring
Inti64numberint64
Floatf64numberfloat64
Boolboolbooleanbool
ListVec<serde_json::Value>unknown[][]any
Objectserde_json::Map<String, serde_json::Value>Record<string, unknown>map[string]any

String — единственное имя, которое язык принимает для текстового поля; Str не существует.

Обратите внимание на две последние строки. List и Object в схеме не несут типа элемента, поэтому и сгенерированный код не может: получается последовательность или отображение нетипизированных значений. Где форма важна, объявите type для элемента и держите в поле его.

Одна схема и валидирует конфиг, и типизирует сервис, который читает JSON. Enum превращается в юнион строковых литералов (TS), enum с #[serde(rename)] (Rust) или тип-строку с типизированными константами (Go). Опциональные поля (D15) — обязательные в выводе: вычисление всегда вставляет дефолт. Только парсинг — манифест не вычисляется, capability не задействованы. --out пишет в файл.

Вывод сразу канонический для форматтера host-языка: rustfmt --check, gofmt -l и prettier --check на сгенерированных файлах молчат. Сгенерированное можно коммитить в репозиторий сервиса без форматного шума в диффах.

add

Установка пакета: скачивание (github/<owner>/<repo> → package.aura тега vX.Y.Z; точная версия обязательна), валидация, запись в кэш, фиксация в ./aura.lock с хешем целостности. --from <file> — установка из локального файла. Единственная сетевая команда.

Exit-коды

КодСмысл
0успех
1диагностики (ошибки языка, провал assert, блокирующий strict)
2ошибки I/O и аргументов