# 编排 Session、状态机与受限 Agent

## When to use

多轮交互、显式状态迁移或 LLM/tool loop 使用本任务。如果一次 graph 执行已经完整拥有生命周期，应停止增加新模型。Session、状态机和 Agent 同时存在但职责不清，不是有效设计。

## Inspect first

- 找出交互状态、迁移规则、终止、超时和恢复的当前所有者。
- 把确定性业务规则与模型生成的建议分别列出。
- 盘点工具的副作用、授权、幂等和返回类型。
- 阅读相关章节：[Session](/zh-CN/v/0.9.8-RC1/14-multi-turn-sessions)、[状态机](/zh-CN/v/0.9.8-RC1/15-state-machines)、[组合](/zh-CN/v/0.9.8-RC1/16-composing-sessions-and-state-machines)和[Agent](/zh-CN/v/0.9.8-RC1/17-agent-orchestration)。

## Required inputs

取得生命周期状态或 phase、合法迁移、保留上下文、轮次上限、超时行为、终止条件、工具白名单、审批边界和持久恢复要求。缺失的业务迁移必须由 Owner 补充，不得从当前代码猜测。

## Implementation path

1. 在 graph、Session 或状态机中选择一个外层生命周期所有者。
2. 在该所有者中显式表达确定性迁移。
3. 把 Agent 放入一个受限 phase/node，只返回类型化建议或结果。
4. 用工具白名单、输入合同、尝试/轮次上限和显式终态限制调用。
5. 除非业务合同明确授权，否则审批和不可逆副作用不得由模型自行决定。
6. 先证明内存生命周期和 restore 输入，再增加持久化。

## MUST / SHOULD / MAY

- **MUST** 为状态、超时、终止和恢复指定唯一所有者。
- **MUST** 限制 Agent 轮次和工具能力。
- **MUST** 在模型输出改变确定性状态或触发副作用前完成校验。
- **SHOULD** 跨边界返回类型化结果，不传递无结构文本。
- **SHOULD** 保留足以解释每次迁移的事件或 checkpoint 证据。
- **MAY** 用 Agent 做分类或建议生成；不得让它静默成为业务规则所有者。

## Failure patterns

- 两个生命周期 Owner 保存同一状态：选定外层 Owner，让内层组件只返回结果。
- Agent 一直循环到“完成”：增加硬轮次上限和显式终态。
- 工具调用等同审批：拆开建议、审批和执行。
- 恢复的 Session 没有定义/版本身份：恢复前保存并校验定义绑定。

## Validation

测试合法迁移、非法迁移、超时、最大轮次、拒绝工具、错误模型结果和 restore。持久版本必须使用全新的 manager/runtime 实例完成恢复；内存 restore 不能称为 crash-safe。

## Evidence

- [Session 生命周期](/zh-CN/v/0.9.8-RC1/14-multi-turn-sessions)
- [状态机所有权](/zh-CN/v/0.9.8-RC1/15-state-machines)
- [受限 Agent 编排](/zh-CN/v/0.9.8-RC1/17-agent-orchestration)
- [安全改动边界](/agent/zh-CN/v/0.9.8-RC1/policies/safe-change-boundaries.md)
