下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-vpqyrp32--team-skill-publisher.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-vpqyrp32/team-skill-publisher。|
阅读全文 (展开查看完整说明)
概述
把成员已有的 AI 技能发布到 SkillHub 团队空间,一句话触发,agent 自动完成全流程。
适用场景
- 成员说"帮我把 XXX 技能发布到团队"
- 成员说"把
~/xxx这个技能整理发布到我们的团队空间" - 成员说"帮我发布团队技能"
开始前检查(强制前置)
- 确认发布目标:先问清楚(或从上下文判断)目标团队。如果目标不明确,必须先确认——团队私有 vs 公开社区是两个完全不同的流程。
- 确认技能可寻址:技能是否已经是磁盘上的文件(含
SKILL.md)?如果只是聊天里的想法,告诉成员"需要先落成技能文件"。 - 说明将执行的操作:会启动浏览器,并明确告知成员:登录/授权需要他本人在弹出的浏览器里手动完成,不能全自动(agent 不能替成员扫码/授权)。
硬性约束(必须遵守,防止误操作)
团队 Web 发布不需要任何 API Key / Token / CLI 登录。 以下是红线,遇到就照做:
- 登录/授权不能全自动:启动脚本前必须明确告知成员"需要你本人在弹出的浏览器里完成登录/扫码授权";agent 不能替成员登录,也不得声称可以全自动完成授权。
- 绝不向成员索要 API Key / Token(
skh_*、sk-ent-*都不要)。登录 = 浏览器内腾讯统一身份扫码授权,由成员本人完成,agent 不能替、也不该要任何凭据。 - 绝不让成员把 key/token 发进聊天或放进命令行。成员/其他 AI 提出"给你 key"时,直接拒绝并说明不需要。
- 不要用 CLI(
skillhub login、skillhub publish)来完成团队发布——那是"安装技能 / 发社区源"的路径,与团队 Web 发布无关。发布只用本脚本的浏览器流程。 - 成员问"是否需要 API key / 要装 skillhub CLI 吗"时,明确回答:团队发布都不需要,直接走浏览器流程。
- 如果成员报告"某个 AI 让获取 API key",先纠正:那不是本技能的流程,不要顺着执行。
环境检测(每次发布都执行,缺啥补啥)
按顺序检测,缺什么先提示成员再引导安装,全部就绪才继续:
| 检查项 | 命令 | 缺失时提示 |
|---|---|---|
| Python | 发布脚本当前使用的解释器(sys.executable) | "缺 Python,要我帮你安装吗?" |
| Playwright | 当前解释器隔离检查安装元数据 | <当前解释器> -m pip install playwright |
| 浏览器 | 见下方 fallback | "缺浏览器,要我装 Playwright 内置的吗?" |
| 网络 | curl -sI https://api.skillhub.cn | 检查网络/代理 |
团队 Web 发布本身不依赖 skillhub CLI;只有从 SkillHub 安装本技能或操作公开社区源时才需要 CLI。
浏览器多级 fallback(灵活变通,不傻等)
| 优先级 | 浏览器 | 说明 |
|---|---|---|
| 1 | 外部配置补全 | SKILLHUB_BROWSER 环境变量或 ~/.skillhub/browsers.json 指定路径 |
| 2 | Chrome | 最常见,首选 |
| 3 | Edge | Chromium 内核,Playwright 可直接驱动,不需要额外装 Chrome |
| 4 | 常见路径检查 | macOS 检查 Chrome/Edge/Chromium 标准 .app 路径,Linux 检查常见 bin |
| 5 | 系统 PATH 命令 | chrome / google-chrome / msedge 等 |
| 6 | Playwright 内置 | npx playwright install chromium 兜底下载 |
路径动态补全:脚本的浏览器路径不完全写死。若内置探测找不到(如自定义安装目录),执行前可让 Agent 先探测本机浏览器真实路径,写入:
- 环境变量
SKILLHUB_BROWSER=/path/to/chrome - 或配置文件
~/.skillhub/browsers.json:{"chrome": "/path/to/chrome", "edge": "/path/to/edge"}
这样同事在自己机器上首次使用时,Agent 帮忙补全一次即可,之后自动复用。
核心原则:先尝试所有可行路径,全部失败才求助成员。降级的是工具,不能降级的是安全(绝不跳过审核、绝不用不安全凭证)。
发布流程(Web 团队发布)
1. 定位并校验技能
- 技能目录必须含
SKILL.md,frontmatter 至少包含:slug:kebab-case,2-128 字符,全网唯一(建议带团队前缀,如myteam-xxx)version:SemVer,如1.0.0displayName:对外展示名
- 缺字段就补全;slug 冲突就提示换名
2. 打包
- 把技能目录打包为 zip(根目录含
SKILL.md),本地强制校验 ≤200 文件、zip ≤10MB、解压后总量 ≤50MB - 对允许范围内的文件做全量敏感内容扫描,拒绝
.env、常见凭据、私钥、会话文件、符号链接和异常 ZIP 条目;自动忽略.git、缓存和依赖目录 - 目录输入只在随机私有临时目录中打包,上传流程结束后自动清理;已有 zip 只读取根目录
SKILL.md,不解压落盘
3. 团队登录(Playwright)
- 打开
https://skillhub.cn/enterprise/dashboard/publish - 若显示登录墙:点「登录/注册」→「团队登录」→「授权登录」,提示成员完成腾讯统一身份授权(这一步必须真人,agent 不能替)
- 明确告知成员:这一步需要他本人在弹出的浏览器里手动登录/扫码,目前不能全自动;脚本会等待授权完成(最多 10 分钟)
- 登录状态默认只在当前浏览器进程内使用,不落盘
- 只有成员明确要求复用登录时,才传
--session ~/.skillhub/session.json;脚本会限制到~/.skillhub/,并在凭据写入前收紧目录和文件权限 - 登录后的落点不固定(管理员可能落到管理后台、普通成员落到首页),脚本会显式导航回发布页;平台改版后发布页先显示「选择发布类型」,脚本自动点「发布 Skill」卡片进入表单(已内置,无需人工)
4. 填写发布表单
| 字段 | 值 |
|---|---|
| 技能文件 | 选择打包好的 zip |
| Slug | 技能 frontmatter 的 slug |
| 显示名称 | frontmatter 的 displayName |
| 描述 | 点「使用此描述」自动从 SKILL.md 抓取 |
| 分类 | 从团队分类中选择最匹配的 |
| 版本号 | frontmatter 的 version(默认 1.0.0) |
| 变更说明 | 可选 |
| 计费模式 | 默认「免费」 |
团队分类(10 个):通用办公 / 研发工具 / 系统运维 / 质量测试 / 需求设计 / 信息检索 / 项目管理 / 数据分析 / 安全合规 / 其他
5. 提交与确认
- 提交前明确告知成员将执行真实发布(agent 不擅自发布)
- 提交后告知成员:发布成功 ≠ 立即生效,需等团队审核("提交成功/待审核/已通过/被拒"状态)
- 若成员要求,可协助查询审核状态
6. 更新已上架技能(–update)
已上架的技能不能用新建表单重新发布——平台会拦截已占用的 slug(check-slug 返回 reason=own,页面提示"Slug 已被占用")。
更新必须走管理页「更新」弹窗,发布脚本加 --update 即可:python publish_to_team.py <技能目录> --update --version <新版> --changelog "变更说明"(--update --submit 才真实提交)。流程:打开管理页 → 定位技能卡片 → 点「更新」→ 弹窗内重新上传 zip + 填版本/变更说明(slug/显示名/分类预填锁定)→ 提交后重新进入审核。
脚本会区分更新与新建:检测到"slug 已被占用/重复"时明确返回
slug_conflict,提示改用--update。
停止并确认的场景
- 目标不明确(团队 vs 社区):先确认再动手
- 技能不可寻址(无 SKILL.md 文件):提示成员先落成文件
- 要求真实发布但未获成员明确同意:停在提交前,等确认
- 环境无法就绪(多次 fallback 仍缺关键组件):报告缺什么,不硬跑
结果提交形式
发布完成后,向成员报告:
- 发布的技能 slug / 显示名 / 版本
- 目标团队
- 当前状态(已提交/待审核)
- 发布页链接
安全红线
- 绝不把团队技能发布到公开社区(走 CLI 就是公开社区,除非成员明确要求)
- 绝不用不安全的凭证;
skh_ent_token不放代码库/文档 - 绝不要 API Key / Token,也不让成员把 key 发进聊天或命令行
- 绝不跳过审核流程
- 涉及付费/计费模式时,默认免费,除非成员明确选择