Kibotos
kibo commands

kibo workspace

Create, run and change Workspaces. This page lists the usage, examples, and flags of kibo workspace and its subcommands, generated from the kibo source code.

Every command on this page also takes the global flags --endpoint, --json, and --timeout. See CLI reference for kibo.

Also available as kibo ws.

Subcommands:

kibo workspace annotations

Replace or clear the annotations of a Workspace.

Subcommands:

kibo workspace annotations clear

Replaces the annotations of a Workspace with an empty map.

Submitting the annotations already stored succeeds without changing anything. See kibo help command-ids for --command-id and --expected-revision.

kibo workspace annotations clear <workspace-id> [flags]
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
--expected-revision <revision>annotations revision the command is submitted against; read from the server when omitted

kibo workspace annotations set

Replaces the complete annotations of a Workspace with the given key=value pairs. Keys not named are removed; nothing is merged. Use "workspace annotations clear" to remove every annotation.

Submitting the annotations already stored succeeds without changing anything. See kibo help command-ids for --command-id and --expected-revision.

kibo workspace annotations set <workspace-id> <key=value>... [flags]
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
--expected-revision <revision>annotations revision the command is submitted against; read from the server when omitted

kibo workspace cleanup-status

Reads one release observation of a Workspace: an overall state plus one entry per part of its execution, saying whether that part is released, still present, still pending, isolated or unknown, and which source the entry was read from.

A release that is still owed is reported with the time it began being owed. That time is a diagnostic, not a deadline and not a failure: the release is still being retried, and the entries say which parts are still held. An observation that could not be completed is reported as incomplete instead of being read as released.

kibo workspace cleanup-status <workspace-id> [flags]

kibo workspace command

Inspect a persisted Workspace command.

Subcommands:

kibo workspace command get

Get the original command status and result.

kibo workspace command get <workspace-id> <command-id> [flags]

kibo workspace create

Create a Workspace.

kibo workspace create [flags]

Examples:

kibo workspace create --template kibotos-coding
kibo workspace create --template kibotos-coding --cpu 2 --memory 4G --disk 20G
kibo workspace create --template kibotos-coding --expires-in 8h --network public-internet
kibo workspace create --template kibotos-coding --network public-internet --deny 0.0.0.0/0 --allow 203.0.113.0/24
kibo workspace create --template kibotos-coding --network public-internet --egress egr-01k6… --egress-destination 0.0.0.0/0 --egress-destination ::/0
ws=$(kibo workspace create --template kibotos-coding -q)
FlagDefaultDescription
--allow <address-or-cidr>put this address-or-cidr in the allow list (repeatable, public-internet only)
--annotation <key=value>annotation key=value; stored as given and never selectable (repeatable)
--capability <key=value>node capability the Workspace requires (repeatable)
--command-id <key>idempotency key for this change; see kibo help command-ids
--cpu <cpus>1CPU the Workspace requests, in cpus: 2, 0.5 or 1500m
--delete-with-workspacedelete the Volume together with the Workspace (default: yes for a new Volume, no with --volume)
--deny <address-or-cidr>put this address-or-cidr in the deny list (repeatable, public-internet only)
--disk <size>capacity of the writable root filesystem, a size such as 20G; the storage default when omitted
--egress <id>send the --egress-destination entries through the Egress with this id (public-internet only)
--egress-destination <address-or-cidr>send connections to this address-or-cidr through the Egress (repeatable)
--expiration-action <action>stopaction at expiration: stop or delete
--expires-in <duration>stop or delete the Workspace this long after the command is accepted, such as 8h
--label <key=value>label key=value; selectable with list --label (repeatable)
--memory <size>256MiBmemory the Workspace requests, a size such as 4G or 512MiB
--mount-path <path>/dataabsolute guest path the Volume is mounted at
--network <policy>deny-allnetwork policy: deny-all or public-internet
--no-volumecreate the Workspace without a Volume; no path then survives a stop
--no-waitreturn once the server accepts the command instead of waiting for it to finish
--node <id>place the Workspace on this node id and no other, through the Operator API
-q, --quietprint only the IDs of the resources in the result
--resolver <id>forward the guest's DNS queries to the Resolver with this id (public-internet only); needs --resolver-path
--resolver-path <path>path the queries of --resolver leave by: direct from the host, or egress:<egress-id> through an Egress of the same policy
--template <id>RequiredTemplate the Workspace is created from, by id
--template-revision <revision>exact Template revision; the Template's default when omitted
--volume <id>bind the existing Volume with this id instead of creating one
--wait-timeout <duration>1hhow long to wait for the command to finish; running out does not cancel it

kibo workspace delete

Deletes a Workspace and waits until it is DELETED. A Volume bound with delete-with-workspace is deleted too; any other bound Volume is kept. The command asks for confirmation and says which applies.

See kibo help command-ids for --command-id and --expected-expiration-revision.

kibo workspace delete <workspace-id> [flags]

Also available as kibo workspace rm.

Examples:

kibo workspace delete ws-01k6…
kibo workspace delete ws-01k6… --yes
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
--expected-expiration-revision <revision>expiration revision the command is submitted against; read from the server when omitted
--no-waitreturn once the server accepts the command instead of waiting for it to finish
-q, --quietprint only the IDs of the resources in the result
--wait-timeout <duration>1hhow long to wait for the command to finish; running out does not cancel it
-y, --yesdo not ask for confirmation

kibo workspace desktop

View the Workspace desktop, capture it, and deliver pointer and keyboard input.

Subcommands:

kibo workspace desktop click

Click a pointer button, optionally at a screen position.

kibo workspace desktop click <workspace-id> [<x> <y>] [flags]
FlagDefaultDescription
--button <string>leftpointer button: left, middle or right
--count <uint>1number of clicks

kibo workspace desktop drag

Press a pointer button at one position, move to another and release.

kibo workspace desktop drag <workspace-id> <x1> <y1> <x2> <y2> [flags]
FlagDefaultDescription
--button <string>leftpointer button: left, middle or right

kibo workspace desktop key

Press one key chord, for example ctrl+l or enter.

kibo workspace desktop key <workspace-id> <chord> [flags]

kibo workspace desktop move

Move the pointer to a screen position.

kibo workspace desktop move <workspace-id> <x> <y> [flags]

kibo workspace desktop paste

Put text on the desktop clipboard and press the paste chord.

kibo workspace desktop paste <workspace-id> <text> [flags]
FlagDefaultDescription
--keys <string>ctrl+vpaste chord to press after writing the clipboard, for example ctrl+shift+v

kibo workspace desktop screenshot

Capture the Workspace desktop to a local image file.

kibo workspace desktop screenshot <workspace-id> <local-path|-> [flags]

kibo workspace desktop scroll

Scroll the pointer wheel, optionally at a screen position.

kibo workspace desktop scroll <workspace-id> [<x> <y>] [flags]
FlagDefaultDescription
--amount <uint>1number of wheel notches
--direction <string>Requiredscroll direction: up, down, left or right

kibo workspace desktop type

Type text on the Workspace desktop keyboard.

kibo workspace desktop type <workspace-id> <text> [flags]

kibo workspace desktop view

Serve a local browser view of the Workspace desktop.

kibo workspace desktop view <workspace-id> [flags]
FlagDefaultDescription
--listen-port <port>local loopback port to listen on; 0 picks a free one
--novnc-dir <directory>directory holding the fetched noVNC client (default: environment, system, then build cache)
--origin <string>exact allowed loopback HTTP origin (default: the viewer's own page)

kibo workspace exec

Runs a command in a running Workspace and streams its stdout and stderr. The command is not run through a shell: pass "sh -c '...'" for shell syntax.

kibo exits with the command's own exit status, 128 plus the signal that killed it, or 124 when --exec-timeout killed it. A failure of kibo itself, before or while following the command, exits 255.

kibo workspace exec <workspace-id> -- <command> [args...] [flags]

Examples:

kibo workspace exec ws-01k6… -- uname -a
kibo workspace exec ws-01k6… -e DEBUG=1 -- sh -c 'make test'
tar czf - src | kibo workspace exec -i ws-01k6… -- tar xzf - -C /data
FlagDefaultDescription
-e, --env <KEY=VALUE>environment variable for the command (repeatable)
--exec-timeout <duration>kill the command after this duration; no limit when omitted
-i, --stdinforward local stdin to the command
--user <account>guest account the operation runs as; defaults to the Template-declared account, "root" selects root
-w, --working-directory <directory>directory the command runs in; the home of the identity it runs as when omitted

kibo workspace expiration

Read, set or clear when a Workspace expires.

Subcommands:

kibo workspace expiration clear

Remove the expiration of a Workspace.

kibo workspace expiration clear <workspace-id> [flags]
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
--expected-revision <revision>expiration revision the command is submitted against; read from the server when omitted

kibo workspace expiration get

Show the Workspace and its expiration.

kibo workspace expiration get <workspace-id> [flags]

kibo workspace expiration set

Set when a Workspace expires and what happens then.

kibo workspace expiration set <workspace-id> [flags]
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
--expected-revision <revision>expiration revision the command is submitted against; read from the server when omitted
--expiration-action <action>stopaction at expiration: stop or delete
--expires-in <duration>Requiredstop or delete the Workspace this long after the command is accepted, such as 8h

kibo workspace file

Read and modify Workspace files.

Subcommands:

kibo workspace file delete

Delete a Workspace file.

kibo workspace file delete <workspace-id> <remote-path> [flags]

Also available as kibo workspace file rm.

FlagDefaultDescription
--user <account>guest account the operation runs as; defaults to the Template-declared account, "root" selects root
-y, --yesdo not ask for confirmation

kibo workspace file get

Download a Workspace file.

kibo workspace file get <workspace-id> <remote-path> <local-path|-> [flags]

Examples:

kibo workspace file get ws-01k6… /data/report.txt ./report.txt
kibo workspace file get ws-01k6… /data/report.txt - | less
FlagDefaultDescription
--mode <mode>file mode of the downloaded file, in octal; the existing file's or 0600 when omitted
--user <account>guest account the operation runs as; defaults to the Template-declared account, "root" selects root

kibo workspace file put

Upload a Workspace file.

kibo workspace file put <workspace-id> <local-path|-> <remote-path> [flags]

Examples:

kibo workspace file put ws-01k6… ./app.tar.gz /data/app.tar.gz
echo hello | kibo workspace file put ws-01k6… - /data/hello.txt
FlagDefaultDescription
--create-onlyfail if the remote file exists
--mode <mode>0600file mode, in octal
--user <account>guest account the operation runs as; defaults to the Template-declared account, "root" selects root

kibo workspace file watch

Prints one line for each change to an entry of the directory: CREATE, WRITE, CHMOD, REMOVE or RENAME, then the entry's path. Changes inside subdirectories are not reported. Several changes in a row may be reported once.

The watch runs until Ctrl-C. It also ends when the directory is removed or moved, when the Workspace stops, or when events arrive faster than they can be delivered; kibo then exits with a failure, and changes after that are not reported.

kibo workspace file watch <workspace-id> <remote-directory> [flags]

Examples:

kibo workspace file watch ws-01k6… /data
FlagDefaultDescription
--entryinclude the entry's metadata with each change that leaves the entry in place
--user <account>guest account the operation runs as; defaults to the Template-declared account, "root" selects root

kibo workspace get

Get a Workspace.

kibo workspace get <workspace-id> [flags]

Examples:

kibo workspace get ws-01k6…
kibo workspace get ws-01k6… --wide
FlagDefaultDescription
-q, --quietprint only the IDs of the resources in the result
--wideshow every field, including revisions and full digests

kibo workspace labels

Replace or clear the labels of a Workspace.

Subcommands:

kibo workspace labels clear

Replaces the labels of a Workspace with an empty map.

Submitting the labels already stored succeeds without changing anything. See kibo help command-ids for --command-id and --expected-revision.

kibo workspace labels clear <workspace-id> [flags]
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
--expected-revision <revision>labels revision the command is submitted against; read from the server when omitted

kibo workspace labels set

Replaces the complete labels of a Workspace with the given key=value pairs. Keys not named are removed; nothing is merged. Use "workspace labels clear" to remove every label.

Submitting the labels already stored succeeds without changing anything. See kibo help command-ids for --command-id and --expected-revision.

kibo workspace labels set <workspace-id> <key=value>... [flags]
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
--expected-revision <revision>labels revision the command is submitted against; read from the server when omitted

kibo workspace list

List Workspaces.

kibo workspace list [flags]

Also available as kibo workspace ls.

Examples:

kibo workspace list
kibo workspace list --state AVAILABLE --label team=infra
kibo workspace list --node node-a
kibo workspace list -L team --wide
FlagDefaultDescription
--allread every page, not only the first
--guest-unresponsiveonly list Workspaces whose guest has stopped answering its node
--include-deletedinclude deleted Workspaces
--instance <id>find the Workspace executing as this Instance id; takes no other filter
-l, --label <key=value>only list resources whose label key has exactly this value; every entry must match (repeatable)
-L, --label-column <key>show this label key as a column of its own (repeatable)
--node <id>list the Workspaces executing on this node id now; takes no other filter
--page-size <number>maximum number of results on a page
--page-token <token>token from the Next line of the previous page
-q, --quietprint only the IDs of the resources in the result
--state <state>only Workspaces in this state (repeatable)
--wideshow every field, including revisions and full digests

kibo workspace metrics

Reads a Workspace's resource readings from the deployment's metrics store, in buckets whose width ctrl chooses from the length of the range. Every execution the Workspace had, on whichever host, is one series.

Two sets of readings are shown side by side. Host readings are taken on the host, outside the guest: CPU cores in use, host memory, pressure and network rates. Guest readings come from inside the guest: CPU use, memory and disk as the guest sees them. Software running as root in the guest can alter them, and they are missing while the guest does not answer. Either set may have gaps.

How far back readings reach depends on the store's retention; the earliest time it still holds is printed with the readings.

kibo workspace metrics <workspace-id> [flags]

Examples:

kibo workspace metrics ws-0123
kibo workspace metrics ws-0123 --since 24h
kibo workspace metrics ws-0123 --start 2026-11-06T08:00:00Z --end 2026-11-06T09:00:00Z --json
FlagDefaultDescription
--end <string>end of the range, RFC 3339 (default now)
--since <duration>1hread this far back from now, unless --start is given
--start <string>start of the range, RFC 3339

kibo workspace move

Stops a Workspace and starts it on the node --node names, through the Operator API. There is no live migration: memory and processes are lost as in any stop.

Before stopping, kibo checks that the node reaches the storage pools of the Workspace's Volume and writable layer and that neither is being moved; if not, it changes nothing. A STOPPED or FAILED Workspace is only started. When the start fails after the stop, the Workspace stays stopped and the error says how to start it again.

With --command-id, the stop and the start use that ID followed by /stop and /start, so running the same command again goes on with whichever step did not finish.

kibo workspace move <workspace-id> [flags]

Examples:

kibo workspace move ws-01k6… --node node-b
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
--node <id>Requirednode id the Workspace is started on
--wait-timeout <duration>1hhow long to wait for the stop, and then for the start; running out does not cancel either

kibo workspace move-layer

Moves the writable layer of a stopped Workspace to another storage pool, as reported by kibo storage-pool list. The layer moves with its content, so the Workspace continues from it on its next start as before. The layer must have been placed by an earlier start, and after the move some node must still reach the layer and the Workspace's Volume together. Until the move settles, the Workspace does not start, and it is not deleted and its writable layer is not resized.

kibo waits until the move settles, sending the same command ID again while ctrl reports the copy still running. Ending the wait, by --wait-timeout or Ctrl-C, never cancels the move: run the command again with the same --command-id to wait for it. See kibo help command-ids.

kibo workspace move-layer <workspace-id> [flags]

Examples:

kibo workspace move-layer ws-01k6… --storage-pool shared
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
-q, --quietprint only the IDs of the resources in the result
--storage-pool <pool>Requiredstorage pool the writable layer moves to
--wait-timeout <duration>2hhow long to wait for the move to settle; running out does not cancel it

kibo workspace network

Set, add to or remove from the network policy of a Workspace.

Subcommands:

kibo workspace network add

Adds the entries given with --allow and --deny to the network policy of a Workspace and keeps everything else. An entry already in its list is reported and left where it is. The Workspace must already be public-internet; use kibo workspace network set to change the mode.

--egress with --egress-destination references an Egress when the policy references none; with an Egress already referenced, --egress-destination adds destinations to it, and --egress may repeat its ID. A policy references at most one Egress: replace it with kibo workspace network set.

--resolver with --resolver-path references a Resolver when the policy references none. A policy references at most one Resolver: replace it, or change its path, with kibo workspace network set.

kibo reads the current policy and submits the change against the revision it read. If the policy changed in between, nothing is changed and the command exits 13: read it again and decide. With --command-id, also pass the --expected-revision the first attempt read, so a retry submits the same change; see kibo help command-ids.

--allow and --deny take one address or CIDR each and are repeatable. Entries apply only to public-internet, at most 256 in the two lists together. A destination in the allow list is admitted even when the deny list also covers it, one only in the deny list is refused, and any other follows the mode. Each entry acts only on its own address family: 0.0.0.0/0 in the deny list leaves IPv6 open. Write an entry the way the server prints it: no host bits set in a CIDR, no leading zeros, IPv6 compressed and lowercase. Private, local and platform addresses stay refused whatever the lists say, and DNS queries to the link DNS address, the guest's only nameserver, are never narrowed.

A running Workspace applies the change before the command returns, and connections to a destination it now refuses are cut. A STOPPED Workspace applies it at its next start; any other state refuses the change.

--egress names an Egress (see kibo egress) and --egress-destination the addresses and CIDRs whose new TCP connections leave through it instead of leaving directly; each is repeatable, 1 to 256 destinations, written like --allow and --deny entries. A policy references at most one Egress, and only under public-internet. Destinations may name private ranges: forwarded connections leave from the Egress's network and skip the private, local and platform refusal, but the deny list still applies. UDP and ICMP never go through the Egress, and DNS only for a Resolver whose path names it; an ICMP echo request to a destination of the Egress is refused. When forwarding fails the connection is reset, never sent directly. The server must advertise workspace.network_policy.egress.socks5.

--resolver names a Resolver (see kibo resolver) the guest's DNS queries go to instead of the deployment resolvers, and --resolver-path how they leave: direct, from the host, or egress:<egress-id>, through the Egress the same policy references with --egress, which may then reach a resolver in the Egress's private network. The path has no default. A udp Resolver through an Egress needs kibo egress update --udp. A policy references at most one Resolver, and only under public-internet. When the Resolver cannot answer, queries fail with SERVFAIL and never fall back to the deployment resolvers. Changing the Resolver never rewrites the guest's nameserver. The server must advertise workspace.network_policy.resolver.

A change that moves connections between leaving directly and an Egress keeps the moved connections on their old path for --drain-seconds (default 600, at most 3600, 0 closes them at once). Connections the new mode, allow or deny list no longer admits end at once regardless.

kibo workspace network add <workspace-id> [flags]

Examples:

kibo workspace network add ws-01k6… --deny 198.51.100.7
kibo workspace network add ws-01k6… --egress egr-01k6… --egress-destination 10.0.0.0/8
kibo workspace network add ws-01k6… --resolver rsv-01k6… --resolver-path egress:egr-01k6…
FlagDefaultDescription
--allow <address-or-cidr>add this address-or-cidr to the allow list (repeatable, public-internet only)
--command-id <key>idempotency key for this change; see kibo help command-ids
--deny <address-or-cidr>add this address-or-cidr to the deny list (repeatable, public-internet only)
--drain-seconds <0>how long connections whose path the change moves keep running before they are closed, 0 to 3600; the server default of 600 when omitted
--egress <id>reference the Egress with this id, or name the one already referenced
--egress-destination <address-or-cidr>add this address-or-cidr to the destinations of the Egress (repeatable)
--expected-revision <revision>network policy revision the change is computed from and submitted against; read from the server when omitted
-q, --quietprint only the IDs of the resources in the result
--resolver <id>reference the Resolver with this id when the policy references none; needs --resolver-path
--resolver-path <path>path the queries of --resolver leave by: direct from the host, or egress:<egress-id> through an Egress of the same policy

kibo workspace network remove

Removes the entries given with --allow and --deny from the network policy of a Workspace and keeps everything else. An entry that is not in its list is reported and otherwise ignored. Removing an entry from the deny list, or adding one to the allow list, widens what the Workspace can reach.

--egress-destination removes destinations from the referenced Egress, which keeps at least one. --egress alone removes the reference to that Egress, and its destinations leave directly again. An Egress the Resolver's path names can only be removed together with --resolver.

--resolver removes the reference to that Resolver, and queries go to the deployment resolvers again.

kibo reads the current policy and submits the change against the revision it read. If the policy changed in between, nothing is changed and the command exits 13: read it again and decide. With --command-id, also pass the --expected-revision the first attempt read, so a retry submits the same change; see kibo help command-ids.

--allow and --deny take one address or CIDR each and are repeatable. Entries apply only to public-internet, at most 256 in the two lists together. A destination in the allow list is admitted even when the deny list also covers it, one only in the deny list is refused, and any other follows the mode. Each entry acts only on its own address family: 0.0.0.0/0 in the deny list leaves IPv6 open. Write an entry the way the server prints it: no host bits set in a CIDR, no leading zeros, IPv6 compressed and lowercase. Private, local and platform addresses stay refused whatever the lists say, and DNS queries to the link DNS address, the guest's only nameserver, are never narrowed.

A running Workspace applies the change before the command returns, and connections to a destination it now refuses are cut. A STOPPED Workspace applies it at its next start; any other state refuses the change.

--egress names an Egress (see kibo egress) and --egress-destination the addresses and CIDRs whose new TCP connections leave through it instead of leaving directly; each is repeatable, 1 to 256 destinations, written like --allow and --deny entries. A policy references at most one Egress, and only under public-internet. Destinations may name private ranges: forwarded connections leave from the Egress's network and skip the private, local and platform refusal, but the deny list still applies. UDP and ICMP never go through the Egress, and DNS only for a Resolver whose path names it; an ICMP echo request to a destination of the Egress is refused. When forwarding fails the connection is reset, never sent directly. The server must advertise workspace.network_policy.egress.socks5.

--resolver names a Resolver (see kibo resolver) the guest's DNS queries go to instead of the deployment resolvers, and --resolver-path how they leave: direct, from the host, or egress:<egress-id>, through the Egress the same policy references with --egress, which may then reach a resolver in the Egress's private network. The path has no default. A udp Resolver through an Egress needs kibo egress update --udp. A policy references at most one Resolver, and only under public-internet. When the Resolver cannot answer, queries fail with SERVFAIL and never fall back to the deployment resolvers. Changing the Resolver never rewrites the guest's nameserver. The server must advertise workspace.network_policy.resolver.

A change that moves connections between leaving directly and an Egress keeps the moved connections on their old path for --drain-seconds (default 600, at most 3600, 0 closes them at once). Connections the new mode, allow or deny list no longer admits end at once regardless.

kibo workspace network remove <workspace-id> [flags]

Examples:

kibo workspace network remove ws-01k6… --deny 198.51.100.7
kibo workspace network remove ws-01k6… --egress egr-01k6…
kibo workspace network remove ws-01k6… --resolver rsv-01k6…
FlagDefaultDescription
--allow <address-or-cidr>remove this address-or-cidr from the allow list (repeatable, public-internet only)
--command-id <key>idempotency key for this change; see kibo help command-ids
--deny <address-or-cidr>remove this address-or-cidr from the deny list (repeatable, public-internet only)
--drain-seconds <0>how long connections whose path the change moves keep running before they are closed, 0 to 3600; the server default of 600 when omitted
--egress <id>remove the reference to the Egress with this id when no --egress-destination is given
--egress-destination <address-or-cidr>remove this address-or-cidr from the destinations of the Egress (repeatable)
--expected-revision <revision>network policy revision the change is computed from and submitted against; read from the server when omitted
-q, --quietprint only the IDs of the resources in the result
--resolver <id>remove the reference to the Resolver with this id

kibo workspace network set

Replaces the whole network policy of a Workspace: the mode, deny-all or public-internet, the allow and deny lists given with --allow and --deny, and the Egress given with --egress and --egress-destination, and the Resolver given with --resolver and --resolver-path. A list not given ends up empty, without --egress the policy references no Egress, and without --resolver queries go to the deployment resolvers. To change some entries and keep the others, use kibo workspace network add or "remove".

--allow and --deny take one address or CIDR each and are repeatable. Entries apply only to public-internet, at most 256 in the two lists together. A destination in the allow list is admitted even when the deny list also covers it, one only in the deny list is refused, and any other follows the mode. Each entry acts only on its own address family: 0.0.0.0/0 in the deny list leaves IPv6 open. Write an entry the way the server prints it: no host bits set in a CIDR, no leading zeros, IPv6 compressed and lowercase. Private, local and platform addresses stay refused whatever the lists say, and DNS queries to the link DNS address, the guest's only nameserver, are never narrowed.

A running Workspace applies the change before the command returns, and connections to a destination it now refuses are cut. A STOPPED Workspace applies it at its next start; any other state refuses the change.

--egress names an Egress (see kibo egress) and --egress-destination the addresses and CIDRs whose new TCP connections leave through it instead of leaving directly; each is repeatable, 1 to 256 destinations, written like --allow and --deny entries. A policy references at most one Egress, and only under public-internet. Destinations may name private ranges: forwarded connections leave from the Egress's network and skip the private, local and platform refusal, but the deny list still applies. UDP and ICMP never go through the Egress, and DNS only for a Resolver whose path names it; an ICMP echo request to a destination of the Egress is refused. When forwarding fails the connection is reset, never sent directly. The server must advertise workspace.network_policy.egress.socks5.

--resolver names a Resolver (see kibo resolver) the guest's DNS queries go to instead of the deployment resolvers, and --resolver-path how they leave: direct, from the host, or egress:<egress-id>, through the Egress the same policy references with --egress, which may then reach a resolver in the Egress's private network. The path has no default. A udp Resolver through an Egress needs kibo egress update --udp. A policy references at most one Resolver, and only under public-internet. When the Resolver cannot answer, queries fail with SERVFAIL and never fall back to the deployment resolvers. Changing the Resolver never rewrites the guest's nameserver. The server must advertise workspace.network_policy.resolver.

A change that moves connections between leaving directly and an Egress keeps the moved connections on their old path for --drain-seconds (default 600, at most 3600, 0 closes them at once). Connections the new mode, allow or deny list no longer admits end at once regardless.

See kibo help command-ids for --command-id and --expected-revision.

kibo workspace network set <workspace-id> <mode> [flags]

Examples:

kibo workspace network set ws-01k6… public-internet
kibo workspace network set ws-01k6… public-internet --deny 0.0.0.0/0 --deny ::/0 --allow 203.0.113.0/24
kibo workspace network set ws-01k6… public-internet --egress egr-01k6… --egress-destination 0.0.0.0/0 --egress-destination ::/0
kibo workspace network set ws-01k6… public-internet --resolver rsv-01k6… --resolver-path direct
kibo workspace network set ws-01k6… deny-all
FlagDefaultDescription
--allow <address-or-cidr>put this address-or-cidr in the allow list (repeatable, public-internet only)
--command-id <key>idempotency key for this change; see kibo help command-ids
--deny <address-or-cidr>put this address-or-cidr in the deny list (repeatable, public-internet only)
--drain-seconds <0>how long connections whose path the change moves keep running before they are closed, 0 to 3600; the server default of 600 when omitted
--egress <id>send the --egress-destination entries through the Egress with this id (public-internet only)
--egress-destination <address-or-cidr>send connections to this address-or-cidr through the Egress (repeatable)
--expected-revision <revision>network policy revision the change is submitted against; not checked when omitted
-q, --quietprint only the IDs of the resources in the result
--resolver <id>forward the guest's DNS queries to the Resolver with this id (public-internet only); needs --resolver-path
--resolver-path <path>path the queries of --resolver leave by: direct from the host, or egress:<egress-id> through an Egress of the same policy

kibo workspace service

Connect to an exactly authorized Workspace service.

Subcommands:

kibo workspace service bridge

Serve a local WebSocket adapter and echo verification page.

kibo workspace service bridge <workspace-id> [flags]
FlagDefaultDescription
--family <family>ipv4TCP loopback address family: ipv4 or ipv6
--listen-port <port>local loopback port to listen on; 0 picks a free one
--origin <string>exact allowed loopback HTTP origin (default: the adapter's own page)
--tcp-port <port>guest loopback TCP port
--unix-path <path>managed guest Unix stream socket path

kibo workspace service echo

Verify a native binary echo connection.

kibo workspace service echo <workspace-id> [flags]
FlagDefaultDescription
--family <family>ipv4TCP loopback address family: ipv4 or ipv6
--tcp-port <port>guest loopback TCP port
--unix-path <path>managed guest Unix stream socket path

kibo workspace service forward

Forwards 127.0.0.1:<port> on this machine to one service inside the Workspace: a TCP port on its loopback address, or a managed Unix socket. Every local connection gets its own connection to the service, and bytes pass unchanged in both directions, so databases, SSH, VNC and other protocols work. By default the local port is the same as the TCP port inside the Workspace; a Unix socket needs --listen-port.

The forward does not look at the bytes, so any process on this machine can connect, and a web page can send requests to the port. For an HTTP service, use kibo workspace service http, which checks the Host. Connections that fail are reset and reported on stderr. Press Ctrl-C to stop it.

kibo workspace service forward <workspace-id> [flags]
FlagDefaultDescription
--family <family>ipv4loopback address family inside the Workspace: ipv4 or ipv6
--listen-port <port>local port on 127.0.0.1 (default: the --tcp-port value; 0 picks a free one)
--tcp-port <port>TCP port the service listens on inside the Workspace
--unix-path <path>managed Unix stream socket path inside the Workspace

kibo workspace service http

Serves one HTTP service that listens on the Workspace's loopback address at http://127.0.0.1:\<port>/ on this machine, so a browser opens it directly. By default the local port is the same as the port inside the Workspace.

Only this machine can reach the proxy, and only under the Host 127.0.0.1 or localhost. Keep-alive, streamed responses such as server-sent events, and WebSocket all work. Press Ctrl-C to stop it.

kibo workspace service http <workspace-id> [flags]
FlagDefaultDescription
--family <family>ipv4loopback address family inside the Workspace: ipv4 or ipv6
--listen-port <port>local port on 127.0.0.1 (default: the --tcp-port value; 0 picks a free one)
--tcp-port <port>TCP port the service listens on inside the Workspace

kibo workspace start

Starts a stopped Workspace and waits until it is AVAILABLE. The Workspace keeps its identity, Template, Volume and writable layer.

--node places this start on that node and no other, through the Operator API. The node must take the Workspace as any placement requires: not draining, ready, with room, and reaching the storage pools of the Workspace's Volume and writable layer; otherwise the start fails. Later starts are placed as usual.

See kibo help command-ids for --command-id and --expected-expiration-revision.

--expires-in and --clear-expiration change the expiration in the same command; without them the expiration is left as it is.

kibo workspace start <workspace-id> [flags]

Examples:

kibo workspace start ws-01k6…
kibo workspace start ws-01k6… --expires-in 8h
kibo workspace start ws-01k6… --node node-b
FlagDefaultDescription
--clear-expirationclear any expiration policy in the same command
--command-id <key>idempotency key for this change; see kibo help command-ids
--expected-expiration-revision <revision>expiration revision the command is submitted against; read from the server when omitted
--expiration-action <action>stopaction at expiration: stop or delete
--expires-in <duration>stop or delete the Workspace this long after the command is accepted, such as 8h
--no-waitreturn once the server accepts the command instead of waiting for it to finish
--node <id>place the Workspace on this node id and no other, through the Operator API
-q, --quietprint only the IDs of the resources in the result
--wait-timeout <duration>1hhow long to wait for the command to finish; running out does not cancel it

kibo workspace stop

Stops a Workspace and waits until it is STOPPED. The Volume and the writable layer are kept; memory and processes are not.

--force skips asking the guest to stop its writers: use it when a normal stop cannot finish, including on a Workspace whose stop failed. Writes the guest has not flushed may be lost, and the result says so.

See kibo help command-ids for --command-id and --expected-expiration-revision.

--expires-in and --clear-expiration change the expiration in the same command. Without them, this stop consumes an expiration whose action is stop, and an expiration whose action is delete is left as it is.

kibo workspace stop <workspace-id> [flags]

Examples:

kibo workspace stop ws-01k6…
kibo workspace stop ws-01k6… --force
FlagDefaultDescription
--clear-expirationclear any expiration policy in the same command
--command-id <key>idempotency key for this change; see kibo help command-ids
--expected-expiration-revision <revision>expiration revision the command is submitted against; read from the server when omitted
--expiration-action <action>stopaction at expiration: stop or delete
--expires-in <duration>stop or delete the Workspace this long after the command is accepted, such as 8h
--forcestop without waiting for the guest to stop its writers; unflushed writes may be lost
--no-waitreturn once the server accepts the command instead of waiting for it to finish
-q, --quietprint only the IDs of the resources in the result
--wait-timeout <duration>1hhow long to wait for the command to finish; running out does not cancel it
-y, --yesdo not ask for confirmation

kibo workspace terminal

Open an interactive Workspace terminal.

kibo workspace terminal <workspace-id> -- [argv...] [flags]

Examples:

kibo workspace terminal ws-01k6…
kibo workspace terminal ws-01k6… -- /bin/bash -l
FlagDefaultDescription
--columns <columns>initial terminal width in columns; the local terminal's when omitted
--rows <rows>initial terminal height in rows; the local terminal's when omitted
--user <account>guest account the operation runs as; defaults to the Template-declared account, "root" selects root
--working-directory <directory>directory the shell starts in; the home of the identity it runs as when omitted

kibo workspace update

Changes what a Workspace requests. CPU, memory and disk apply to a STOPPED Workspace and take effect at its next start. Values are absolute: --disk is the capacity the writable root filesystem ends up with and it only grows. The network policy is changed with kibo workspace network.

Each value is a separate server command, submitted in the order memory, CPU, disk. If one fails after an earlier one took effect, the command lists which changes were applied, submits nothing after the failure, and exits 17. See kibo help command-ids for --command-id and --expected-revision.

kibo workspace update <workspace-id> [flags]

Examples:

kibo workspace update ws-01k6… --cpu 2 --memory 4G
kibo workspace update ws-01k6… --disk 40G
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
--cpu <cpus>CPU the Workspace requests, in cpus: 2, 0.5 or 1500m
--disk <size>capacity of the writable root filesystem, a size such as 20G; it only grows
--expected-revision <revision>resources revision the CPU and memory commands are submitted against; read from the server when omitted
--memory <size>memory the Workspace requests, a size such as 4G or 512MiB
-q, --quietprint only the IDs of the resources in the result

kibo workspace volume

Bind, rebind, or unbind the Volume of a stopped Workspace.

Subcommands:

kibo workspace volume bind

Replaces the Volume binding of a STOPPED Workspace with the Volume named by --volume, mounted at --mount-path (default /data). The same command changes the mount path or the delete-with-workspace flag of the Volume already bound: name that Volume again with the new values.

A Volume the change releases is never deleted: it returns to AVAILABLE with its data and can be bound elsewhere or deleted explicitly. The target Volume must be AVAILABLE, bound to no other Workspace, and held by the node this Workspace already runs on. The new binding is mounted by the next start.

See kibo help command-ids for --command-id and --expected-revision.

kibo workspace volume bind <workspace-id> [flags]
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
--delete-with-workspacedelete the Volume together with the Workspace instead of releasing it
--expected-revision <revision>binding revision the command is submitted against; read from the server when omitted
--mount-path <path>/dataabsolute guest path the Volume is mounted at
--volume <id>Requiredid of the existing Volume to bind

kibo workspace volume unbind

Removes the Volume binding of a STOPPED Workspace. The Volume is not deleted: it returns to AVAILABLE with its data, whatever its delete-with-workspace flag said. The Workspace then has no promised persistent path until it is bound again, and cannot be exported.

See kibo help command-ids for --command-id and --expected-revision.

kibo workspace volume unbind <workspace-id> [flags]
FlagDefaultDescription
--command-id <key>idempotency key for this change; see kibo help command-ids
--expected-revision <revision>binding revision the command is submitted against; read from the server when omitted

On this page