With mocli, you can manage your mogenius clusters, browse Kubernetes resources, stream logs, and set up port-forwarding — all from your terminal.
The CLI includes an interactive Terminal UI (TUI) that provides k9s-style navigation without requiring a local kubeconfig. Authentication is handled through the mogenius platform, giving you secure access to any connected cluster from anywhere.
Installation
Mac, Linux
Use homebrew to install mocli:
brew tap mogenius/mocli
brew install mocli
On Linux with a headless machine, mocli requires a browser for the initial login. After the first login, your session persists locally.
Windows
scoop bucket add mocli https://github.com/mogenius/homebrew-mocli
scoop install mocli
Getting Started
You need a mogenius account to use mocli. If you don’t have one yet, sign up here.
Login
Run the following command to authenticate. Your browser will open automatically to complete the login:
Your session is stored locally, so you only need to log in once per machine.
Terminal UI
Launch the interactive TUI to browse and manage your resources:
The TUI provides a visual interface for navigating your mogenius organization, clusters, and Kubernetes resources. All keybindings are displayed at the bottom of each screen.
Navigation
The TUI follows a hierarchical navigation pattern:
Organization → Cluster → Namespace → Resources
| Key | Action |
|---|
| Arrow keys | Move up/down |
Enter | Select / drill down |
Esc | Go back |
q | Quit |
/ | Filter list |
: | Command mode (switch resource types) |
Browsing Resources
Once you select a namespace, you’ll see a list of Pods by default. Use command mode (:) to switch between resource types:
:pods or :po — Pods
:deployments or :deploy — Deployments
:services or :svc — Services
:statefulsets or :sts — StatefulSets
:daemonsets or :ds — DaemonSets
:jobs — Jobs
:cronjobs or :cj — CronJobs
:configmaps or :cm — ConfigMaps
:secrets — Secrets
:ingresses or :ing — Ingresses
The TUI also supports custom resources (CRDs) — type the resource name in command mode to browse any resource type available in your cluster.
Viewing Logs
Select a Pod and press Enter to view its logs in real-time. If the Pod has multiple containers, you’ll be prompted to select one.
| Key | Action |
|---|
PgUp / PgDn | Scroll through logs |
s | Toggle autoscroll |
w | Toggle word wrap |
Esc | Return to resource list |
Port Forwarding
From the logs view or resource list, press t to create a port-forward tunnel to the selected Pod. Enter the port mapping (e.g., 8080:80) and the tunnel will be established.
Active tunnels persist while the TUI is running. Press Esc from the port-forward view to return to browsing while keeping tunnels open.
Shell Access
Select a Pod and press x to open an interactive shell session in the container. If the Pod has multiple containers, you’ll be prompted to select one.
The shell session is tunnelled through the mogenius platform — no local kubeconfig or direct cluster access required.
CLI Commands
In addition to the TUI, mocli provides kubectl-style CLI commands for scripting and automation.
Context Management
Before using resource commands, set up your context to specify which organization, cluster, and namespace to target:
# Interactive setup — select org, cluster, and default namespace
mocli config use-context
# Non-interactive setup
mocli config use-context --org acme --cluster prod -n acme-staging
# Show current context
mocli config current-context
# List available organizations and clusters
mocli config list
The context is stored locally and used by all resource commands. You can override it per-command with --org, --cluster, or -n flags.
Listing and Getting Resources
# List all pods in a namespace
mocli get pods -n acme-staging
# Get a specific resource
mocli get deployment my-app -n acme-staging
# Output as YAML or JSON
mocli get configmap my-config -n acme-staging -o yaml
mocli get secret db-credentials -n acme-staging -o json
# Wide output with additional columns
mocli get pods -n acme-staging -o wide
# List cluster-scoped resources
mocli get crd
mocli get namespaces
mocli list is an alias for mocli get when listing all resources of a kind:
mocli list pods -n acme-staging
mocli list cronjobs -n acme-staging
Creating Resources
Create resources from manifest files or directly via CLI:
# Create from a YAML manifest (supports multi-document files)
mocli create -f manifest.yaml -n acme-staging
# Create a namespace
mocli create namespace acme-staging
# Create a Job with a container image
mocli create job db-migration --image=postgres:15 -n acme-staging
# Create a Job with a custom command
mocli create job db-migration --image=postgres:15 -n acme-staging -- pg_dump -h db
# Create a Job from a CronJob template (trigger a one-off run)
mocli create job --from=cronjob/nightly-backup -n acme-staging
Deleting Resources
# Delete a specific resource (prompts for confirmation)
mocli delete pod my-pod-abc123 -n acme-staging
mocli delete job db-migration -n acme-staging
# Skip confirmation prompt
mocli delete pod my-pod-abc123 -n acme-staging -y
# Delete resources defined in a manifest
mocli delete -f manifest.yaml
Shell Access
Open an interactive shell in a running container:
# Shell into a pod (uses first container if multiple)
mocli shell my-pod -n acme-staging
# Specify a container
mocli shell my-pod -c app -n acme-staging
mocli exec is an alias for mocli shell.
Viewing Logs (CLI)
Stream or fetch logs from pods and jobs:
# View logs from a pod
mocli logs my-pod -n acme-staging
# View logs from a specific container (multi-container pods)
mocli logs my-pod -c app -n acme-staging
# Stream logs in real-time
mocli logs my-pod -f -n acme-staging
# View logs from a Job (automatically finds the pod)
mocli logs job/db-migration -n acme-staging
Waiting for Conditions
Wait for a resource to reach a specific condition — useful in CI/CD pipelines:
# Wait for a Job to complete
mocli wait job/db-migration --for=condition=complete -n acme-staging
# Wait for a Job to complete with timeout
mocli wait job/db-migration --for=condition=complete --timeout=10m -n acme-staging
# Wait for a Pod to be ready
mocli wait pod/my-pod --for=condition=ready -n acme-staging
# Wait for a resource to be deleted
mocli wait pod/my-pod --for=delete -n acme-staging
Supported conditions:
condition=complete — Job completed successfully
condition=failed — Job failed
condition=ready — Pod is ready
delete — Resource has been deleted
Authentication
# Browser-based login (interactive)
mocli login
# API key login (for CI/CD pipelines)
mocli login --api-key <api-key>
# Or use environment variable
export MOGENIUS_API_KEY=<api-key>
mocli login --api-key
# Logout
mocli logout
CI/CD Integration: For automated pipelines, create an API key in your mogenius profile settings. The API key is a single opaque token starting with mo_pat:. Set the MOGENIUS_API_KEY environment variable and mocli automatically uses API key authentication.
Cluster Management
# Install the mogenius operator on a cluster
mocli cluster connect
# Version info
mocli version
Connecting a Cluster
You can use the CLI to install the mogenius operator on your Kubernetes cluster:
- Run the connect command:
- Select an organization
- Create a new cluster entry or select an existing one
- Confirm to deploy the operator
The operator will be deployed to your cluster via Helm. Verify the connection through the mogenius UI or by running mocli config list to see your available clusters.
Port Forwarding (CLI)
Use the CLI to create secure TCP tunnels to Kubernetes workloads without direct cluster access:
mocli port-forward -n <namespace> -k <kind> -w <workload-name> -p <local>:<remote>
Supported resource kinds: Pod, Service, Deployment, StatefulSet, DaemonSet
Examples:
# Forward to a Service
mocli port-forward -n production -k Service -w postgres -p 5432:5432
# Forward to a Deployment
mocli port-forward -n staging -k Deployment -w api-server -p 8080:8080
# Forward to a specific Pod
mocli port-forward -n default -k Pod -w my-pod-abc123 -p 3000:3000
| Flag | Description |
|---|
-n, --namespace | Kubernetes namespace (required) |
-k, --kind | Resource kind (required) |
-w, --name | Workload name (required) |
-p, --port | Port mapping LOCAL:REMOTE (required) |
The tunnel remains active while the CLI process runs. Press Ctrl+C to terminate.
For detailed usage and options, see Tunnels.