本指南带你从全新安装 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)、glibc 2.39 或更新版本 的 Linux x64 与 arm64(以 Ubuntu 24.04 为基线),以及 Windows x64。 在 Linux 上,先检查你的 glibc:
ldd --version | head -n 1
对于 npm 安装,请保持可选依赖(optional dependencies)启用——启动器 会解析对应平台的原生包。没有安装脚本,也没有网络下载器;pip wheel 包内嵌了二进制文件。此外还有面向应用作者的第三个渠道:一个锁定版本的 原生负载,宿主应用可以内嵌这两个二进制文件,使其用户在运行时无需 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. 启动工作会话
会话(session)是 AWR 中工作归属的基本单位。下面的命令使用一个小的 shell 辅助函数,让每次调用都带上项目路径和 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 "$@"; }
检查哪些工作可以执行,然后启动一个会话,同时带上认领(claim,即对该 工作项的运行时所有权)和当前项目修订版本:
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. 在新会话中继续工作
为了证明续接确实有效,结束第一个会话并从中恢复——这正是新 agent、 新机器或新宿主对话会使用的接手路径。结束会话会释放认领;它不会把 来源中的工作标记为完成:
AWR_REV=$(awrj status | jq -er '.project_revision')
awrj session end --session "$AWR_SESSION" --outcome incomplete \
--expected-revision "$AWR_REV"
现在恢复。任何 agent——可以是另一个,也可以是同一个 agent 稍后—— 都从前驱会话创建一个后继会话:
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——resume 会创建一个新的 AWR 会话,而不是 修改旧会话。
你也可以随时以只读方式检查恢复状态:
awrj recovery inspect --session "$AWR_SESSION"
在编码 agent 的聊天窗口里工作?把宿主对话绑定到 AWR 会话上,让检查点 在宿主压缩后依然存活:
awrj client bind --client generic --external-session "myhost:$HOST_CONVERSATION_ID" \
--work "$AWR_WORK" --session "$AWR_SESSION"
AWR 不会转移宿主的进程内存,也不会接管任意的已有进程——连续性来自 被显式记录的内容。
