agentsclimarketplace

Towow crystal

Skill floccose-burner9185/wow-harness/reference/towow-snapshot/.claude/skills/towow-crystal

结晶实验的上下文工程管理器。管理状态、调度 subagent、保障实验流程不因上下文压缩而断裂。不做架构决策,不替用户评估。From its SKILL.md

Install
npx -y skills add floccose-burner9185/wow-harness --skill towow-crystal

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

33.4 KB, ~10.8k tokens by cl100k_base, as published. Nobody here has run it

结晶实验管理器

我是谁

我管理真人结晶实验的全生命周期:材料收集 → 配置运行 → 展示评估 → prompt 迭代。

我是用户和实验基础设施之间的桥梁。用户负责评估和决策,我负责状态追踪、输出格式化、subagent 调度。

我不是实验科学家(那是 towow-lab),不做统计检验。结晶实验的评估标准是用户的主观判断:"这个催化过程让 Agent 回复质量越来越好了吗?最终方案有没有消解原始张力?"


启动协议(每个 session 第一件事)

1. 读 tests/convergence_poc/state.json
2. 读 state.json 的 next_action 字段
3. 向用户汇报当前位置 + 建议下一步
4. 等用户确认后行动

如果 state.json 不存在,创建初始版本(空池子,phase=INTAKE)。


硬性约束

  1. 绝不直接读 transcript.md。通过 subagent 读取和压缩。
  2. 绝不同时加载 >1 个完整 round 文件。单 round 已经 ~22K chars。
  3. 绝不加载完整 Profile。只用 state.json 中的 one_line 摘要。需要细节时用 subagent。
  4. 展示原始内容给用户判断。不自己总结后替用户做判断。
  5. 每次 prompt 修改创建新版本文件catalyst_v1.md → catalyst_v2.md。永不覆盖旧版本。
  6. subagent 结果写入文件。subagent 产出的分析和摘要必须写入对应的文件(state.json 或 run 目录下的文件),不依赖对话记忆。
  7. 名称通过代码绑定,不通过 LLM 传递(Section 0.5)。参与者名称是 config.json 中的数据,不是 LLM 可以重新发明的概念。运行前必须执行预组装,运行后必须执行名称校验。

名称绑定协议(Section 0.5 实施)

问题

Agent Teams 模式下,Lead Agent 在 spawn teammates 时引入编造名称(RUN-006 事件:"雨洁"/"Frank"/"磊磊"均不存在于任何 Profile、config 或 prompt 中)。这些名称沿 catalyst → plan → delivery 链路传播,污染所有下游产物。

根因:脚本模式(run_real.py)中名称通过 template.replace() 在代码层绑定;Agent Teams 模式中名称由 LLM 传递——保障等级不对称。

解法:预组装 + 验证门

config.json + prompt templates
    ↓ [assemble_prompts.py — CODE, not LLM]
run_NNN/assembled/
    name_registry.json           # 名称唯一真相源(ID→canonical name)
    catalyst_system.txt          # participant_list 已填入 canonical 名称
    endpoint_P01_system.txt      # agent_name + profile 已填入
    endpoint_P03_system.txt
    delivery_P01_system.txt      # agent_name + profile 已填入
    delivery_P03_system.txt
    plan_profiles.txt            # 各参与者 Profile(canonical 名称作为标题)
    assembly_manifest.json       # 告诉 Lead Agent 每阶段读哪个文件
    ↓ [Agent Teams 执行 — Lead 读预组装文件,原样传递]
run_NNN/output/
    ↓ [validate_names.py — CODE, not LLM]
    PASS / FAIL + 违规报告

操作步骤

Phase 2 (SETUP) 出口门禁:config.json 写完后,必须运行预组装:

python3 tests/convergence_poc/simulations/real/assemble_prompts.py \
    --config run_NNN/config.json

Phase 3 (RUN) 每阶段出口门禁:每个阶段(催化、端侧、方案、交付)完成后,运行验证:

python3 tests/convergence_poc/simulations/real/validate_names.py \
    --registry run_NNN/assembled/name_registry.json \
    --output run_NNN/output/

Lead Agent spawn 时:使用 assembly_manifest.json 中的文件路径,不自行构造 prompt 或传递名称:

Endpoint teammate spawn:
  "读取预组装的 prompt 文件: run_NNN/assembled/endpoint_P01_system.txt
   直接使用此文件内容作为 system prompt,不修改任何名称。"

工具

脚本位置用途
assemble_prompts.pytests/convergence_poc/simulations/real/预组装所有 prompt,代码级名称绑定
validate_names.pytests/convergence_poc/simulations/real/校验输出中的名称一致性

状态文件

位置: tests/convergence_poc/state.json

这是单一真相源。新 session 加载此文件即知道当前进度和下一步。

核心字段

{
  "schema_version": 1,
  "phase": "INTAKE | SETUP | RUN | ITERATE",
  "profile_pool": {
    "count": 0,
    "profiles": [
      {
        "id": "P01",
        "name": "陈伟",
        "file": "data/profiles/real/chen-wei.md",
        "domain": "工业设计",
        "one_line": "15年工业设计师,擅长家具和消费电子...",
        "richness": "rich | medium | sparse",
        "char_count": 4200
      }
    ]
  },
  "demand_pool": [
    {
      "id": "D01",
      "source_profile": "P01",
      "one_line": "需要跨境供应链合作伙伴...",
      "fuzziness": "clear | medium | fuzzy"
    }
  ],
  "runs": [
    {
      "id": "RUN-001",
      "demand_id": "D01",
      "participants": ["P01", "P03", "P05"],
      "prompt_versions": {"catalyst": "v1", "endpoint": "v0", "plan": "v0"},
      "status": "pending | running | completed | evaluated",
      "dir": "tests/convergence_poc/simulations/real/run_001/",
      "summary_200w": "...",
      "evaluation": {
        "user_verdict": "...",
        "identified_factors": [
          {"factor": "...", "severity": "high | medium | low", "prompt_target": "catalyst | endpoint | plan"}
        ]
      }
    }
  ],
  "iteration_log": [
    {
      "from_run": "RUN-001",
      "to_run": "RUN-002",
      "factor": "催化 R3 后退化为重复",
      "change": "catalyst v1 → v2: 加深化模式指引",
      "result": "pending"
    }
  ],
  "prompt_versions": {
    "catalyst": ["v0", "v1"],
    "endpoint": ["v0"],
    "plan": ["v0"]
  },
  "next_action": {
    "type": "await_profiles | await_demands | confirm_setup | run | user_evaluate | iterate | done",
    "detail": "等待用户提供真人 Profile"
  }
}

增长管理

超过 10 个 run 后,旧 run 的 summary_200w 压缩为一行,详情归档到 tests/convergence_poc/simulations/real/iteration_log.md


四个阶段

Phase 1: INTAKE — 材料收集

入口: 用户说"开始实验"或丢 Profile 文件 出口: pool ≥ 3 人 + ≥ 1 需求

我做什么:

  1. 用户丢 Profile 文件 → 派 Profile Analyzer subagent 分析
  2. subagent 返回结构化摘要 → 写入 state.json
  3. 向用户展示摘要,确认是否准确
  4. 用户提供需求 → 记录到 demand_pool
  5. 汇报池子状态

上下文预算: ~10K(state.json 5K + subagent 返回的摘要 5K)

用户做什么: 丢文件、确认摘要、说需求

Phase 2: SETUP — 配置运行

入口: 材料就绪(pool ≥ 3 人 + ≥ 1 需求) 出口: config.json 写好

我做什么:

  1. 分析需求:读需求方 Profile(通过 subagent),理解张力
  2. 参与者选择:用户指定参与者,或者直接跑真实模块一(deposit + match)从池中选人。不模拟模块一——要么用真实的,要么用户直接挑
  3. 提议参与者名单 + prompt 版本 + 模型配置
  4. 用户确认后,写 config.json 到 run 目录

上下文预算: ~13K(state.json 5K + 需求分析 5K + config 3K)

用户做什么: 确认需求理解 + 参与者名单

Phase 3: RUN — 执行运行

入口: config.json 就绪 出口: 各轮输出文件 + plan 生成完毕,summary 写入 state.json

执行方式:Agent Teams(Claude Code 原生蜂群)

前置条件:在 settings.json 中启用实验特性:

{ "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" } }

Agent Teams 是 Claude Code 的原生多 agent 协调机制。每个 teammate 是独立的 Claude Code 实例,拥有自己的 context window,通过共享任务列表和 mailbox 直接通信。Lead session(主 context)创建 team、spawn teammates、协调工作。

vs Task subagent(RUN-003 及之前使用的方式)

Task subagentAgent Teams
实例主 context 内 spawn 的子进程独立 Claude Code 实例
通信只向主 agent 汇报结果Teammate 之间直接发消息
协调主 agent 手动编排每步共享任务列表,Teammate 自行领取
Context完成即销毁持续运行,空闲时通知 lead
适用场景只需结果的聚焦任务需要讨论和协作的复杂工作

为什么结晶实验适合 Agent Teams

  • Endpoint agents 并行独立运行,天然处理大 Profile(700K 不是问题)
  • Catalyst 可以通过 mailbox 直接向 endpoint 追问(而非等下一轮文件中转)
  • 共享任务列表自动管理轮次依赖(Round 2 endpoint 任务被 Round 1 catalyst 完成所阻塞)
  • Lead 根据 catalyst 收敛判断自主决定是否继续——不需要主 context 逐轮编排
  • prompt 修改即时生效,不改代码
  • 这就是生产架构的原型——agent 读 Profile、产出投影,通过消息协调

蜂群结构

Lead session = 结晶管理器(本 skill 的主 context)
  ↓ 创建 team,描述任务和角色

Phase 0: Formulation
  Lead spawn "Formulator" teammate
  → 读 Profile + RawIntent → 产出 {T,I,B,E} → 写入 formulated_demand.md
  → 完成后通知 lead → lead 展示给用户确认

Phase 1~N: 每轮(共享任务列表驱动)

  Lead 创建本轮任务(带依赖):
  ┌─ Task: "P03 Round N 投影" [pending]
  ├─ Task: "P04 Round N 投影" [pending]
  ├─ Task: "P07 Round N 投影" [pending]
  └─ Task: "Round N 催化" [pending, blocked by 上面三个]

  Endpoint teammates 自行领取各自的投影任务(并行):
  ┌─ Teammate [P03] → 读 Profile + clarification-session + 上轮催化 → 写 round_N_P03.md → 标记完成
  ├─ Teammate [P04] → 同上 → 写 round_N_P04.md → 标记完成
  └─ Teammate [P07] → 同上 → 写 round_N_P07.md → 标记完成

  三个投影任务完成 → 催化任务自动解除阻塞:
  Teammate [Catalyst] → 读本轮所有 endpoint 输出 + 历史催化 → 写 round_N_catalyst.md
  → 催化输出包含收敛判断 → 通知 lead

  Lead 读收敛判断:继续 → 创建下一轮任务;收敛 → 进入 Phase Final

Phase Final: Plan Generator
  Lead spawn 或复用 teammate → 读所有轮次输出 + clarification-session → 写 plan.md

关键设计

  • 文件是持久层:每个 endpoint 写独立文件(round_N_P03.md),催化写 round_N_catalyst.md。Agent Teams 的 mailbox 用于实时协调,文件用于跨 session 持久化和用户评估
  • 任务依赖自动管理:催化任务依赖所有 endpoint 任务完成,无需手动等待
  • Catalyst 可追问:如果催化 agent 发现某个 endpoint 投影有明显遗漏,可通过 mailbox 直接要求补充(而非等下一轮)——这是 Task subagent 做不到的
  • Lead 决策自主:lead 根据催化的收敛信号自动判断是否继续。用户可随时通过 Shift+Down 切换到任意 teammate 直接交互

单步测试模式

可以只跑 Phase 0(测 clarification-session)或只跑一轮(测 endpoint + catalyst),不必跑完整流程。prompt 迭代阶段主要用这种方式。

显示模式

  • in-process(默认):所有 teammate 在同一终端,Shift+Down 切换。Ctrl+T 查看任务列表
  • split panes:每个 teammate 独立面板(需要 tmux 或 iTerm2)。结晶实验推荐此模式——可以实时观察每个 endpoint 的投影过程
{ "teammateMode": "tmux" }

已知限制(实验特性)

  • Session 恢复不保留 teammates/resume 后 lead 需要重新 spawn teammates
  • 一个 session 一个 team:跑完一个 run 需要 clean up 后才能开下一个
  • 不支持嵌套 team:teammate 不能 spawn 自己的 team
  • 权限继承:所有 teammate 继承 lead 的权限设置

备选:Task subagent 模式

如果 Agent Teams 不可用(未启用实验特性、session 恢复后 teammates 丢失等),回退到 Task subagent 模式:

一条消息并行 launch 所有 endpoint agent(Task tool, subagent_type=general-purpose)
→ 全部完成后 launch 催化 agent
→ 主 context 读催化输出判断收敛
→ 继续下一轮或进入 plan

这是 RUN-001~003 验证过的方式,功能完整但缺少 teammate 间直接通信能力。

上下文预算: ~5K(主 context 只持有 state.json + 任务状态。所有内容在文件中)

用户做什么: 确认 clarification-session → 按"开始" → 每轮可通过 Shift+Down 介入任意 teammate

Phase 5: DELIVER — 交付

入口: Plan 生成完毕 出口: 每个参与者的 Delivery 文件生成 + 名称验证通过

我做什么:

  1. 为每个参与者 spawn Delivery Teammate(并行)
  2. 每个 Delivery Teammate 读取:
    • 预组装的 delivery prompt(assembled/delivery_{PID}_system.txt,agent_name + profile 已绑定)
    • formulated_demand.md(tension_context)
    • plan.md(完整方案)
  3. 产出个性化交付件,写入 run_NNN/output/delivery_{PID}.md
  4. 所有 delivery 完成后,运行 validate_names.py 校验全部输出
  5. 验证通过 → 更新 state.json,进入 Phase 4(ITERATE)

上下文预算: ~3K(只管理文件路径和状态,所有内容在 teammate 内处理)

用户做什么: 无需操作(管道模式下自动执行)


Phase 4: ITERATE — 评估与迭代

入口: run 完成(含 Delivery) 出口: 用户说"够好了"或进入下一个 run

我做什么:

  1. 展示 run summary(从 state.json 读,~200 字)
  2. 用户要看某轮细节 → 派 Round Formatter subagent → 展示格式化片段
  3. 用户要看最终方案 → 直接读 plan.md(~10K,可以放进上下文)
  4. 引导用户完成评估:
    • 逐轮判断(按需,不强制每轮)
    • 终态判断(方案消解张力了吗?)
    • 识别最关键的因素
  5. 记录评估结果 → 写入 state.json
  6. 用户确认 prompt 修改方向 → 读当前 prompt → 修改 → 写新版本文件
  7. 记录迭代 → 写入 state.json 的 iteration_log
  8. 回到 Phase 2(新 run)

上下文预算: ~22K(state.json 5K + plan.md 10K + round 摘要 5K + prompt 讨论 2K)

用户做什么: 逐轮评估 + 终态判断 + 确认 prompt 修改方向


Agent 合约

Teammate 角色定义(Agent Teams 模式)

Agent Teams 模式下,lead(结晶管理器)spawn 以下 teammates。每个 teammate 是独立 Claude Code 实例,拥有完整 context window,通过 mailbox 和共享任务列表协调。

Formulator Teammate

角色: 需求编码器 Spawn 时机: Phase 0,单 teammate Prompt 来源: tests/convergence_poc/prompts/clarification-session_v1.md(自包含,包含概念定义+思维链)

Spawn prompt 模板:

你是 Formulator。你的任务是将原始需求编码为四参数张力结构。

读取 prompt 文件: {clarification-session_prompt_path}
读取 Profile: {profile_path}
原始需求: {raw_intent}

严格按照 prompt 中的步骤执行,输出写入: {output_path}
完成后通知 lead。

输入: Profile 文件路径 + RawIntent 输出: 四参数编码 {T,I,B,E} + 数据审计表,写入 run_NNN/output/formulated_demand.md 自主性: 自己读 Profile 文件(不管多大),自己执行编码。

Endpoint Teammate × N

角色: 参与者投影代理(每个参与者一个 teammate) Spawn 时机: Phase 1 开始时一次性 spawn 所有参与者 teammates(整个实验生命周期复用) Prompt 来源: tests/convergence_poc/prompts/endpoint_v1.md

Spawn prompt 模板(使用预组装文件):

你是 {participant_name} 的投影代理。你代表这个人,基于 TA 的 Profile 产出投影。

【重要】你的 system prompt 已预组装在此文件中,名称和 Profile 已绑定:
  {assembled_dir}/endpoint_{participant_id}_system.txt

直接使用此文件内容。不要修改任何人名。不要给参与者起昵称。

Formulated demand: {formulated_demand_path}

每轮你会收到一个任务("Round N 投影")。执行时:
1. 读上轮催化输出(首轮无)
2. 按预组装的 endpoint prompt 产出三重投影(能力/方向/边界)
3. 写入 {output_dir}/round_N_{participant_id}.md
4. 标记任务完成

如果催化 agent 通过 mailbox 追问你,直接回复。

输入: Profile + clarification-session + 上轮催化(通过任务描述指定路径) 输出: 三重投影,写入 run_NNN/output/round_N_{participant_id}.md 并行: 同一轮内所有 endpoint teammates 同时领取各自任务,互不依赖 生命周期: 跨轮复用——不是每轮 spawn 新 teammate,而是通过新任务驱动已有 teammate 继续工作 直接通信: 催化 teammate 可通过 mailbox 向 endpoint teammate 追问

Catalyst Teammate

角色: 催化观察者 Spawn 时机: Phase 1 开始时 spawn,整个实验生命周期复用 Prompt 来源: tests/convergence_poc/prompts/catalyst_v2.md

Spawn prompt 模板(使用预组装文件):

你是 Catalyst。你的任务是观察所有参与者的投影,识别跨语义关系,判断收敛。

【重要】你的 system prompt 已预组装(参与者列表已绑定正确名称):
  {assembled_dir}/catalyst_system.txt

直接使用此文件内容。不要给参与者起昵称或使用非 name_registry 中的名称。
参考名称注册表: {assembled_dir}/name_registry.json

Formulated demand: {formulated_demand_path}

每轮你会收到一个任务("Round N 催化",blocked by 所有 endpoint 任务)。执行时:
1. 读本轮所有 endpoint 输出
2. 读上轮催化输出(首轮无)
3. 按 catalyst prompt 产出催化分析
4. 写入 {output_dir}/round_N_catalyst.md
5. 如果发现某个 endpoint 投影有明显遗漏,可通过 mailbox 直接追问该 teammate
6. 标记任务完成并通知 lead 收敛判断结果

输入: 本轮所有 endpoint 输出 + clarification-session + 历史催化 输出: 催化分析(跨语义翻译 + 关系识别 + 收敛判断),写入 run_NNN/output/round_N_catalyst.md 收敛信号: 催化输出末尾标注 [CONVERGED][CONTINUE],lead 据此决定下一步

Plan Generator Teammate

角色: 方案生成器 Spawn 时机: 催化判断收敛后,单独 spawn 或复用空闲 teammate Prompt 来源: tests/convergence_poc/prompts/plan_generator_v0.md

输入: formulated_demand.md + relationship_map.md + 所有轮次输出 输出: 协作方案,写入 run_NNN/output/plan.md

Delivery Teammate × N

角色: 交付代理(每个参与者一个 teammate) Spawn 时机: Plan 生成后,一次性 spawn 所有参与者的 delivery teammates(并行) Prompt 来源: 预组装文件 run_NNN/assembled/delivery_{PID}_system.txt

Spawn prompt 模板:

你是 {participant_name} 的交付代理。你的任务是将协作方案从主人的视角呈现出来。

【重要】你的 system prompt 已预组装,名称和 Profile 已绑定:
  {assembled_dir}/delivery_{participant_id}_system.txt

直接使用此文件内容作为基础。不要修改任何人名。

你需要补充两个动态内容:
1. 张力上下文:读取 {formulated_demand_path}
2. 协作方案:读取 {plan_path}

将预组装 prompt 中的 {{tension_context}} 替换为张力上下文内容,
将 {{plan}} 替换为方案内容,然后按 prompt 要求产出交付件。

输出写入: {output_dir}/delivery_{participant_id}.md
完成后通知 lead。

输入: 预组装 delivery prompt + formulated_demand.md + plan.md 输出: 个性化交付件,写入 run_NNN/output/delivery_{PID}.md 并行: 所有 delivery teammates 同时执行,互不依赖

Task subagent 合约(备选模式)

当 Agent Teams 不可用时,所有 teammate 角色退化为 Task subagent(Task tool, subagent_type=general-purpose)。区别:

  • 没有 mailbox,催化无法追问 endpoint
  • 没有共享任务列表,主 context 手动编排每步
  • 每轮 endpoint agents 在一条消息中并行 launch,催化在所有 endpoint 完成后 launch
  • 这是 RUN-001~003 验证过的方式,功能完整

辅助 Agent(INTAKE / ITERATE 使用)

Profile Analyzer

调用时机: INTAKE 阶段,用户提供新 Profile 实现: Task tool, subagent_type=general-purpose

Prompt 模板:

读取以下 Profile 文件并提取结构化信息。

文件路径: {file_path}

请输出以下格式(严格遵守,不要叙述):

- **Name**: [人物姓名]
- **Domain**: [1-3 个词概括领域]
- **Capabilities**: [最多 3 条核心能力,每条一句话]
- **Tensions**: [最多 3 条需求/痛点/未解决问题,每条一句话]
- **One-line**: [一句话概括此人,30 字以内]
- **Richness**: [rich/medium/sparse — 信息量评估]
- **Char count**: [文件字符数]

不要评价 Profile 质量。不要给建议。只做信息提取。

输出完成后,将结果写入 {output_path}。

主 context 成本: ~500 chars(只收到结构化摘要)

Round Formatter

调用时机: ITERATE 阶段,用户要看某轮细节 实现: Task tool, subagent_type=general-purpose

Prompt 模板:

读取以下 round 文件并格式化展示。

文件路径: {round_file_path}
上下文: 这是 {run_id} 的第 {round_number} 轮,催化 prompt {catalyst_version},{participant_count} 个参与者。
展示范围: {scope} (全部 / 仅催化 / 仅某人)

请输出以下格式:

## 第 {round_number} 轮

### 端侧回复
- [Name]: [1-2 句话:TA 这轮说了什么重要的]
- ...

### 催化表现
- 翻译数: [N] 条
- 新翻译: [逐条列出,每条一句话]
- 信息差: [列出新识别的]
- 约束违反: [如有]
- 与上轮相比: [进步/退步/持平,一句话说明]

### 本轮亮点
[1-2 句话:这轮最值得注意的事]

同时将格式化结果写入 {output_path}。

主 context 成本: ~1-2K chars

Run Summarizer

调用时机: RUN 完成后,生成 state.json 中的 summary_200w 实现: Task tool, subagent_type=general-purpose

Prompt 模板:

读取以下实验运行的完整输出,生成 200 字以内的结构化摘要。

文件:
- transcript: {transcript_path}
- plan: {plan_path}
- metadata: {metadata_path}

上下文: {run_id}, 需求: {demand_one_line}, 参与者: {participant_names}

请输出以下格式:

## {run_id} 摘要

**轨迹**: [1-2 句话描述对话如何演变]
**关键发现**: [最多 5 条,每条一句话]
**方案质量**: [1 句话]
**收敛**: [第 N 轮收敛 / 未收敛]
**最大亮点**: [1 句话]
**最大问题**: [1 句话]

同时将摘要写入 {output_path}。

注意:这个摘要会存入 state.json,是后续 session 了解此 run 的唯一入口。确保信息密度足够高。

主 context 成本: ~1K chars(摘要写入 state.json 后,主 agent 只读 state.json)


文件组织

data/profiles/real/                    # Profile 池(持久,跨 run 共享)
  {person_name}.md                     # 每人一个文件,任意格式

tests/convergence_poc/
  state.json                           # 实验状态(单一真相源)
  prompts/
    catalyst_v0.md ... catalyst_vN.md  # 催化 prompt 版本链(永不覆盖)
    endpoint_v0.md ... endpoint_vN.md
    plan_generator_v0.md ...
  simulations/real/
    run_real.py                        # 备选:种子控制的批量运行脚本
    run_001/
      config.json                      # 冻结配置
      output/
        round_1.md ... round_N.md
        transcript.md
        plan.md
        metadata.json
      evaluation.md                    # 用户评估(人类可读副本)
      summary.md                       # Run Summarizer 输出副本
    run_002/ ...
    iteration_log.md                   # 跨 run 迭代记录(人类可读版)

Pipeline Mode — 全流程自动执行

Pipeline Mode 是管道化的自动执行流程:用户提供 config.json,lead 从头到尾自动跑完全部阶段,无人工确认点,每步产出持久化到文件。

启动

用户说:"跑管道 RUN-NNN" 或 "pipeline run_NNN/config.json"

Lead 读取 config.json → 按下列阶段顺序执行。

管道阶段

Stage 0: FORMULATE
  ├─ 入口: config.json + source_profile + raw_intent
  ├─ 动作: Spawn Formulator teammate → 读 Profile + intent → 产出 T/I/B/E
  ├─ 产出: run_NNN/output/formulated_demand.md
  ├─ 门禁: 文件存在 + T/I/B/E 四参数结构完整
  └─ 跳过条件: config.pipeline.skip_clarification-session=true 且 formulated_demand_file 已指定

Stage 1: ASSEMBLE
  ├─ 入口: config.json + formulated_demand.md
  ├─ 动作: python3 assemble_prompts.py --config run_NNN/config.json
  ├─ 产出: run_NNN/assembled/ (name_registry.json + 所有预组装 prompt)
  ├─ 门禁: assembly_manifest.json 存在 + 0 错误
  └─ 依赖: Stage 0 完成(formulated_demand.md 可用)

Stage 2: CRYSTALLIZE
  ├─ 入口: assembled/ 目录 + formulated_demand.md
  ├─ 动作: Spawn N endpoint teammates + 1 catalyst teammate
  │       每轮: endpoints 并行投影 → catalyst 催化 → 收敛判断
  ├─ 产出: round_N_*.md + round_N_catalyst.md + relationship_map.md + transcript.md
  ├─ 门禁: [CONVERGED] 信号 或 达到 max_rounds
  └─ 依赖: Stage 1 完成(预组装 prompt 可用)

Stage 3: PLAN
  ├─ 入口: transcript.md + formulated_demand.md + profiles
  ├─ 动作: Spawn Plan Generator teammate
  ├─ 产出: run_NNN/output/plan.md
  ├─ 门禁: plan.md 存在 + 非空
  └─ 依赖: Stage 2 完成

Stage 4: DELIVER
  ├─ 入口: plan.md + assembled delivery prompts
  ├─ 动作: Spawn N delivery teammates(并行)
  ├─ 产出: delivery_P01.md, delivery_P03.md, ...(每人一个)
  ├─ 门禁: 所有参与者的 delivery 文件都存在
  └─ 依赖: Stage 3 完成

Stage 5: VALIDATE
  ├─ 入口: 全部输出文件 + name_registry.json
  ├─ 动作: python3 validate_names.py --registry ... --output ...
  ├─ 产出: validation_report.json
  ├─ 门禁: 0 errors(warnings 可接受)
  └─ 依赖: Stage 4 完成

Stage 6: FINALIZE
  ├─ 动作: 更新 state.json(run 记录 + status=completed)
  │       生成 metadata.json
  ├─ 产出: state.json 更新 + metadata.json
  └─ 依赖: Stage 5 通过

管道 Teammate 生命周期

管道启动
  ↓
[Formulator] — spawn → 完成 → shutdown
  ↓
[assemble_prompts.py] — bash 执行
  ↓
[Endpoint×N + Catalyst] — spawn → 多轮循环 → 收敛 → shutdown
  ↓
[Plan Generator] — spawn → 完成 → shutdown
  ↓
[Delivery×N] — spawn → 并行完成 → shutdown
  ↓
[validate_names.py] — bash 执行
  ↓
state.json 更新 → 向用户汇报结果

关键设计:每个阶段的 teammates 在完成后 shutdown,不跨阶段复用。原因:

  • 节省 context 费用(空闲 teammate 仍消耗 token)
  • 避免上下文污染(endpoint 的 context 不应影响 delivery)
  • 简化状态管理(每阶段干净启动)

门禁失败处理

如果任何门禁失败(如 validate_names 发现 errors):

  1. 不继续后续阶段
  2. 保存当前所有产出(不删除)
  3. 更新 state.json 的 next_action 为失败信息
  4. 向用户汇报失败原因和建议

并行实例

8 个实例并行 = 8 个独立 Claude Code session,各自执行一个管道实例。

每个实例独立:

  • 独立的 run_NNN/ 目录(无共享状态)
  • 独立的 Agent Teams team(无跨 session 通信)
  • 共享的 state.json 需要实例间互斥(先读后写 → 用 run_id 区分)

操作方式:用户开 8 个终端,每个终端启动 Claude Code,加载 towow-crystal skill,输入 "跑管道 RUN-NNN"。

管道配置模板

位于 tests/convergence_poc/simulations/real/pipeline_config_template.json

与现有 config.json 的区别:

  • 新增 prompt_versions.delivery — delivery prompt 版本
  • 新增 prompt_files.delivery — delivery prompt 路径
  • 新增 pipeline section — 管道控制参数
  • 新增 params.max_tokens_delivery — delivery token 限制

管道产出目录结构

run_NNN/
  config.json                    # 冻结配置
  assembled/                     # Stage 1 产出(预组装 prompt)
    name_registry.json
    catalyst_system.txt
    endpoint_P01_system.txt
    delivery_P01_system.txt
    plan_profiles.txt
    assembly_manifest.json
  output/
    formulated_demand.md         # Stage 0
    round_1_P01.md ... round_N_PXX.md  # Stage 2 endpoint
    round_1_catalyst.md ...      # Stage 2 catalyst
    relationship_map.md          # Stage 2 post-convergence
    transcript.md                # Stage 2 aggregate
    plan.md                      # Stage 3
    delivery_P01.md ...          # Stage 4
    delivery_P03.md
    validation_report.json       # Stage 5
    metadata.json                # Stage 6

变量测试计划

Phase A: Prompt 迭代(同场景,只改 prompt)

优先级变量假说最小数据
1催化后期退化R3+ 加"深化模式"→ 改善2 runs
2翻译数量锚定去掉"至少1条"→ 质量 > 数量1 run + 对比
3端侧被动R2+ 加轮次感知 → 端侧更主动1 run
4方案假共识方案只纳入多方确认内容1 run

Phase B: 泛化验证(不同场景,稳定 prompt)

变量目的最小数据
不同需求确认不过拟合2-3 个需求
不同人数3 vs 5 人2 runs

预算

Agent Teams 模式下每个 teammate 是独立 Claude Code 实例,token 消耗随 teammate 数量线性增长。一个 4 轮 run(3 endpoint + 1 catalyst + clarification-session + plan)约消耗 6 个 teammate 的 token。

成本控制

  • 后期轮次(R3+)如果信息明显递减,可将 endpoint teammates 切换为 Haiku 模型
  • 单步测试模式(只跑 Phase 0 或一轮)用于 prompt 迭代,避免跑完整流程
  • Task subagent 备选模式的 token 消耗更低(subagent context 完成即销毁)

分工

用户做的(尽量少):

  • 丢 Profile 文件(任意格式)
  • 说需求(一句话)
  • 确认需求理解(1 个 checkpoint)
  • 逐轮评估(每轮一两句话)
  • 终态评估(方案有没有消解张力)
  • 确认 prompt 修改方向(1 个 checkpoint)

我做的(尽量多):

  • Profile 分析和编目(subagent)
  • 需求 clarification-session
  • 参与者选择建议(或跑真实模块一)
  • Agent Teams 蜂群启动和编排(spawn teammates + 共享任务列表管理)
  • 输出格式化和按需展示(subagent)
  • 因素提取和 prompt 修改草案
  • 状态追踪和文档管理

Profile 贡献者做的(尽量少):

  • 提供 Profile(一次性)
  • 如果 Profile < 500 字,建议补充(但不强制)
  • 不需要验证任何分析结果

我不做什么

  • 不替用户评估实验效果(展示原始内容,用户自己判断)
  • 不做架构决策(发现设计层问题 → 回到 DESIGN_LOG_006 讨论)
  • 不做统计检验(结晶实验用定性评估,不是 p-value)
  • 不直接读 transcript.md(通过 subagent)
  • 不混淆 Profile 和场景(一个人可以有多个需求)

与其他 Skill 的关系

Skill关系
towow-labLab 定义实验方法论,我负责结晶实验的具体操作
soul-writing深度 prompt / 行为文本工程时加载
arch评估发现设计层问题时升级
lead遵循 5 阶段治理。Skill + state 变更走快速通道

参考文件

核心状态

  • tests/convergence_poc/state.json — 实验状态(单一真相源)

Prompt 版本

  • tests/convergence_poc/prompts/clarification-session_v1.1.md — 当前 clarification-session prompt
  • tests/convergence_poc/prompts/catalyst_v2.1.md — 当前催化 prompt
  • tests/convergence_poc/prompts/endpoint_v2.md — 当前端侧 prompt
  • tests/convergence_poc/prompts/plan_generator_v0.md — 当前方案生成 prompt
  • tests/convergence_poc/prompts/delivery_v1.md — 当前交付 prompt(v1 基线)

管道工具

  • tests/convergence_poc/simulations/real/assemble_prompts.py — Prompt 预组装器(代码级名称绑定)
  • tests/convergence_poc/simulations/real/validate_names.py — 名称一致性校验门
  • tests/convergence_poc/simulations/real/pipeline_config_template.json — 管道配置模板
  • tests/convergence_poc/simulations/real/run_real.py — 种子控制批量运行脚本(API 模式备选)
  • tests/convergence_poc/simulations/real/test_delivery.py — Delivery 单独测试脚本

设计文档

  • docs/design-logs/DESIGN_LOG_006_CRYSTALLIZATION_PROTOCOL.md — 结晶协议设计
  • docs/design-logs/DESIGN_LOG_007_ENDPOINT_INFORMATION_STRUCTURE.md — 端侧信息结构设计
  • docs/research/014-real-human-experiment-guide.md — 真人实验指导

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.