DocsCloud SDK reference

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

FieldTypeRequiredDescription
namestringnoDisplay 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.
basestringyesBase (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_modelstringnoBeeOS Cloud honors this only on create; a different value on PUT returns 422 beeos_field_not_supported unless template_id is sent.
system_promptstringnoSystem prompt. BeeOS Cloud does not support it: a non-empty value is rejected with 422 beeos_field_not_supported.
mcp_serversarray<UHPMcpServer>noRejected 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.
skillsarray<UHPSkill>noSkills 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.
pluginsarray<UHPPlugin>noRequires the plugins capability. Each item needs files or blob.
environmentstringnoAn environment id of the caller's scope, or empty. Requires the environments capability.
disabled_toolsarray<string>noNames of tools to disable. BeeOS Cloud does not support it: a non-empty list is rejected with 422 beeos_field_not_supported.
max_stepintegernoMaximum number of steps per run. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable.
timeout_secondsintegernoRun timeout in seconds. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable.
instance_idstringnoBeeOS extension. Instance that hosts a new harness (create only).
template_idstringnoBeeOS extension. Agent template applied to the harness.

Every field, and the methods that use this object: appendix.

UHPHarness

FieldTypeRequiredDescription
idstringyesID of the harness. It starts with chrn_ and is the harness_id to use in other requests. Constraints: pattern=^chrn_.
objectstringnoObject type: always harness. Allowed values: "harness" — A harness object.
namestringyesDisplay name of the harness. When the harness has no display name, its name is used, and then its ID.
basestringyesOpaque. 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.
baseLabelstringnoHuman-readable name of base: OpenClaw for openclaw or Hermes for hermes. Omitted when the base has no known label.
defaultModelstringnoID of the model the harness uses as its primary model. Omitted when it has none.
systemPromptstringnoSystem prompt of the harness. BeeOS Cloud does not support it, so it is never returned.
mcpServersarray<UHPMcpServer>noMCP 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.
skillsarray<UHPSkill>noSkills installed on the harness. Returned only by a single-harness read while the instance is running; omitted in listings.
pluginsarray<UHPPlugin>noInstalled 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.
environmentstringnoThe 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.
disabledToolsarray<string>noNames of tools disabled for the harness. BeeOS Cloud does not support it, so it is never returned.
maxStepintegernoMaximum number of steps per run. BeeOS Cloud does not support it, so it is never returned. Nullable.
timeoutSecondsintegernoRun timeout in seconds. BeeOS Cloud does not support it, so it is never returned. Nullable.
createdAtintegernoUnix milliseconds

Every field, and the methods that use this object: appendix.

UHPHarnessModels

FieldTypeRequiredDescription
harness_idstringnoID of the harness the models belong to.
backendstringnoProvider 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.
defaultstringnoID of the harness's primary model. Omitted when it has none.
fallbackstringnoModel used when a requested model cannot run. BeeOS Cloud does not report it, so it is never returned.
modelsarray<UHPModel>yesModels 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

FieldTypeRequiredDescription
backendsmap<string, object>yesModels 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.

FieldTypeRequiredDescription
namestringyesSanitised to a CLI-safe identifier by the server.
urlstringyesHTTPS endpoint of the MCP server, at most 2048 characters, without user information or a fragment. Reads report it empty. Constraints: format=uri.
transportstringnoTransport 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".
enabledbooleannoWhether 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.
headersmap<string, string>noRequest 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.
authstringnoBearer token, or a server-side reference the server resolves. A server must never return a resolved credential to a client.
expires_atstringnoBeeOS 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.

FieldTypeRequiredDescription
namestringyesName 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.
enabledbooleannofalse suppresses the skill, including one inherited from the base. Default: true.
filesarray<UHPSkillFile>noThe bundle. Must contain a SKILL.md.
contentstringnoShorthand for a single-file bundle whose only member is SKILL.md.
blobstringnoServer-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.
sha256stringnoBeeOS extension. SHA-256 of the Files bundle referenced by blob.
size_bytesstringnoBeeOS 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.

FieldTypeRequiredDescription
namestringyesThe 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])?$.
enabledbooleannofalse keeps the plugin installed and inert; nothing in it is materialised or contacted. Default: true.
filesarray<UHPSkillFile>noThe package. Must contain plugin.json at its root.
blobstringnoServer-assigned handle for a package stored out of line. A client passes it back unchanged and reads the files from the plugin files endpoint.
manifestUHPPluginManifestnoThe plugin's plugin.json, parsed.
mcpServersarray<UHPPluginMcpServer>noDerived from mcp.json. Placeholders are reported unexpanded; enabled is always true, the plugin's own enabled governs.
skillsarray<UHPPluginSkill>noDerived from skills/, one entry per immediate child directory with a SKILL.md.
skippedarray<UHPPluginSkipped>noWhat 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

FieldTypeRequiredDescription
idstringyesID of the model, usually in provider/model form, for example anthropic/claude-sonnet-5.
labelstringnoDisplay name of the model. BeeOS Cloud does not report one, so it is omitted.
backendstringnoProvider family of the model: the part of id before the first /. Omitted when id has none.
availablebooleanyesComputed, 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.
defaultbooleannoWhether this is the harness's primary model.

Every field, and the methods that use this object: appendix.

Typical flow

  1. Create a harness with harnesses.create, then read it with harnesses.get or list all with harnesses.list.
  2. Change its configuration with harnesses.update.
  3. See which models it can run with harnesses.listModels; harnesses.listAllModels gives the catalogue by backend.
  4. Run work on the harness with responses. harnesses.delete is not supported yet and returns 422.

See Manage harnesses for the update rules and error handling.

Methods

MethodHTTPSummary
harnesses.listGET /uhp/v1/harnessesList configured harnesses
harnesses.createPOST /uhp/v1/harnessesCreate a configured harness
harnesses.getGET /uhp/v1/harnesses/{harness_id}Get one harness
harnesses.updatePUT /uhp/v1/harnesses/{harness_id}Update a harness configuration
harnesses.deleteDELETE /uhp/v1/harnesses/{harness_id}Delete a harness
harnesses.listModelsGET /uhp/v1/harnesses/{harness_id}/modelsModels this harness can run
harnesses.listAllModelsGET /uhp/v1/modelsThe model catalogue, by backend

harnesses.list

GET /uhp/v1/harnesses · Operation ID listHarnesses

List configured harnesses

SDK methods

LanguageMethodSignature
TypeScriptcloud.harnesses.listlist(): Promise<Models.ListHarnessesResponse>
Pythoncloud.harnesses.listdef list(self) -> ListHarnessesResponse
Gocloud.Harnesses.Listfunc (r *HarnessesResource) List(ctx context.Context) (ListHarnessesResponse, error)

Response

200 Harnesses within the caller's scope. May be empty. · application/json

FieldTypeRequiredDescription
harnessesarray<UHPHarness>yes—

Errors

StatusSchemaDescription
401UHPErrorEnvelopeMissing, malformed or unknown credential
other (default)UHPErrorEnvelopeUHP 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

LanguageMethodSignature
TypeScriptcloud.harnesses.createcreate(input: Models.UHPHarnessCreate, idempotencyKey?: string): Promise<Models.CreateHarnessResponse>
Pythoncloud.harnesses.createdef create(self, input: UHPHarnessCreate, options: CreateHarnessOptions | None = None) -> UHPHarness
Gocloud.Harnesses.Createfunc (r *HarnessesResource) Create(ctx context.Context, input UHPHarnessCreate, options CreateHarnessOptions) (UHPHarness, error)

Parameters

ParameterInTypeRequiredDescription
Idempotency-KeyheaderstringnoKey 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

FieldTypeRequiredDescription
namestringnoDisplay 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.
basestringyesBase (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_modelstringnoBeeOS Cloud honors this only on create; a different value on PUT returns 422 beeos_field_not_supported unless template_id is sent.
system_promptstringnoSystem prompt. BeeOS Cloud does not support it: a non-empty value is rejected with 422 beeos_field_not_supported.
mcp_serversarray<UHPMcpServer>noRejected 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.
skillsarray<UHPSkill>noSkills 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.
pluginsarray<UHPPlugin>noRequires the plugins capability. Each item needs files or blob.
environmentstringnoAn environment id of the caller's scope, or empty. Requires the environments capability.
disabled_toolsarray<string>noNames of tools to disable. BeeOS Cloud does not support it: a non-empty list is rejected with 422 beeos_field_not_supported.
max_stepintegernoMaximum number of steps per run. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable.
timeout_secondsintegernoRun timeout in seconds. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable.
instance_idstringnoBeeOS extension. Instance that hosts a new harness (create only).
template_idstringnoBeeOS extension. Agent template applied to the harness.

Response

200 The created harness · application/json · Schema: UHPHarness

FieldTypeRequiredDescription
idstringyesID of the harness. It starts with chrn_ and is the harness_id to use in other requests. Constraints: pattern=^chrn_.
objectstringnoObject type: always harness. Allowed values: "harness" — A harness object.
namestringyesDisplay name of the harness. When the harness has no display name, its name is used, and then its ID.
basestringyesOpaque. 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.
baseLabelstringnoHuman-readable name of base: OpenClaw for openclaw or Hermes for hermes. Omitted when the base has no known label.
defaultModelstringnoID of the model the harness uses as its primary model. Omitted when it has none.
systemPromptstringnoSystem prompt of the harness. BeeOS Cloud does not support it, so it is never returned.
mcpServersarray<UHPMcpServer>noMCP 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.
skillsarray<UHPSkill>noSkills installed on the harness. Returned only by a single-harness read while the instance is running; omitted in listings.
pluginsarray<UHPPlugin>noInstalled 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.
environmentstringnoThe 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.
disabledToolsarray<string>noNames of tools disabled for the harness. BeeOS Cloud does not support it, so it is never returned.
maxStepintegernoMaximum number of steps per run. BeeOS Cloud does not support it, so it is never returned. Nullable.
timeoutSecondsintegernoRun timeout in seconds. BeeOS Cloud does not support it, so it is never returned. Nullable.
createdAtintegernoUnix milliseconds

Errors

StatusSchemaDescription
400UHPErrorEnvelopeUHP protocol error envelope
401UHPErrorEnvelopeMissing, malformed or unknown credential
409UHPErrorEnvelopeUHP protocol error envelope
413UHPErrorEnvelopeUHP protocol error envelope
422UHPErrorEnvelopeUHP protocol error envelope
502UHPErrorEnvelopeUHP protocol error envelope
503UHPErrorEnvelopeUHP protocol error envelope
504UHPErrorEnvelopeUHP protocol error envelope
other (default)UHPErrorEnvelopeUHP 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

LanguageMethodSignature
TypeScriptcloud.harnesses.getget(harness_id: string): Promise<Models.GetHarnessResponse>
Pythoncloud.harnesses.getdef get(self, harness_id: str) -> UHPHarness
Gocloud.Harnesses.Getfunc (r *HarnessesResource) Get(ctx context.Context, harnessid string) (UHPHarness, error)

Parameters

ParameterInTypeRequiredDescription
harness_idpathstringyesID of the harness. It starts with chrn_.

Response

200 The harness · application/json · Schema: UHPHarness

FieldTypeRequiredDescription
idstringyesID of the harness. It starts with chrn_ and is the harness_id to use in other requests. Constraints: pattern=^chrn_.
objectstringnoObject type: always harness. Allowed values: "harness" — A harness object.
namestringyesDisplay name of the harness. When the harness has no display name, its name is used, and then its ID.
basestringyesOpaque. 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.
baseLabelstringnoHuman-readable name of base: OpenClaw for openclaw or Hermes for hermes. Omitted when the base has no known label.
defaultModelstringnoID of the model the harness uses as its primary model. Omitted when it has none.
systemPromptstringnoSystem prompt of the harness. BeeOS Cloud does not support it, so it is never returned.
mcpServersarray<UHPMcpServer>noMCP 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.
skillsarray<UHPSkill>noSkills installed on the harness. Returned only by a single-harness read while the instance is running; omitted in listings.
pluginsarray<UHPPlugin>noInstalled 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.
environmentstringnoThe 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.
disabledToolsarray<string>noNames of tools disabled for the harness. BeeOS Cloud does not support it, so it is never returned.
maxStepintegernoMaximum number of steps per run. BeeOS Cloud does not support it, so it is never returned. Nullable.
timeoutSecondsintegernoRun timeout in seconds. BeeOS Cloud does not support it, so it is never returned. Nullable.
createdAtintegernoUnix milliseconds

Errors

StatusSchemaDescription
404UHPErrorEnvelopeNo 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)UHPErrorEnvelopeUHP 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

LanguageMethodSignature
TypeScriptcloud.harnesses.updateupdate(harness_id: string, input: Models.UHPHarnessCreate, idempotencyKey?: string): Promise<Models.UpdateHarnessResponse>
Pythoncloud.harnesses.updatedef update(self, harness_id: str, input: UHPHarnessCreate, options: UpdateHarnessOptions | None = None) -> UHPHarness
Gocloud.Harnesses.Updatefunc (r *HarnessesResource) Update(ctx context.Context, harnessid string, input UHPHarnessCreate, options UpdateHarnessOptions) (UHPHarness, error)

Parameters

ParameterInTypeRequiredDescription
harness_idpathstringyesID of the harness. It starts with chrn_.
Idempotency-KeyheaderstringnoKey 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

FieldTypeRequiredDescription
namestringnoDisplay 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.
basestringyesBase (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_modelstringnoBeeOS Cloud honors this only on create; a different value on PUT returns 422 beeos_field_not_supported unless template_id is sent.
system_promptstringnoSystem prompt. BeeOS Cloud does not support it: a non-empty value is rejected with 422 beeos_field_not_supported.
mcp_serversarray<UHPMcpServer>noRejected 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.
skillsarray<UHPSkill>noSkills 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.
pluginsarray<UHPPlugin>noRequires the plugins capability. Each item needs files or blob.
environmentstringnoAn environment id of the caller's scope, or empty. Requires the environments capability.
disabled_toolsarray<string>noNames of tools to disable. BeeOS Cloud does not support it: a non-empty list is rejected with 422 beeos_field_not_supported.
max_stepintegernoMaximum number of steps per run. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable.
timeout_secondsintegernoRun timeout in seconds. BeeOS Cloud does not support it: any value is rejected with 422 beeos_field_not_supported. Nullable.
instance_idstringnoBeeOS extension. Instance that hosts a new harness (create only).
template_idstringnoBeeOS extension. Agent template applied to the harness.

Response

200 The updated harness · application/json · Schema: UHPHarness

FieldTypeRequiredDescription
idstringyesID of the harness. It starts with chrn_ and is the harness_id to use in other requests. Constraints: pattern=^chrn_.
objectstringnoObject type: always harness. Allowed values: "harness" — A harness object.
namestringyesDisplay name of the harness. When the harness has no display name, its name is used, and then its ID.
basestringyesOpaque. 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.
baseLabelstringnoHuman-readable name of base: OpenClaw for openclaw or Hermes for hermes. Omitted when the base has no known label.
defaultModelstringnoID of the model the harness uses as its primary model. Omitted when it has none.
systemPromptstringnoSystem prompt of the harness. BeeOS Cloud does not support it, so it is never returned.
mcpServersarray<UHPMcpServer>noMCP 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.
skillsarray<UHPSkill>noSkills installed on the harness. Returned only by a single-harness read while the instance is running; omitted in listings.
pluginsarray<UHPPlugin>noInstalled 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.
environmentstringnoThe 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.
disabledToolsarray<string>noNames of tools disabled for the harness. BeeOS Cloud does not support it, so it is never returned.
maxStepintegernoMaximum number of steps per run. BeeOS Cloud does not support it, so it is never returned. Nullable.
timeoutSecondsintegernoRun timeout in seconds. BeeOS Cloud does not support it, so it is never returned. Nullable.
createdAtintegernoUnix milliseconds

Errors

StatusSchemaDescription
400UHPErrorEnvelopeUHP protocol error envelope
404UHPErrorEnvelopeNo 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.
409UHPErrorEnvelopeUHP protocol error envelope
413UHPErrorEnvelopeUHP protocol error envelope
422UHPErrorEnvelopeUHP protocol error envelope
502UHPErrorEnvelopeUHP protocol error envelope
503UHPErrorEnvelopeUHP protocol error envelope
504UHPErrorEnvelopeUHP protocol error envelope
other (default)UHPErrorEnvelopeUHP 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

LanguageMethodSignature
TypeScriptcloud.harnesses.deletedelete(harness_id: string): Promise<Models.DeleteHarnessResponse>
Pythoncloud.harnesses.deletedef delete(self, harness_id: str) -> DeleteHarnessResponse
Gocloud.Harnesses.Deletefunc (r *HarnessesResource) Delete(ctx context.Context, harnessid string) (DeleteHarnessResponse, error)

Parameters

ParameterInTypeRequiredDescription
harness_idpathstringyesID of the harness. It starts with chrn_.

Response

200 Deleted · application/json

FieldTypeRequiredDescription
idstringno—
deletedbooleanno—

Errors

StatusSchemaDescription
404UHPErrorEnvelopeNo 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.
422UHPErrorEnvelopeUHP protocol error envelope
other (default)UHPErrorEnvelopeUHP 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

LanguageMethodSignature
TypeScriptcloud.harnesses.listModelslistModels(harness_id: string): Promise<Models.ListHarnessModelsResponse>
Pythoncloud.harnesses.list_modelsdef list_models(self, harness_id: str) -> UHPHarnessModels
Gocloud.Harnesses.ListModelsfunc (r *HarnessesResource) ListModels(ctx context.Context, harnessid string) (UHPHarnessModels, error)

Parameters

ParameterInTypeRequiredDescription
harness_idpathstringyesID of the harness. It starts with chrn_.

Response

200 The harness's allowed models, default and authorized fallback · application/json · Schema: UHPHarnessModels

FieldTypeRequiredDescription
harness_idstringnoID of the harness the models belong to.
backendstringnoProvider 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.
defaultstringnoID of the harness's primary model. Omitted when it has none.
fallbackstringnoModel used when a requested model cannot run. BeeOS Cloud does not report it, so it is never returned.
modelsarray<UHPModel>yesModels 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

StatusSchemaDescription
404UHPErrorEnvelopeNo 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)UHPErrorEnvelopeUHP 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

LanguageMethodSignature
TypeScriptcloud.harnesses.listAllModelslistAllModels(): Promise<Models.ListModelsResponse>
Pythoncloud.harnesses.list_all_modelsdef list_all_models(self) -> UHPModelCatalog
Gocloud.Harnesses.ListAllModelsfunc (r *HarnessesResource) ListAllModels(ctx context.Context) (UHPModelCatalog, error)

Response

200 Models grouped by backend, each with computed availability · application/json · Schema: UHPModelCatalog

FieldTypeRequiredDescription
backendsmap<string, object>yesModels 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

StatusSchemaDescription
401UHPErrorEnvelopeMissing, malformed or unknown credential
other (default)UHPErrorEnvelopeUHP 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);