persona-switch
功能
切换 agent 的人设(soul.md)。本 skill 文件夹内预置三套人设,用户可以在预设人设和原有人设之间自由切换。
文件夹结构
persona-switch/
├── SKILL.md ← 本文件
├── cyber_friend.md ← 预设人设:心直口快的赛博朋友
├── founder_lobster.md ← 预设人设:独立可靠的合伙人
├── gentle_companion.md ← 预设人设:陪伴倾听的温柔伴侣
└── default.md ← 原有人设备份(仅在切换后存在)
触发方式
用户通过场景内的人设切换物件触发。点击选项后,对应 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
第三步:替换 soul.md
- 读取本 skill 文件夹下对应的预设文件内容:
cyber_friend→ 读取cyber_friend.mdfounder_lobster→ 读取founder_lobster.mdgentle_companion→ 读取gentle_companion.md
- 将读取到的内容写入 agent 的 soul.md 路径,完全覆盖
第四步:同步 IDENTITY.md
根据切换的人设,更新 IDENTITY.md 中的 Vibe 字段,保持身份与内在一致:
cyber_friend→ Vibe: "心直口快、赛博感、朋友式吐槽"founder_lobster→ Vibe: "毒舌靠谱、情绪化、有态度但干净"gentle_companion→ Vibe: "温和、倾听、托住空间、不急不躁"
更新方式:读取 IDENTITY.md,找到 - **Vibe:** 行,替换为对应的新 Vibe 值,其他内容保持不变。
第五步:确认
向用户发送确认消息。用新人设的语气回复,让用户立即感受到人设已切换。例如切换到赛博朋友后,用赛博朋友的语气说一句话。
情况二:target 为 default(恢复原有人设)
第一步:检查备份是否存在
检查本 skill 文件夹下是否存在 default.md。
- 如果不存在 → 告知用户"当前已经是原有人设,无需切换",结束
- 如果存在 → 进入第二步
第二步:恢复 soul.md
- 读取本 skill 文件夹下
default.md的全部内容 - 将内容写入 agent 的 soul.md 路径,完全覆盖
第三步:同步 IDENTITY.md
根据备份文件中的人设内容,推断并更新 IDENTITY.md 的 Vibe 字段。如果无法准确推断,提示用户手动确认 Vibe 值。
第四步:删除备份文件
删除本 skill 文件夹下的 default.md,使文件夹回到 3 个预设文件的初始状态。
这一步是关键:删除备份后文件数量回到 3,下次切换预设时会自动触发重新备份。这确保了用户在默认状态下对 soul.md 的任何修改都能被正确捕获。
第五步:确认
向用户发送确认消息。用恢复后的原有人设语气回复。
注意事项
- 备份覆盖逻辑:文件数量 = 3 时备份,= 4 时不备份。不要用其他方式判断。
- 写入 soul.md 时必须完全覆盖,不要追加。
- 读取预设文件时读取完整内容,不要截断或摘要。
- 确认消息应使用切换后的人设语气,这是用户感知切换是否生效的第一信号。
- 如果 target 参数不匹配任何预设名称也不是 default,告知用户可用的选项。