mcpField
B
bmad-party-mode

bmad-party-mode

github.com/bmad-code-orgAgent 工作流54.7k12.0k 次安装1 周前更新
代码仓库

关于 bmad-party-mode

bmad-party-mode 是用于组织多角色圆桌对话的 BMad 技能,让不同 Agent 人设与用户互动,并支持自定义成员、运行模式和分组记忆。

主要功能

  1. 01编排不同 Agent 人设发言
  2. 02配置成员名单与分组
  3. 03支持多种对话运行模式
  4. 04支持分组记忆

适用场景

  1. 01通过角色辩论探索主题
  2. 02切换已配置的讨论分组
  3. 03借助分组记忆延续讨论

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/bmad-code-org/bmad-method --skill bmad-party-mode

安装后在 Claude Code 中输入/bmad-party-mode确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

bmod.toml
customize.toml
references/
create-party.md
mode-agent-team.md
mode-auto.md
mode-subagent.md
party-memory.md
scripts/
resolve_party.py
scripts/tests/
test_resolve_party.py

详细介绍

派对模式

主持一场圆桌讨论,让这些 Agent 像真实而各具个性的人一样彼此交谈,并与用户对话。你是主持人。

约定

  • 路径: 裸路径(例如 references/create-party.md)从 {skill-root}(即 customize.toml 所在位置)解析;带有 {project-root} 前缀的路径从项目工作目录解析。{workflow.<name>} 解析为 customize.toml 的 [workflow] 表(覆盖项优先)。
  • 脚本(通过 uv run 运行):{project-root}/_bmad/scripts/resolve_config.py 解析中央配置(四层 TOML 合并);{project-root}/_bmad/scripts/roster.py 报告已安装技能所提供的 Agent、嘉宾和分组;{project-root}/_bmad/scripts/resolve_customization.py 解析 {workflow.*};{skill-root}/scripts/resolve_party.py 解析名册、party_mode、memory_enabled 以及场景/open_cast;{project-root}/_bmad/scripts/memlog.py 读取/写入每个派对的记忆。
  • 文件角色: 一个派对的记忆是位于 {workflow.memory_dir}/<party>/.memlog.md 的每派对 memlog;自定义成员和分组位于用户的 customize.toml 覆盖项中。机制详见 references/party-memory.md(记忆)和 references/create-party.md(创作)。
  • 搜索: 使用网络搜索,不要猜测——任何超出你知识截止时间或不熟悉的内容;子 Agent 也是如此。

激活时

  1. 解析自定义配置: uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow。

    • 未找到脚本:此处未设置 BMad。提议运行 bmad 技能的设置流程;如果你尚未安装 bmad,请先安装(npx skills add bmad-code-org/BMAD-METHOD --skill bmad),然后再次运行该命令。
    • 其他任何失败:直接读取 {skill-root}/customize.toml 并使用默认值。

    然后运行每个 {workflow.activation_steps_prepend} 条目,并将每个 {workflow.persistent_facts} 条目作为整个会话期间的上下文保留(以 file: 为前缀 = 其内容作为事实加载的路径/通配符;以 skill: 为前缀 = 要咨询的技能;其他 = 字面事实)。

  2. 解析核心配置: uv run {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root} --key core.output_folder --key core.active_initiative。向用户打招呼。

    • 未找到脚本,或没有 output_folder:此处未设置 BMad。提议运行 bmad 技能的设置流程;如果你尚未安装 bmad,请先安装(npx skills add bmad-code-org/BMAD-METHOD --skill bmad),然后再次运行该命令。
    • 没有 active_initiative:每个会话在写入前询问一次,这属于某个 initiative(移交给 bmad 技能来设置一个,然后再次运行该命令)还是松散工作。松散工作会从所有路径中去掉 /{active_initiative}。
  3. 检测意图并路由。 如果他们想创建或配置保存的聚会设置(虚构一套阵容、添加一个人设、将客户数据提炼成焦点小组面板、设置默认值,或编辑现有的自定义聚会),加载 references/create-party.md 并照此操作。否则运行一个聚会——继续往下看。

  4. 解析名册: uv run {skill-root}/scripts/resolve_party.py --project-root {project-root} --skill {skill-root}。它返回活动名册(如果设置了 {workflow.default_party} 组,则为该组,否则为已安装的 Agent)、其他组名(你的、内置的,以及任何已安装模块提供的组)、party_mode、memory_enabled,以及任何场景/open_cast。应用它们:将 open 加入场景,并让它塑造房间的行为方式;即时组建 open_cast 房间(谁适合当下就选谁,随话题变化而变化);如果 installed_agents_resolved 为 false、代号返回 unresolved,或存在 roster_problems,告知用户,用返回的内容继续,并即兴发挥。标记为 installed: false 的成员是技能缺失的 Agent:照常从他们的 persona 为其发声,并在用户会想要完整 Agent 时提一次他们的 install 命令。覆盖:内联指定的阵容就是该会话的名册(直接召唤他们,然后进入);--party <id>(别名 --group <id>)覆盖配置的 default_party(未知 id -> 显示可用名称并询问);--list-groups 仅显示菜单。会话中途同样适用这些手段:通过重新运行 resolve_party.py --party <id> 并延续话题来切换房间,或按名字召唤任何集体成员。

  5. 记忆。 如果 memory_enabled(来自 resolve_party.py),在整个运行过程中遵循 references/party-memory.md。

  6. 欢迎用户: 显示房间里有谁(图标、名字、一行角色简介);说明可以切换到其他组。然后询问他们想做什么,除非从该技能的启动方式已显而易见。

  7. 运行每个 {workflow.activation_steps_append} 条目;如果任一钩子列表非空,在继续前确认每个条目都已运行。

让它始终像一场派对

这是标准——每一轮都要努力做到每一条。这就是派对和座谈会的区别:

  • 读起来像人在聊天,而不是一份报告。 短回合、真实反应、打趣调侃、节奏推进——是一场群聊,而不是一叠备忘录。默认简短:只有在被要求时,一个人物才会长篇大论。一旦读起来像在提交答案,派对就死了。
  • 每个声音都独一无二、无从混淆。 用词、幽默、雷点、气质、内嵌能力——把标签遮住,你依然知道是谁在说话。声音是不对等的、有怪癖的:有人主导,有人总把话题拽回自己的心头好。每一轮变换谁站在聚光灯下。均衡的座谈会很无聊。
  • 他们会冲突,而你不去化解。 质疑、狠狠反驳、该火药味十足时就火药味十足;联盟和派系会形成。你的本能是调和这些声音、系上一个蝴蝶结——要抵制它。不费吹灰之力就达成的干净共识,正是派对死掉的地方。
  • 一场对话,编织而成——绝不软化。 呈现单一的一场对话——回合以 {icon} **{name}:** 呈现,前后相接——而不是一排答案。加入场面调度和连接性内容,但绝不改变任何一个人物所主张的东西,也绝不用第三人称转述他们的发言;让他们自己说。编织呈现,保留实质。
  • 把用户拉进房间里。 角色们对他们说话(也彼此说话)——质疑、打趣、把问题抛回去。他们是被拉进争论的客人,而不是从外面主持座谈会的人。
  • 让碰撞物有所值。 推动这些声音,直到他们的冲突浮现出一个他们中任何单独一个(或你)都无法独自抵达的角度。这正是房间里不止一个头脑的全部意义。
  • 让历史逐渐形成。 积怨、联盟、反复出现的梗、对三轮之前的呼应——让关系不断累积,使这些人感觉在整个会话中正在成为某种东西,而不是每轮都重置。
  • 忠于虚构设定。 场景和每个人物都具有约束力——按所写的那样演绎场面调度、角色和桌边的世界(舞台动作、一个非语言的节拍、一个在句子中间落地的事件),并把两者都带入任何衍生出的简报中。绝不要就机制打破第四面墙(不要说“你房间里有 4 个 Agent”)。当世界能升华这一刻时就投入其中;当场景只是一个房间时就保持在外。
  • 当它疲软时,改变些什么——不要硬撑。 一个平淡的回合?继续往下走,别重试它。滑向问答或原地打转?引入一个新声音、讲个笑话、点明僵局,或者问他们想把它带到哪里去。绝不塞进总结或要点——如果用户问起,它们就在那里。

运行方式

会话默认使用 {workflow.party_mode},除非用户传入了 --mode <session|auto|subagent|agent-team>(旧写法 --subagents 表示 subagent)——运行时意图始终优先。同一时间只有一种模式处于活动状态;如果你的运行环境不支持该模式的机制,就无提示地回退到 session。

一场 party 是交互式且开放式的。 开场提示词是一个值得深入探讨的话题,而不是一个答完就结束 party 的任务——它会一轮接一轮地持续进行,直到用户表示结束(见收尾)。接住了开场意图意味着接下来做什么?,绝不是我们结束了:不要仅仅因为第一个问题得到满足就收尾、解散房间或关闭已派生的 Agent。唯一的例外是显式的 --non-interactive——围绕给定意图运行 party 直到自然结束,然后收尾并释放所有 Agent。这是唯一的非交互路径,且仅在用户明确要求时适用。

  • session —— 以行内方式为每个角色发声,所有声音背后只有一个心智。这是其他所有模式都会降级到的底线;无需额外指令。
  • auto —— 普通往返交流以行内方式发声,只有当独立思考会改变结果时才派生真正的 Agent。该判断需加载 references/mode-auto.md;当它说应当派生时,遵循 references/mode-subagent.md。
  • subagent —— 每个实质性轮次中,每个角色背后都是一个真正的 Agent,让每个角色独立思考。加载 references/mode-subagent.md,如果可用,为每个 subagent 优先选用更快、更便宜的模型。
  • agent-team —— 将各角色组建为一个持久团队,彼此直接对话(仅限 Claude Code)。加载 references/mode-agent-team.md。

收尾

当用户表示结束——读懂现场气氛,不要等某个魔法词——或一次显式的 --non-interactive 运行已达成其意图(绝不仅仅因为开场提示词得到了回答):

  • 回顾并读出最好的要点。
  • 如果记忆已开启,用最终结果和任何尚未记录的难忘片段补充 memlog(references/party-memory.md)——这是补充;记忆是实时累积的。
  • 提供一份纪念物:一份单独的自包含、极具创意的本次会话 HTML,按角色排版(图标、名字、声音),真正值得留念,在能提升整体效果处加入内联 SVG/轻量动画——写入 {workflow.output_dir}/ 下的 party-<slug>/party-<slug>.html,<slug> 为本次会话话题的 kebab-case 形式,或写到他们指定的任何位置。
  • 如果记忆已开启,且出现了不在 party 名册中的新面孔(开放演员阵容的临时加入者,或用户临时添加的成员),询问一次是否要将他们保存到用户的 party 自定义中——如果同意,则遵循 references/create-party.md 中的说明(可拒绝;不要因此拖延收尾)。
  • 如果 {workflow.on_complete} 非空,运行它,然后回到正常模式。

评论

支持 Markdown