---
name: live2d-layering
description: 根据角色参考图制作或续跑可编辑、具备隐藏补全的分层 SVG 素体；按节点配置调度参考准备、部件制作和声明的独立审查。用于角色分层、指定部件细化或已有案例续跑。
---

# 人物分层工作流调度规则

本文件只规定通用执行与交接方式；任务顺序由编号目录决定，输入、选项和产物由各级 `流程.yaml` 声明，具体制作要求写在对应节点提示词中。

任务资料以本 `SKILL.md` 所在目录为根。通用工具放在本技能的 [tools](tools/readme.md)，仅供单个步骤使用的工具放在该编号步骤的 `tools/`；不引用技能目录之外或另一技能内的资源。所有 `流程.yaml` 中的 `run`、`asset`、`prompt` 都从本技能根目录解析，路径不得越过 `SKILL.md` 所在目录。总控解析为绝对路径后交接，用户产物仍写入工作根目录。

## 调用与输入

读取[根配置](流程.yaml)，绑定用户提供的必要素材和绝对输出目录；仅集中询问必需项中的缺项，可选素材按实际提供情况绑定。输入文件与技能资料只读，产物和临时文件写入本轮工作根目录；用户仅要求规划或修改流程时，不启动制作任务。

已有选项从工作根目录的平级 `options.json` 读取，按根配置核对类型；用户本轮明确选择优先，由负责判断的 worker 写入。旧运行仅有 `options.yaml` 时，由该 worker 按[选项工具说明](tools/readme.md)迁移已有值。用户可以指定起止节点；默认执行实际建立的编号节点。

## 读取与绑定

- 按目录编号逐级展开、按数字排序，例如 `1.2` 在 `1.10` 前；同编号且带 `.parallel.` 的节点并行，全部完成后继续下一编号。容器只组织子任务，不额外执行父任务。
- 每个节点先读取自己的 `流程.yaml`；实际任务显式写 `run`，其值是从技能根目录到执行目录的路径，再读取该目录提示词与 `.model`。条件任务把 `run` 放在执行分支；单任务循环写 `foreach.run` 指向执行目录，逐项执行任务及其 review，不重新进入自身循环。无 `run` 的纯容器仅展开编号子步骤，输出别名分支仅发布路径；不能按目录里的模型文件隐式派发。
- 普通 `inputs.<名称>` 引用根输入；循环内部引用当前循环已绑定的输入。`nodes.<id>.<名称>` 引用已完成节点产物，`asset` 从技能根目录解析，普通产物路径相对工作根目录；`required: false` 缺项标为“未提供”。
- `if / then / else` 按声明条件选择分支，分支继承节点输入并加入自身输入。条件读取已绑定输入或 `options.<名称>`；字段缺失或类型错误时交原负责 worker 补正，不自行猜测。
- 输出中的 `inputs.*`、`nodes.*` 发布已绑定的路径；其他输出相对工作根目录。分支另行声明保存路径和格式时，按声明保存复用输入。
- `writes_options` 由该 worker 核对选项名与类型，确认可用的 Python 3 后使用绑定的公共 `options_tool` 写入选项；总控读取结果继续。
- 派发资料限节点声明的本轮素材、上游产物、静态参考和工具；教程知识由编写者落实在对应提示词，不在运行时追加教程原文、其他技能或整套规划文档。

遇到具体语法时查阅 [Workflow DSL](docs/workflow-dsl.md) 的对应规则；示例只解释格式，实际任务以节点配置为准。

## worker 与交接

从语言 `.model` 文件名最右侧拆出推理强度；新 worker 用 `spawn_agent` 显式指定模型、强度与 `fork_turns: "none"`。相同 `worker` 的串行任务用 `followup_task` 续做，不同名称分别建会话；省略时以节点 `id` 为身份。

并行分支共用已有 worker 时，从该会话在分支前已完成的上下文分别 fork：由原 worker 发起子分支并返回 agent ID，总控跟进，汇合后交回原 worker 继续。分支的续做和返修交各自会话，共用 worker 的模型与强度保持一致；没有已有会话时按新 worker 建立，详见 [会话与 fork](docs/workflow-dsl.md#会话与-fork)。

记录实际 agent ID，等待依赖完成再推进；提示词通过路径读取，最小交接为：

```text
工作根目录：<绝对输出目录>
提示词：<节点提示词绝对路径>
输入：<用途或图号＝实际绝对路径；可选缺项写“未提供”>
循环上下文：<仅循环任务：当前项、序号/总数、is_last>
输出：<本次声明的产物路径>
读取指定提示词并执行，命令工作目录设为工作根目录。
```

`writes_options` 任务将“输出”替换为“写入选项：<字段名>”；用户本轮对该任务的明确要求一并交接。worker 依据此交接与节点提示词执行，Skill 和规划文档由总控使用。

## 循环与版本传递

- 按 `foreach` 声明绑定来源、分组、排序和模板；省略 `group_by` 时按列表逐项执行。内层 `as` 保留外层上下文，先绑定当前项再展开占位符输入。
- 串行 `carry` 从节点初始输入开始，每项使用上一成功项的最新产物；任务及其声明的 review 都通过才推进。没有对应输出的任务保持已有 carry，不回退到某个 worker 自己记得的旧稿。
- 循环内的 `nodes.*` 与进度按当前项隔离；完成全部项才发布循环最终输出。`when: last_item` 的输出仅交给末项，不把中间稿当成最终交付。
- 同一 worker 恢复工作时仍须显式接收最新 carry，尤其经过其他 worker 后；返修在当前完整稿修具体问题，不用早期整图覆盖后续成果。
- 节点声明冻结决定或版本基准时，记录并按该节点规则传递；不能在下游悄悄更换决定或自动重置基准。

分组与循环的具体语法见 [动态派发](docs/workflow-dsl.md#8-按产物动态派发)。

## 生图与审查

- `imagegen.model` 由总控直接调用生图工具。读取 `imagegen.prompt`，按声明图号传图片，声明的文本资料读取后附在提示词后；存在 `imagegen.inputs` 时只传其列出的输入，其他输入仅用于条件与调度。
- 生图要求使用节点声明的自然语言，不混入结构计划、SVG、路径或运行变量；按 `imagegen.when` 决定是否生成，保存声明产物并确认可读。额外重绘由用户提出，工具失败如实报告。
- 只执行节点明确声明的独立 review，使用独立于绘制者的会话；`pass` 后发布通过的输出，`revise` 交原绘制者修具体问题，再由同一 reviewer 复验问题项，`blocked` 报告实际缺项。
- 总控核对声明交付和必要审查状态；视觉自查由对应 worker 完成，复用已有证据，不另加截图、哈希链、重复组装或成稿审查。

## 完成与续跑

在工作根目录的 `运行记录.md` 简记输入绑定、选项与分支、节点/循环状态、实际 worker 及子会话 ID、产物路径和必要审查结论。续跑核对实际文件与当前配置，按已成功交付恢复最新产物；历史编号变化时按内容重新绑定，不按旧编号自动认定完成。

会话失效时交接当前稿和未完成范围；输入改变只重新处理受影响节点。最终汇报实际产物、完成范围与未解决项，不把静态素材交付表述为动画绑定已完成。
