Быстрый старт

Исходный файл на GitHub

Это пошаговое руководство проведёт вас от свежей установки AWR до проверенной передачи сессии: установите CLI, инициализируйте проект, начните рабочую сессию и докажите, что сессия-преемник может продолжить с того места, где остановилась первая. Всё можно копировать и запускать; AWR поставляется со своим SQLite.

1. Установите AWR

AWR поставляется как нативные пакеты в npm и PyPI. Оба канала устанавливают один и тот же Rust CLI (awr) и MCP-сервер (awr-mcp); отдельного JavaScript- или Python-SDK нет.

Через npm (требуется Node 22.14 или новее):

npm install -g @originoneai/agent-work-runtime@0.5.1

Или через pip, внутри виртуального окружения (требуется Python 3.9 или новее):

python -m pip install agent-work-runtime==0.5.1

Проверьте оба исполняемых файла:

awr --version
awr-mcp --version

Поддерживаемые платформы: macOS 15+ (arm64 и Intel x64), Linux x64 и arm64 с glibc 2.39 или новее (базовый уровень Ubuntu 24.04) и Windows x64. В Linux сначала проверьте свою glibc:

ldd --version | head -n 1

При установке через npm не отключайте опциональные зависимости — загрузчик разрешает нативный пакет для конкретной платформы. Нет ни установочного скрипта, ни сетевого загрузчика; wheel-пакеты pip встраивают бинарные файлы. Существует третий канал для авторов приложений: закреплённая нативная полезная нагрузка из двух бинарных файлов, которую хост-приложение может встроить, чтобы его пользователям не нужны были Node, Python или Rust во время выполнения.

2. Инициализируйте ваш проект

Инициализация — операция из двух шагов: предпросмотр, затем явное принятие. Ничего не записывается, пока вы не передадите --accept.

AWR_PROJECT=/absolute/path/to/your/project
awr --project "$AWR_PROJECT" init

Прочитайте предпросмотр: он показывает найденный AWR инвентарь — существующие Markdown-реестры задач, YAML-источники, цели — и предлагаемое отображение источников. Существующие файлы никогда не перезаписываются; ваши исходные документы остаются авторитетными. Если предпросмотр выглядит правильно, примите его:

awr --project "$AWR_PROJECT" init --accept

Для пустого проекта укажите его назначение сразу:

awr --project "$AWR_PROJECT" init --goal "Deliver a document portal" --accept

Если ваш Markdown-реестр использует нестандартные слова статусов, сопоставьте их во время инициализации:

awr --project "$AWR_PROJECT" init \
  --status-map pending=planned --status-map complete=completed --accept

Затем посмотрите отчёт об организации:

awr --project "$AWR_PROJECT" intake inspect --json

Поле organization.state отчёта говорит, где вы находитесь: ready означает, что хотя бы у одной задачи есть объявленная в источнике цель, критерии приёмки, следующее действие и разрешённые предварительные условия. needs_organization означает, что чего-то не хватает — упорядоченный список actions отчёта подскажет, что добавить в исходные файлы.

3. Начните рабочую сессию

Сессия — единица владения работой в AWR. Эти команды используют небольшой помощник оболочки, чтобы каждый вызов нёс путь к проекту и вывод JSON:

AWR_BIN=$(command -v awr)
AWR_WORK=INTAKE-001          # a task key from your intake report
AWR_AGENT=agent-primary      # a label for who is working
AWR_MODEL=your-current-model # a recorded label; AWR does not invoke the model
AWR_NOTES=$(mktemp -d "${TMPDIR:-/tmp}/awr-session.XXXXXX")
awrj() { "$AWR_BIN" --project "$AWR_PROJECT" --json "$@"; }

Проверьте, что исполняемо, затем начните сессию с захватом (владением элементом работы во время выполнения) и текущей ревизией проекта:

awrj ready
AWR_REV=$(awrj status | jq -er '.project_revision')
awrj session start --work "$AWR_WORK" --agent "$AWR_AGENT" \
  --provider generic --model "$AWR_MODEL" --claim --ttl-ms 3600000 \
  --expected-revision "$AWR_REV" > "$AWR_NOTES/start.json"
AWR_SESSION=$(jq -er '.session.id' "$AWR_NOTES/start.json")

Скомпилируйте рабочий контекст — цель, критерии приёмки, записанные факты и историю, собранные в ограниченный пакет:

awrj context compile --work "$AWR_WORK" --session "$AWR_SESSION" \
  --budget 5000 > "$AWR_NOTES/context.json"
jq -e '.completeness.complete and (.work_context != null)' "$AWR_NOTES/context.json"

Читайте пакет, а не только булево значение. При BudgetExceeded расширьте --budget; при SourceStale выполните awrj source reindex и скомпилируйте снова.

4. Записывайте прогресс контрольной точкой

Прежде чем отойти — или прежде чем длинный диалог хоста будет компактифицирован — сохраните контрольную точку с хешем контекста, который вы реально использовали, честной выжимкой, точным следующим действием и каждой открытой петлёй:

AWR_CONTEXT_HASH=$(jq -er '.work_context.context_hash' "$AWR_NOTES/context.json")
AWR_REV=$(awrj status | jq -er '.project_revision')
awrj session checkpoint --session "$AWR_SESSION" --agent "$AWR_AGENT" \
  --context-hash "$AWR_CONTEXT_HASH" \
  --digest "Record the work actually done; do not invent a passing review." \
  --next-action "State the exact next operator or agent action." \
  --open-loop "List every unresolved loop." \
  --expected-project-revision "$AWR_REV" > "$AWR_NOTES/checkpoint.json"

Контрольная точка может фиксировать незавершённую работу; она не является доказательством прохождения тестов или выполнения критериев приёмки.

5. Продолжите работу в новой сессии

Чтобы доказать, что продолжение работает, завершите первую сессию и возобновите работу из неё — тем же путём передачи, который использовал бы новый агент, машина или диалог хоста. Завершение освобождает захват; оно не помечает работу в источнике как завершённую:

AWR_REV=$(awrj status | jq -er '.project_revision')
awrj session end --session "$AWR_SESSION" --outcome incomplete \
  --expected-revision "$AWR_REV"

Теперь возобновите. Любой агент — другой или тот же самый позже — создаёт сессию-преемника из предшественницы:

AWR_PREDECESSOR="$AWR_SESSION"
awrj session show "$AWR_PREDECESSOR"
AWR_REV=$(awrj status | jq -er '.project_revision')
awrj session resume --from-session "$AWR_PREDECESSOR" \
  --agent successor --provider generic --model "$AWR_MODEL" \
  --budget 5000 --expected-revision "$AWR_REV" > "$AWR_NOTES/resume.json"
jq -e '.context_ready' "$AWR_NOTES/resume.json"
AWR_SESSION=$(jq -er '.resumed.session.id' "$AWR_NOTES/resume.json")

Две проверки подтверждают, что передача сработала:

  • jq -e '.context_ready' завершается с кодом 0: преемник получил записанный контекст предшественника, включая последнюю успешную контрольную точку.
  • У возобновлённой сессии новый ID — возобновление создаёт новую сессию AWR, а не изменяет старую.

Вы также можете в любое время посмотреть состояние восстановления в режиме только чтения:

awrj recovery inspect --session "$AWR_SESSION"

Работаете внутри чата агента для программирования? Привяжите диалог хоста к сессии AWR, чтобы контрольные точки переживали компактификацию хоста:

awrj client bind --client generic --external-session "myhost:$HOST_CONVERSATION_ID" \
  --work "$AWR_WORK" --session "$AWR_SESSION"

AWR не переносит память процесса хоста и не берёт под контроль произвольные существующие процессы — непрерывность возникает из того, что было явно записано.

Куда двигаться дальше