Install
openclaw skills install @myd2002/init-workspaceInitialize personal and team knowledge bases, create or join teams, create team project spaces, configure Gitea repository permissions, and maintain the AIFusionBot/system-config control repository.
openclaw skills install @myd2002/init-workspacepaper-kb v3 的入口初始化模块,负责:
AIFusionBot/system-config 控制仓库本 skill 自包含,脚本只依赖本目录 scripts/ 下的模块和 .env。
Activate when:
Do NOT activate when:
AIFusionBot 所有。AIFusionBot 对个人知识库获得 admin 权限。write 权限。read 权限。general 项目。TEAM_INFO.md。GITEA_URL。SenderId,群聊身份使用 GroupSubject。GroupSubject(chat_id),不是群名。SenderId 只用于权限校验和审计,不用于决定这个群属于哪个团队。active_tasks.json 的 post_init_choice:<SenderId>,用于承接用户下一条“1/2/3”回复。1/2/3 时,必须先调用 resolve_pending_action.py 判断含义,不得自行解释短数字。interactive_card,OpenClaw 优先发送飞书互动卡片;卡片按钮回调映射为 CardActionValue,表单回调映射为 CardFormValues。2. 创建新团队 时,必须继续收集团队名称和团队研究方向;拿到这两个字段后才能调用 init_team.py。<团队名称slug>-team-kb,不得使用 <team_id>-team-kb 或自动编号替代团队名称。python3 scripts/init_user.py --check --open_id <SenderId>
未注册时回复用户:
你好,我是科研知识库助手。第一次使用需要先创建你的个人知识库。
请先打开 Gitea 注册账号:{GITEA_URL}
注册完成后,回复以下信息:
Gitea用户名:
姓名:
研究方向:
python3 scripts/init_user.py --register --open_id <SenderId> \
--gitea_username <username> \
--name "<姓名>" \
--research_direction "<研究方向>"
成功后回复:
个人知识库已创建:<personal_repo_url>
接下来你可以:
1. 加入已有团队
2. 创建新团队
3. 暂时不加入团队
用户下一条回复如果是 1、2、3 或对应文本,先调用:
python3 scripts/resolve_pending_action.py --open_id <SenderId> \
--message "<用户回复>"
如果来自卡片按钮或表单回调,调用:
python3 scripts/resolve_card_action.py --action_value "<CardActionValue>"
python3 scripts/resolve_pending_action.py --open_id <SenderId> \
--action_value "<CardActionValue>" \
--form_values_json '<CardFormValues>'
处理规则:
action=join_team:继续向用户收集团队名称和邀请码,再调用 join_team.py。action=create_team:继续向用户收集团队名称和团队研究方向,再调用 init_team.py。ready_to_execute=true:按返回的 command 和 args 调用 join_team.py 或 init_team.py。action=personal_only:结束初始化后选择,不创建团队。post_init_choice:<SenderId>,不要把单独的 1/2/3 当成初始化选择。python3 scripts/init_team.py --open_id <SenderId> \
--team_name "<团队名称>" \
--research_direction "<团队研究方向>"
成功后:
AIFusionBot/<团队名称slug>-team-kbTEAM_INFO.mdwrite 权限python3 scripts/join_team.py --open_id <SenderId> \
--team_name "<团队名称>" \
--invite_code "<邀请码>"
成功后:
teams.json.membersrole=memberread 权限只有团队管理员可以创建:
python3 scripts/create_project.py --open_id <SenderId> \
--project_name "<项目名称>" \
--brief "<项目说明>"
脚本会:
projects/<project_id>/index.md、timeline.md、decisions.md、open_questions.md、people.md、sources.mdcatalog.jsonsystem-config/teams.json群聊绑定只允许在群里触发。OpenClaw 字段映射:
SenderId:发起绑定的用户 open_idChatType:必须是 groupGroupSubject:群聊 chat_idMessageSid:消息 id,用于审计第一步,管理员在团队群里 @bot 说“绑定本群”后调用:
python3 scripts/bind_chat.py --action request_bind \
--sender_id <SenderId> \
--chat_type <ChatType> \
--chat_id <GroupSubject> \
--chat_name "<可选,feishu_chat(action=get) 取到的群名>"
脚本会检查:
GroupSubject。SenderId 必须已注册。SenderId 必须已加入团队。SenderId 必须是该团队管理员。脚本返回 confirm_code 后,在群里回复:
将把本群绑定到团队【<team_name>】。
绑定后,本群 @我 的查询、入库、批量导入和扫描默认进入该团队知识库。
请团队管理员在 10 分钟内回复:
@AIFusionBot 确认绑定 <confirm_code>
如果脚本返回 interactive_card,优先发送确认卡片。卡片按钮值 confirm_bind:<confirm_code> 对应调用 bind_chat.py --action confirm_bind;cancel_bind:<confirm_code> 对应调用 bind_chat.py --action cancel_pending。
第二步,确认绑定:
python3 scripts/bind_chat.py --action confirm_bind \
--sender_id <SenderId> \
--chat_type <ChatType> \
--chat_id <GroupSubject> \
--chat_name "<可选群名>" \
--confirm_code <confirm_code>
确认成功后会写入:
system-config/chat_bindings.jsonsystem-config/chat_binding_events.jsonidentity/group-bindings.md查看当前群绑定:
python3 scripts/bind_chat.py --action status \
--sender_id <SenderId> \
--chat_type <ChatType> \
--chat_id <GroupSubject>
解绑同样必须两步确认:
python3 scripts/bind_chat.py --action request_unbind \
--sender_id <SenderId> \
--chat_type <ChatType> \
--chat_id <GroupSubject>
python3 scripts/bind_chat.py --action confirm_unbind \
--sender_id <SenderId> \
--chat_type <ChatType> \
--chat_id <GroupSubject> \
--confirm_code <confirm_code>
如果脚本返回解绑确认卡片,按钮值 confirm_unbind:<confirm_code> 对应调用 bind_chat.py --action confirm_unbind;cancel_unbind:<confirm_code> 对应调用 bind_chat.py --action cancel_pending。
解绑后该群不能再查询或写入团队知识库,直到重新绑定。
如果 Gitea 仓库已经创建,但写 system-config 失败,初始化脚本会记录 provisioning_errors.json。
如果连恢复记录也写入失败,脚本仍会返回已创建的仓库 URL,并设置 recovery_failed=true 和 recovery_error,方便人工定位。
查看待修复记录:
python3 scripts/repair_provisioning.py
修复单条:
python3 scripts/repair_provisioning.py --error_id <recovery_id>
修复全部:
python3 scripts/repair_provisioning.py --all
本 skill 自动维护:
AIFusionBot/system-config/
├── users.json
├── teams.json
├── chat_bindings.json
├── pending_chat_bindings.json
├── chat_binding_events.json
├── sources.json
├── jobs.json
├── active_tasks.json
├── permissions.json
└── provisioning_errors.json(按需创建)
system-config 是系统控制平面,不存知识正文。
recoverable=true 和 recovery_id,后续用 repair_provisioning.py 修复。