BEEOS CLOUD / DEVELOPER REFERENCE
Harness
创建、列出、读取、更新与删除已配置的 harness,并列出其可运行的模型(UHP)。
概览
harnesses domain 管理实例上已配置的 harness,并列出它们可运行的模型(UHP)。创建和更新是同步的:操作说明写明 Cloud 会提交每个运行时操作并等待后再响应,因此请为这些调用设置至少 60 秒的客户端超时。
7 个操作 · SDK 资源:TypeScript cloud.harnesses · Python cloud.harnesses · Go cloud.Harnesses · API 总览
路径以 /uhp/v1 开头的操作由 https://api.cloud.beeos.ai/uhp/v1 提供,而不是 https://api.cloud.beeos.ai/v1;SDK 会自动切换。
主要对象
UHPHarnessCreate:创建或更新 harness 时发送的配置。UHPHarness:已配置的 harness。UHPHarnessModels与UHPModelCatalog:单个 harness 的模型,以及按后端分组的模型目录。
UHPHarnessCreate
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 否 | harness 的显示名称。创建时必填,1 个或多个非空白字符。更新时必须等于当前名称;重命名会被拒绝,返回 422 beeos_field_not_supported。 |
base | string | 是 | harness 的 base(智能体运行时)。创建时必须等于 instance_id 所指实例的 harness,否则请求失败,返回 422 unsupported_base。更新时必须等于该 harness 当前的 base,base 不能修改。 |
default_model | string | 否 | BeeOS Cloud 只在创建时采用该值;在 PUT 中使用不同的值会返回 422 beeos_field_not_supported,除非同时发送了 template_id。 |
system_prompt | string | 否 | system prompt。BeeOS Cloud 不支持:非空值会被拒绝,返回 422 beeos_field_not_supported。 |
mcp_servers | array<UHPMcpServer> | 否 | 创建时被拒绝(422 beeos_field_not_supported)。PUT 时,该列表会与运行时的 MCP 服务器做差异比较:列出的服务器会被设置,被省略的会被取消设置;只有当实例运行时没有任何 MCP 方法时才返回 422 beeos_mcp_not_supported。 |
skills | array<UHPSkill> | 否 | harness 应具有的 skill。创建时不接受。更新时,该列表是完整的期望集合:带有 files、content 或 blob 的 skill 会被安装;列出的已安装 skill 只改变其 enabled 状态;未列出的已安装 skill 会被卸载,内置的除外。 |
plugins | array<UHPPlugin> | 否 | 需要 plugins 能力。每一项都需要 files 或 blob。 |
environment | string | 否 | 调用方范围内的 environment ID,或为空。需要 environments 能力。 |
disabled_tools | array<string> | 否 | 要禁用的工具名称。BeeOS Cloud 不支持:非空列表会被拒绝,返回 422 beeos_field_not_supported。 |
max_step | integer | 否 | 每次运行的最大步数。BeeOS Cloud 不支持:任何值都会被拒绝,返回 422 beeos_field_not_supported。 可为 null。 |
timeout_seconds | integer | 否 | 运行超时,单位为秒。BeeOS Cloud 不支持:任何值都会被拒绝,返回 422 beeos_field_not_supported。 可为 null。 |
instance_id | string | 否 | BeeOS 扩展。托管新 harness 的实例(仅创建时)。 |
template_id | string | 否 | BeeOS 扩展。应用到该 harness 的 agent 模板。 |
完整字段和使用该对象的方法见附录。
UHPHarness
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 是 | harness 的 ID。以 chrn_ 开头,是其他请求中要使用的 harness_id。 约束: pattern=^chrn_. |
object | string | 否 | 对象类型:始终为 harness。 可选值: "harness" — 一个 harness 对象. |
name | string | 是 | harness 的显示名称。harness 没有显示名称时使用其名称,再没有则使用其 ID。 |
base | string | 是 | 不透明。本规范不枚举它——客户端必须把它当作字符串对待,否则每次发布 harness 时协议都需要修订。 |
baseLabel | string | 否 | base 的可读名称:openclaw 为 OpenClaw,hermes 为 Hermes。base 没有已知名称时省略。 |
defaultModel | string | 否 | harness 用作主模型的模型 ID。没有时省略。 |
systemPrompt | string | 否 | harness 的 system prompt。BeeOS Cloud 不支持该字段,因此从不返回。 |
mcpServers | array<UHPMcpServer> | 否 | 挂载到 harness 的 MCP 服务器。仅在实例运行时读取单个 harness 才返回,且仅当实例支持 MCP 服务器时返回;列表中省略。 |
skills | array<UHPSkill> | 否 | harness 上已安装的 skill。仅在实例运行时读取单个 harness 才返回;列表中省略。 |
plugins | array<UHPPlugin> | 否 | 已安装的插件。它们的服务器和 skill 在每个回合中都与 harness 自己的合并;上面的 mcpServers 和 skills 只报告直接写入它们的内容。 |
environment | string | 否 | 该 harness 的任务所读取的 environment(henv_),以只读方式挂载在其 mount 处;没有时为空。任务可以用自己的 environment 字段指明另一个。 |
disabledTools | array<string> | 否 | 为 harness 禁用的工具名称。BeeOS Cloud 不支持该字段,因此从不返回。 |
maxStep | integer | 否 | 每次运行的最大步数。BeeOS Cloud 不支持该字段,因此从不返回。 可为 null。 |
timeoutSeconds | integer | 否 | 运行超时,单位为秒。BeeOS Cloud 不支持该字段,因此从不返回。 可为 null。 |
createdAt | integer | 否 | Unix 毫秒 |
完整字段和使用该对象的方法见附录。
UHPHarnessModels
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
harness_id | string | 否 | 这些模型所属的 harness 的 ID。 |
backend | string | 否 | 所列模型都属于的提供方系列:模型 ID 中第一个 / 之前的部分,例如 anthropic。模型属于多个系列或没有系列时省略。 |
default | string | 否 | harness 主模型的 ID。没有时省略。 |
fallback | string | 否 | 请求的模型无法运行时所使用的模型。BeeOS Cloud 不报告它,因此从不返回。 |
models | array<UHPModel> | 是 | harness 可以使用的模型,按其实例的模型列表的顺序。该列表为空时,只列出主模型。 |
完整字段和使用该对象的方法见附录。
UHPModelCatalog
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
backends | map<string, object> | 是 | 调用方的 harness 可以使用的模型,按提供方系列分组。每个键是一个提供方系列,即模型 ID 中第一个 / 之前的部分,例如 anthropic。每个值包含该系列的 default 模型 ID 及其 models;ID 中没有系列的模型不在此列出。 |
完整字段和使用该对象的方法见附录。
UHPMcpServer
附加到 harness 的远程 MCP 服务器。只有已启用的条目会在回合中连接;已禁用的条目完全不得联系。无法访问的服务器不得使任务失败。与 2026-08-11 相比没有变化:进程(stdio)服务器在插件内部声明,见 PluginMcpServer。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 由服务器清理为对 CLI 安全的标识符。 |
url | string | 是 | MCP 服务器的 HTTPS 端点,最多 2048 个字符,不含用户信息或片段。读取时报告为空。 约束: format=uri. |
transport | string | 否 | 服务器使用的传输方式。写入时默认为 http。两种传输都不使用的服务器不返回。 可选值: "http" — Streamable HTTP; "sse" — 较早的、基于 server-sent events 的 HTTP 传输. (枚举表) 默认值: "http". |
enabled | boolean | 否 | 服务器是否启用。读取时始终报告 true。服务器只能被设置或移除:发送 false 会被拒绝,返回 422 invalid_input。 默认值: true. |
headers | map<string, string> | 否 | 发送给服务器的请求 header,例如凭证。header 名称和值必须非空。从不返回。发送 header 或 auth 时还需要 expires_at。 |
auth | string | 否 | Bearer token,或由服务器解析的服务端引用。服务器绝不能向客户端返回已解析的凭证。 |
expires_at | string | 否 | BeeOS 扩展。所提供的短期凭证的过期时间;调用方通过再次 PUT 来刷新它。 约束: format=date-time. |
完整字段和使用该对象的方法见附录。
UHPSkill
skill 是一个文件夹,而不是一个文件。服务器必须把整个文件夹具体化到 agent 可以读取的位置——只具体化 SKILL.md 会破坏每一个带有 references、脚本或数据的 skill。通过 GET 和 PUT 往返一个 harness 不得丢失 skill 的内容。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | skill 的名称,等于其文件夹的名称。为 1 到 128 个小写字母、数字、点、下划线和连字符,以字母或数字开头。已安装的 skill 为 2 到 64 个小写字母、数字和连字符。 |
enabled | boolean | 否 | false 会抑制该 skill,包括从 base 继承的 skill。 默认值: true. |
files | array<UHPSkillFile> | 否 | 该 bundle。必须包含 SKILL.md。 |
content | string | 否 | 单文件 bundle 的简写,其唯一成员是 SKILL.md。 |
blob | string | 否 | 服务器分配的句柄,用于在行外存储的 bundle。客户端接收它,原样回传,并从 skill 文件端点读取文件。 |
sha256 | string | 否 | BeeOS 扩展。由 blob 引用的 Files bundle 的 SHA-256。 |
size_bytes | string | 否 | BeeOS 扩展。由 blob 引用的 Files bundle 的十进制字节大小。 |
完整字段和使用该对象的方法见附录。
UHPPlugin
安装到 harness 中的 Agent Plugins 包:根目录下的 plugin.json,mcp.json 中的 MCP 服务器,skills/ 下的 skill。客户端写入 files(或回传 blob),以及可选的 name 和 enabled;服务器在每次写入时从包中推导 manifest、mcpServers、skills 和 skipped,并在输入中忽略这些字段。被拒绝的包不会改变 harness。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | manifest 的 name。写入时可选;若发送则必须与 manifest 的一致。 约束: maxLength=64, pattern=^(?!.*(--|\.\.))[a-z0-9]([a-z0-9.-]*[a-z0-9])?$. |
enabled | boolean | 否 | false 表示插件保持已安装但处于惰性状态;其中的任何内容都不会被具体化或被联系。 默认值: true. |
files | array<UHPSkillFile> | 否 | 该包。根目录下必须包含 plugin.json。 |
blob | string | 否 | 服务器分配的句柄,用于在行外存储的包。客户端原样回传,并从插件文件端点读取文件。 |
manifest | UHPPluginManifest | 否 | 插件的 plugin.json,已解析。 |
mcpServers | array<UHPPluginMcpServer> | 否 | 从 mcp.json 推导。占位符按未展开的形式报告;enabled 始终为 true,由插件自己的 enabled 决定。 |
skills | array<UHPPluginSkill> | 否 | 从 skills/ 推导,每个包含 SKILL.md 的直接子目录对应一项。 |
skipped | array<UHPPluginSkipped> | 否 | 服务器发现但无法加载的内容。出现在服务器返回的每个插件对象上,没有被跳过的内容时为空。 |
完整字段和使用该对象的方法见附录。
UHPModel
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 是 | 模型的 ID,通常为 provider/model 形式,例如 anthropic/claude-sonnet-5。 |
label | string | 否 | 模型的显示名称。BeeOS Cloud 不报告它,因此省略。 |
backend | string | 否 | 模型的提供方系列:id 中第一个 / 之前的部分。id 中没有 / 时省略。 |
available | boolean | 是 | 计算得出,而非声明:true 表示服务器此刻可以为该 harness 提供这个模型。把一个模型列为可用、随后却使任务失败,对客户端是最糟糕的结果,因为用户已经选择了它。 |
default | boolean | 否 | 是否为该 harness 的主模型。 |
完整字段和使用该对象的方法见附录。
典型流程
- 用
harnesses.create创建 harness,再用harnesses.get读取,或用harnesses.list列出全部。 - 用
harnesses.update修改其配置。 - 用
harnesses.listModels查看它可运行的模型;harnesses.listAllModels给出按后端分组的目录。 - 通过 responses 在该 harness 上运行任务。
harnesses.delete目前不受支持,会返回 422。
更新规则与错误处理见管理 harness。
方法
| 方法 | HTTP | 摘要 |
|---|---|---|
| harnesses.list | GET /uhp/v1/harnesses | 列出已配置的 harness |
| harnesses.create | POST /uhp/v1/harnesses | 创建一个已配置的 harness |
| harnesses.get | GET /uhp/v1/harnesses/{harness_id} | 获取单个 harness |
| harnesses.update | PUT /uhp/v1/harnesses/{harness_id} | 更新 harness 配置 |
| harnesses.delete | DELETE /uhp/v1/harnesses/{harness_id} | 删除 harness |
| harnesses.listModels | GET /uhp/v1/harnesses/{harness_id}/models | 该 harness 可以运行的模型 |
| harnesses.listAllModels | GET /uhp/v1/models | 按后端划分的模型目录 |
harnesses.list
GET /uhp/v1/harnesses · Operation ID listHarnesses
列出已配置的 harness
SDK 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.harnesses.list | list(): Promise<Models.ListHarnessesResponse> |
| Python | cloud.harnesses.list | def list(self) -> ListHarnessesResponse |
| Go | cloud.Harnesses.List | func (r *HarnessesResource) List(ctx context.Context) (ListHarnessesResponse, error) |
响应
200 调用方范围内的 harness。可能为空。 · application/json
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
harnesses | array<UHPHarness> | 是 | — |
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 401 | UHPErrorEnvelope | 凭证缺失、格式错误或未知 |
| 其他(default) | UHPErrorEnvelope | UHP 协议错误信封 |
错误 schema 见错误。
示例
import { BeeOSClient } from "@beeos-ai/cloud-sdk";
const cloud = new BeeOSClient({
baseURL: "https://api.cloud.beeos.ai/v1",
apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.harnesses.list();
console.log(result);harnesses.create
POST /uhp/v1/harnesses · Operation ID createHarness
创建一个已配置的 harness
同步:Cloud 提交每一项运行时操作并等待(最长 45 秒,因此请将客户端超时设为至少 60 秒)后再响应。502 harness_error 在 error.detail.operations[] 中列出逐项结果;504 beeos_harness_update_in_progress 表示工作仍在继续,请在 Retry-After 之后重试完全相同的请求(没有 Idempotency-Key 的创建不会被重新挂接,会创建第二个 harness);409 beeos_harness_busy 表示另有不同的写入正在进行,请在 Retry-After 之后重试;409 beeos_idempotency_conflict 表示该 Idempotency-Key 曾用于另一个不同的请求;503 harness_unavailable 表示实例未运行或操作日志不可用;413 表示请求体超过 4 MiB(大型 skill 请作为 Files blob 上传)。可选的 Idempotency-Key 头(1-128 个可见 ASCII 字符)使创建(POST,或带 template_id 的 PUT)可以安全重发:相同的 key 与请求返回同一个 harness。instance_id 和 name 为必填,base 必须等于实例的运行时(422);template_id 和 template_version 用 agent 模板创建 harness;default_model 仅在此处生效。创建时,非空的 skills 或 mcp_servers 会被拒绝(422 beeos_field_not_supported);请用 PUT 添加。BeeOS Cloud 尚不支持(422 beeos_field_not_supported):非空的 system_prompt、disabled_tools、environment 或 plugins,以及任何 max_step 或 timeout_seconds。未改变的 name 和空值会被接受,因此 GET-修改-PUT 的往返可以正常工作。
SDK 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.harnesses.create | create(input: Models.UHPHarnessCreate, idempotencyKey?: string): Promise<Models.CreateHarnessResponse> |
| Python | cloud.harnesses.create | def create(self, input: UHPHarnessCreate, options: CreateHarnessOptions | None = None) -> UHPHarness |
| Go | cloud.Harnesses.Create | func (r *HarnessesResource) Create(ctx context.Context, input UHPHarnessCreate, options CreateHarnessOptions) (UHPHarness, error) |
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
Idempotency-Key | header | string | 否 | 让创建智能体的请求可以安全重试的 key,1 到 128 个可见 ASCII 字符,不含空格。它适用于 POST /harnesses 以及带 template_id 的 PUT;其他更新会忽略它。用相同的 key 和相同的 body 重复请求会继续先前的尝试;用相同的 key 发起不同的请求则返回 409 beeos_idempotency_conflict。 |
请求体
application/json · 必填 · Schema: UHPHarnessCreate
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 否 | harness 的显示名称。创建时必填,1 个或多个非空白字符。更新时必须等于当前名称;重命名会被拒绝,返回 422 beeos_field_not_supported。 |
base | string | 是 | harness 的 base(智能体运行时)。创建时必须等于 instance_id 所指实例的 harness,否则请求失败,返回 422 unsupported_base。更新时必须等于该 harness 当前的 base,base 不能修改。 |
default_model | string | 否 | BeeOS Cloud 只在创建时采用该值;在 PUT 中使用不同的值会返回 422 beeos_field_not_supported,除非同时发送了 template_id。 |
system_prompt | string | 否 | system prompt。BeeOS Cloud 不支持:非空值会被拒绝,返回 422 beeos_field_not_supported。 |
mcp_servers | array<UHPMcpServer> | 否 | 创建时被拒绝(422 beeos_field_not_supported)。PUT 时,该列表会与运行时的 MCP 服务器做差异比较:列出的服务器会被设置,被省略的会被取消设置;只有当实例运行时没有任何 MCP 方法时才返回 422 beeos_mcp_not_supported。 |
skills | array<UHPSkill> | 否 | harness 应具有的 skill。创建时不接受。更新时,该列表是完整的期望集合:带有 files、content 或 blob 的 skill 会被安装;列出的已安装 skill 只改变其 enabled 状态;未列出的已安装 skill 会被卸载,内置的除外。 |
plugins | array<UHPPlugin> | 否 | 需要 plugins 能力。每一项都需要 files 或 blob。 |
environment | string | 否 | 调用方范围内的 environment ID,或为空。需要 environments 能力。 |
disabled_tools | array<string> | 否 | 要禁用的工具名称。BeeOS Cloud 不支持:非空列表会被拒绝,返回 422 beeos_field_not_supported。 |
max_step | integer | 否 | 每次运行的最大步数。BeeOS Cloud 不支持:任何值都会被拒绝,返回 422 beeos_field_not_supported。 可为 null。 |
timeout_seconds | integer | 否 | 运行超时,单位为秒。BeeOS Cloud 不支持:任何值都会被拒绝,返回 422 beeos_field_not_supported。 可为 null。 |
instance_id | string | 否 | BeeOS 扩展。托管新 harness 的实例(仅创建时)。 |
template_id | string | 否 | BeeOS 扩展。应用到该 harness 的 agent 模板。 |
响应
200 已创建的 harness · application/json · Schema: UHPHarness
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 是 | harness 的 ID。以 chrn_ 开头,是其他请求中要使用的 harness_id。 约束: pattern=^chrn_. |
object | string | 否 | 对象类型:始终为 harness。 可选值: "harness" — 一个 harness 对象. |
name | string | 是 | harness 的显示名称。harness 没有显示名称时使用其名称,再没有则使用其 ID。 |
base | string | 是 | 不透明。本规范不枚举它——客户端必须把它当作字符串对待,否则每次发布 harness 时协议都需要修订。 |
baseLabel | string | 否 | base 的可读名称:openclaw 为 OpenClaw,hermes 为 Hermes。base 没有已知名称时省略。 |
defaultModel | string | 否 | harness 用作主模型的模型 ID。没有时省略。 |
systemPrompt | string | 否 | harness 的 system prompt。BeeOS Cloud 不支持该字段,因此从不返回。 |
mcpServers | array<UHPMcpServer> | 否 | 挂载到 harness 的 MCP 服务器。仅在实例运行时读取单个 harness 才返回,且仅当实例支持 MCP 服务器时返回;列表中省略。 |
skills | array<UHPSkill> | 否 | harness 上已安装的 skill。仅在实例运行时读取单个 harness 才返回;列表中省略。 |
plugins | array<UHPPlugin> | 否 | 已安装的插件。它们的服务器和 skill 在每个回合中都与 harness 自己的合并;上面的 mcpServers 和 skills 只报告直接写入它们的内容。 |
environment | string | 否 | 该 harness 的任务所读取的 environment(henv_),以只读方式挂载在其 mount 处;没有时为空。任务可以用自己的 environment 字段指明另一个。 |
disabledTools | array<string> | 否 | 为 harness 禁用的工具名称。BeeOS Cloud 不支持该字段,因此从不返回。 |
maxStep | integer | 否 | 每次运行的最大步数。BeeOS Cloud 不支持该字段,因此从不返回。 可为 null。 |
timeoutSeconds | integer | 否 | 运行超时,单位为秒。BeeOS Cloud 不支持该字段,因此从不返回。 可为 null。 |
createdAt | integer | 否 | Unix 毫秒 |
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 400 | UHPErrorEnvelope | UHP 协议错误信封 |
| 401 | UHPErrorEnvelope | 凭证缺失、格式错误或未知 |
| 409 | UHPErrorEnvelope | UHP 协议错误信封 |
| 413 | UHPErrorEnvelope | UHP 协议错误信封 |
| 422 | UHPErrorEnvelope | UHP 协议错误信封 |
| 502 | UHPErrorEnvelope | UHP 协议错误信封 |
| 503 | UHPErrorEnvelope | UHP 协议错误信封 |
| 504 | UHPErrorEnvelope | UHP 协议错误信封 |
| 其他(default) | UHPErrorEnvelope | UHP 协议错误信封 |
错误 schema 见错误。
示例
import { BeeOSClient } from "@beeos-ai/cloud-sdk";
const cloud = new BeeOSClient({
baseURL: "https://api.cloud.beeos.ai/v1",
apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.harnesses.create({ base: "example_base" });
console.log(result);harnesses.get
GET /uhp/v1/harnesses/{harness_id} · Operation ID getHarness
获取单个 harness
SDK 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.harnesses.get | get(harness_id: string): Promise<Models.GetHarnessResponse> |
| Python | cloud.harnesses.get | def get(self, harness_id: str) -> UHPHarness |
| Go | cloud.Harnesses.Get | func (r *HarnessesResource) Get(ctx context.Context, harnessid string) (UHPHarness, error) |
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
harness_id | path | string | 是 | harness 的 ID。以 chrn_ 开头。 |
响应
200 该 harness · application/json · Schema: UHPHarness
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 是 | harness 的 ID。以 chrn_ 开头,是其他请求中要使用的 harness_id。 约束: pattern=^chrn_. |
object | string | 否 | 对象类型:始终为 harness。 可选值: "harness" — 一个 harness 对象. |
name | string | 是 | harness 的显示名称。harness 没有显示名称时使用其名称,再没有则使用其 ID。 |
base | string | 是 | 不透明。本规范不枚举它——客户端必须把它当作字符串对待,否则每次发布 harness 时协议都需要修订。 |
baseLabel | string | 否 | base 的可读名称:openclaw 为 OpenClaw,hermes 为 Hermes。base 没有已知名称时省略。 |
defaultModel | string | 否 | harness 用作主模型的模型 ID。没有时省略。 |
systemPrompt | string | 否 | harness 的 system prompt。BeeOS Cloud 不支持该字段,因此从不返回。 |
mcpServers | array<UHPMcpServer> | 否 | 挂载到 harness 的 MCP 服务器。仅在实例运行时读取单个 harness 才返回,且仅当实例支持 MCP 服务器时返回;列表中省略。 |
skills | array<UHPSkill> | 否 | harness 上已安装的 skill。仅在实例运行时读取单个 harness 才返回;列表中省略。 |
plugins | array<UHPPlugin> | 否 | 已安装的插件。它们的服务器和 skill 在每个回合中都与 harness 自己的合并;上面的 mcpServers 和 skills 只报告直接写入它们的内容。 |
environment | string | 否 | 该 harness 的任务所读取的 environment(henv_),以只读方式挂载在其 mount 处;没有时为空。任务可以用自己的 environment 字段指明另一个。 |
disabledTools | array<string> | 否 | 为 harness 禁用的工具名称。BeeOS Cloud 不支持该字段,因此从不返回。 |
maxStep | integer | 否 | 每次运行的最大步数。BeeOS Cloud 不支持该字段,因此从不返回。 可为 null。 |
timeoutSeconds | integer | 否 | 运行超时,单位为秒。BeeOS Cloud 不支持该字段,因此从不返回。 可为 null。 |
createdAt | integer | 否 | Unix 毫秒 |
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 404 | UHPErrorEnvelope | 调用方范围内没有这个对象。对于超出调用方范围的对象,服务器返回 404 而不是 403,以免泄露某个 ID 是否存在。 |
| 其他(default) | UHPErrorEnvelope | UHP 协议错误信封 |
错误 schema 见错误。
示例
import { BeeOSClient } from "@beeos-ai/cloud-sdk";
const cloud = new BeeOSClient({
baseURL: "https://api.cloud.beeos.ai/v1",
apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.harnesses.get("harness_123");
console.log(result);harnesses.update
PUT /uhp/v1/harnesses/{harness_id} · Operation ID updateHarness
更新 harness 配置
同步:Cloud 提交每一项运行时操作并等待(最长 45 秒,因此请将客户端超时设为至少 60 秒)后再响应。502 harness_error 在 error.detail.operations[] 中列出逐项结果;504 beeos_harness_update_in_progress 表示工作仍在继续,请在 Retry-After 之后重试完全相同的请求(没有 Idempotency-Key 的创建不会被重新挂接,会创建第二个 harness);409 beeos_harness_busy 表示另有不同的写入正在进行,请在 Retry-After 之后重试;409 beeos_idempotency_conflict 表示该 Idempotency-Key 曾用于另一个不同的请求;503 harness_unavailable 表示实例未运行或操作日志不可用;413 表示请求体超过 4 MiB(大型 skill 请作为 Files blob 上传)。可选的 Idempotency-Key 头(1-128 个可见 ASCII 字符)使创建(POST,或带 template_id 的 PUT)可以安全重发:相同的 key 与请求返回同一个 harness。缺省的字段保持不变;出现的列表会替换整个列表。出现 skills 时,会与已安装的 skill 做差异比较:列出的、带有 files、content 或 blob(三者恰好一个)的 skill 会被安装;已安装且列出时 enabled 标志不同的 skill 会被更新;已安装但被省略的 skill 会被卸载,随运行时捆绑的除外;列出的、未安装且没有 files、content 或 blob 的 skill 返回 422;对全新安装设置 enabled:false 返回 422。出现 mcp_servers 时,会与运行时的 MCP 服务器做差异比较:随请求带有凭证(headers,或 auth 加 expires_at,最多提前 24 小时)的服务器会被设置,已连接且未带凭证的服务器会被保留,被省略的服务器会被取消设置;url 必须是 https,transport 为 http 或 sse;GET 永远不会返回 url 或凭证。只有当实例运行时没有任何 MCP 方法时才返回 422 beeos_mcp_not_supported。base 不可变;修改 name,或(没有 template_id 时)使 default_model 不同于当前值,会返回 422 beeos_field_not_supported。BeeOS Cloud 尚不支持(422 beeos_field_not_supported):非空的 system_prompt、disabled_tools、environment 或 plugins,以及任何 max_step 或 timeout_seconds。未改变的 name 和空值会被接受,因此 GET-修改-PUT 的往返可以正常工作。
SDK 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.harnesses.update | update(harness_id: string, input: Models.UHPHarnessCreate, idempotencyKey?: string): Promise<Models.UpdateHarnessResponse> |
| Python | cloud.harnesses.update | def update(self, harness_id: str, input: UHPHarnessCreate, options: UpdateHarnessOptions | None = None) -> UHPHarness |
| Go | cloud.Harnesses.Update | func (r *HarnessesResource) Update(ctx context.Context, harnessid string, input UHPHarnessCreate, options UpdateHarnessOptions) (UHPHarness, error) |
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
harness_id | path | string | 是 | harness 的 ID。以 chrn_ 开头。 |
Idempotency-Key | header | string | 否 | 让创建智能体的请求可以安全重试的 key,1 到 128 个可见 ASCII 字符,不含空格。它适用于 POST /harnesses 以及带 template_id 的 PUT;其他更新会忽略它。用相同的 key 和相同的 body 重复请求会继续先前的尝试;用相同的 key 发起不同的请求则返回 409 beeos_idempotency_conflict。 |
请求体
application/json · 必填 · Schema: UHPHarnessCreate
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 否 | harness 的显示名称。创建时必填,1 个或多个非空白字符。更新时必须等于当前名称;重命名会被拒绝,返回 422 beeos_field_not_supported。 |
base | string | 是 | harness 的 base(智能体运行时)。创建时必须等于 instance_id 所指实例的 harness,否则请求失败,返回 422 unsupported_base。更新时必须等于该 harness 当前的 base,base 不能修改。 |
default_model | string | 否 | BeeOS Cloud 只在创建时采用该值;在 PUT 中使用不同的值会返回 422 beeos_field_not_supported,除非同时发送了 template_id。 |
system_prompt | string | 否 | system prompt。BeeOS Cloud 不支持:非空值会被拒绝,返回 422 beeos_field_not_supported。 |
mcp_servers | array<UHPMcpServer> | 否 | 创建时被拒绝(422 beeos_field_not_supported)。PUT 时,该列表会与运行时的 MCP 服务器做差异比较:列出的服务器会被设置,被省略的会被取消设置;只有当实例运行时没有任何 MCP 方法时才返回 422 beeos_mcp_not_supported。 |
skills | array<UHPSkill> | 否 | harness 应具有的 skill。创建时不接受。更新时,该列表是完整的期望集合:带有 files、content 或 blob 的 skill 会被安装;列出的已安装 skill 只改变其 enabled 状态;未列出的已安装 skill 会被卸载,内置的除外。 |
plugins | array<UHPPlugin> | 否 | 需要 plugins 能力。每一项都需要 files 或 blob。 |
environment | string | 否 | 调用方范围内的 environment ID,或为空。需要 environments 能力。 |
disabled_tools | array<string> | 否 | 要禁用的工具名称。BeeOS Cloud 不支持:非空列表会被拒绝,返回 422 beeos_field_not_supported。 |
max_step | integer | 否 | 每次运行的最大步数。BeeOS Cloud 不支持:任何值都会被拒绝,返回 422 beeos_field_not_supported。 可为 null。 |
timeout_seconds | integer | 否 | 运行超时,单位为秒。BeeOS Cloud 不支持:任何值都会被拒绝,返回 422 beeos_field_not_supported。 可为 null。 |
instance_id | string | 否 | BeeOS 扩展。托管新 harness 的实例(仅创建时)。 |
template_id | string | 否 | BeeOS 扩展。应用到该 harness 的 agent 模板。 |
响应
200 已更新的 harness · application/json · Schema: UHPHarness
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 是 | harness 的 ID。以 chrn_ 开头,是其他请求中要使用的 harness_id。 约束: pattern=^chrn_. |
object | string | 否 | 对象类型:始终为 harness。 可选值: "harness" — 一个 harness 对象. |
name | string | 是 | harness 的显示名称。harness 没有显示名称时使用其名称,再没有则使用其 ID。 |
base | string | 是 | 不透明。本规范不枚举它——客户端必须把它当作字符串对待,否则每次发布 harness 时协议都需要修订。 |
baseLabel | string | 否 | base 的可读名称:openclaw 为 OpenClaw,hermes 为 Hermes。base 没有已知名称时省略。 |
defaultModel | string | 否 | harness 用作主模型的模型 ID。没有时省略。 |
systemPrompt | string | 否 | harness 的 system prompt。BeeOS Cloud 不支持该字段,因此从不返回。 |
mcpServers | array<UHPMcpServer> | 否 | 挂载到 harness 的 MCP 服务器。仅在实例运行时读取单个 harness 才返回,且仅当实例支持 MCP 服务器时返回;列表中省略。 |
skills | array<UHPSkill> | 否 | harness 上已安装的 skill。仅在实例运行时读取单个 harness 才返回;列表中省略。 |
plugins | array<UHPPlugin> | 否 | 已安装的插件。它们的服务器和 skill 在每个回合中都与 harness 自己的合并;上面的 mcpServers 和 skills 只报告直接写入它们的内容。 |
environment | string | 否 | 该 harness 的任务所读取的 environment(henv_),以只读方式挂载在其 mount 处;没有时为空。任务可以用自己的 environment 字段指明另一个。 |
disabledTools | array<string> | 否 | 为 harness 禁用的工具名称。BeeOS Cloud 不支持该字段,因此从不返回。 |
maxStep | integer | 否 | 每次运行的最大步数。BeeOS Cloud 不支持该字段,因此从不返回。 可为 null。 |
timeoutSeconds | integer | 否 | 运行超时,单位为秒。BeeOS Cloud 不支持该字段,因此从不返回。 可为 null。 |
createdAt | integer | 否 | Unix 毫秒 |
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 400 | UHPErrorEnvelope | UHP 协议错误信封 |
| 404 | UHPErrorEnvelope | 调用方范围内没有这个对象。对于超出调用方范围的对象,服务器返回 404 而不是 403,以免泄露某个 ID 是否存在。 |
| 409 | UHPErrorEnvelope | UHP 协议错误信封 |
| 413 | UHPErrorEnvelope | UHP 协议错误信封 |
| 422 | UHPErrorEnvelope | UHP 协议错误信封 |
| 502 | UHPErrorEnvelope | UHP 协议错误信封 |
| 503 | UHPErrorEnvelope | UHP 协议错误信封 |
| 504 | UHPErrorEnvelope | UHP 协议错误信封 |
| 其他(default) | UHPErrorEnvelope | UHP 协议错误信封 |
错误 schema 见错误。
示例
import { BeeOSClient } from "@beeos-ai/cloud-sdk";
const cloud = new BeeOSClient({
baseURL: "https://api.cloud.beeos.ai/v1",
apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.harnesses.update("harness_123", { base: "example_base" });
console.log(result);harnesses.delete
DELETE /uhp/v1/harnesses/{harness_id} · Operation ID deleteHarness
删除 harness
BeeOS Cloud 尚不支持:找到该 harness 之后返回 422 beeos_harness_delete_not_supported。
SDK 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.harnesses.delete | delete(harness_id: string): Promise<Models.DeleteHarnessResponse> |
| Python | cloud.harnesses.delete | def delete(self, harness_id: str) -> DeleteHarnessResponse |
| Go | cloud.Harnesses.Delete | func (r *HarnessesResource) Delete(ctx context.Context, harnessid string) (DeleteHarnessResponse, error) |
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
harness_id | path | string | 是 | harness 的 ID。以 chrn_ 开头。 |
响应
200 已删除 · application/json
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 否 | — |
deleted | boolean | 否 | — |
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 404 | UHPErrorEnvelope | 调用方范围内没有这个对象。对于超出调用方范围的对象,服务器返回 404 而不是 403,以免泄露某个 ID 是否存在。 |
| 422 | UHPErrorEnvelope | UHP 协议错误信封 |
| 其他(default) | UHPErrorEnvelope | UHP 协议错误信封 |
错误 schema 见错误。
示例
import { BeeOSClient } from "@beeos-ai/cloud-sdk";
const cloud = new BeeOSClient({
baseURL: "https://api.cloud.beeos.ai/v1",
apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.harnesses.delete("harness_123");
console.log(result);harnesses.listModels
GET /uhp/v1/harnesses/{harness_id}/models · Operation ID listHarnessModels
该 harness 可以运行的模型
SDK 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.harnesses.listModels | listModels(harness_id: string): Promise<Models.ListHarnessModelsResponse> |
| Python | cloud.harnesses.list_models | def list_models(self, harness_id: str) -> UHPHarnessModels |
| Go | cloud.Harnesses.ListModels | func (r *HarnessesResource) ListModels(ctx context.Context, harnessid string) (UHPHarnessModels, error) |
参数
| 参数 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
harness_id | path | string | 是 | harness 的 ID。以 chrn_ 开头。 |
响应
200 该 harness 允许使用的模型、默认模型和已授权的备选模型 · application/json · Schema: UHPHarnessModels
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
harness_id | string | 否 | 这些模型所属的 harness 的 ID。 |
backend | string | 否 | 所列模型都属于的提供方系列:模型 ID 中第一个 / 之前的部分,例如 anthropic。模型属于多个系列或没有系列时省略。 |
default | string | 否 | harness 主模型的 ID。没有时省略。 |
fallback | string | 否 | 请求的模型无法运行时所使用的模型。BeeOS Cloud 不报告它,因此从不返回。 |
models | array<UHPModel> | 是 | harness 可以使用的模型,按其实例的模型列表的顺序。该列表为空时,只列出主模型。 |
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 404 | UHPErrorEnvelope | 调用方范围内没有这个对象。对于超出调用方范围的对象,服务器返回 404 而不是 403,以免泄露某个 ID 是否存在。 |
| 其他(default) | UHPErrorEnvelope | UHP 协议错误信封 |
错误 schema 见错误。
示例
import { BeeOSClient } from "@beeos-ai/cloud-sdk";
const cloud = new BeeOSClient({
baseURL: "https://api.cloud.beeos.ai/v1",
apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.harnesses.listModels("harness_123");
console.log(result);harnesses.listAllModels
GET /uhp/v1/models · Operation ID listModels
按后端划分的模型目录
SDK 方法
| 语言 | 方法 | 签名 |
|---|---|---|
| TypeScript | cloud.harnesses.listAllModels | listAllModels(): Promise<Models.ListModelsResponse> |
| Python | cloud.harnesses.list_all_models | def list_all_models(self) -> UHPModelCatalog |
| Go | cloud.Harnesses.ListAllModels | func (r *HarnessesResource) ListAllModels(ctx context.Context) (UHPModelCatalog, error) |
响应
200 按后端分组的模型,每个模型带有计算得出的可用性 · application/json · Schema: UHPModelCatalog
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
backends | map<string, object> | 是 | 调用方的 harness 可以使用的模型,按提供方系列分组。每个键是一个提供方系列,即模型 ID 中第一个 / 之前的部分,例如 anthropic。每个值包含该系列的 default 模型 ID 及其 models;ID 中没有系列的模型不在此列出。 |
错误
| 状态码 | Schema | 说明 |
|---|---|---|
| 401 | UHPErrorEnvelope | 凭证缺失、格式错误或未知 |
| 其他(default) | UHPErrorEnvelope | UHP 协议错误信封 |
错误 schema 见错误。
示例
import { BeeOSClient } from "@beeos-ai/cloud-sdk";
const cloud = new BeeOSClient({
baseURL: "https://api.cloud.beeos.ai/v1",
apiKey: "YOUR_API_KEY", // bsk_ key: backend only
});
const result = await cloud.harnesses.listAllModels();
console.log(result);