Host Spaces
cua.env.v1 HostSpacesService: Spaces a host creates for its owner's devices through the relay.
Spaces a machine set up with cua host setup --share both creates for its owner's enrolled devices: settings, capacity, create and delete. The host's cua-spacesd forwards each call to its cua daemon. What a host reports for placement is on Host capacity.
Source: libs/cua/proto/cua/env/v1/host.proto.
HostSpacesService#
cua.env.v1.HostSpacesService
Spaces a host provides: a machine set up with cua host setup --share both creates Spaces (macOS VMs with Lume on a Mac, Linux
containers with Docker, whatever else runs locally) for the owner's
enrolled devices and the accounts it is shared with, through the relay.
The host's cua-spacesd serves this service only in join mode with a host
policy, and only to relay-asserted editors (the owner, or an account on
the machine's allowlist) and the local token holder: a view-only share is
refused. It forwards each call to the host's cua daemon, which creates and
deletes the Spaces with its own runtimes, attaches each new Space to the
relay as its own machine, and records every create and delete in the
host's hash-chained audit log (~/.cua/host/spaces-audit.jsonl).
With share_desktop off, a relayed caller reaches only this service and
GetCapabilities / Health, never the host's desktop or files.
A host set up with cua host setup --direct <ip:port> --share both
also serves it on its direct listener, to the holder of its env token,
by default only from loopback, Tailscale and private LAN addresses. A
Space created with direct is reached on a TCP port the host forwards
to it (HostSpace.direct_port).
HostSpacesService.GetHostSpaces#
/cua.env.v1.HostSpacesService/GetHostSpaces, unary: GetHostSpacesRequest to GetHostSpacesResponse.
This host's settings, capacity, the Spaces it provides to the caller (every one for the owner) and, for the owner, its recent audit.
HostSpacesService.CreateHostSpace#
/cua.env.v1.HostSpacesService/CreateHostSpace, unary: CreateHostSpaceRequest to CreateHostSpaceResponse.
Creates one Space on this host and attaches it to the relay as the
machine the caller registered for it (attach). Fails with
RESOURCE_EXHAUSTED when the host is at capacity (two macOS VMs per
Mac, by Apple's license, or the host's max_spaces).
HostSpacesService.DeleteHostSpace#
/cua.env.v1.HostSpacesService/DeleteHostSpace, unary: DeleteHostSpaceRequest to DeleteHostSpaceResponse.
Deletes a Space this host provides (its sandbox and its relay machine). The owner deletes any; another account only the ones it created.
HostSpacesService.CancelHostSpace#
/cua.env.v1.HostSpacesService/CancelHostSpace, unary: CancelHostSpaceRequest to CancelHostSpaceResponse.
Cancels a CreateHostSpace the caller started, by the relay machine
it registered for it (attach.machine_id): the create stops (an image
download, a boot) and what it made is removed; one that already
finished is deleted, since the caller gave up on it. Idempotent.
HostSpacesService.SetHostSpacePower#
/cua.env.v1.HostSpacesService/SetHostSpacePower, unary: SetHostSpacePowerRequest to SetHostSpacePowerResponse.
Turns a Space this host provides off or on. Off stops it with its disk kept, freeing the host's memory (a runtime that cannot start it again, QEMU, suspends it instead); on boots it again and re-attaches it to its relay machine. The owner powers any; another account only the ones it created.
HostSpacesService.SetHostWarm#
/cua.env.v1.HostSpacesService/SetHostWarm, unary: SetHostWarmRequest to SetHostWarmResponse.
Keeps Spaces of one shape ready for a prewarm (see warm.proto).
HostSpacesService.DeleteCloudSpace#
/cua.env.v1.HostSpacesService/DeleteCloudSpace, unary: DeleteCloudSpaceRequest to DeleteCloudSpaceResponse.
Deletes a Space in the owner's own cloud that this machine created (an AWS, Google Cloud, Hetzner or Modal sandbox, by the relay machine it joined as): its cloud resources, through this machine's ownership records, and its relay machine. Only the owner. Lets another of the owner's devices delete it permanently without the cloud's credentials. Works whether or not this machine provides Spaces.
HostSpacesService.SetHostSpaceEgress#
/cua.env.v1.HostSpacesService/SetHostSpaceEgress, unary: SetHostSpaceEgressRequest to SetHostSpaceEgressResponse.
Replaces the egress policy of a Space this host provides; the host enforces it outside the guest, at once. The owner sets any; another account only on the ones it created.
HostSpacesService.DiagnoseHost#
/cua.env.v1.HostSpacesService/DiagnoseHost, unary: DiagnoseHostRequest to DiagnoseHostResponse.
This machine's health as a place to run Spaces, checked by its cua
daemon (the process that runs them): Local Network access and the app
macOS holds responsible for it, free disk, virtualization, memory, and
the permissions sharing its desktop needs. Read-only and bounded (a
few seconds). Only the owner. Works whether or not this machine
provides Spaces. The Machines page shows the warnings and failures as
the machine's issues; cua doctor --machine prints them.
HostJobsService#
cua.env.v1.HostJobsService
Jobs on a host: each runs once in a fresh Space that the host creates,
runs the command in, and deletes. A host set up to provide Spaces serves
this service to the same callers as HostSpacesService (the owner, its
editors, and the env token holder of a direct host), through its
cua-spacesd, which forwards each call to the host's cua daemon.
The host keeps a durable ledger of the jobs it accepted, keyed by job id,
so delivering a job again never runs it twice on this host, and a
scheduler that restarts reads back what happened. Each job carries an
attempt number that fences older deliveries: a host refuses an attempt
lower than one it has seen for the job (stale), and a newer attempt
cancels an older one still running here.
HostJobsService.RunHostJobs#
/cua.env.v1.HostJobsService/RunHostJobs, unary: RunHostJobsRequest to RunHostJobsResponse.
Starts jobs (a batch): each is accepted (it runs now), or refused when the host has no room for it (the scheduler places it elsewhere). Idempotent per job id and attempt.
HostJobsService.GetHostJob#
/cua.env.v1.HostJobsService/GetHostJob, unary: GetHostJobRequest to GetHostJobResponse.
One job's record on this host.
HostJobsService.ListHostJobs#
/cua.env.v1.HostJobsService/ListHostJobs, unary: ListHostJobsRequest to ListHostJobsResponse.
The jobs that changed after a ledger sequence number, oldest first:
a change feed. With wait_ms the host holds the call until something
changes or the wait ends (a long poll), so a scheduler hears about
completions at once; the call is also the node's heartbeat.
HostJobsService.CancelHostJob#
/cua.env.v1.HostJobsService/CancelHostJob, unary: CancelHostJobRequest to CancelHostJobResponse.
Stops a job (its Space is deleted) and fences the attempt: a delivery of that attempt arriving later is refused. Idempotent; a job this host never saw is recorded as canceled for that attempt.
HostThreadService#
cua.env.v1.HostThreadService
A Space's thread and its agent members, for people on other devices. The thread of a Space a host provides lives in the host's cua daemon (its owner); a person the host is shared with reads it, posts to it and @mentions its agents through this service, from their own device.
The host's cua-spacesd serves it while the host provides Spaces (feature
host_thread), to relay-verified callers including view-only shares
(they read only), and to the local token holder (the owner). It forwards
each call to the host's cua daemon with the verified caller, which it
sets itself (a caller a client sent is never forwarded). The daemon runs
the tool as that caller: the thread records them as the author, and the
Space's roles and each agent's rights decide what they may do. Only the
thread and agent member tools are served, and only for the Spaces the
host provides.
| RPC | Request | Response | Kind |
|---|---|---|---|
CallThreadTool | CallThreadToolRequest | CallThreadToolResponse | unary |
HostThreadService.CallThreadTool#
/cua.env.v1.HostThreadService/CallThreadTool, unary: CallThreadToolRequest to CallThreadToolResponse.
Runs one thread or agent member tool (thread_read, thread_post,
thread_inbox, thread_claim, thread_reply, agent_members,
agent_send, and agent_message, agent_status, agent_events,
agent_interrupt, agent_stop by a member's name) on a Space this
host provides, as the verified caller. A tool error (a refusal
included) is a result with is_error, as the MCP server answers it.
Types in cua/env/v1/host.proto#
DiagnoseHostRequest#
Request for HostSpacesService.DiagnoseHost.
| Field | # | Type | Description |
|---|---|---|---|
machine | 1 | string | Another of the owner's machines to check instead, by id or name: the cua daemon asks that machine's own DiagnoseHost over the relay (or the mesh, or its direct address). Only for a call made on this machine itself; a host's cua-spacesd clears it on calls it forwards. Empty: this machine. |
DiagnoseHostResponse#
Response for HostSpacesService.DiagnoseHost.
| Field | # | Type | Description |
|---|---|---|---|
report | 1 | DiagnoseReport | The checks (ids machine.*), in the report schema cua doctor uses. |
cua_version | 2 | string | The Cua version of the daemon that ran them. |
os | 3 | string | The machine's operating system (macos, linux, windows). |
HostSpacesSettings#
The host's two independent settings and its limits.
| Field | # | Type | Description |
|---|---|---|---|
share_desktop | 1 | bool | The host's own desktop is a Space too (screen, input, shell, files). |
provide_spaces | 2 | bool | The host accepts Space create, list and delete requests. |
max_spaces | 3 | uint32 | At most this many provided Spaces at once (0: no limit besides the runtimes' own). |
max_macos_vms | 4 | uint32 | At most this many macOS VMs at once on this Mac (Apple's license allows two; 0 on a host that cannot run macOS VMs). |
max_memory_gb | 5 | uint32 | The Spaces other machines create here may use at most this much memory in total, in GB (0: no limit). |
max_disk_gb | 6 | uint32 | The Spaces other machines create here may use at most this much disk in total, in GB (0: no limit). |
max_run_minutes | 7 | uint32 | A Space created here by another machine stops after running this many minutes (0: no limit). |
HostSpacesCapacity#
How much of one limit is in use.
| Field | # | Type | Description |
|---|---|---|---|
resource | 1 | string | spaces (every provided Space), macos_vms (macOS VMs on this Mac, provided or not), memory_gb or disk_gb (what the provided Spaces were given, in GB). |
used | 2 | uint32 | In use now. |
limit | 3 | uint32 | The limit (0: none). |
reason | 4 | string | Why the limit exists, for people ("Apple's macOS license allows two macOS VMs per Mac"). |
HostSpace#
A Space this host provides.
| Field | # | Type | Description |
|---|---|---|---|
relay_machine | 1 | string | The relay machine the Space is reached as (relay:<machine>). |
local_space | 2 | string | The Space on the host (local:<name>). |
name | 3 | string | Display name. |
image | 4 | string | The image it runs, as requested. |
os | 5 | string | Guest OS family: linux, macos or windows (empty when unknown). |
kind | 6 | string | container or vm (empty when unknown). |
runtime | 7 | string | Engine: lume, runc, gvisor, qemu (empty when unknown). |
created_by | 8 | string | The account that created it (id, or email when the relay shares it). |
created_at_ms | 9 | int64 | When it was created (Unix milliseconds). |
direct_port | 10 | uint32 | A Space created with CreateHostSpaceRequest.direct: the TCP port on the host's own address that the host forwards to the Space's cua-spacesd (direct:<host address>:<direct_port>). 0 for a Space reached through the relay. |
direct_token | 11 | string | The Space's cua-spacesd token, set only in the CreateHostSpace response of a direct Space (the caller stores it like any direct Space's token). Empty otherwise. |
egress_enforced | 20 | string | Where its egress policy is enforced: "host"; empty without one. |
network | 21 | string | The guest network the host applied, set only in the CreateHostSpace response: none, or empty for the default. A host older than CreateHostSpaceRequest.network leaves it empty. |
disk | 22 | HostSpaceDisk | What the Space takes on the host's disk, set only when GetHostSpacesRequest.disk asked for it and the host could measure it. A host that predates it leaves it unset. |
HostSpaceDisk#
What a Space takes on its host's disk (numbers only), as the host's resource sampler measured it: at most a few minutes old.
| Field | # | Type | Description |
|---|---|---|---|
bytes | 1 | optional uint64 | Bytes only this Space holds: what deleting it frees. Unset when they could not be measured. |
allocated | 2 | uint64 | Blocks its files occupy, clones counted in full: an upper bound. |
shares_space | 3 | bool | Part of it is shared with other copies. |
GetHostSpacesRequest#
Request for HostSpacesService.GetHostSpaces.
| Field | # | Type | Description |
|---|---|---|---|
disk | 1 | bool | Also say what each listed Space takes on this host's disk (HostSpace.disk). The host measures each Space at most every few minutes and answers from that, so asking costs it little; another of your devices asks while a window shows the sizes. |
GetHostSpacesResponse#
Response for HostSpacesService.GetHostSpaces.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | This host's display name. |
os | 2 | string | The host's operating system (macos, linux, windows). |
settings | 3 | HostSpacesSettings | Settings and limits. |
capacity | 4 | repeated HostSpacesCapacity | Current use of each limit. |
spaces | 5 | repeated HostSpace | Spaces this host provides: every one for the owner, the caller's own otherwise. |
audit | 6 | repeated HostSpacesAuditEvent | The most recent audit events, newest first (the owner only). |
images | 7 | repeated string | Image aliases this host resolves (macos, linux, ...), for clients to offer. |
creating | 8 | repeated HostSpaceCreating | The creates this host is running now (CreateHostSpace calls that have not returned), each with what it is doing: every one for the owner, the caller's own otherwise. A client polls this while its create runs, to show the download and the boot. Empty from a host that predates it. |
node | 9 | HostNodeStatus | What a scheduler needs to place work here: capacity, what runs, the host's epoch and clock. Unset from hosts that predate it. |
CreateHostSpaceRequest#
Request for HostSpacesService.CreateHostSpace.
| Field | # | Type | Description |
|---|---|---|---|
image | 1 | string | Image: a registry reference or an alias (macos, macos:26, linux). Empty uses the canonical Linux image. |
kind | 2 | string | "auto" (empty), "container" or "vm". |
runtime | 3 | string | "auto" (empty) or a runtime this host offers ("lume", "runc", ...). |
name | 4 | string | Name on the host. Empty generates space-<hex>. |
cpus | 5 | uint32 | vCPUs (0: the default). |
memory_mb | 6 | uint64 | Memory in MiB (0: the default). |
disk_gb | 7 | uint32 | Disk in GiB for a VM (0: the image's). |
attach | 8 | AttachRelayRequest | The relay machine the caller registered for this Space: the host attaches the new Space's driver to it (SystemService.AttachRelay), so the Space is reached as relay:<machine_id> and the host never holds an account credential. Empty when direct is set. |
direct | 9 | bool | Create the Space without the relay (a host set up with --direct): it is reached at the host's address on HostSpace.direct_port, with HostSpace.direct_token. attach must be empty. |
create_key | 10 | string | A key of the caller's for this create, under which GetHostSpacesResponse.creating lists its progress (a direct create has no relay machine to name it). Empty: attach.machine_id. |
network | 12 | string | Guest network: none, or empty for the default. |
fork_source | 11 | string | Fork this checkpoint instead of creating from image. |
headless | 14 | bool | No desktop (cua.daemon.v1.CreateSpaceRequest.headless). |
egress | 19 | HostEgressPolicy | Egress policy, enforced by the host from the guest's first instruction. A host that does not enforce it leaves HostSpace.egress_enforced empty. |
network_settings | 20 | HostNetworkSettings | Network settings, compiled and enforced by the host. Unset: what network and egress say. |
routed | 13 | bool | Reached through this host's channel (no relay machine of its own). |
env | 15 | map of string to string | Guest environment; the host's driver settings win on a clash. |
gpu | 16 | string | A GPU option of the host's runtime; empty: none. |
tree | 21 | string | The tree this Space joins on the host, when the caller made it a child of a Space on its own machine: the tree's id, qualified with the id of the machine it started on (<machine>/local:<name>). The host keeps the Space in that tree, so the tree's members on both machines reach each other. Empty: a tree of its own. |
CreateHostSpaceResponse#
Response for HostSpacesService.CreateHostSpace.
| Field | # | Type | Description |
|---|---|---|---|
space | 1 | HostSpace | The new Space. |
DeleteHostSpaceRequest#
Request for HostSpacesService.DeleteHostSpace.
| Field | # | Type | Description |
|---|---|---|---|
space | 1 | string | The relay machine of the Space (or its local:<name> on the host). |
DeleteHostSpaceResponse#
Response for HostSpacesService.DeleteHostSpace.
| Field | # | Type | Description |
|---|---|---|---|
message | 1 | string | What happened, for people. |
DeleteCloudSpaceRequest#
Request for HostSpacesService.DeleteCloudSpace.
| Field | # | Type | Description |
|---|---|---|---|
space | 1 | string | The relay machine the cloud Space joined as. |
DeleteCloudSpaceResponse#
Response for HostSpacesService.DeleteCloudSpace.
| Field | # | Type | Description |
|---|---|---|---|
message | 1 | string | What was deleted, for people. |
CancelHostSpaceRequest#
Request for HostSpacesService.CancelHostSpace.
| Field | # | Type | Description |
|---|---|---|---|
space | 1 | string | The relay machine the caller registered for the Space. |
CancelHostSpaceResponse#
Response for HostSpacesService.CancelHostSpace.
| Field | # | Type | Description |
|---|---|---|---|
message | 1 | string | What happened, for people: what was removed and what stays. |
SetHostSpacePowerRequest#
Request for HostSpacesService.SetHostSpacePower.
| Field | # | Type | Description |
|---|---|---|---|
space | 1 | string | The relay machine of the Space (or its local:<name> on the host). |
on | 2 | bool | True turns it on, false off. |
SetHostSpacePowerResponse#
Response for HostSpacesService.SetHostSpacePower.
| Field | # | Type | Description |
|---|---|---|---|
state | 1 | string | "running", "suspended" or "stopped": the state it is in now. |
power | 2 | string | How it turns off: "stop" or "suspend". |
message | 3 | string | What happened, for people. |
HostJobSpec#
What a job runs.
| Field | # | Type | Description |
|---|---|---|---|
job_id | 1 | string | Unique id, chosen by the scheduler (the idempotency key on the host). |
attempt | 2 | uint32 | Delivery attempt, from 1. A higher attempt fences lower ones. |
image | 3 | string | Image of the job's Space (a reference or an alias); empty: the canonical Linux image. |
kind | 4 | string | "auto" (empty: the host picks: its own Space when it is dedicated, a macOS VM for a macOS image, else a container), "container", "vm", "microvm", or "machine" (a dedicated host's own Space, on hosts that report HostNodeStatus.dedicated). "process" is refused. |
runtime | 5 | string | "auto" (empty) or a runtime this host offers. |
millicpus | 6 | uint32 | CPU reserved for the job, in thousandths (0: 1000). |
memory_mb | 7 | uint64 | Memory reserved, in MiB (0: 1024). |
argv | 8 | repeated string | The command, run without a shell (["sh", "-c", "..."] for one). |
env | 9 | map of string to string | Its environment. |
timeout_secs | 10 | uint32 | Seconds the command may run (0: 600). The Space is deleted either way. |
result_path | 11 | string | A file in the Space to return as the job's result after the command ends (bounded by max_output_bytes). Empty: none. |
max_output_bytes | 12 | uint32 | Bytes of stdout, stderr and the result kept, each (the tail; 0: 65536). |
bundle | 13 | bytes | Files the job runs with: a gzip tar (at most 1 MiB) unpacked into the job's work directory (mounted into its Space; its working directory, CUA_JOB_DIR) before the command starts. Empty: none. |
run_id | 14 | string | The run the job belongs to. A run keeps a data directory on each host (CUA_JOB_DATA, mounted into its members' Spaces) that every attempt of the run there shares (checkpoints), kept 7 days after its last attempt ended. |
accelerator | 15 | string | The accelerator asked for (gpu, apple, nvidia; empty: none): the job's Space gets that GPU. |
services | 16 | repeated string | Host services the member reaches on its own loopback for its lifetime (for example compat:e2b). A host refuses a name it serves no provider for. |
RunHostJobsRequest#
Request for HostJobsService.RunHostJobs.
| Field | # | Type | Description |
|---|---|---|---|
jobs | 1 | repeated HostJobSpec | The jobs, at most 512 per call. |
scheduler | 2 | string | The scheduler's id, recorded with each job for people. |
HostJobAck#
What a host did with one delivered job.
| Field | # | Type | Description |
|---|---|---|---|
job_id | 1 | string | The job. |
attempt | 2 | uint32 | The attempt delivered. |
outcome | 3 | string | accepted (it runs now), duplicate (this attempt was delivered before: job is its record), rejected (no room or not allowed: place it elsewhere) or stale (a newer attempt was seen, or this one was canceled). |
reason | 4 | string | Why, for rejected and stale. |
job | 5 | HostJob | The job's record on this host, for accepted and duplicate. |
RunHostJobsResponse#
Response for HostJobsService.RunHostJobs.
| Field | # | Type | Description |
|---|---|---|---|
acks | 1 | repeated HostJobAck | One per delivered job, in order. |
node | 2 | HostNodeStatus | The host after the batch. |
HostJob#
A job's record on a host.
| Field | # | Type | Description |
|---|---|---|---|
job_id | 1 | string | The job. |
attempt | 2 | uint32 | The newest attempt the host has seen for it. |
state | 3 | string | running, succeeded (exit 0), failed (the command exited non-zero or ran out of time), error (the host could not run it: the Space did not start, the daemon restarted mid-job; running it again may work) or canceled. |
exit_code | 4 | optional int32 | The command's exit code (succeeded and failed). |
timed_out | 5 | bool | The command ran out of time. |
stdout | 6 | bytes | The tail of its stdout. |
stderr | 7 | bytes | The tail of its stderr. |
result | 8 | bytes | The result file (HostJobSpec.result_path). |
error | 9 | string | What went wrong, for error, canceled and a missing result file. |
seq | 10 | uint64 | Ledger sequence number of this change. |
space | 11 | string | The Space it ran in (local:<name>). |
accepted_at_ms | 12 | int64 | When the host accepted it (Unix milliseconds, host clock). |
finished_at_ms | 13 | int64 | When it ended (0 while running). |
create_ms | 14 | uint32 | Milliseconds to create its Space. |
run_ms | 15 | uint32 | Milliseconds the command ran. |
delete_ms | 16 | uint32 | Milliseconds to delete its Space. |
truncated | 17 | bool | stdout, stderr or the result were cut to their tail. |
GetHostJobRequest#
Request for HostJobsService.GetHostJob.
| Field | # | Type | Description |
|---|---|---|---|
job_id | 1 | string | The job. |
output_from | 2 | optional uint64 | Also return the job's live output (its command's merged stdout and stderr, output.log) from this byte offset: output_chunk and output_size in the answer, while it runs and after it ended. |
GetHostJobResponse#
Response for HostJobsService.GetHostJob.
| Field | # | Type | Description |
|---|---|---|---|
job | 1 | HostJob | Its record (the call fails with NOT_FOUND when the host never saw it). |
node | 2 | HostNodeStatus | The host now. |
output_chunk | 3 | bytes | With output_from: the job's output from that offset, at most 256 KiB (empty when there is nothing new, or for a job that keeps no output log). |
output_size | 4 | uint64 | With output_from: the size of the job's output so far (read the next chunk from output_from + len(output_chunk)). |
ListHostJobsRequest#
Request for HostJobsService.ListHostJobs.
| Field | # | Type | Description |
|---|---|---|---|
after_seq | 1 | uint64 | Changes after this ledger sequence number (0: from the start). |
limit | 2 | uint32 | At most this many (0: 1000). |
wait_ms | 3 | uint32 | Hold the call up to this long while nothing changed (0: answer now; at most 30000). |
without_output | 4 | bool | Leave out stdout, stderr and the result. |
release | 5 | repeated HostJobRef | Gang members whose start barrier the scheduler releases: every member of their attempt reported ready (ListHostJobsResponse.progress). The host lets each go (CUA_BARRIER/go); sending one again is harmless. |
HostJobRef#
One attempt of one job.
| Field | # | Type | Description |
|---|---|---|---|
job_id | 1 | string | The job. |
attempt | 2 | uint32 | Its attempt. |
HostJobProgress#
What a running job reported about itself (its start barrier and its progress: heartbeats from the cua jobs runtime, else its output).
| Field | # | Type | Description |
|---|---|---|---|
job_id | 1 | string | The job. |
attempt | 2 | uint32 | Its attempt. |
ready | 3 | bool | It is ready to start (its environment is up) and waits at its start barrier. |
released | 4 | bool | Its start barrier was released. |
last_progress_ms | 5 | int64 | When it last reported progress, by the host's clock (Unix ms; 0: never). Compare with HostNodeStatus.host_time_ms. |
step | 6 | int64 | The step it last reported (-1: none). |
ListHostJobsResponse#
Response for HostJobsService.ListHostJobs.
| Field | # | Type | Description |
|---|---|---|---|
jobs | 1 | repeated HostJob | The latest record of each job that changed, by sequence number. |
next_seq | 2 | uint64 | Pass as after_seq next time. |
more | 3 | bool | More changes are waiting (the limit cut the answer). |
node | 4 | HostNodeStatus | The host now: the heartbeat. |
progress | 5 | repeated HostJobProgress | Each running job's start barrier and progress (only jobs that report them). |
CancelHostJobRequest#
Request for HostJobsService.CancelHostJob.
| Field | # | Type | Description |
|---|---|---|---|
job_id | 1 | string | The job. |
attempt | 2 | uint32 | Cancel this attempt and every lower one (0: whatever runs). |
reason | 3 | string | Why, for the record. |
CancelHostJobResponse#
Response for HostJobsService.CancelHostJob.
| Field | # | Type | Description |
|---|---|---|---|
job | 1 | HostJob | The job's record after the cancel. |
HostSpacesAuditEvent#
One line of the host's Spaces audit log.
| Field | # | Type | Description |
|---|---|---|---|
ts_ms | 1 | int64 | Unix milliseconds. |
action | 2 | string | create, delete, refused, or config. |
who | 3 | string | Who: an account (name <email> (id)), or local for this machine. |
space | 4 | string | The relay machine or Space the event is about. |
detail | 5 | string | Detail for people. |
HostSpaceCreating#
A create a host is running, and what it is doing now. The progress
fields are those of cua.daemon.v1.CreateSpaceProgress.
| Field | # | Type | Description |
|---|---|---|---|
key | 1 | string | The create's key: CreateHostSpaceRequest.create_key, else the relay machine it attaches to (attach.machine_id). |
phase | 2 | string | "preparing", "pulling", "creating", "booting", "waiting_for_services", "connecting" or "ready", in that order. |
fraction | 3 | optional double | How far through the phase, 0.0 to 1.0, when its size is known (an image pull). |
detail | 4 | string | One short line, for example the image being pulled. |
bytes_done | 5 | optional uint64 | Bytes downloaded so far, when the step counts them (an image pull). |
bytes_total | 6 | optional uint64 | Bytes the download has in all. |
bytes_per_second | 7 | optional double | Smoothed download rate, bytes per second. |
CallThreadToolRequest#
Request for HostThreadService.CallThreadTool.
| Field | # | Type | Description |
|---|---|---|---|
space | 1 | string | The Space: relay:<machine> (or <machine>), as other devices know it, or its id on the host (local:<name>). |
name | 2 | string | The tool's name (a former name works too). |
arguments_json | 3 | string | The tool's arguments as a JSON object; its space is replaced by the host's id of space. |
CallThreadToolResponse#
Response for HostThreadService.CallThreadTool.
| Field | # | Type | Description |
|---|---|---|---|
content_json | 1 | string | MCP content parts, as a JSON array. |
structured_json | 2 | string | MCP structured content as JSON (empty: none). |
is_error | 3 | bool | The tool failed (a refusal, a bad argument): the content says why. |
meta_json | 4 | string | MCP _meta as JSON (empty: none). |
ThreadView#
What a person was looking at in a Space as they posted to its thread: the
Space's desktop, or one of its windows. thread_post takes it as view,
and every entry and task that has one returns it (thread_read,
thread_inbox), as JSON with these field names (CallThreadTool's
arguments_json and structured_json). Typed clients read it as this
message; the daemon's thread::ViewContext is held to it by a test.
| Field | # | Type | Description |
|---|---|---|---|
kind | 1 | string | desktop or window. |
app | 2 | string | The window's app ("Firefox"); empty for the desktop. |
title | 3 | string | The window's title ("Pull requests"), at most 256 characters. |
window_id | 4 | string | The window's id in the Space, as computer_window_list gives it. |