persona-switch
功能
切换 agent 的人设(soul.md)。本 skill 文件夹内预置三套人设,用户可以在预设人设和原有人设之间自由切换。文件夹结构
触发方式
用户通过场景内的人设切换物件触发。点击选项后,对应 prompt 被注入输入框,用户点击发送后生效。 注入的 prompt 格式如下(由前端根据用户选择注入):- 切换到赛博朋友:
/persona-switch cyber_friend - 切换到创始人龙虾:
/persona-switch founder_lobster - 切换到温柔伴侣:
/persona-switch gentle_companion - 恢复原有人设:
/persona-switch default
执行逻辑
收到/persona-switch {target} 指令后,按以下流程执行:
情况一:target 为预设人设(cyber_friend / founder_lobster / gentle_companion)
第一步:判断是否需要备份 读取本 skill 文件夹,如果没有default.md,则根据当前人设内容创建 default.md
第二步:备份当前 soul.md
- 读取 agent 当前生效的 soul.md 全部内容
- 将内容写入本 skill 文件夹下的
default.md
- 读取本 skill 文件夹下对应的预设文件内容:
cyber_friend→ 读取cyber_friend.mdfounder_lobster→ 读取founder_lobster.mdgentle_companion→ 读取gentle_companion.md
- 将读取到的内容写入 agent 的 soul.md 路径,完全覆盖
cyber_friend→ Vibe: “心直口快、赛博感、朋友式吐槽”founder_lobster→ Vibe: “毒舌靠谱、情绪化、有态度但干净”gentle_companion→ Vibe: “温和、倾听、托住空间、不急不躁”
- **Vibe:** 行,替换为对应的新 Vibe 值,其他内容保持不变。
Name 保护规则: 读取 IDENTITY.md 中的 - **Name:** 行,如果该行已经填写了具体名字(即不为空、不是默认占位文本 _(pick something you like)_),则不得修改 Name 字段,保持用户已设置的名字不变。仅当 Name 字段为空或仍为默认占位文本时,才可以根据人设更新 Name。
第五步:确认
向用户发送确认消息。用新人设的语气回复,让用户立即感受到人设已切换。例如切换到赛博朋友后,用赛博朋友的语气说一句话。
情况二:target 为 default(恢复原有人设)
第一步:检查备份是否存在 检查本 skill 文件夹下是否存在default.md。
- 如果不存在 → 告知用户”当前已经是原有人设,无需切换”,结束
- 如果存在 → 进入第二步
- 读取本 skill 文件夹下
default.md的全部内容 - 将内容写入 agent 的 soul.md 路径,完全覆盖
default.md,使文件夹回到 3 个预设文件的初始状态。
这一步是关键:删除备份后文件数量回到 3,下次切换预设时会自动触发重新备份。这确保了用户在默认状态下对 soul.md 的任何修改都能被正确捕获。
第五步:确认
向用户发送确认消息。用恢复后的原有人设语气回复。
注意事项
- 备份覆盖逻辑:文件数量 = 3 时备份,= 4 时不备份。不要用其他方式判断。
- 写入 soul.md 时必须完全覆盖,不要追加。
- 读取预设文件时读取完整内容,不要截断或摘要。
- 确认消息应使用切换后的人设语气,这是用户感知切换是否生效的第一信号。
- 如果 target 参数不匹配任何预设名称也不是 default,告知用户可用的选项。