This reference is currently available in English. The Cloud console remains in your selected language.
BEEOS CLOUD / DEVELOPER REFERENCE
Harnesses
Create, list, read, update, and delete configured harnesses and list the models they can run (UHP).
Overview
The harnesses domain manages the configured harnesses of an instance and lists the models they can run (UHP). Create and update are synchronous: the operation descriptions say Cloud submits every runtime operation and waits before it responds, so give these calls a client timeout of at least 60 seconds.
7 operations · SDK resource: TypeScript cloud.harnesses · Python cloud.harnesses · Go cloud.Harnesses · API overview
Operations whose path starts with /uhp/v1 are served from https://api.cloud.beeos.ai/uhp/v1 instead of https://api.cloud.beeos.ai/v1; the SDKs switch automatically.
Main objects
UHPHarnessCreate: the configuration you send to create or update a harness.UHPHarness: a configured harness.UHPHarnessModelsandUHPModelCatalog: the models of one harness and the model catalogue by backend.
UHPHarnessCreate
| Field | Type | Required | Description |
|---|---|---|---|
name | string | no | Display name of the harness. Required on create, 1 or more non-blank characters. On update it must equal the current name; renaming is rejected with 422 beeos_field_not_supported. |
base | string | yes | Base (agent runtime) of the harness. On create it must equal the harness of the instance named by instance_id, otherwise the request fails with 422 unsupported_base. On update it must equal the harness's current base, which cannot be changed. |
default_model | string | no | BeeOS Cloud honors this only on create; a different value on PUT returns 422 beeos_field_not_supported unless template_id is sent. |
system_prompt | string | no | System prompt. BeeOS Cloud does not support it: a non-empty value is rejected with 422 beeos_field_not_supported. |
mcp_servers | array<UHPMcpServer> | no | Rejected on create (422 beeos_field_not_supported). On PUT the list is diffed against the runtime MCP servers: listed servers are set, omitted ones are unset; 422 beeos_mcp_not_supported only when the instance runtime has no MCP methods. |
skills | array<UHPSkill> | no | Skills the harness should have. Not accepted on create. On update the list is the complete desired set: a skill that carries files, content or blob is installed, a listed installed skill only changes its enabled state, and an installed skill that is not listed is uninstalled, except bundled ones. |
plugins | array<UHPPlugin> | no | Requires the plugins capability. Each item needs files or blob. |
environment | string | no | An environment id of the caller's scope, or empty. Requires the environments capability. |
disabled_tools | array<string> | no | Names of tools to disable. BeeOS Cloud does not support it: a non-empty list is rejected with 422 beeos_field_not_supported. |
max_step | integer | no | Maximum number of steps per run. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable. |
timeout_seconds | integer | no | Run timeout in seconds. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable. |
instance_id | string | no | BeeOS extension. Instance that hosts a new harness (create only). |
template_id | string | no | BeeOS extension. Agent template applied to the harness. |
Every field, and the methods that use this object: appendix.
UHPHarness
| Field | Type | Required | Description |
|---|---|---|---|
id | string | yes | ID of the harness. It starts with chrn_ and is the harness_id to use in other requests. Constraints: pattern=^chrn_. |
object | string | no | Object type: always harness. Allowed values: "harness" — A harness object. |
name | string | yes | Display name of the harness. When the harness has no display name, its name is used, and then its ID. |
base | string | yes | Opaque. Not enumerated by this specification — a client must treat it as a string, or the protocol would need revising every time a harness is released. |
baseLabel | string | no | Human-readable name of base: OpenClaw for openclaw or Hermes for hermes. Omitted when the base has no known label. |
defaultModel | string | no | ID of the model the harness uses as its primary model. Omitted when it has none. |
systemPrompt | string | no | System prompt of the harness. BeeOS Cloud does not support it, so it is never returned. |
mcpServers | array<UHPMcpServer> | no | MCP servers attached to the harness. Returned only by a single-harness read while the instance is running, and only when the instance supports MCP servers; omitted in listings. |
skills | array<UHPSkill> | no | Skills installed on the harness. Returned only by a single-harness read while the instance is running; omitted in listings. |
plugins | array<UHPPlugin> | no | Installed plugins. Their servers and skills join the harness's own for every turn; mcpServers and skills above report only what was written to them directly. |
environment | string | no | The environment (henv_) this harness's tasks read, mounted read-only at its mount; empty when none. A task may name another with its own environment field. |
disabledTools | array<string> | no | Names of tools disabled for the harness. BeeOS Cloud does not support it, so it is never returned. |
maxStep | integer | no | Maximum number of steps per run. BeeOS Cloud does not support it, so it is never returned. Nullable. |
timeoutSeconds | integer | no | Run timeout in seconds. BeeOS Cloud does not support it, so it is never returned. Nullable. |
createdAt | integer | no | Unix milliseconds |
Every field, and the methods that use this object: appendix.
UHPHarnessModels
| Field | Type | Required | Description |
|---|---|---|---|
harness_id | string | no | ID of the harness the models belong to. |
backend | string | no | Provider family that every listed model belongs to: the part of the model ID before the first /, for example anthropic. Omitted when the models belong to several families or to none. |
default | string | no | ID of the harness's primary model. Omitted when it has none. |
fallback | string | no | Model used when a requested model cannot run. BeeOS Cloud does not report it, so it is never returned. |
models | array<UHPModel> | yes | Models the harness may use, in the order of its instance's model list. When that list is empty, only the primary model is listed. |
Every field, and the methods that use this object: appendix.
UHPModelCatalog
| Field | Type | Required | Description |
|---|---|---|---|
backends | map<string, object> | yes | Models the caller's harnesses may use, grouped by provider family. Each key is a provider family, the part of a model ID before the first /, for example anthropic. Each value holds the family's default model ID and its models; models whose ID has no family are not listed here. |
Every field, and the methods that use this object: appendix.
UHPMcpServer
A remote MCP server attached to a harness. Only enabled entries are connected for a turn; a disabled entry must not be contacted at all. An unreachable server must not fail the task. Unchanged from 2026-08-11: a process (stdio) server is declared inside a plugin, see PluginMcpServer.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | Sanitised to a CLI-safe identifier by the server. |
url | string | yes | HTTPS endpoint of the MCP server, at most 2048 characters, without user information or a fragment. Reads report it empty. Constraints: format=uri. |
transport | string | no | Transport the server speaks. Defaults to http on write. Not returned for a server that uses neither transport. Allowed values: "http" — Streamable HTTP; "sse" — The older HTTP with server-sent events transport. (enum table) Default: "http". |
enabled | boolean | no | Whether the server is enabled. Reads always report true. A server can only be set or removed: sending false is rejected with 422 invalid_input. Default: true. |
headers | map<string, string> | no | Request headers to send to the server, for example credentials. Header names and values must be non-empty. Never returned. Sending headers or auth also requires expires_at. |
auth | string | no | Bearer token, or a server-side reference the server resolves. A server must never return a resolved credential to a client. |
expires_at | string | no | BeeOS extension. Expiry of the supplied short-lived credential; the caller refreshes it with another PUT. Constraints: format=date-time. |
Every field, and the methods that use this object: appendix.
UHPSkill
A skill is a FOLDER, not a file. A server must materialise the whole folder where the agent can read it — materialising only SKILL.md breaks every skill carrying references, scripts or data. Round-tripping a harness through GET and PUT must not lose skill contents.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | Name of the skill, equal to the name of its folder. It is 1 to 128 lowercase letters, digits, dots, underscores and hyphens, starting with a letter or digit. An installed skill is 2 to 64 lowercase letters, digits and hyphens. |
enabled | boolean | no | false suppresses the skill, including one inherited from the base. Default: true. |
files | array<UHPSkillFile> | no | The bundle. Must contain a SKILL.md. |
content | string | no | Shorthand for a single-file bundle whose only member is SKILL.md. |
blob | string | no | Server-assigned handle for a bundle stored out of line. A client receives it, passes it back unchanged, and reads the files from the skill files endpoint. |
sha256 | string | no | BeeOS extension. SHA-256 of the Files bundle referenced by blob. |
size_bytes | string | no | BeeOS extension. Decimal byte size of the Files bundle referenced by blob. |
Every field, and the methods that use this object: appendix.
UHPPlugin
An Agent Plugins package installed into a harness: plugin.json at the root, MCP servers in mcp.json, skills under skills/. A client writes files (or passes back blob) and optionally name and enabled; the server derives manifest, mcpServers, skills and skipped from the package on every write and ignores those fields on input. A refused package leaves the harness unchanged.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | The manifest's name. Optional on write; if sent it must equal the manifest's. Constraints: maxLength=64, pattern=^(?!.*(--|\.\.))[a-z0-9]([a-z0-9.-]*[a-z0-9])?$. |
enabled | boolean | no | false keeps the plugin installed and inert; nothing in it is materialised or contacted. Default: true. |
files | array<UHPSkillFile> | no | The package. Must contain plugin.json at its root. |
blob | string | no | Server-assigned handle for a package stored out of line. A client passes it back unchanged and reads the files from the plugin files endpoint. |
manifest | UHPPluginManifest | no | The plugin's plugin.json, parsed. |
mcpServers | array<UHPPluginMcpServer> | no | Derived from mcp.json. Placeholders are reported unexpanded; enabled is always true, the plugin's own enabled governs. |
skills | array<UHPPluginSkill> | no | Derived from skills/, one entry per immediate child directory with a SKILL.md. |
skipped | array<UHPPluginSkipped> | no | What the server found and could not load. Present on every plugin object the server returns, empty when nothing was skipped. |
Every field, and the methods that use this object: appendix.
UHPModel
| Field | Type | Required | Description |
|---|---|---|---|
id | string | yes | ID of the model, usually in provider/model form, for example anthropic/claude-sonnet-5. |
label | string | no | Display name of the model. BeeOS Cloud does not report one, so it is omitted. |
backend | string | no | Provider family of the model: the part of id before the first /. Omitted when id has none. |
available | boolean | yes | Computed, not asserted: true means the server can serve this model for this harness right now. Listing a model as available and then failing the task is the worst outcome for a client, because a user has already chosen it. |
default | boolean | no | Whether this is the harness's primary model. |
Every field, and the methods that use this object: appendix.
Typical flow
- Create a harness with
harnesses.create, then read it withharnesses.getor list all withharnesses.list. - Change its configuration with
harnesses.update. - See which models it can run with
harnesses.listModels;harnesses.listAllModelsgives the catalogue by backend. - Run work on the harness with responses.
harnesses.deleteis not supported yet and returns 422.
See Manage harnesses for the update rules and error handling.
Methods
| Method | HTTP | Summary |
|---|---|---|
| harnesses.list | GET /uhp/v1/harnesses | List configured harnesses |
| harnesses.create | POST /uhp/v1/harnesses | Create a configured harness |
| harnesses.get | GET /uhp/v1/harnesses/{harness_id} | Get one harness |
| harnesses.update | PUT /uhp/v1/harnesses/{harness_id} | Update a harness configuration |
| harnesses.delete | DELETE /uhp/v1/harnesses/{harness_id} | Delete a harness |
| harnesses.listModels | GET /uhp/v1/harnesses/{harness_id}/models | Models this harness can run |
| harnesses.listAllModels | GET /uhp/v1/models | The model catalogue, by backend |
harnesses.list
GET /uhp/v1/harnesses · Operation ID listHarnesses
List configured harnesses
SDK methods
| Language | Method | Signature |
|---|---|---|
| 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) |
Response
200 Harnesses within the caller's scope. May be empty. · application/json
| Field | Type | Required | Description |
|---|---|---|---|
harnesses | array<UHPHarness> | yes | — |
Errors
| Status | Schema | Description |
|---|---|---|
| 401 | UHPErrorEnvelope | Missing, malformed or unknown credential |
| other (default) | UHPErrorEnvelope | UHP protocol error envelope |
The error schemas are described in Errors.
Example
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
Create a configured harness
Synchronous: Cloud submits every runtime operation and waits (up to 45s, so use a client timeout of at least 60s) before responding. 502 harness_error lists per-item results in error.detail.operations[]; 504 beeos_harness_update_in_progress means work continues, retry the identical request after Retry-After (a create without an Idempotency-Key is not re-attached and would create a second harness); 409 beeos_harness_busy means a different write is in flight, retry after Retry-After; 409 beeos_idempotency_conflict means the Idempotency-Key was used with a different request; 503 harness_unavailable means the instance is not running or the operation journal is unavailable; 413 means the body exceeds 4 MiB (upload large skills as a Files blob). The optional Idempotency-Key header (1-128 visible ASCII characters) makes a create (POST, or PUT with template_id) safe to resend: the same key and request returns the same harness. instance_id and name are required and base must equal the instance runtime (422); template_id and template_version create the harness from an agent template; default_model is honored only here. a non-empty skills or mcp_servers is rejected on create (422 beeos_field_not_supported); add them with PUT. Not supported by BeeOS Cloud yet (422 beeos_field_not_supported): a non-empty system_prompt, disabled_tools, environment or plugins, or any max_step or timeout_seconds. An unchanged name and empty values are accepted, so a GET-modify-PUT round trip works.
SDK methods
| Language | Method | Signature |
|---|---|---|
| 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) |
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
Idempotency-Key | header | string | no | Key that makes a request that creates an agent safe to retry, 1 to 128 visible ASCII characters without spaces. It applies to POST /harnesses and to PUT with a template_id; for other updates it is ignored. Repeating a request with the same key and body continues the earlier attempt; reusing the key for a different request returns 409 beeos_idempotency_conflict. |
Request body
application/json · required · Schema: UHPHarnessCreate
| Field | Type | Required | Description |
|---|---|---|---|
name | string | no | Display name of the harness. Required on create, 1 or more non-blank characters. On update it must equal the current name; renaming is rejected with 422 beeos_field_not_supported. |
base | string | yes | Base (agent runtime) of the harness. On create it must equal the harness of the instance named by instance_id, otherwise the request fails with 422 unsupported_base. On update it must equal the harness's current base, which cannot be changed. |
default_model | string | no | BeeOS Cloud honors this only on create; a different value on PUT returns 422 beeos_field_not_supported unless template_id is sent. |
system_prompt | string | no | System prompt. BeeOS Cloud does not support it: a non-empty value is rejected with 422 beeos_field_not_supported. |
mcp_servers | array<UHPMcpServer> | no | Rejected on create (422 beeos_field_not_supported). On PUT the list is diffed against the runtime MCP servers: listed servers are set, omitted ones are unset; 422 beeos_mcp_not_supported only when the instance runtime has no MCP methods. |
skills | array<UHPSkill> | no | Skills the harness should have. Not accepted on create. On update the list is the complete desired set: a skill that carries files, content or blob is installed, a listed installed skill only changes its enabled state, and an installed skill that is not listed is uninstalled, except bundled ones. |
plugins | array<UHPPlugin> | no | Requires the plugins capability. Each item needs files or blob. |
environment | string | no | An environment id of the caller's scope, or empty. Requires the environments capability. |
disabled_tools | array<string> | no | Names of tools to disable. BeeOS Cloud does not support it: a non-empty list is rejected with 422 beeos_field_not_supported. |
max_step | integer | no | Maximum number of steps per run. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable. |
timeout_seconds | integer | no | Run timeout in seconds. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable. |
instance_id | string | no | BeeOS extension. Instance that hosts a new harness (create only). |
template_id | string | no | BeeOS extension. Agent template applied to the harness. |
Response
200 The created harness · application/json · Schema: UHPHarness
| Field | Type | Required | Description |
|---|---|---|---|
id | string | yes | ID of the harness. It starts with chrn_ and is the harness_id to use in other requests. Constraints: pattern=^chrn_. |
object | string | no | Object type: always harness. Allowed values: "harness" — A harness object. |
name | string | yes | Display name of the harness. When the harness has no display name, its name is used, and then its ID. |
base | string | yes | Opaque. Not enumerated by this specification — a client must treat it as a string, or the protocol would need revising every time a harness is released. |
baseLabel | string | no | Human-readable name of base: OpenClaw for openclaw or Hermes for hermes. Omitted when the base has no known label. |
defaultModel | string | no | ID of the model the harness uses as its primary model. Omitted when it has none. |
systemPrompt | string | no | System prompt of the harness. BeeOS Cloud does not support it, so it is never returned. |
mcpServers | array<UHPMcpServer> | no | MCP servers attached to the harness. Returned only by a single-harness read while the instance is running, and only when the instance supports MCP servers; omitted in listings. |
skills | array<UHPSkill> | no | Skills installed on the harness. Returned only by a single-harness read while the instance is running; omitted in listings. |
plugins | array<UHPPlugin> | no | Installed plugins. Their servers and skills join the harness's own for every turn; mcpServers and skills above report only what was written to them directly. |
environment | string | no | The environment (henv_) this harness's tasks read, mounted read-only at its mount; empty when none. A task may name another with its own environment field. |
disabledTools | array<string> | no | Names of tools disabled for the harness. BeeOS Cloud does not support it, so it is never returned. |
maxStep | integer | no | Maximum number of steps per run. BeeOS Cloud does not support it, so it is never returned. Nullable. |
timeoutSeconds | integer | no | Run timeout in seconds. BeeOS Cloud does not support it, so it is never returned. Nullable. |
createdAt | integer | no | Unix milliseconds |
Errors
| Status | Schema | Description |
|---|---|---|
| 400 | UHPErrorEnvelope | UHP protocol error envelope |
| 401 | UHPErrorEnvelope | Missing, malformed or unknown credential |
| 409 | UHPErrorEnvelope | UHP protocol error envelope |
| 413 | UHPErrorEnvelope | UHP protocol error envelope |
| 422 | UHPErrorEnvelope | UHP protocol error envelope |
| 502 | UHPErrorEnvelope | UHP protocol error envelope |
| 503 | UHPErrorEnvelope | UHP protocol error envelope |
| 504 | UHPErrorEnvelope | UHP protocol error envelope |
| other (default) | UHPErrorEnvelope | UHP protocol error envelope |
The error schemas are described in Errors.
Example
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
Get one harness
SDK methods
| Language | Method | Signature |
|---|---|---|
| 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) |
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
harness_id | path | string | yes | ID of the harness. It starts with chrn_. |
Response
200 The harness · application/json · Schema: UHPHarness
| Field | Type | Required | Description |
|---|---|---|---|
id | string | yes | ID of the harness. It starts with chrn_ and is the harness_id to use in other requests. Constraints: pattern=^chrn_. |
object | string | no | Object type: always harness. Allowed values: "harness" — A harness object. |
name | string | yes | Display name of the harness. When the harness has no display name, its name is used, and then its ID. |
base | string | yes | Opaque. Not enumerated by this specification — a client must treat it as a string, or the protocol would need revising every time a harness is released. |
baseLabel | string | no | Human-readable name of base: OpenClaw for openclaw or Hermes for hermes. Omitted when the base has no known label. |
defaultModel | string | no | ID of the model the harness uses as its primary model. Omitted when it has none. |
systemPrompt | string | no | System prompt of the harness. BeeOS Cloud does not support it, so it is never returned. |
mcpServers | array<UHPMcpServer> | no | MCP servers attached to the harness. Returned only by a single-harness read while the instance is running, and only when the instance supports MCP servers; omitted in listings. |
skills | array<UHPSkill> | no | Skills installed on the harness. Returned only by a single-harness read while the instance is running; omitted in listings. |
plugins | array<UHPPlugin> | no | Installed plugins. Their servers and skills join the harness's own for every turn; mcpServers and skills above report only what was written to them directly. |
environment | string | no | The environment (henv_) this harness's tasks read, mounted read-only at its mount; empty when none. A task may name another with its own environment field. |
disabledTools | array<string> | no | Names of tools disabled for the harness. BeeOS Cloud does not support it, so it is never returned. |
maxStep | integer | no | Maximum number of steps per run. BeeOS Cloud does not support it, so it is never returned. Nullable. |
timeoutSeconds | integer | no | Run timeout in seconds. BeeOS Cloud does not support it, so it is never returned. Nullable. |
createdAt | integer | no | Unix milliseconds |
Errors
| Status | Schema | Description |
|---|---|---|
| 404 | UHPErrorEnvelope | No such object in the caller's scope. Servers return 404 rather than 403 for objects outside the caller's scope, so that an id's existence is not disclosed. |
| other (default) | UHPErrorEnvelope | UHP protocol error envelope |
The error schemas are described in Errors.
Example
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
Update a harness configuration
Synchronous: Cloud submits every runtime operation and waits (up to 45s, so use a client timeout of at least 60s) before responding. 502 harness_error lists per-item results in error.detail.operations[]; 504 beeos_harness_update_in_progress means work continues, retry the identical request after Retry-After (a create without an Idempotency-Key is not re-attached and would create a second harness); 409 beeos_harness_busy means a different write is in flight, retry after Retry-After; 409 beeos_idempotency_conflict means the Idempotency-Key was used with a different request; 503 harness_unavailable means the instance is not running or the operation journal is unavailable; 413 means the body exceeds 4 MiB (upload large skills as a Files blob). The optional Idempotency-Key header (1-128 visible ASCII characters) makes a create (POST, or PUT with template_id) safe to resend: the same key and request returns the same harness. An absent field is unchanged; a present list replaces the whole list. When skills is present it is diffed against the installed skills: listed skills with files, content or blob (exactly one) are installed; an installed skill listed with a different enabled flag is updated; installed skills that are omitted are uninstalled unless bundled with the runtime; a listed skill that is not installed and has no files, content or blob returns 422; enabled:false on a fresh install returns 422. When mcp_servers is present it is diffed against the runtime MCP servers: a server sent with a credential (headers or auth plus expires_at, at most 24 hours ahead) is set, a connected server sent without one is kept, omitted servers are unset; the url must be https and transport is http or sse; GET never returns a url or credential. 422 beeos_mcp_not_supported is returned only when the instance runtime has no MCP methods. base is immutable; a name change or a default_model different from the current one (without template_id) returns 422 beeos_field_not_supported. Not supported by BeeOS Cloud yet (422 beeos_field_not_supported): a non-empty system_prompt, disabled_tools, environment or plugins, or any max_step or timeout_seconds. An unchanged name and empty values are accepted, so a GET-modify-PUT round trip works.
SDK methods
| Language | Method | Signature |
|---|---|---|
| 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) |
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
harness_id | path | string | yes | ID of the harness. It starts with chrn_. |
Idempotency-Key | header | string | no | Key that makes a request that creates an agent safe to retry, 1 to 128 visible ASCII characters without spaces. It applies to POST /harnesses and to PUT with a template_id; for other updates it is ignored. Repeating a request with the same key and body continues the earlier attempt; reusing the key for a different request returns 409 beeos_idempotency_conflict. |
Request body
application/json · required · Schema: UHPHarnessCreate
| Field | Type | Required | Description |
|---|---|---|---|
name | string | no | Display name of the harness. Required on create, 1 or more non-blank characters. On update it must equal the current name; renaming is rejected with 422 beeos_field_not_supported. |
base | string | yes | Base (agent runtime) of the harness. On create it must equal the harness of the instance named by instance_id, otherwise the request fails with 422 unsupported_base. On update it must equal the harness's current base, which cannot be changed. |
default_model | string | no | BeeOS Cloud honors this only on create; a different value on PUT returns 422 beeos_field_not_supported unless template_id is sent. |
system_prompt | string | no | System prompt. BeeOS Cloud does not support it: a non-empty value is rejected with 422 beeos_field_not_supported. |
mcp_servers | array<UHPMcpServer> | no | Rejected on create (422 beeos_field_not_supported). On PUT the list is diffed against the runtime MCP servers: listed servers are set, omitted ones are unset; 422 beeos_mcp_not_supported only when the instance runtime has no MCP methods. |
skills | array<UHPSkill> | no | Skills the harness should have. Not accepted on create. On update the list is the complete desired set: a skill that carries files, content or blob is installed, a listed installed skill only changes its enabled state, and an installed skill that is not listed is uninstalled, except bundled ones. |
plugins | array<UHPPlugin> | no | Requires the plugins capability. Each item needs files or blob. |
environment | string | no | An environment id of the caller's scope, or empty. Requires the environments capability. |
disabled_tools | array<string> | no | Names of tools to disable. BeeOS Cloud does not support it: a non-empty list is rejected with 422 beeos_field_not_supported. |
max_step | integer | no | Maximum number of steps per run. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable. |
timeout_seconds | integer | no | Run timeout in seconds. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable. |
instance_id | string | no | BeeOS extension. Instance that hosts a new harness (create only). |
template_id | string | no | BeeOS extension. Agent template applied to the harness. |
Response
200 The updated harness · application/json · Schema: UHPHarness
| Field | Type | Required | Description |
|---|---|---|---|
id | string | yes | ID of the harness. It starts with chrn_ and is the harness_id to use in other requests. Constraints: pattern=^chrn_. |
object | string | no | Object type: always harness. Allowed values: "harness" — A harness object. |
name | string | yes | Display name of the harness. When the harness has no display name, its name is used, and then its ID. |
base | string | yes | Opaque. Not enumerated by this specification — a client must treat it as a string, or the protocol would need revising every time a harness is released. |
baseLabel | string | no | Human-readable name of base: OpenClaw for openclaw or Hermes for hermes. Omitted when the base has no known label. |
defaultModel | string | no | ID of the model the harness uses as its primary model. Omitted when it has none. |
systemPrompt | string | no | System prompt of the harness. BeeOS Cloud does not support it, so it is never returned. |
mcpServers | array<UHPMcpServer> | no | MCP servers attached to the harness. Returned only by a single-harness read while the instance is running, and only when the instance supports MCP servers; omitted in listings. |
skills | array<UHPSkill> | no | Skills installed on the harness. Returned only by a single-harness read while the instance is running; omitted in listings. |
plugins | array<UHPPlugin> | no | Installed plugins. Their servers and skills join the harness's own for every turn; mcpServers and skills above report only what was written to them directly. |
environment | string | no | The environment (henv_) this harness's tasks read, mounted read-only at its mount; empty when none. A task may name another with its own environment field. |
disabledTools | array<string> | no | Names of tools disabled for the harness. BeeOS Cloud does not support it, so it is never returned. |
maxStep | integer | no | Maximum number of steps per run. BeeOS Cloud does not support it, so it is never returned. Nullable. |
timeoutSeconds | integer | no | Run timeout in seconds. BeeOS Cloud does not support it, so it is never returned. Nullable. |
createdAt | integer | no | Unix milliseconds |
Errors
| Status | Schema | Description |
|---|---|---|
| 400 | UHPErrorEnvelope | UHP protocol error envelope |
| 404 | UHPErrorEnvelope | No such object in the caller's scope. Servers return 404 rather than 403 for objects outside the caller's scope, so that an id's existence is not disclosed. |
| 409 | UHPErrorEnvelope | UHP protocol error envelope |
| 413 | UHPErrorEnvelope | UHP protocol error envelope |
| 422 | UHPErrorEnvelope | UHP protocol error envelope |
| 502 | UHPErrorEnvelope | UHP protocol error envelope |
| 503 | UHPErrorEnvelope | UHP protocol error envelope |
| 504 | UHPErrorEnvelope | UHP protocol error envelope |
| other (default) | UHPErrorEnvelope | UHP protocol error envelope |
The error schemas are described in Errors.
Example
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
Delete a harness
Not supported by BeeOS Cloud yet: returns 422 beeos_harness_delete_not_supported once the harness is found.
SDK methods
| Language | Method | Signature |
|---|---|---|
| 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) |
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
harness_id | path | string | yes | ID of the harness. It starts with chrn_. |
Response
200 Deleted · application/json
| Field | Type | Required | Description |
|---|---|---|---|
id | string | no | — |
deleted | boolean | no | — |
Errors
| Status | Schema | Description |
|---|---|---|
| 404 | UHPErrorEnvelope | No such object in the caller's scope. Servers return 404 rather than 403 for objects outside the caller's scope, so that an id's existence is not disclosed. |
| 422 | UHPErrorEnvelope | UHP protocol error envelope |
| other (default) | UHPErrorEnvelope | UHP protocol error envelope |
The error schemas are described in Errors.
Example
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
Models this harness can run
SDK methods
| Language | Method | Signature |
|---|---|---|
| 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) |
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
harness_id | path | string | yes | ID of the harness. It starts with chrn_. |
Response
200 The harness's allowed models, default and authorized fallback · application/json · Schema: UHPHarnessModels
| Field | Type | Required | Description |
|---|---|---|---|
harness_id | string | no | ID of the harness the models belong to. |
backend | string | no | Provider family that every listed model belongs to: the part of the model ID before the first /, for example anthropic. Omitted when the models belong to several families or to none. |
default | string | no | ID of the harness's primary model. Omitted when it has none. |
fallback | string | no | Model used when a requested model cannot run. BeeOS Cloud does not report it, so it is never returned. |
models | array<UHPModel> | yes | Models the harness may use, in the order of its instance's model list. When that list is empty, only the primary model is listed. |
Errors
| Status | Schema | Description |
|---|---|---|
| 404 | UHPErrorEnvelope | No such object in the caller's scope. Servers return 404 rather than 403 for objects outside the caller's scope, so that an id's existence is not disclosed. |
| other (default) | UHPErrorEnvelope | UHP protocol error envelope |
The error schemas are described in Errors.
Example
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
The model catalogue, by backend
SDK methods
| Language | Method | Signature |
|---|---|---|
| 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) |
Response
200 Models grouped by backend, each with computed availability · application/json · Schema: UHPModelCatalog
| Field | Type | Required | Description |
|---|---|---|---|
backends | map<string, object> | yes | Models the caller's harnesses may use, grouped by provider family. Each key is a provider family, the part of a model ID before the first /, for example anthropic. Each value holds the family's default model ID and its models; models whose ID has no family are not listed here. |
Errors
| Status | Schema | Description |
|---|---|---|
| 401 | UHPErrorEnvelope | Missing, malformed or unknown credential |
| other (default) | UHPErrorEnvelope | UHP protocol error envelope |
The error schemas are described in Errors.
Example
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);