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 Workspacekibo workspace cleanup-status: Show what a Workspace's execution has released and what it still holdskibo workspace command: Inspect a persisted Workspace commandkibo workspace create: Create a Workspacekibo workspace delete: Delete a Workspacekibo workspace desktop: View the Workspace desktop, capture it, and deliver pointer and keyboard inputkibo workspace exec: Run a command in a Workspacekibo workspace expiration: Read, set or clear when a Workspace expireskibo workspace file: Read and modify Workspace fileskibo workspace get: Get a Workspacekibo workspace labels: Replace or clear the labels of a Workspacekibo workspace list: List Workspaceskibo workspace metrics: Show a Workspace's host and guest resource readings over timekibo workspace move: Stop a Workspace and start it on another nodekibo workspace move-layer: Move a stopped Workspace's writable layer to another storage poolkibo workspace network: Set, add to or remove from the network policy of a Workspacekibo workspace service: Connect to an exactly authorized Workspace servicekibo workspace start: Start a stopped Workspacekibo workspace stop: Stop a Workspacekibo workspace terminal: Open an interactive Workspace terminalkibo workspace update: Change the CPU, memory or disk of a Workspacekibo workspace volume: Bind, rebind, or unbind the Volume of a stopped Workspace
kibo workspace annotations
Replace or clear the annotations of a Workspace.
Subcommands:
kibo workspace annotations clear: Remove all annotations of a Workspacekibo workspace annotations set: Replace all annotations of a Workspace
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]| Flag | Default | Description |
|---|---|---|
--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]| Flag | Default | Description |
|---|---|---|
--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
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)| Flag | Default | Description |
|---|---|---|
--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> | 1 | CPU the Workspace requests, in cpus: 2, 0.5 or 1500m |
--delete-with-workspace | delete 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> | stop | action 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> | 256MiB | memory the Workspace requests, a size such as 4G or 512MiB |
--mount-path <path> | /data | absolute guest path the Volume is mounted at |
--network <policy> | deny-all | network policy: deny-all or public-internet |
--no-volume | create the Workspace without a Volume; no path then survives a stop | |
--no-wait | return 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, --quiet | print 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> | Required | Template 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> | 1h | how 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| Flag | Default | Description |
|---|---|---|
--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-wait | return once the server accepts the command instead of waiting for it to finish | |
-q, --quiet | print only the IDs of the resources in the result | |
--wait-timeout <duration> | 1h | how long to wait for the command to finish; running out does not cancel it |
-y, --yes | do 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 positionkibo workspace desktop drag: Press a pointer button at one position, move to another and releasekibo workspace desktop key: Press one key chord, for example ctrl+l or enterkibo workspace desktop move: Move the pointer to a screen positionkibo workspace desktop paste: Put text on the desktop clipboard and press the paste chordkibo workspace desktop screenshot: Capture the Workspace desktop to a local image filekibo workspace desktop scroll: Scroll the pointer wheel, optionally at a screen positionkibo workspace desktop type: Type text on the Workspace desktop keyboardkibo workspace desktop view: Serve a local browser view of the Workspace desktop
kibo workspace desktop click
Click a pointer button, optionally at a screen position.
kibo workspace desktop click <workspace-id> [<x> <y>] [flags]| Flag | Default | Description |
|---|---|---|
--button <string> | left | pointer button: left, middle or right |
--count <uint> | 1 | number 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]| Flag | Default | Description |
|---|---|---|
--button <string> | left | pointer 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]| Flag | Default | Description |
|---|---|---|
--keys <string> | ctrl+v | paste 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]| Flag | Default | Description |
|---|---|---|
--amount <uint> | 1 | number of wheel notches |
--direction <string> | Required | scroll 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]| Flag | Default | Description |
|---|---|---|
--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| Flag | Default | Description |
|---|---|---|
-e, --env <KEY=VALUE> | environment variable for the command (repeatable) | |
--exec-timeout <duration> | kill the command after this duration; no limit when omitted | |
-i, --stdin | forward 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 Workspacekibo workspace expiration get: Show the Workspace and its expirationkibo workspace expiration set: Set when a Workspace expires and what happens then
kibo workspace expiration clear
Remove the expiration of a Workspace.
kibo workspace expiration clear <workspace-id> [flags]| Flag | Default | Description |
|---|---|---|
--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]| Flag | Default | Description |
|---|---|---|
--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> | stop | action at expiration: stop or delete |
--expires-in <duration> | Required | stop 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 filekibo workspace file get: Download a Workspace filekibo workspace file put: Upload a Workspace filekibo workspace file watch: Print changes to the entries of a Workspace directory
kibo workspace file delete
Delete a Workspace file.
kibo workspace file delete <workspace-id> <remote-path> [flags]Also available as kibo workspace file rm.
| Flag | Default | Description |
|---|---|---|
--user <account> | guest account the operation runs as; defaults to the Template-declared account, "root" selects root | |
-y, --yes | do 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| Flag | Default | Description |
|---|---|---|
--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| Flag | Default | Description |
|---|---|---|
--create-only | fail if the remote file exists | |
--mode <mode> | 0600 | file 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| Flag | Default | Description |
|---|---|---|
--entry | include 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| Flag | Default | Description |
|---|---|---|
-q, --quiet | print only the IDs of the resources in the result | |
--wide | show every field, including revisions and full digests |
kibo workspace labels
Replace or clear the labels of a Workspace.
Subcommands:
kibo workspace labels clear: Remove all labels of a Workspacekibo workspace labels set: Replace all labels of a Workspace
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]| Flag | Default | Description |
|---|---|---|
--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]| Flag | Default | Description |
|---|---|---|
--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| Flag | Default | Description |
|---|---|---|
--all | read every page, not only the first | |
--guest-unresponsive | only list Workspaces whose guest has stopped answering its node | |
--include-deleted | include 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, --quiet | print only the IDs of the resources in the result | |
--state <state> | only Workspaces in this state (repeatable) | |
--wide | show 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| Flag | Default | Description |
|---|---|---|
--end <string> | end of the range, RFC 3339 (default now) | |
--since <duration> | 1h | read 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| Flag | Default | Description |
|---|---|---|
--command-id <key> | idempotency key for this change; see kibo help command-ids | |
--node <id> | Required | node id the Workspace is started on |
--wait-timeout <duration> | 1h | how 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| Flag | Default | Description |
|---|---|---|
--command-id <key> | idempotency key for this change; see kibo help command-ids | |
-q, --quiet | print only the IDs of the resources in the result | |
--storage-pool <pool> | Required | storage pool the writable layer moves to |
--wait-timeout <duration> | 2h | how 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: Add entries to the allow or deny list of a Workspacekibo workspace network remove: Remove entries from the allow or deny list of a Workspacekibo workspace network set: Replace the network policy of a Workspace
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…| Flag | Default | Description |
|---|---|---|
--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, --quiet | print 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…| Flag | Default | Description |
|---|---|---|
--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, --quiet | print 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| Flag | Default | Description |
|---|---|---|
--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, --quiet | print 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 pagekibo workspace service echo: Verify a native binary echo connectionkibo workspace service forward: Forward a local TCP port to a service inside the Workspacekibo workspace service http: Open an HTTP service inside the Workspace from a local browser
kibo workspace service bridge
Serve a local WebSocket adapter and echo verification page.
kibo workspace service bridge <workspace-id> [flags]| Flag | Default | Description |
|---|---|---|
--family <family> | ipv4 | TCP 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]| Flag | Default | Description |
|---|---|---|
--family <family> | ipv4 | TCP 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]| Flag | Default | Description |
|---|---|---|
--family <family> | ipv4 | loopback 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]| Flag | Default | Description |
|---|---|---|
--family <family> | ipv4 | loopback 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| Flag | Default | Description |
|---|---|---|
--clear-expiration | clear 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> | stop | action at expiration: stop or delete |
--expires-in <duration> | stop or delete the Workspace this long after the command is accepted, such as 8h | |
--no-wait | return 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, --quiet | print only the IDs of the resources in the result | |
--wait-timeout <duration> | 1h | how 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| Flag | Default | Description |
|---|---|---|
--clear-expiration | clear 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> | stop | action at expiration: stop or delete |
--expires-in <duration> | stop or delete the Workspace this long after the command is accepted, such as 8h | |
--force | stop without waiting for the guest to stop its writers; unflushed writes may be lost | |
--no-wait | return once the server accepts the command instead of waiting for it to finish | |
-q, --quiet | print only the IDs of the resources in the result | |
--wait-timeout <duration> | 1h | how long to wait for the command to finish; running out does not cancel it |
-y, --yes | do 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| Flag | Default | Description |
|---|---|---|
--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| Flag | Default | Description |
|---|---|---|
--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, --quiet | print 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: Bind a stopped Workspace to an existing Volumekibo workspace volume unbind: Release the Volume of a stopped Workspace
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]| Flag | Default | Description |
|---|---|---|
--command-id <key> | idempotency key for this change; see kibo help command-ids | |
--delete-with-workspace | delete 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> | /data | absolute guest path the Volume is mounted at |
--volume <id> | Required | id 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]| Flag | Default | Description |
|---|---|---|
--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 |
kibo volume
Create, inspect, resize, move, and delete Volumes. This page lists the usage, examples, and flags of kibo volume and its subcommands, generated from the kibo source code.
kibo artifact
Plan, apply and review artifact store reclamation. This page lists the usage, examples, and flags of kibo artifact and its subcommands, generated from the kibo source code.