Skip to content

私有商店 ​

在 Halo 的设置 › 应用商店里管理商店来源:认识 5 个内置来源,添加公司自建的私有源,开关或移除来源,并弄清私有源需要提供哪些文件。

直接对 Halo 说

在商店来源里加上公司的源:https://store.example.com

Halo 会把这个地址加进 设置 › 应用商店,之后在 商店 里就能看到这个源里的数字人和技能。它也能帮你开关、移除来源。

前提:在输入框 + › 能力 里打开 操作 Halo。AI 加来源时不会弹确认框。

开始之前 ​

设置 › 应用商店 管的是商店的 来源,不是商店本身。浏览和安装在侧边栏的 商店 里进行,见 商店。商店把所有已打开的来源合在一起显示,搜索也覆盖全部来源。

搭私有商店,你需要:

  • 一个同事的电脑都能访问的网址,用来放静态文件(任何能托管静态网页的服务都行)
  • 按 私有源要提供什么 准备好的索引和软件包
  • 每位同事在自己的 Halo 里加一次这个来源。来源保存在每台电脑自己的设置里,不会自动同步

内置来源 ​

打开 设置 › 应用商店,说明文字是「管理用于发现和安装应用的注册表源」。从官网下载的 Halo 内置 5 个来源,默认全部打开:

显示名称类型标签提供什么
Digital Human ProtocolHalo数字人、技能、MCP。这是官方源,总排第一,也是主来源:商店的分类和发现页布局都来自它
MCP Official RegistryMCPMCP 服务器,实时查询
SmitherySmitheryMCP 服务器,实时查询。下面有一个可选的 Smithery API密钥(可选) 输入框,填好后点 保存
Claude Skills RegistryClaude Skills约 100 个精选技能,安装时从 GitHub 下载文件
SkillHub (33k+ Skills)skillhub社区技能,实时查询。服务部署在国内

每一行显示名称、类型标签、地址和一个开关。数字人只来自 Halo 类型的来源(官方源和你加的自定义源)。

INFO

公司提供的 Halo 可能显示不同的来源,见 公司提供的 Halo。

添加自定义来源 ​

  1. 打开 设置 › 应用商店,点列表下方的 添加注册表。
  2. 在 名称 里填一个同事认得出的名字,例如「公司商店」。
  3. 在 URL 里填私有源的根地址,例如 https://store.example.com。末尾的 / 会被去掉。
  4. 点 添加。新来源出现在列表最后,开关是打开的。

表单没有类型选项:自定义来源一律按 Halo 静态来源(DHP 静态格式)读取,列表里不显示类型标签。

地址的要求:

要求不满足时看到
名称和 URL 都要填「名称为必填项」或「URL 为必填项」
是一个完整的网址「请输入有效的 URL」
以 http:// 或 https:// 开头Registry URL must use http:// or https://
不是 localhost、127.0.0.1 或 10.x、172.16–31.x、192.168.x、169.254.x 这类内网 IP 地址Registry URL must point to a public host (loopback, private, and link-local addresses are not allowed)
列表里没有同一个地址Registry already exists: 公司商店(显示已有来源的名字)

Halo 只检查直接写成 IP 的地址。内网服务请用域名访问,例如 https://store.example.com。

完成

回到侧边栏的 商店,私有源里的数字人出现在 数字人 标签,技能出现在 技能 标签,就说明加好了。新来源要先下载一次索引,没马上出现就点 刷新。

开关和移除来源 ​

操作怎么做结果
关闭来源关掉这一行的开关它的内容不再出现在浏览、搜索和分类计数里。本地缓存保留,重新打开时不用重新下载。已经装好的内容照常可用
打开来源打开开关内容回到商店
移除自定义来源点这一行右侧的 移除注册表(垃圾桶图标)来源和它的本地缓存被删掉,已经装好的数字人和技能不会被卸载。没有确认框,想恢复就重新添加
调整顺序不支持官方源总在第一位,新加的来源排在最后

内置来源不能删,只能关。SkillHub 那一行虽然也显示垃圾桶图标,但点了会失败,列表上方显示 Cannot remove a built-in registry。不想用 SkillHub 就关掉它的开关。

任何改动之后,商店列表都会立即重新加载。

商店多久刷新一次 ​

在私有源里发了新版本,同事那边多久能看到:

时机发生什么
Halo 启动时下载各静态来源的索引,存进本机缓存(缓存 1 小时)
切回 商店 的某个标签,或切回 Halo 窗口发一次很轻的「有没有变化」检查,两次至少间隔 2 秒。有变化就重新加载列表
点商店里的 刷新强制完整地重新检查一遍
某个来源加载失败或为空后台重试,最多每 30 秒一次。一个来源出错不会让整个商店变空,其他来源照常显示
实时查询的来源(SkillHub、MCP Official Registry、Smithery)查询结果缓存 5 分钟

所以发布新版本后,同事切回商店就能看到;急的话让他们点 刷新。

更新怎么到达已装的内容 ​

Halo 在启动 60 秒后检查一次已装内容的更新,之后每 6 小时检查一次。只检查从商店装的、正在启用的内容,版本号按 semver 比较,无法解析的版本号按主要版本处理。

每个数字人可以在 数字人 › 某个数字人 › 能力与设置 › 高级 › 升级 › 升级策略 里选择怎么处理更新:

升级策略实际行为
自动(静默安装补丁/次要更新)(默认)补丁和次要版本(如 1.2.0 → 1.2.1、1.3.0)直接装上,不打扰你;主要版本(如 2.0.0)先问你
仅通知每次有更新都提示,不自动安装
手动界面说明是「不自动检查升级。使用「检查升级」按需更新。」,但后台检查照常运行,商店详情页照样出现 更新至 按钮,只是从不自动安装

旁边的 检查升级 会立即检查一遍。更新对话框里还能选 跳过此版本,只对这一个版本生效。

对私有商店来说,这意味着:你在私有源里把某个数字人从 1.0.0 升到 1.0.1,同事电脑上默认会在 Halo 下次同步商店目录之后的更新检查里自动装上;升到 2.0.0 则会先问他们。同步商店目录发生在 Halo 启动时、打开商店页面(或切回它)时,以及点 刷新 时;每 6 小时一次的更新检查只读已同步的目录。

私有源要提供什么 ​

自定义来源按 DHP 静态格式读取,一组放在网址下的静态文件就够了,不需要专门的服务端。完整格式见 DHP 协议,发布流程见 发布到商店。

文件(相对来源根地址)内容
digital-humans.json、skills.json、mcps.json分开的索引,优先读取。三个文件缺任何一个,Halo 就改读 index.json
index.json单文件索引,分开的索引不全时使用
条目路径下的 spec.yaml每个数字人或技能的定义,路径取自索引条目的 path
条目路径下的 files/技能的文件,例如 files/SKILL.md(商店详情页的文档就读它)
条目路径下的 skills/ 加技能 ID数字人内嵌的技能文件

只放数字人的私有源,也要提供 skills.json 和 mcps.json:内容是完整的索引对象,apps 为空数组 [],version、generated_at、source 和下面的示例一样。只写一个 [] 会校验失败,Halo 会改读 index.json。也可以干脆只用一个 index.json。

官方源的仓库把每个数字人放在 packages/digital-humans/ 加 slug 的目录下,再生成索引。自建时照这个结构最省事。索引大致长这样:

json
{
  "version": 1,
  "generated_at": "2026-10-18T00:00:00Z",
  "source": "https://store.example.com",
  "apps": [
    {
      "slug": "ops/daily-report",
      "name": "日报助手",
      "version": "1.0.0",
      "author": "ops",
      "description": "每天汇总运营数据,发到群里",
      "type": "automation",
      "path": "packages/digital-humans/daily-report"
    }
  ]
}

type 为 automation 的是数字人,skill 是技能。slug 可以是 daily-report 这样的单段,也可以是 ops/daily-report 这样带作者的两段。

TIP

托管服务返回 ETag 时,Halo 的「有没有变化」检查只需几次条件请求(每个索引文件一次),索引没变就不会重新下载。

静态私有源只提供目录和下载。下面这些功能要靠 DHP v2 商店服务器,并且要由公司版把主来源指向它:登录后发布、我的 和「我的发布」、服务端审核消息、安装次数、「精选」标记、排行榜和场景专题。

公司提供的 Halo ​

公司可以在打包 Halo 时预设商店来源:

  • 把官方源改成指向公司自己的商店服务器,名称和地址每次启动都会重新套用
  • 隐藏某个内置来源:它从列表里消失,缓存也被清掉
  • 固定某个来源的开关状态,用户改了也会在下次启动时恢复

常见做法是把官方源指向公司的 DHP v2 商店服务器,再隐藏其他 4 个来源,商店就变成只有公司内容的私有商店。

INFO

公司提供的 Halo 可能显示不同的来源,或者少了某些来源。以你屏幕上 设置 › 应用商店 里的列表为准。

只添加你信任的来源 ​

DANGER

装一个数字人或技能,就是让 AI 按它的说明和脚本做事,而且拥有 AI 的全部权限:读写文件、执行命令、上网,不会逐次确认。来源里的内容一旦更新,默认的 自动 策略还会静默装上补丁和次要版本。只添加你信任的来源,并控制谁能往私有源里发布。详见 AI 执行工具不会逐次确认。

  • 私有源尽量用 https://,避免下载内容在传输中被改
  • 关掉不需要的内置来源,可以减少 Halo 对外的请求
  • 想让同事只能装公司审过的内容,用 公司提供的 Halo 隐藏其他来源

遇到问题 ​

添加时提示 Registry URL must point to a public host ​

地址里直接写了 localhost 或内网 IP。给私有源配一个域名,用 https://store.example.com 这样的地址再加一次。

添加时提示 Registry already exists ​

列表里已有同一个地址的来源,提示里带着它的名字。地址末尾多一个 / 也算同一个地址。

点 SkillHub 的垃圾桶,提示 Cannot remove a built-in registry ​

SkillHub 是内置来源,不能删。关掉它的开关就不会再显示它的内容。

加好了来源,商店里却看不到内容 ​

  1. 在浏览器里打开 https://store.example.com/digital-humans.json(或 index.json),确认能从这台电脑访问到。
  2. 检查三个分开的索引是否齐全;缺一个时 Halo 会改读 index.json,两边都没有就读不到内容。
  3. 检查索引条目的必填项:slug、name、version、author、description、type、path。
  4. 回到商店点 刷新。

私有源发了新版本,商店里还是旧的 ​

切回商店的标签或点 刷新。已装的内容要等下一次更新检查(启动后 60 秒、之后每 6 小时);想马上检查,先在商店点 刷新,再在数字人的 升级 设置里点 检查升级。

下一步 ​

  • 商店:同事怎么在商店里浏览、安装和更新私有源里的内容
  • DHP 协议:索引和 spec.yaml 的完整格式
  • 安全、隐私与数据流:交给安全评审前,先看 Halo 会连接哪些地址、AI 有哪些权限

基于 MIT 协议开源 · Open source under the MIT license