Terminal¶
A real browser PTY into your cluster context with the standard CLI tooling pre-installed, no local setup required.
Tier: Free
What it does¶
The Terminal is a full xterm.js terminal running in the browser, backed by a
real PTY with a pre-configured KUBECONFIG for the current cluster. It
supports multiple concurrent session tabs, each an isolated bash subprocess,
and copy-on-select — highlighting text copies it to your clipboard
automatically, without a separate keystroke.
Node.js is in the image and npm's global prefix points at
$HOME/.npm-global, which lives on the PVC-backed home directory, so
npm i -g <pkg> installs any CLI you want without root and it survives both
new sessions and pod restarts.
A short-drop reconnect keeps a refresh or brief network blip from losing your
session — the server holds the PTY for about two minutes after the socket
detaches (TERMINAL_SESSION_TTL, default 120s), replaying the output buffer
so the shell state and scrollback survive. Past that window the session is
reaped and you start a new one. Opening the Terminal tab does not by itself
spawn a shell; starting a
session is an explicit action, and each session belongs to one account and one
browser tab, so a duplicated tab can't silently attach to someone else's shell.
The UI shows a memory gauge for the terminal container as a whole (used /
limit), which surfaces as a warning as it approaches the cap. Every session in
the pod draws from that one pool: memory is bounded by the container's cgroup
limit rather than per session. A per-session virtual-memory cap would be the
wrong instrument: kubectl, helm and k9s all reserve a large virtual
address space at startup regardless of how much memory they go on to use, so
such a cap refuses the tools you need without bounding real consumption.
Each session is also capped on how many processes it may start
(PTY_MAX_PROCS, default 512). Linux applies that kind of cap per user account
across the whole node, not per container, so on a busy node the cap is measured
against what the node is already running and the session gets its full
allowance on top. If you are on a release before 1.1.1 and a shell reports
bash: fork: Resource temporarily unavailable, that is this limit; upgrading
resolves it, and raising PTY_MAX_PROCS does not.
The session's KUBECONFIG uses the agent pod's own ServiceAccount token, so
the shell has exactly the permissions that account was granted and nothing
more. On a default install that means no write verb on your workloads, so
kubectl delete, apply and similar are refused by the API server; write verbs
are granted only when the chart is installed with rbac.allowWrites=true
(default false). The one place the shell can write regardless is KubeManta's
OWN namespace, where the account manages its own Secrets — that is also a
namespace the product blocklists, so it is not somewhere you would be working.
Expert Mode does not change the shell's credentials. It governs the agent's
own privileged actions, which run in a separate expert-exec pod the terminal
cannot reach, and it takes two steps: expertMode.enabled=true at install to
deploy that pod, then the runtime toggle in the terminal header bar, which is
off by default. While it is on the terminal marks the state clearly, so you
always know whether it is active.
Setup¶
Open additional session tabs with the + button in the session bar. Run
kubectl, helm, k9s, or any standard Linux tool against your cluster
directly.
Terminal writes are deliberately ungoverned compared with every other write
path in the product — there is no approval token, no blast-radius window, and
no circuit breaker on commands typed into the shell. The terminal is
kubectl, and a blast limit on a human's own shell would, by construction,
cut off the operator partway through the incident they opened it to fix. The
compensating control is visibility, not restriction: every submitted command
is captured, attributed to an account, and retained for audit, and opening a
session is itself audited.
Troubleshooting¶
If a session appears "stuck" after a network blip or a laptop sleep, wait for
the ~120s reconnect window (TERMINAL_SESSION_TTL) before assuming the shell
is gone — reconnecting inside that window replays the output buffer and
restores scrollback. Once the window has passed, the session is reaped
server-side and the only option is to start a new one; nothing recovers a
shell past that point. If a connection keeps dropping before you can act,
check that your proxy or load balancer isn't closing idle WebSockets — the
client pings every 25s to keep them open. If kubectl delete
or apply fail from inside the terminal with a permissions error, the
ServiceAccount does not hold the write verb: a default install holds no write
verb on your workloads, deliberately, and granting terminal writes means
reinstalling with rbac.allowWrites=true. Expert Mode is not the flag here and turning it on
will not change the result.
Generated from KubeManta 1.2.0 — this page is rendered from the product's own documentation, so it cannot drift from what ships. Manifest built 2026-09-12T02:14:45Z.