virtual-work-group · 虚拟任务协同群
在 WorkBuddy 内模拟"群聊式任务协同":群主建群拿接入码 → 协作方凭码入群 → 群主派任务/发通知 → 成员报进度/改状态 → 群主看总览/导报表。所有状态由 scripts/group_lib.py 管理,存储于本地 JSON(scripts/../state/store.json),不要在对话中凭记忆维护群数据,一律调用脚本。
1. 身份模型(先理解再执行)
- 一个 WorkBuddy 实例 = 一个真人,多人协同通过
/switch_user 名字模拟切换身份。 - 每个身份有固定 user_id(U0001…),display_name 为用户可读名。
- 所有命令都以"当前身份"执行;用户说"帮小李报进度"时,先
switch-user 小李,执行完再切回原身份。 - 身份数据也持久化,切换不丢失历史。
2. 调用约定
"C:\Users\acgbu\.workbuddy\binaries\python\versions\3.13.12\python.exe" "C:\Users\acgbu\.workbuddy\skills\virtual-work-group\scripts\group_lib.py" <子命令> [参数...]
以下简写 PY = 上述 python 完整路径,LIB = C:\Users\acgbu\.workbuddy\skills\virtual-work-group\scripts\group_lib.py。
脚本输出已含 emoji 排版模板,直接把输出原样转述给用户即可,不要重新包装成 markdown 代码块。
3. 命令路由表
| 用户说 / 斜杠命令 | 子命令 | 示例 |
|---|---|---|
| /switch_user 名字、切换身份到XX | switch-user <名字> |
$PY "$LIB" switch-user 阿昌 |
| 我是谁 / 当前身份 | whoami |
$PY "$LIB" whoami |
| /create_work_group 群名、建个工作群 | create-group <群名> |
$PY "$LIB" create-group Q3营销冲刺 |
| /create_onetime_group_code 群ID | create-onetime-code <Gxxxx> |
$PY "$LIB" create-onetime-code G0001 |
| /join_group 接入码、加入群XXXX-XXXX | join <码> |
$PY "$LIB" join Ab3d-Xy9k |
| /publish_task 群ID 标题|详情|截止|接收人 | publish-task <G> <标题> <详情> <截止> <接收人csv或none> |
$PY "$LIB" publish-task G0001 整理Q3报表 从CRM导出汇总 2026-09-12 U0002,U0003 |
| /send_notice 群ID 标题|内容 | send-notice <G> <标题>|<内容> |
$PY "$LIB" send-notice G0001 周五例会\|下午3点全员会 |
| /report_progress Txxx:文本 | report-progress <Txxxx> <文本> |
$PY "$LIB" report-progress T0001 已完成一半 |
| /set_task_status Txxx:状态 | set-status <Txxxx> <状态> |
$PY "$LIB" set-status T0001 进行中 |
| /my_task、我的任务 | my-tasks |
$PY "$LIB" my-tasks |
| /group_status 群ID | group-status <Gxxxx> |
$PY "$LIB" group-status G0001 |
| /group_notice 群ID | group-notice <Gxxxx> |
$PY "$LIB" group-notice G0001 |
| /list_my_groups、我有几个群 | list-groups |
$PY "$LIB" list-groups |
| /export_group_report 群ID | export-report <Gxxxx> |
$PY "$LIB" export-report G0001 |
| /leave_group 群ID | leave <Gxxxx> |
$PY "$LIB" leave G0001 |
| /dismiss_group 群ID、解散群 | dismiss <Gxxxx> |
$PY "$LIB" dismiss G0001 |
4. 权限规则(脚本已硬校验,无需自行判断,但回答时要如实转述)
- 仅群主(creator):
create-onetime-code、publish-task、send-notice、group-status、export-report、dismiss - 成员即可:
join、my-tasks、report-progress(仅自己被分配的任务)、set-status(仅分配给自己的任务)、group-notice、leave - 群主不能
leave,只能dismiss - 普通成员看不到其他成员的进度上报(进度只在
group-status/export-report中对群主可见) - 一次性入会码用一次即失效;通用接入码在群解散前一直有效;群解散后全部失效
5. 执行要点
- 参数解析:用户用自然语言给任务("给小李和小王发个任务,周五前交报表")时,先解析出标题/详情/截止/接收人,再调用
publish-task。接收人若给的是名字而非 user_id,先用group-status或list-groups查群成员 ID 映射;查不到就问用户。 - 缺参直接提示用法:脚本会打印用法示例,原样转述,不要自己编参数。
- 报错如实转述:脚本输出的 ❌ 消息(权限不足/群不存在/码无效/状态值非法)直接转述,不要重试或绕过。
- 群解散/退出后:不要再引用已删除的群 ID;一次性码已用要明确告知。
- 数据位置:
state/store.json在 skill 目录下。用户要求彻底清空所有群数据时,可删除该文件(删前确认)。
6. 限制与边界(主动告知用户)
- 本 skill 为单机多身份模拟:所有"成员"都在这台机器上通过
switch-user切换。若需要真正跨人、跨设备协同,使用virtual-roomskill(腾讯文档共享方案)。 - 数据在本机 skill 目录内持久化,会话重启不丢失;换电脑或删 skill 即丢。
- 无主动推送:任务和通知都是拉取模式,成员要主动问"我的任务"。
- 不要在群内存储敏感信息(密码、手机号等)——本地 JSON 明文保存。
Resources
scripts/
group_lib.py— 全部命令实现:ID 生成(G/T/N/U 自增)、8 位接入码(Xxxx-Xxxx 格式、全局去重)、一次性码 used 标记、权限校验(群主/成员/任务归属)、JSON 状态持久化。子命令清单见文件内COMMANDS字典。