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, сколько шагов и байтов израсходовано |
--format | json (по умолчанию) / 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
Шесть встроенных типов полей отображаются так:
| Aura | Rust | TypeScript | Go |
|---|---|---|---|
String | String | string | string |
Int | i64 | number | int64 |
Float | f64 | number | float64 |
Bool | bool | boolean | bool |
List | Vec<serde_json::Value> | unknown[] | []any |
Object | serde_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 и аргументов |