[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-nvcf-self-managed-cli":3,"mdc-1e6x37-key":39,"related-org-nvidia-nvcf-self-managed-cli":5089,"related-repo-nvidia-nvcf-self-managed-cli":5248},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":34,"sourceUrl":37,"mdContent":38},"nvcf-self-managed-cli","deploy and manage NVIDIA Cloud Functions","Install, operate, and tear down self-hosted NVIDIA Cloud Functions (NVCF)\ndeployments with nvcf-cli. Use for control-plane or compute-plane install,\nstatus checks, cluster registration, function deploy\u002Finvoke, task\ncreate\u002Flist\u002Fcancel\u002Fdelete, API keys, admin tokens, JWKS rotation,\nfailed-install diagnosis, and uninstall or down workflows. Trigger keywords:\nnvcf, nvcf-cli, self-hosted nvcf, self-managed nvcf, NVCFBackend, NVCA, NCP,\nICMS, helmfile, control plane, compute plane, LLM function,\nOpenAI-compatible invocation, Responses API, embeddings, batch task, task\nmonitor, cluster rotate, cluster delete, helm task, helm-based task,\ntask secrets, update task secrets, retrieve task results, bulk fetch tasks,\ntask results, NVCT, NVCT task, NVCT batch job.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"CLI","cli","tag",{"name":17,"slug":18,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Cloud","cloud",176,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnvcf","2026-07-30T05:29:41.025233",null,23,[29,30,31,32,8,33],"cloud-functions","gpu","inference","kubernetes","serverless-gpu",{"repoUrl":24,"stars":23,"forks":27,"topics":35,"description":36},[29,30,31,32,8,33],"Platform for deploying and routing GPU-accelerated inference, streaming, and batch workloads at scale.","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fnvcf\u002Ftree\u002FHEAD\u002Fai-tooling\u002Fuser\u002Fskills\u002Fnvcf-self-managed-cli","---\nname: nvcf-self-managed-cli\ndescription: |\n  Install, operate, and tear down self-hosted NVIDIA Cloud Functions (NVCF)\n  deployments with nvcf-cli. Use for control-plane or compute-plane install,\n  status checks, cluster registration, function deploy\u002Finvoke, task\n  create\u002Flist\u002Fcancel\u002Fdelete, API keys, admin tokens, JWKS rotation,\n  failed-install diagnosis, and uninstall or down workflows. Trigger keywords:\n  nvcf, nvcf-cli, self-hosted nvcf, self-managed nvcf, NVCFBackend, NVCA, NCP,\n  ICMS, helmfile, control plane, compute plane, LLM function,\n  OpenAI-compatible invocation, Responses API, embeddings, batch task, task\n  monitor, cluster rotate, cluster delete, helm task, helm-based task,\n  task secrets, update task secrets, retrieve task results, bulk fetch tasks,\n  task results, NVCT, NVCT task, NVCT batch job.\nallowed-tools: Bash, Read, AskUserQuestion\nargument-hint: \"[install|status|check|deploy-function|register-cluster|teardown] [args]\"\n---\n\u003C!--\nToken Budget:\n- Level 1 (YAML): ~120 tokens\n- Level 2 (this file): ~1900 tokens (target \u003C2000)\n- Level 3 (prompts\u002F, reference\u002F, examples\u002F): loaded on demand\n-->\n\n# NVCF Self-Hosted CLI\n\n`nvcf-cli` drives every step of bringing up self-hosted NVIDIA Cloud Functions: cluster registration, control-plane install, compute-plane install, function deploy\u002Finvoke, and lifecycle management. Use this skill any time the user wants to operate self-hosted NVCF.\n\n## When to use\n\n- \"install self-hosted NVCF\" \u002F \"bring up an NVCF cluster\"\n- \"register a (compute|GPU) cluster with NVCF\"\n- \"deploy a (container|GPU) function\" \u002F \"invoke an NVCF function\"\n- \"check NVCF cluster health\" \u002F \"is my NVCF install OK?\"\n- \"rotate NVCF cluster JWKS\" \u002F \"the NVCA agent stopped authenticating\"\n- \"tear down NVCF\" \u002F \"remove the compute plane\" \u002F \"uninstall NVCF\" \u002F \"deregister this cluster\"\n- \"preview what `down` would do\" \u002F \"dry-run uninstall\"\n- Any task operation: create \u002F run \u002F submit \u002F monitor \u002F cancel \u002F delete \u002F list tasks, helm task, update task secrets, retrieve task results, bulk fetch task details.\n- Any reference to `NVCT`, `NVCT task`, or `NVCT batch job` (list \u002F run \u002F cancel \u002F delete \u002F results).\n- Any reference to `NVCFBackend`, `NVCA`, ICMS, helm releases like `helm-nvcf-*`, or `icms.\u003Cdomain>` \u002F `api.\u003Cdomain>` URLs.\n\n## Quick start\n\nFor remote one-click installs, prepare Gateway API ingress and CLI endpoint\nconfiguration before running `self-hosted up`. The command applies the control\nplane and then immediately calls API, API Keys, invocation, and gRPC endpoints.\nIf the Gateway is not programmed or the CLI host headers do not match the\nHTTPRoutes rendered by the stack environment, post-install health and cluster\nregistration will fail.\n\n```sh\n# Single-cluster (control + compute on the current kubeconfig context):\nnvcf-cli self-hosted up --cluster-name=ncp-local\n\n# Split-cluster (control plane on context A, compute plane on context B):\nKUBECONFIG=cp.yaml:gpu1.yaml nvcf-cli self-hosted up \\\n  --cluster-name=ncp-local \\\n  --control-plane-context=admin@cp \\\n  --compute-plane-context=admin@gpu1 \\\n  --icms-url=https:\u002F\u002Ficms.nvcf.example.com\n\n# Add a new compute plane to an existing control plane (no kubectl access to CP needed;\n# reaches the control plane via the public ICMS HTTPRoute):\nnvcf-cli self-hosted add-compute-plane \\\n  --cluster-name=ncp-local-2 \\\n  --compute-plane-context=admin@gpu2 \\\n  --icms-url=https:\u002F\u002Ficms.nvcf.example.com \\\n  --token=$ADMIN_JWT\n\n# Tear down (always plan-only first):\nnvcf-cli self-hosted down --plan-only --cluster-name=ncp-local --json | jq\nnvcf-cli self-hosted down --cluster-name=ncp-local\n\n# Per-plane uninstall (GitOps; mirrors `install`):\nnvcf-cli self-hosted uninstall --no-apply --compute-plane --cluster-name=ncp-local | kubectl delete -f -\n```\n\n> **`up` vs `add-compute-plane`.** `up` always installs both planes — use it for the *first* install. `add-compute-plane` is the right subcommand any time the control plane is already running and you want to attach an Nth compute cluster.\n\n> **`down` always with `--plan-only` first.** Show the user the `willUninstall.commands[]` array before running for real.\n\n## Authentication\n\n`nvcf-cli` uses two credentials. Each is resolved independently in this order:\n\n| Precedence | Source |\n|---|---|\n| 1 (highest) | Environment variable (`NVCF_TOKEN`, `NVCF_API_KEY`) |\n| 2 | Config file (`~\u002F.nvcf-cli.yaml`, keys `token` and `api_key`) |\n| 3 | State file (`~\u002F.nvcf-cli.state`), skipped when the stored token is expired |\n\n| Env var | Token type | Used by |\n|---|---|---|\n| `NVCF_TOKEN` | Admin JWT | `function create` \u002F `deploy` \u002F `update` \u002F `delete`, cluster management (`cluster register`\u002F`rotate`\u002F`delete`, `self-hosted` ops). Required for admin commands; preferred for the rest. |\n| `NVCF_API_KEY` | `nvapi-...` API key | `function invoke` \u002F `list` \u002F `get`, queue details. Falls back to `NVCF_TOKEN` when unset. |\n\nToken generation flow:\n\n1. Point the CLI at your self-hosted endpoints. Defaults target production NVCF; override with env vars or a yaml file (`--config \u003Cpath>`, `.\u002F.nvcf-cli.yaml`, or `~\u002F.nvcf-cli.yaml`; a full template ships at `src\u002Fclis\u002Fnvcf-cli\u002F.nvcf-cli.yaml.template`).\n\n   `NVCF_BASE_HTTP_URL` \u002F `API_KEYS_SERVICE_URL` \u002F `NVCF_BASE_GRPC_URL` tell the CLI *where to send requests*. `API_HOST` \u002F `API_KEYS_HOST` \u002F `INVOKE_HOST` set the `Host:` header on those requests — needed when every NVCF service sits behind a single gateway that routes by hostname (Envoy Gateway HTTPRoute on `api.\u003CELB>`, `api-keys.\u003CELB>`, `invocation.\u003CELB>`, `llm.\u003CELB>`). Skip the three Host vars when the base URL already resolves to the right service.\n\n   Env-var form:\n   ```sh\n   export NVCF_BASE_HTTP_URL=https:\u002F\u002Fgw.example.com\n   export API_KEYS_SERVICE_URL=https:\u002F\u002Fgw.example.com\n   export NVCF_BASE_GRPC_URL=gw.example.com:443\n\n   # Only when the gateway routes by Host header:\n   export API_KEYS_HOST=api-keys.gw.example.com\n   export API_HOST=api.gw.example.com\n   export INVOKE_HOST=invocation.gw.example.com\n   ```\n\n   Yaml form (`~\u002F.nvcf-cli.yaml`):\n   ```yaml\n   base_http_url: https:\u002F\u002Fgw.example.com\n   api_keys_service_url: https:\u002F\u002Fgw.example.com\n   base_grpc_url: gw.example.com:443\n\n   # Only when the gateway routes by Host header:\n   api_keys_host: api-keys.gw.example.com\n   api_host: api.gw.example.com\n   invoke_host: invocation.gw.example.com\n   ```\n\n2. `nvcf-cli init` calls the API Keys service via those endpoints and writes the admin token to `~\u002F.nvcf-cli.state`. Use `nvcf-cli refresh` to rotate a stored token.\n3. After `init`, `nvcf-cli api-key generate` mints function + task API keys (also stored in state).\n\nAfter `init`, the credentials live in `~\u002F.nvcf-cli.state`, so later commands work without exporting `NVCF_TOKEN` or `NVCF_API_KEY`. Export the env var only to override the stored value (for example a shorter-lived token from CI).\n\n## Core subcommands\n\n| Subcommand | What it does | When to use |\n|---|---|---|\n| `nvcf-cli self-hosted check --pre [--local-only \\| --control-plane-context=X \\| --compute-plane-context=Y]` | Pre-flight: local-host tools + cluster-side prerequisites | Always run first on a new environment |\n| `nvcf-cli self-hosted install --control-plane \\| kubectl apply -f -` | Render + apply the control plane | When you want manual control over apply (GitOps-friendly) |\n| `nvcf-cli self-hosted install --compute-plane --cluster-name=X \\| kubectl apply -f -` | Register cluster + render compute plane | Same — manual apply path |\n| `nvcf-cli self-hosted up --cluster-name=X` | One-shot first install: pre-flight → control plane → register → compute plane | Standard install path (both planes from scratch) |\n| `nvcf-cli self-hosted up --plan-only --cluster-name=X` | Dry-run: emit phase-by-phase plan + ETA without changing state | Agent \u002F CI preview before commit |\n| `nvcf-cli self-hosted add-compute-plane --cluster-name=X --compute-plane-context=Y --icms-url=… --token=$JWT` | Add a new compute plane to an *existing* control plane (no CP install) | Adding the 2nd, 3rd, … GPU cluster after the initial `up` |\n| `nvcf-cli self-hosted uninstall --control-plane` | Per-plane primitive: `helmfile destroy` on the control plane (refuses if compute planes still registered) | Final teardown after all compute planes are gone, or scripted pipelines |\n| `nvcf-cli self-hosted uninstall --compute-plane --cluster-name=X` | Per-plane primitive: `helmfile destroy` on a compute plane (no ICMS unregister, no drain) | Just remove the helm releases without the ICMS-side cleanup |\n| `nvcf-cli self-hosted uninstall --no-apply \u003Cplane>` | Render delete YAML via `helm get manifest` | GitOps; `\\| kubectl delete -f -` or commit + Argo applies |\n| `nvcf-cli self-hosted down --cluster-name=X` | Orchestrator: drain → uninstall --compute-plane → cluster delete in ICMS | Standard \"remove one GPU cluster\" path |\n| `nvcf-cli self-hosted down --all --confirm` | Orchestrator: tear down every registered compute plane + control plane | Full uninstall |\n| `nvcf-cli self-hosted down --plan-only --cluster-name=X` | Dry-run preview (phases + helm releases + ICMS rows + ETAs; no helm\u002Fhelmfile contact) | **ALWAYS run before any actual `down`** |\n| `nvcf-cli self-hosted status [--cluster-name=X] [--watch] [--json]` | Snapshot dashboard of cluster identity + component health + recent events | Routine health checks; `--watch` for live |\n| `nvcf-cli init` | Mint admin token from API Keys service via the public api gateway | Before any cluster-management operation; idempotent |\n| `nvcf-cli cluster register --name=X --nca-id=Y --region=Z [--ignore-existing]` | Register a cluster JWKS+OIDC issuer with ICMS | Standalone register (without compute-plane install) |\n| `nvcf-cli cluster rotate --cluster-id=ID` | Rotate cluster JWKS in ICMS | When NVCA's K8s signing key changed and PSAT verification started 401-ing |\n| `nvcf-cli cluster delete --cluster-id=ID` | Remove cluster registration from ICMS | **Confirm with user.** Destroys ICMS state for the cluster. |\n| `nvcf-cli api-key generate --description=\"…\" --expires-in=1h` | Mint both a function API key and a task API key (default) | Before invoking functions or creating tasks; run after every `init` |\n| `nvcf-cli api-key generate --for function --description=\"…\"` | Mint a function API key only (`invoke_function` scope) | When only function invocation is needed |\n| `nvcf-cli api-key generate --for task --description=\"…\"` | Mint a task API key only | When only task operations are needed |\n| `nvcf-cli function create --input-file=\u003Cjson>` | Create function metadata in ICMS | First step of any function deploy; use `functionType: \"LLM\"` and `models[].llmConfig` for LLM functions |\n| `nvcf-cli function deploy create --input-file=\u003Cjson>` | Schedule a deployment of a created function | Waits for ACTIVE before returning (timeout 900s) |\n| `nvcf-cli function invoke --input-file=\u003Cjson>` | Invoke a deployed function | Requires API key (not admin token) |\n| `nvcf-cli function delete --function-id=ID --version-id=VID` | Remove a function and its deployment | **Confirm with user.** |\n| `nvcf-cli task create --name=X --gpu=H100 --instance-type=Y --image=Z` | Submit a container task; saves task ID to CLI state | Requires task API key; set `NVCF_BASE_NVCT_URL` to the NVCT gateway endpoint |\n| `nvcf-cli task create --name=X --gpu=H100 --instance-type=Y --helm-chart=Z` | Submit a Helm task | Same as container task; `--helm-chart` replaces `--image` |\n| `nvcf-cli task create --input-file=\u003Cjson>` | Submit a task from a JSON config file | Recommended for repeatable configurations |\n| `nvcf-cli task list [--status=QUEUED\\|RUNNING\\|COMPLETED]` | List tasks, optionally filtered by status | |\n| `nvcf-cli task get [taskId]` | Get details for a task; uses saved task ID if omitted | |\n| `nvcf-cli task events [taskId]` | Stream lifecycle events for a task | |\n| `nvcf-cli task results [taskId]` | List result artifacts for a completed task | Result upload not yet supported; returns empty list for `NONE` strategy |\n| `nvcf-cli task cancel [taskId]` | Cancel a queued or running task | |\n| `nvcf-cli task delete [taskId]` | Delete a task record | **Confirm with user.** |\n| `nvcf-cli task update-secrets [taskId] --secrets NAME=value` | Update secrets on a task; supplied secrets are added or updated by name, existing secrets not in the request are preserved | |\n| `nvcf-cli task bulk --task-ids=ID1,ID2` | Fetch details for multiple tasks in one call | |\n\n> Registry credential propagation: after `registry-credential add`\u002F`update`\u002F`delete`, task creation can keep using the previous credential for up to about 5 minutes (NVCT caches account credentials at `nvct.nvcf.cache-ttl`, default `PT5M`), even though `registry-credential list`\u002F`get` show the new value immediately. Wait about 5 minutes, or `kubectl -n nvcf rollout restart deployment\u002Fnvct-api` to apply immediately. See [reference\u002Ftroubleshooting.md](reference\u002Ftroubleshooting.md).\n\n## LLM function type\n\nUse `functionType: \"LLM\"` for OpenAI-compatible models served through the self-managed LLM Gateway. LLM functions must define at least one `models[]` entry with `name` and `llmConfig.uris`; the supported upstream paths are `\u002Fv1\u002Fchat\u002Fcompletions`, `\u002Fv1\u002Fresponses`, and `\u002Fv1\u002Fembeddings`.\n\nUse `\u002Fhealth` on port `8000` as the default OpenAI-compatible container health probe unless the image exposes a different readiness path.\n\nLLM function type is independent of workload packaging. For a Helm-chart backed LLM function, keep `functionType: \"LLM\"` and `models[].llmConfig`, then set `helmChart` and `helmChartServiceName` in the create request. `helmChartServiceName` must match the Kubernetes Service exposed by the chart, and `inferencePort` must be that Service port.\n\nInvocation uses the LLM route, for example `https:\u002F\u002Fllm.invocation.\u003Cdomain>\u002Fv1\u002Fchat\u002Fcompletions`. The OpenAI `model` value must be `\u003Cfunction-id>\u002F\u003Cmodel-name>`; the function ID is the routing key and the model name is forwarded upstream.\n\nUpdate mutable per-model routing settings with `nvcf-cli function update --llm-model-update='name=\u003Cmodel>,routingMethod=\u003Cmethod>,tokenRateLimit=\u003Climit>'`, or put the same fields under `modelUpdates[].llmConfig` in an update JSON file. See [reference\u002Fflags.md](reference\u002Fflags.md) for accepted routing methods. `tokenRateLimit` supports positive integer limits for `S`, `M`, `H`, `D`, and `W`; use JSON input for combined limits such as `1000-S,5000-M,100000-H,500000-D,1000000-W`. Do not include `uris` in model updates.\n\nFor `\u002Fv1\u002Fresponses`, the gateway proxies the native Responses path upstream, relays SSE to streaming clients, and aggregates the terminal JSON response for non-streaming clients. For `\u002Fv1\u002Fembeddings`, input may be a string or string array, must be non-empty, and may contain at most 2048 entries.\n\nSession stickiness uses `x-multi-turn-session-id` for chat completions and Responses API requests only. Embeddings requests do not use stickiness.\n\n## Common workflows\n\nFor step-by-step playbooks, load the prompt that matches the user's intent:\n\n- **Install from scratch.** [prompts\u002Finstall-from-scratch.md](prompts\u002Finstall-from-scratch.md) — k3d cluster → preflight → up → deploy a smoke function.\n- **Add a new compute plane.** [prompts\u002Fadd-compute-plane.md](prompts\u002Fadd-compute-plane.md) — split-cluster `up` against an existing control plane.\n- **Deploy and invoke a function.** [prompts\u002Fdeploy-and-invoke.md](prompts\u002Fdeploy-and-invoke.md) — create → deploy → API key → invoke, including the LLM create\u002Finvoke variant.\n- **Diagnose a failed install.** [prompts\u002Fdiagnose-failed-install.md](prompts\u002Fdiagnose-failed-install.md) — `status --json` → identify failed component → kubectl describe → remediation.\n- **Rotate JWKS.** [prompts\u002Frotate-cluster-jwks.md](prompts\u002Frotate-cluster-jwks.md) — when PSAT auth starts failing.\n- **Tear down.** [prompts\u002Fteardown.md](prompts\u002Fteardown.md) — `down --plan-only` first, then real run. `down --cluster-name=X` for one compute plane (orchestrator: drain + uninstall + cluster delete); `uninstall --control-plane` for the control plane (per-plane primitive); `down --all --confirm` for everything; `uninstall --no-apply \u003Cplane> | kubectl delete -f -` for GitOps.\n- **Create and run a task.** [prompts\u002Fcreate-and-run-task.md](prompts\u002Fcreate-and-run-task.md) — mint API keys → task create (container or Helm) → monitor with `task get` \u002F `task events` → retrieve results → cleanup.\n\n## Reference\n\n- [reference\u002Fcommands.md](reference\u002Fcommands.md) — full subcommand cheat sheet\n- [reference\u002Fflags.md](reference\u002Fflags.md) — global + per-command flags\n- [reference\u002Fexit-codes.md](reference\u002Fexit-codes.md) — what each non-zero exit means\n- [reference\u002Ftroubleshooting.md](reference\u002Ftroubleshooting.md) — known errors → remediation table\n\n## Safety rules — CRITICAL\n\n**NEVER do these without explicit user confirmation:**\n- `nvcf-cli self-hosted down` or `uninstall` in any form — destructive. **ALWAYS run with `--plan-only` (`down`) or `--no-apply` (`uninstall`) first** and show the user what would happen. State which compute plane(s) and whether persistent state would be wiped.\n- `nvcf-cli self-hosted down --remove-persistent` (or `uninstall --remove-persistent`) — deletes Cassandra rows, OpenBao seal keys, sr-default user data. **Loss is unrecoverable.** Confirm explicitly that this is what the user wants.\n- `nvcf-cli self-hosted uninstall --control-plane --force-with-registered-clusters` — orphans every registered compute plane (PSAT auth breaks immediately). State the consequence before passing this flag.\n- `nvcf-cli self-hosted down --all` — nukes everything. Always show the cluster list (`nvcf-cli cluster list`) and get confirmation.\n- `nvcf-cli cluster delete` — removes the cluster's ICMS registration; the compute plane immediately stops being able to authenticate.\n- `nvcf-cli function delete` — removes a function and any active deployment.\n- `nvcf-cli task delete` — permanently removes the task record. Stop, state the task ID and current status, then wait for a subsequent user reply that explicitly confirms deletion of that specific task before running this command. Do not treat the user's original delete request as confirmation.\n- Any raw `helm uninstall` or `kubectl delete pvc\u002Fpv` — affects persistent state. Prefer `nvcf-cli self-hosted down` (orchestrator) or `uninstall` (per-plane) which handle this safely.\n- Any `--force` flag (`--force-with-registered-clusters`, `--confirm` in non-interactive contexts).\n\n**ALWAYS do these:**\n- Run `nvcf-cli self-hosted status` before assuming a cluster exists \u002F is healthy.\n- Show the planned action (cluster name, function name, GPU type, cost if known) before creating.\n- Before creating or deploying a container or LLM function, confirm the exact function name and container image with the user. For LLM functions, also confirm the exact model name used in `models[].name` and OpenAI `model: \"\u003Cfunction-id>\u002F\u003Cmodel-name>\"`. If any value is missing, ask the user instead of guessing or submitting example placeholders.\n- Confirm exact resource names before deletion — match against `cluster list` \u002F `function list` output.\n- In CI \u002F non-interactive contexts, use `--non-interactive --token=$JWT`. Never propose interactive `nvcf-cli init` when `$CI` is set.\n\n**NEVER paste these into chat \u002F logs \u002F feedback:**\n- Admin tokens (full JWT). Show the first 8 chars + `...` if you must reference one.\n- API keys (`nvapi-…`).\n- Contents of `~\u002F.nvcf-cli.state` or any kubeconfig.\n- Any data marked secret in helmfile values.\n\n> Note (only when operating more than one cluster from the same machine): the CLI's default\n> config (`~\u002F.nvcf-cli.yaml`) and state (`~\u002F.nvcf-cli.state`) are a single shared slot, not\n> per-cluster. With a single control plane (the common case) this needs no attention. If you\n> manage multiple clusters, pass `--config \u003Ccluster>.yaml` on every command (or keep a\n> deliberately-switched per-cluster default): with no `--config`, commands target whichever\n> cluster was last `init`'d, and `init` \u002F `api-key generate` mutate that shared default, so an\n> unscoped `api-key generate` can mint or surface keys against the wrong cluster.\n\n## Output modes (for agent piping)\n\n`nvcf-cli` subcommands that long-run (`up`, `status`, `check`) accept four output modes:\n\n- **`--json`** — JSONL events on stderr; one event per line; stable schema (`schemaVersion: 2`). **Use this when running under an agent.** Parse line-by-line with `jq -c .` or `json.loads()`.\n- **`--plain`** — Plain timestamped lines, RFC3339 UTC, `[NN\u002F8]` phase prefix; grep-friendly. Default in non-TTY.\n- **`--accessible`** — Plain output without spinners, with verbose state markers (`[completed]`, `[running]`, `[pending]`, `[failed]`). For screen readers and constrained terminals.\n- **(no flag)** — Bubbletea TTY dashboard. Default in TTY ≥100×30. Don't use under an agent (cursor-up sequences are noisy).\n\nAuto-detect picks the right mode for whatever stdout\u002Fstderr is. The CLI also honors `NO_COLOR` (any value → forces plain), `TERM=dumb` (forces plain), and `CI=truthy` (forces plain even on a fake TTY). When the terminal is smaller than 100×30, the bubbletea renderer falls back to a compact layout. Explicit `--json` is the right call for agent piping.\n\n## On failure\n\n`nvcf-cli` failures emit structured `phase_failed` events in JSON:\n\n```json\n{\"event\":\"phase_failed\",\"phaseNum\":4,\"phase\":\"apply-cp\",\n \"errCategory\":\"helm_apply\",\"errMessage\":\"helm install api-keys: timed out\",\n \"retryClass\":\"backoff\",\"retryAfterSec\":60,\n \"remediation\":[\"kubectl describe pod -n cassandra-system cassandra-0\",\n                \"Re-run with --debug for verbose helmfile output\"],\n \"raw\":{\"subprocess\":\"helmfile\",\"exitCode\":1,\"stderrTail\":\"…\",\"kubernetesReason\":\"FailedScheduling\"}}\n```\n\nThe `retryClass` field tells the agent how to handle the failure:\n\n| `retryClass` | Meaning | Agent action |\n|---|---|---|\n| `immediate` | Transient blip | Retry the same `up` command now |\n| `backoff` | Rate limit \u002F pending operation | Wait `retryAfterSec` seconds, then retry |\n| `after_remediation` | Operator must intervene | Surface `errMessage` + `remediation`, STOP. Don't auto-retry. |\n| `none` | Non-retryable | Same as `after_remediation` — surface and stop |\n| `unknown` | Classifier unsure | Treat conservatively: surface and stop |\n\nNever re-run with `--force` (no command takes one). The `raw` block carries the underlying signal (subprocess exit, HTTP status, K8s reason) — quote relevant fields when explaining failures to the user, but don't dump `stderrTail` verbatim into chat without scanning for secrets first.\n\n## Quick command reference\n\n```sh\nnvcf-cli self-hosted check --pre              # pre-flight\nnvcf-cli self-hosted up --cluster-name=NAME   # one-shot install\nnvcf-cli self-hosted status                   # snapshot\nnvcf-cli self-hosted status --watch           # live\nnvcf-cli init                                 # mint admin token (clears all saved API keys)\nnvcf-cli cluster register …                   # register cluster\nnvcf-cli api-key generate --description=…     # mint both function and task API keys (run after every init)\nnvcf-cli api-key generate --for function …    # function key only\nnvcf-cli api-key generate --for task …        # task key only\nnvcf-cli function create --input-file=…       # create function\nnvcf-cli function create --function-type=LLM --llm-model=\u003Cspec>  # create LLM function metadata\nnvcf-cli function create --name=llm-helm --inference-url=\u002F --inference-port=8000 \\\n  --function-type=LLM --helm-chart=\u003Cchart> --helm-chart-service=\u003Cservice> --llm-model=\u003Cspec>\nnvcf-cli function update --llm-model-update=\u003Cspec>  # update LLM routing\u002Ftoken limits\nnvcf-cli function deploy create --input-file=…\nnvcf-cli function invoke --input-file=…\n\n# Task commands — requires NVCF_BASE_NVCT_URL=http:\u002F\u002F\u003Cnvct-gateway>\nnvcf-cli task create --name=X --gpu=H100 --instance-type=Y --image=Z\nnvcf-cli task create --input-file=task.json   # from JSON config\nnvcf-cli task list                            # list all tasks\nnvcf-cli task list --status=RUNNING           # filter by status\nnvcf-cli task get [taskId]                    # task details\nnvcf-cli task events [taskId]                 # lifecycle events\nnvcf-cli task results [taskId]                # result artifacts\nnvcf-cli task cancel [taskId]\nnvcf-cli task delete [taskId]\n```\n\n## Feedback\n\nIf the user hits a bug or limitation, file an issue through the project tracker. Don't include secrets.\n",{"data":40,"body":43},{"name":4,"description":6,"allowed-tools":41,"argument-hint":42},"Bash, Read, AskUserQuestion","[install|status|check|deploy-function|register-cluster|teardown] [args]",{"type":44,"children":45},"root",[46,55,68,75,199,205,218,622,673,707,713,723,836,994,999,1467,1499,1505,2411,2484,2490,2547,2567,2615,2644,2732,2751,2764,2770,2775,2959,2965,3006,3012,3020,3227,3235,3325,3333,3378,3444,3450,3481,3602,3638,3644,3662,4121,4133,4307,4333,4339,5072,5078,5083],{"type":47,"tag":48,"props":49,"children":51},"element","h1",{"id":50},"nvcf-self-hosted-cli",[52],{"type":53,"value":54},"text","NVCF Self-Hosted CLI",{"type":47,"tag":56,"props":57,"children":58},"p",{},[59,66],{"type":47,"tag":60,"props":61,"children":63},"code",{"className":62},[],[64],{"type":53,"value":65},"nvcf-cli",{"type":53,"value":67}," drives every step of bringing up self-hosted NVIDIA Cloud Functions: cluster registration, control-plane install, compute-plane install, function deploy\u002Finvoke, and lifecycle management. Use this skill any time the user wants to operate self-hosted NVCF.",{"type":47,"tag":69,"props":70,"children":72},"h2",{"id":71},"when-to-use",[73],{"type":53,"value":74},"When to use",{"type":47,"tag":76,"props":77,"children":78},"ul",{},[79,85,90,95,100,105,110,123,128,157],{"type":47,"tag":80,"props":81,"children":82},"li",{},[83],{"type":53,"value":84},"\"install self-hosted NVCF\" \u002F \"bring up an NVCF cluster\"",{"type":47,"tag":80,"props":86,"children":87},{},[88],{"type":53,"value":89},"\"register a (compute|GPU) cluster with NVCF\"",{"type":47,"tag":80,"props":91,"children":92},{},[93],{"type":53,"value":94},"\"deploy a (container|GPU) function\" \u002F \"invoke an NVCF function\"",{"type":47,"tag":80,"props":96,"children":97},{},[98],{"type":53,"value":99},"\"check NVCF cluster health\" \u002F \"is my NVCF install OK?\"",{"type":47,"tag":80,"props":101,"children":102},{},[103],{"type":53,"value":104},"\"rotate NVCF cluster JWKS\" \u002F \"the NVCA agent stopped authenticating\"",{"type":47,"tag":80,"props":106,"children":107},{},[108],{"type":53,"value":109},"\"tear down NVCF\" \u002F \"remove the compute plane\" \u002F \"uninstall NVCF\" \u002F \"deregister this cluster\"",{"type":47,"tag":80,"props":111,"children":112},{},[113,115,121],{"type":53,"value":114},"\"preview what ",{"type":47,"tag":60,"props":116,"children":118},{"className":117},[],[119],{"type":53,"value":120},"down",{"type":53,"value":122}," would do\" \u002F \"dry-run uninstall\"",{"type":47,"tag":80,"props":124,"children":125},{},[126],{"type":53,"value":127},"Any task operation: create \u002F run \u002F submit \u002F monitor \u002F cancel \u002F delete \u002F list tasks, helm task, update task secrets, retrieve task results, bulk fetch task details.",{"type":47,"tag":80,"props":129,"children":130},{},[131,133,139,141,147,149,155],{"type":53,"value":132},"Any reference to ",{"type":47,"tag":60,"props":134,"children":136},{"className":135},[],[137],{"type":53,"value":138},"NVCT",{"type":53,"value":140},", ",{"type":47,"tag":60,"props":142,"children":144},{"className":143},[],[145],{"type":53,"value":146},"NVCT task",{"type":53,"value":148},", or ",{"type":47,"tag":60,"props":150,"children":152},{"className":151},[],[153],{"type":53,"value":154},"NVCT batch job",{"type":53,"value":156}," (list \u002F run \u002F cancel \u002F delete \u002F results).",{"type":47,"tag":80,"props":158,"children":159},{},[160,161,167,168,174,176,182,183,189,191,197],{"type":53,"value":132},{"type":47,"tag":60,"props":162,"children":164},{"className":163},[],[165],{"type":53,"value":166},"NVCFBackend",{"type":53,"value":140},{"type":47,"tag":60,"props":169,"children":171},{"className":170},[],[172],{"type":53,"value":173},"NVCA",{"type":53,"value":175},", ICMS, helm releases like ",{"type":47,"tag":60,"props":177,"children":179},{"className":178},[],[180],{"type":53,"value":181},"helm-nvcf-*",{"type":53,"value":148},{"type":47,"tag":60,"props":184,"children":186},{"className":185},[],[187],{"type":53,"value":188},"icms.\u003Cdomain>",{"type":53,"value":190}," \u002F ",{"type":47,"tag":60,"props":192,"children":194},{"className":193},[],[195],{"type":53,"value":196},"api.\u003Cdomain>",{"type":53,"value":198}," URLs.",{"type":47,"tag":69,"props":200,"children":202},{"id":201},"quick-start",[203],{"type":53,"value":204},"Quick start",{"type":47,"tag":56,"props":206,"children":207},{},[208,210,216],{"type":53,"value":209},"For remote one-click installs, prepare Gateway API ingress and CLI endpoint\nconfiguration before running ",{"type":47,"tag":60,"props":211,"children":213},{"className":212},[],[214],{"type":53,"value":215},"self-hosted up",{"type":53,"value":217},". The command applies the control\nplane and then immediately calls API, API Keys, invocation, and gRPC endpoints.\nIf the Gateway is not programmed or the CLI host headers do not match the\nHTTPRoutes rendered by the stack environment, post-install health and cluster\nregistration will fail.",{"type":47,"tag":219,"props":220,"children":225},"pre",{"className":221,"code":222,"language":223,"meta":224,"style":224},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Single-cluster (control + compute on the current kubeconfig context):\nnvcf-cli self-hosted up --cluster-name=ncp-local\n\n# Split-cluster (control plane on context A, compute plane on context B):\nKUBECONFIG=cp.yaml:gpu1.yaml nvcf-cli self-hosted up \\\n  --cluster-name=ncp-local \\\n  --control-plane-context=admin@cp \\\n  --compute-plane-context=admin@gpu1 \\\n  --icms-url=https:\u002F\u002Ficms.nvcf.example.com\n\n# Add a new compute plane to an existing control plane (no kubectl access to CP needed;\n# reaches the control plane via the public ICMS HTTPRoute):\nnvcf-cli self-hosted add-compute-plane \\\n  --cluster-name=ncp-local-2 \\\n  --compute-plane-context=admin@gpu2 \\\n  --icms-url=https:\u002F\u002Ficms.nvcf.example.com \\\n  --token=$ADMIN_JWT\n\n# Tear down (always plan-only first):\nnvcf-cli self-hosted down --plan-only --cluster-name=ncp-local --json | jq\nnvcf-cli self-hosted down --cluster-name=ncp-local\n\n# Per-plane uninstall (GitOps; mirrors `install`):\nnvcf-cli self-hosted uninstall --no-apply --compute-plane --cluster-name=ncp-local | kubectl delete -f -\n","sh","",[226],{"type":47,"tag":60,"props":227,"children":228},{"__ignoreMap":224},[229,241,266,276,285,324,337,350,363,372,380,389,398,419,432,445,458,472,480,489,531,551,559,567],{"type":47,"tag":230,"props":231,"children":234},"span",{"class":232,"line":233},"line",1,[235],{"type":47,"tag":230,"props":236,"children":238},{"style":237},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[239],{"type":53,"value":240},"# Single-cluster (control + compute on the current kubeconfig context):\n",{"type":47,"tag":230,"props":242,"children":244},{"class":232,"line":243},2,[245,250,256,261],{"type":47,"tag":230,"props":246,"children":248},{"style":247},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[249],{"type":53,"value":65},{"type":47,"tag":230,"props":251,"children":253},{"style":252},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[254],{"type":53,"value":255}," self-hosted",{"type":47,"tag":230,"props":257,"children":258},{"style":252},[259],{"type":53,"value":260}," up",{"type":47,"tag":230,"props":262,"children":263},{"style":252},[264],{"type":53,"value":265}," --cluster-name=ncp-local\n",{"type":47,"tag":230,"props":267,"children":269},{"class":232,"line":268},3,[270],{"type":47,"tag":230,"props":271,"children":273},{"emptyLinePlaceholder":272},true,[274],{"type":53,"value":275},"\n",{"type":47,"tag":230,"props":277,"children":279},{"class":232,"line":278},4,[280],{"type":47,"tag":230,"props":281,"children":282},{"style":237},[283],{"type":53,"value":284},"# Split-cluster (control plane on context A, compute plane on context B):\n",{"type":47,"tag":230,"props":286,"children":288},{"class":232,"line":287},5,[289,295,301,306,311,315,319],{"type":47,"tag":230,"props":290,"children":292},{"style":291},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[293],{"type":53,"value":294},"KUBECONFIG",{"type":47,"tag":230,"props":296,"children":298},{"style":297},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[299],{"type":53,"value":300},"=",{"type":47,"tag":230,"props":302,"children":303},{"style":252},[304],{"type":53,"value":305},"cp.yaml:gpu1.yaml",{"type":47,"tag":230,"props":307,"children":308},{"style":247},[309],{"type":53,"value":310}," nvcf-cli",{"type":47,"tag":230,"props":312,"children":313},{"style":252},[314],{"type":53,"value":255},{"type":47,"tag":230,"props":316,"children":317},{"style":252},[318],{"type":53,"value":260},{"type":47,"tag":230,"props":320,"children":321},{"style":291},[322],{"type":53,"value":323}," \\\n",{"type":47,"tag":230,"props":325,"children":327},{"class":232,"line":326},6,[328,333],{"type":47,"tag":230,"props":329,"children":330},{"style":252},[331],{"type":53,"value":332},"  --cluster-name=ncp-local",{"type":47,"tag":230,"props":334,"children":335},{"style":291},[336],{"type":53,"value":323},{"type":47,"tag":230,"props":338,"children":340},{"class":232,"line":339},7,[341,346],{"type":47,"tag":230,"props":342,"children":343},{"style":252},[344],{"type":53,"value":345},"  --control-plane-context=admin@cp",{"type":47,"tag":230,"props":347,"children":348},{"style":291},[349],{"type":53,"value":323},{"type":47,"tag":230,"props":351,"children":353},{"class":232,"line":352},8,[354,359],{"type":47,"tag":230,"props":355,"children":356},{"style":252},[357],{"type":53,"value":358},"  --compute-plane-context=admin@gpu1",{"type":47,"tag":230,"props":360,"children":361},{"style":291},[362],{"type":53,"value":323},{"type":47,"tag":230,"props":364,"children":366},{"class":232,"line":365},9,[367],{"type":47,"tag":230,"props":368,"children":369},{"style":252},[370],{"type":53,"value":371},"  --icms-url=https:\u002F\u002Ficms.nvcf.example.com\n",{"type":47,"tag":230,"props":373,"children":375},{"class":232,"line":374},10,[376],{"type":47,"tag":230,"props":377,"children":378},{"emptyLinePlaceholder":272},[379],{"type":53,"value":275},{"type":47,"tag":230,"props":381,"children":383},{"class":232,"line":382},11,[384],{"type":47,"tag":230,"props":385,"children":386},{"style":237},[387],{"type":53,"value":388},"# Add a new compute plane to an existing control plane (no kubectl access to CP needed;\n",{"type":47,"tag":230,"props":390,"children":392},{"class":232,"line":391},12,[393],{"type":47,"tag":230,"props":394,"children":395},{"style":237},[396],{"type":53,"value":397},"# reaches the control plane via the public ICMS HTTPRoute):\n",{"type":47,"tag":230,"props":399,"children":401},{"class":232,"line":400},13,[402,406,410,415],{"type":47,"tag":230,"props":403,"children":404},{"style":247},[405],{"type":53,"value":65},{"type":47,"tag":230,"props":407,"children":408},{"style":252},[409],{"type":53,"value":255},{"type":47,"tag":230,"props":411,"children":412},{"style":252},[413],{"type":53,"value":414}," add-compute-plane",{"type":47,"tag":230,"props":416,"children":417},{"style":291},[418],{"type":53,"value":323},{"type":47,"tag":230,"props":420,"children":422},{"class":232,"line":421},14,[423,428],{"type":47,"tag":230,"props":424,"children":425},{"style":252},[426],{"type":53,"value":427},"  --cluster-name=ncp-local-2",{"type":47,"tag":230,"props":429,"children":430},{"style":291},[431],{"type":53,"value":323},{"type":47,"tag":230,"props":433,"children":435},{"class":232,"line":434},15,[436,441],{"type":47,"tag":230,"props":437,"children":438},{"style":252},[439],{"type":53,"value":440},"  --compute-plane-context=admin@gpu2",{"type":47,"tag":230,"props":442,"children":443},{"style":291},[444],{"type":53,"value":323},{"type":47,"tag":230,"props":446,"children":448},{"class":232,"line":447},16,[449,454],{"type":47,"tag":230,"props":450,"children":451},{"style":252},[452],{"type":53,"value":453},"  --icms-url=https:\u002F\u002Ficms.nvcf.example.com",{"type":47,"tag":230,"props":455,"children":456},{"style":291},[457],{"type":53,"value":323},{"type":47,"tag":230,"props":459,"children":461},{"class":232,"line":460},17,[462,467],{"type":47,"tag":230,"props":463,"children":464},{"style":252},[465],{"type":53,"value":466},"  --token=",{"type":47,"tag":230,"props":468,"children":469},{"style":291},[470],{"type":53,"value":471},"$ADMIN_JWT\n",{"type":47,"tag":230,"props":473,"children":475},{"class":232,"line":474},18,[476],{"type":47,"tag":230,"props":477,"children":478},{"emptyLinePlaceholder":272},[479],{"type":53,"value":275},{"type":47,"tag":230,"props":481,"children":483},{"class":232,"line":482},19,[484],{"type":47,"tag":230,"props":485,"children":486},{"style":237},[487],{"type":53,"value":488},"# Tear down (always plan-only first):\n",{"type":47,"tag":230,"props":490,"children":492},{"class":232,"line":491},20,[493,497,501,506,511,516,521,526],{"type":47,"tag":230,"props":494,"children":495},{"style":247},[496],{"type":53,"value":65},{"type":47,"tag":230,"props":498,"children":499},{"style":252},[500],{"type":53,"value":255},{"type":47,"tag":230,"props":502,"children":503},{"style":252},[504],{"type":53,"value":505}," down",{"type":47,"tag":230,"props":507,"children":508},{"style":252},[509],{"type":53,"value":510}," --plan-only",{"type":47,"tag":230,"props":512,"children":513},{"style":252},[514],{"type":53,"value":515}," --cluster-name=ncp-local",{"type":47,"tag":230,"props":517,"children":518},{"style":252},[519],{"type":53,"value":520}," --json",{"type":47,"tag":230,"props":522,"children":523},{"style":297},[524],{"type":53,"value":525}," |",{"type":47,"tag":230,"props":527,"children":528},{"style":247},[529],{"type":53,"value":530}," jq\n",{"type":47,"tag":230,"props":532,"children":534},{"class":232,"line":533},21,[535,539,543,547],{"type":47,"tag":230,"props":536,"children":537},{"style":247},[538],{"type":53,"value":65},{"type":47,"tag":230,"props":540,"children":541},{"style":252},[542],{"type":53,"value":255},{"type":47,"tag":230,"props":544,"children":545},{"style":252},[546],{"type":53,"value":505},{"type":47,"tag":230,"props":548,"children":549},{"style":252},[550],{"type":53,"value":265},{"type":47,"tag":230,"props":552,"children":554},{"class":232,"line":553},22,[555],{"type":47,"tag":230,"props":556,"children":557},{"emptyLinePlaceholder":272},[558],{"type":53,"value":275},{"type":47,"tag":230,"props":560,"children":561},{"class":232,"line":27},[562],{"type":47,"tag":230,"props":563,"children":564},{"style":237},[565],{"type":53,"value":566},"# Per-plane uninstall (GitOps; mirrors `install`):\n",{"type":47,"tag":230,"props":568,"children":570},{"class":232,"line":569},24,[571,575,579,584,589,594,598,602,607,612,617],{"type":47,"tag":230,"props":572,"children":573},{"style":247},[574],{"type":53,"value":65},{"type":47,"tag":230,"props":576,"children":577},{"style":252},[578],{"type":53,"value":255},{"type":47,"tag":230,"props":580,"children":581},{"style":252},[582],{"type":53,"value":583}," uninstall",{"type":47,"tag":230,"props":585,"children":586},{"style":252},[587],{"type":53,"value":588}," --no-apply",{"type":47,"tag":230,"props":590,"children":591},{"style":252},[592],{"type":53,"value":593}," --compute-plane",{"type":47,"tag":230,"props":595,"children":596},{"style":252},[597],{"type":53,"value":515},{"type":47,"tag":230,"props":599,"children":600},{"style":297},[601],{"type":53,"value":525},{"type":47,"tag":230,"props":603,"children":604},{"style":247},[605],{"type":53,"value":606}," kubectl",{"type":47,"tag":230,"props":608,"children":609},{"style":252},[610],{"type":53,"value":611}," delete",{"type":47,"tag":230,"props":613,"children":614},{"style":252},[615],{"type":53,"value":616}," -f",{"type":47,"tag":230,"props":618,"children":619},{"style":252},[620],{"type":53,"value":621}," -\n",{"type":47,"tag":623,"props":624,"children":625},"blockquote",{},[626],{"type":47,"tag":56,"props":627,"children":628},{},[629,649,651,656,658,664,666,671],{"type":47,"tag":630,"props":631,"children":632},"strong",{},[633,639,641,647],{"type":47,"tag":60,"props":634,"children":636},{"className":635},[],[637],{"type":53,"value":638},"up",{"type":53,"value":640}," vs ",{"type":47,"tag":60,"props":642,"children":644},{"className":643},[],[645],{"type":53,"value":646},"add-compute-plane",{"type":53,"value":648},".",{"type":53,"value":650}," ",{"type":47,"tag":60,"props":652,"children":654},{"className":653},[],[655],{"type":53,"value":638},{"type":53,"value":657}," always installs both planes — use it for the ",{"type":47,"tag":659,"props":660,"children":661},"em",{},[662],{"type":53,"value":663},"first",{"type":53,"value":665}," install. ",{"type":47,"tag":60,"props":667,"children":669},{"className":668},[],[670],{"type":53,"value":646},{"type":53,"value":672}," is the right subcommand any time the control plane is already running and you want to attach an Nth compute cluster.",{"type":47,"tag":623,"props":674,"children":675},{},[676],{"type":47,"tag":56,"props":677,"children":678},{},[679,697,699,705],{"type":47,"tag":630,"props":680,"children":681},{},[682,687,689,695],{"type":47,"tag":60,"props":683,"children":685},{"className":684},[],[686],{"type":53,"value":120},{"type":53,"value":688}," always with ",{"type":47,"tag":60,"props":690,"children":692},{"className":691},[],[693],{"type":53,"value":694},"--plan-only",{"type":53,"value":696}," first.",{"type":53,"value":698}," Show the user the ",{"type":47,"tag":60,"props":700,"children":702},{"className":701},[],[703],{"type":53,"value":704},"willUninstall.commands[]",{"type":53,"value":706}," array before running for real.",{"type":47,"tag":69,"props":708,"children":710},{"id":709},"authentication",[711],{"type":53,"value":712},"Authentication",{"type":47,"tag":56,"props":714,"children":715},{},[716,721],{"type":47,"tag":60,"props":717,"children":719},{"className":718},[],[720],{"type":53,"value":65},{"type":53,"value":722}," uses two credentials. Each is resolved independently in this order:",{"type":47,"tag":724,"props":725,"children":726},"table",{},[727,746],{"type":47,"tag":728,"props":729,"children":730},"thead",{},[731],{"type":47,"tag":732,"props":733,"children":734},"tr",{},[735,741],{"type":47,"tag":736,"props":737,"children":738},"th",{},[739],{"type":53,"value":740},"Precedence",{"type":47,"tag":736,"props":742,"children":743},{},[744],{"type":53,"value":745},"Source",{"type":47,"tag":747,"props":748,"children":749},"tbody",{},[750,779,815],{"type":47,"tag":732,"props":751,"children":752},{},[753,759],{"type":47,"tag":754,"props":755,"children":756},"td",{},[757],{"type":53,"value":758},"1 (highest)",{"type":47,"tag":754,"props":760,"children":761},{},[762,764,770,771,777],{"type":53,"value":763},"Environment variable (",{"type":47,"tag":60,"props":765,"children":767},{"className":766},[],[768],{"type":53,"value":769},"NVCF_TOKEN",{"type":53,"value":140},{"type":47,"tag":60,"props":772,"children":774},{"className":773},[],[775],{"type":53,"value":776},"NVCF_API_KEY",{"type":53,"value":778},")",{"type":47,"tag":732,"props":780,"children":781},{},[782,787],{"type":47,"tag":754,"props":783,"children":784},{},[785],{"type":53,"value":786},"2",{"type":47,"tag":754,"props":788,"children":789},{},[790,792,798,800,806,808,814],{"type":53,"value":791},"Config file (",{"type":47,"tag":60,"props":793,"children":795},{"className":794},[],[796],{"type":53,"value":797},"~\u002F.nvcf-cli.yaml",{"type":53,"value":799},", keys ",{"type":47,"tag":60,"props":801,"children":803},{"className":802},[],[804],{"type":53,"value":805},"token",{"type":53,"value":807}," and ",{"type":47,"tag":60,"props":809,"children":811},{"className":810},[],[812],{"type":53,"value":813},"api_key",{"type":53,"value":778},{"type":47,"tag":732,"props":816,"children":817},{},[818,823],{"type":47,"tag":754,"props":819,"children":820},{},[821],{"type":53,"value":822},"3",{"type":47,"tag":754,"props":824,"children":825},{},[826,828,834],{"type":53,"value":827},"State file (",{"type":47,"tag":60,"props":829,"children":831},{"className":830},[],[832],{"type":53,"value":833},"~\u002F.nvcf-cli.state",{"type":53,"value":835},"), skipped when the stored token is expired",{"type":47,"tag":724,"props":837,"children":838},{},[839,860],{"type":47,"tag":728,"props":840,"children":841},{},[842],{"type":47,"tag":732,"props":843,"children":844},{},[845,850,855],{"type":47,"tag":736,"props":846,"children":847},{},[848],{"type":53,"value":849},"Env var",{"type":47,"tag":736,"props":851,"children":852},{},[853],{"type":53,"value":854},"Token type",{"type":47,"tag":736,"props":856,"children":857},{},[858],{"type":53,"value":859},"Used by",{"type":47,"tag":747,"props":861,"children":862},{},[863,940],{"type":47,"tag":732,"props":864,"children":865},{},[866,874,879],{"type":47,"tag":754,"props":867,"children":868},{},[869],{"type":47,"tag":60,"props":870,"children":872},{"className":871},[],[873],{"type":53,"value":769},{"type":47,"tag":754,"props":875,"children":876},{},[877],{"type":53,"value":878},"Admin JWT",{"type":47,"tag":754,"props":880,"children":881},{},[882,888,889,895,896,902,903,909,911,917,919,925,926,931,932,938],{"type":47,"tag":60,"props":883,"children":885},{"className":884},[],[886],{"type":53,"value":887},"function create",{"type":53,"value":190},{"type":47,"tag":60,"props":890,"children":892},{"className":891},[],[893],{"type":53,"value":894},"deploy",{"type":53,"value":190},{"type":47,"tag":60,"props":897,"children":899},{"className":898},[],[900],{"type":53,"value":901},"update",{"type":53,"value":190},{"type":47,"tag":60,"props":904,"children":906},{"className":905},[],[907],{"type":53,"value":908},"delete",{"type":53,"value":910},", cluster management (",{"type":47,"tag":60,"props":912,"children":914},{"className":913},[],[915],{"type":53,"value":916},"cluster register",{"type":53,"value":918},"\u002F",{"type":47,"tag":60,"props":920,"children":922},{"className":921},[],[923],{"type":53,"value":924},"rotate",{"type":53,"value":918},{"type":47,"tag":60,"props":927,"children":929},{"className":928},[],[930],{"type":53,"value":908},{"type":53,"value":140},{"type":47,"tag":60,"props":933,"children":935},{"className":934},[],[936],{"type":53,"value":937},"self-hosted",{"type":53,"value":939}," ops). Required for admin commands; preferred for the rest.",{"type":47,"tag":732,"props":941,"children":942},{},[943,951,962],{"type":47,"tag":754,"props":944,"children":945},{},[946],{"type":47,"tag":60,"props":947,"children":949},{"className":948},[],[950],{"type":53,"value":776},{"type":47,"tag":754,"props":952,"children":953},{},[954,960],{"type":47,"tag":60,"props":955,"children":957},{"className":956},[],[958],{"type":53,"value":959},"nvapi-...",{"type":53,"value":961}," API key",{"type":47,"tag":754,"props":963,"children":964},{},[965,971,972,978,979,985,987,992],{"type":47,"tag":60,"props":966,"children":968},{"className":967},[],[969],{"type":53,"value":970},"function invoke",{"type":53,"value":190},{"type":47,"tag":60,"props":973,"children":975},{"className":974},[],[976],{"type":53,"value":977},"list",{"type":53,"value":190},{"type":47,"tag":60,"props":980,"children":982},{"className":981},[],[983],{"type":53,"value":984},"get",{"type":53,"value":986},", queue details. Falls back to ",{"type":47,"tag":60,"props":988,"children":990},{"className":989},[],[991],{"type":53,"value":769},{"type":53,"value":993}," when unset.",{"type":47,"tag":56,"props":995,"children":996},{},[997],{"type":53,"value":998},"Token generation flow:",{"type":47,"tag":1000,"props":1001,"children":1002},"ol",{},[1003,1421,1447],{"type":47,"tag":80,"props":1004,"children":1005},{},[1006,1008,1014,1015,1021,1022,1027,1029,1035,1037,1041,1047,1048,1054,1055,1061,1063,1068,1070,1076,1077,1083,1084,1090,1092,1098,1100,1106,1107,1113,1114,1120,1121,1127,1129,1132,1134,1283,1286,1288,1293,1295],{"type":53,"value":1007},"Point the CLI at your self-hosted endpoints. Defaults target production NVCF; override with env vars or a yaml file (",{"type":47,"tag":60,"props":1009,"children":1011},{"className":1010},[],[1012],{"type":53,"value":1013},"--config \u003Cpath>",{"type":53,"value":140},{"type":47,"tag":60,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":53,"value":1020},".\u002F.nvcf-cli.yaml",{"type":53,"value":148},{"type":47,"tag":60,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":53,"value":797},{"type":53,"value":1028},"; a full template ships at ",{"type":47,"tag":60,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":53,"value":1034},"src\u002Fclis\u002Fnvcf-cli\u002F.nvcf-cli.yaml.template",{"type":53,"value":1036},").",{"type":47,"tag":1038,"props":1039,"children":1040},"br",{},[],{"type":47,"tag":60,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":53,"value":1046},"NVCF_BASE_HTTP_URL",{"type":53,"value":190},{"type":47,"tag":60,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":53,"value":1053},"API_KEYS_SERVICE_URL",{"type":53,"value":190},{"type":47,"tag":60,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":53,"value":1060},"NVCF_BASE_GRPC_URL",{"type":53,"value":1062}," tell the CLI ",{"type":47,"tag":659,"props":1064,"children":1065},{},[1066],{"type":53,"value":1067},"where to send requests",{"type":53,"value":1069},". ",{"type":47,"tag":60,"props":1071,"children":1073},{"className":1072},[],[1074],{"type":53,"value":1075},"API_HOST",{"type":53,"value":190},{"type":47,"tag":60,"props":1078,"children":1080},{"className":1079},[],[1081],{"type":53,"value":1082},"API_KEYS_HOST",{"type":53,"value":190},{"type":47,"tag":60,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":53,"value":1089},"INVOKE_HOST",{"type":53,"value":1091}," set the ",{"type":47,"tag":60,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":53,"value":1097},"Host:",{"type":53,"value":1099}," header on those requests — needed when every NVCF service sits behind a single gateway that routes by hostname (Envoy Gateway HTTPRoute on ",{"type":47,"tag":60,"props":1101,"children":1103},{"className":1102},[],[1104],{"type":53,"value":1105},"api.\u003CELB>",{"type":53,"value":140},{"type":47,"tag":60,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":53,"value":1112},"api-keys.\u003CELB>",{"type":53,"value":140},{"type":47,"tag":60,"props":1115,"children":1117},{"className":1116},[],[1118],{"type":53,"value":1119},"invocation.\u003CELB>",{"type":53,"value":140},{"type":47,"tag":60,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":53,"value":1126},"llm.\u003CELB>",{"type":53,"value":1128},"). Skip the three Host vars when the base URL already resolves to the right service.",{"type":47,"tag":1038,"props":1130,"children":1131},{},[],{"type":53,"value":1133},"Env-var form:",{"type":47,"tag":219,"props":1135,"children":1137},{"className":221,"code":1136,"language":223,"meta":224,"style":224},"export NVCF_BASE_HTTP_URL=https:\u002F\u002Fgw.example.com\nexport API_KEYS_SERVICE_URL=https:\u002F\u002Fgw.example.com\nexport NVCF_BASE_GRPC_URL=gw.example.com:443\n\n# Only when the gateway routes by Host header:\nexport API_KEYS_HOST=api-keys.gw.example.com\nexport API_HOST=api.gw.example.com\nexport INVOKE_HOST=invocation.gw.example.com\n",[1138],{"type":47,"tag":60,"props":1139,"children":1140},{"__ignoreMap":224},[1141,1164,1184,1205,1212,1220,1241,1262],{"type":47,"tag":230,"props":1142,"children":1143},{"class":232,"line":233},[1144,1150,1155,1159],{"type":47,"tag":230,"props":1145,"children":1147},{"style":1146},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1148],{"type":53,"value":1149},"export",{"type":47,"tag":230,"props":1151,"children":1152},{"style":291},[1153],{"type":53,"value":1154}," NVCF_BASE_HTTP_URL",{"type":47,"tag":230,"props":1156,"children":1157},{"style":297},[1158],{"type":53,"value":300},{"type":47,"tag":230,"props":1160,"children":1161},{"style":291},[1162],{"type":53,"value":1163},"https:\u002F\u002Fgw.example.com\n",{"type":47,"tag":230,"props":1165,"children":1166},{"class":232,"line":243},[1167,1171,1176,1180],{"type":47,"tag":230,"props":1168,"children":1169},{"style":1146},[1170],{"type":53,"value":1149},{"type":47,"tag":230,"props":1172,"children":1173},{"style":291},[1174],{"type":53,"value":1175}," API_KEYS_SERVICE_URL",{"type":47,"tag":230,"props":1177,"children":1178},{"style":297},[1179],{"type":53,"value":300},{"type":47,"tag":230,"props":1181,"children":1182},{"style":291},[1183],{"type":53,"value":1163},{"type":47,"tag":230,"props":1185,"children":1186},{"class":232,"line":268},[1187,1191,1196,1200],{"type":47,"tag":230,"props":1188,"children":1189},{"style":1146},[1190],{"type":53,"value":1149},{"type":47,"tag":230,"props":1192,"children":1193},{"style":291},[1194],{"type":53,"value":1195}," NVCF_BASE_GRPC_URL",{"type":47,"tag":230,"props":1197,"children":1198},{"style":297},[1199],{"type":53,"value":300},{"type":47,"tag":230,"props":1201,"children":1202},{"style":291},[1203],{"type":53,"value":1204},"gw.example.com:443\n",{"type":47,"tag":230,"props":1206,"children":1207},{"class":232,"line":278},[1208],{"type":47,"tag":230,"props":1209,"children":1210},{"emptyLinePlaceholder":272},[1211],{"type":53,"value":275},{"type":47,"tag":230,"props":1213,"children":1214},{"class":232,"line":287},[1215],{"type":47,"tag":230,"props":1216,"children":1217},{"style":237},[1218],{"type":53,"value":1219},"# Only when the gateway routes by Host header:\n",{"type":47,"tag":230,"props":1221,"children":1222},{"class":232,"line":326},[1223,1227,1232,1236],{"type":47,"tag":230,"props":1224,"children":1225},{"style":1146},[1226],{"type":53,"value":1149},{"type":47,"tag":230,"props":1228,"children":1229},{"style":291},[1230],{"type":53,"value":1231}," API_KEYS_HOST",{"type":47,"tag":230,"props":1233,"children":1234},{"style":297},[1235],{"type":53,"value":300},{"type":47,"tag":230,"props":1237,"children":1238},{"style":291},[1239],{"type":53,"value":1240},"api-keys.gw.example.com\n",{"type":47,"tag":230,"props":1242,"children":1243},{"class":232,"line":339},[1244,1248,1253,1257],{"type":47,"tag":230,"props":1245,"children":1246},{"style":1146},[1247],{"type":53,"value":1149},{"type":47,"tag":230,"props":1249,"children":1250},{"style":291},[1251],{"type":53,"value":1252}," API_HOST",{"type":47,"tag":230,"props":1254,"children":1255},{"style":297},[1256],{"type":53,"value":300},{"type":47,"tag":230,"props":1258,"children":1259},{"style":291},[1260],{"type":53,"value":1261},"api.gw.example.com\n",{"type":47,"tag":230,"props":1263,"children":1264},{"class":232,"line":352},[1265,1269,1274,1278],{"type":47,"tag":230,"props":1266,"children":1267},{"style":1146},[1268],{"type":53,"value":1149},{"type":47,"tag":230,"props":1270,"children":1271},{"style":291},[1272],{"type":53,"value":1273}," INVOKE_HOST",{"type":47,"tag":230,"props":1275,"children":1276},{"style":297},[1277],{"type":53,"value":300},{"type":47,"tag":230,"props":1279,"children":1280},{"style":291},[1281],{"type":53,"value":1282},"invocation.gw.example.com\n",{"type":47,"tag":1038,"props":1284,"children":1285},{},[],{"type":53,"value":1287},"Yaml form (",{"type":47,"tag":60,"props":1289,"children":1291},{"className":1290},[],[1292],{"type":53,"value":797},{"type":53,"value":1294},"):",{"type":47,"tag":219,"props":1296,"children":1300},{"className":1297,"code":1298,"language":1299,"meta":224,"style":224},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","base_http_url: https:\u002F\u002Fgw.example.com\napi_keys_service_url: https:\u002F\u002Fgw.example.com\nbase_grpc_url: gw.example.com:443\n\n# Only when the gateway routes by Host header:\napi_keys_host: api-keys.gw.example.com\napi_host: api.gw.example.com\ninvoke_host: invocation.gw.example.com\n","yaml",[1301],{"type":47,"tag":60,"props":1302,"children":1303},{"__ignoreMap":224},[1304,1323,1339,1356,1363,1370,1387,1404],{"type":47,"tag":230,"props":1305,"children":1306},{"class":232,"line":233},[1307,1313,1318],{"type":47,"tag":230,"props":1308,"children":1310},{"style":1309},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1311],{"type":53,"value":1312},"base_http_url",{"type":47,"tag":230,"props":1314,"children":1315},{"style":297},[1316],{"type":53,"value":1317},":",{"type":47,"tag":230,"props":1319,"children":1320},{"style":252},[1321],{"type":53,"value":1322}," https:\u002F\u002Fgw.example.com\n",{"type":47,"tag":230,"props":1324,"children":1325},{"class":232,"line":243},[1326,1331,1335],{"type":47,"tag":230,"props":1327,"children":1328},{"style":1309},[1329],{"type":53,"value":1330},"api_keys_service_url",{"type":47,"tag":230,"props":1332,"children":1333},{"style":297},[1334],{"type":53,"value":1317},{"type":47,"tag":230,"props":1336,"children":1337},{"style":252},[1338],{"type":53,"value":1322},{"type":47,"tag":230,"props":1340,"children":1341},{"class":232,"line":268},[1342,1347,1351],{"type":47,"tag":230,"props":1343,"children":1344},{"style":1309},[1345],{"type":53,"value":1346},"base_grpc_url",{"type":47,"tag":230,"props":1348,"children":1349},{"style":297},[1350],{"type":53,"value":1317},{"type":47,"tag":230,"props":1352,"children":1353},{"style":252},[1354],{"type":53,"value":1355}," gw.example.com:443\n",{"type":47,"tag":230,"props":1357,"children":1358},{"class":232,"line":278},[1359],{"type":47,"tag":230,"props":1360,"children":1361},{"emptyLinePlaceholder":272},[1362],{"type":53,"value":275},{"type":47,"tag":230,"props":1364,"children":1365},{"class":232,"line":287},[1366],{"type":47,"tag":230,"props":1367,"children":1368},{"style":237},[1369],{"type":53,"value":1219},{"type":47,"tag":230,"props":1371,"children":1372},{"class":232,"line":326},[1373,1378,1382],{"type":47,"tag":230,"props":1374,"children":1375},{"style":1309},[1376],{"type":53,"value":1377},"api_keys_host",{"type":47,"tag":230,"props":1379,"children":1380},{"style":297},[1381],{"type":53,"value":1317},{"type":47,"tag":230,"props":1383,"children":1384},{"style":252},[1385],{"type":53,"value":1386}," api-keys.gw.example.com\n",{"type":47,"tag":230,"props":1388,"children":1389},{"class":232,"line":339},[1390,1395,1399],{"type":47,"tag":230,"props":1391,"children":1392},{"style":1309},[1393],{"type":53,"value":1394},"api_host",{"type":47,"tag":230,"props":1396,"children":1397},{"style":297},[1398],{"type":53,"value":1317},{"type":47,"tag":230,"props":1400,"children":1401},{"style":252},[1402],{"type":53,"value":1403}," api.gw.example.com\n",{"type":47,"tag":230,"props":1405,"children":1406},{"class":232,"line":352},[1407,1412,1416],{"type":47,"tag":230,"props":1408,"children":1409},{"style":1309},[1410],{"type":53,"value":1411},"invoke_host",{"type":47,"tag":230,"props":1413,"children":1414},{"style":297},[1415],{"type":53,"value":1317},{"type":47,"tag":230,"props":1417,"children":1418},{"style":252},[1419],{"type":53,"value":1420}," invocation.gw.example.com\n",{"type":47,"tag":80,"props":1422,"children":1423},{},[1424,1430,1432,1437,1439,1445],{"type":47,"tag":60,"props":1425,"children":1427},{"className":1426},[],[1428],{"type":53,"value":1429},"nvcf-cli init",{"type":53,"value":1431}," calls the API Keys service via those endpoints and writes the admin token to ",{"type":47,"tag":60,"props":1433,"children":1435},{"className":1434},[],[1436],{"type":53,"value":833},{"type":53,"value":1438},". Use ",{"type":47,"tag":60,"props":1440,"children":1442},{"className":1441},[],[1443],{"type":53,"value":1444},"nvcf-cli refresh",{"type":53,"value":1446}," to rotate a stored token.",{"type":47,"tag":80,"props":1448,"children":1449},{},[1450,1452,1458,1459,1465],{"type":53,"value":1451},"After ",{"type":47,"tag":60,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":53,"value":1457},"init",{"type":53,"value":140},{"type":47,"tag":60,"props":1460,"children":1462},{"className":1461},[],[1463],{"type":53,"value":1464},"nvcf-cli api-key generate",{"type":53,"value":1466}," mints function + task API keys (also stored in state).",{"type":47,"tag":56,"props":1468,"children":1469},{},[1470,1471,1476,1478,1483,1485,1490,1492,1497],{"type":53,"value":1451},{"type":47,"tag":60,"props":1472,"children":1474},{"className":1473},[],[1475],{"type":53,"value":1457},{"type":53,"value":1477},", the credentials live in ",{"type":47,"tag":60,"props":1479,"children":1481},{"className":1480},[],[1482],{"type":53,"value":833},{"type":53,"value":1484},", so later commands work without exporting ",{"type":47,"tag":60,"props":1486,"children":1488},{"className":1487},[],[1489],{"type":53,"value":769},{"type":53,"value":1491}," or ",{"type":47,"tag":60,"props":1493,"children":1495},{"className":1494},[],[1496],{"type":53,"value":776},{"type":53,"value":1498},". Export the env var only to override the stored value (for example a shorter-lived token from CI).",{"type":47,"tag":69,"props":1500,"children":1502},{"id":1501},"core-subcommands",[1503],{"type":53,"value":1504},"Core subcommands",{"type":47,"tag":724,"props":1506,"children":1507},{},[1508,1528],{"type":47,"tag":728,"props":1509,"children":1510},{},[1511],{"type":47,"tag":732,"props":1512,"children":1513},{},[1514,1519,1524],{"type":47,"tag":736,"props":1515,"children":1516},{},[1517],{"type":53,"value":1518},"Subcommand",{"type":47,"tag":736,"props":1520,"children":1521},{},[1522],{"type":53,"value":1523},"What it does",{"type":47,"tag":736,"props":1525,"children":1526},{},[1527],{"type":53,"value":74},{"type":47,"tag":747,"props":1529,"children":1530},{},[1531,1553,1575,1597,1619,1641,1675,1705,1733,1769,1791,1813,1843,1873,1894,1916,1938,1965,1992,2022,2044,2081,2103,2125,2149,2179,2215,2237,2257,2277,2297,2327,2347,2371,2391],{"type":47,"tag":732,"props":1532,"children":1533},{},[1534,1543,1548],{"type":47,"tag":754,"props":1535,"children":1536},{},[1537],{"type":47,"tag":60,"props":1538,"children":1540},{"className":1539},[],[1541],{"type":53,"value":1542},"nvcf-cli self-hosted check --pre [--local-only | --control-plane-context=X | --compute-plane-context=Y]",{"type":47,"tag":754,"props":1544,"children":1545},{},[1546],{"type":53,"value":1547},"Pre-flight: local-host tools + cluster-side prerequisites",{"type":47,"tag":754,"props":1549,"children":1550},{},[1551],{"type":53,"value":1552},"Always run first on a new environment",{"type":47,"tag":732,"props":1554,"children":1555},{},[1556,1565,1570],{"type":47,"tag":754,"props":1557,"children":1558},{},[1559],{"type":47,"tag":60,"props":1560,"children":1562},{"className":1561},[],[1563],{"type":53,"value":1564},"nvcf-cli self-hosted install --control-plane | kubectl apply -f -",{"type":47,"tag":754,"props":1566,"children":1567},{},[1568],{"type":53,"value":1569},"Render + apply the control plane",{"type":47,"tag":754,"props":1571,"children":1572},{},[1573],{"type":53,"value":1574},"When you want manual control over apply (GitOps-friendly)",{"type":47,"tag":732,"props":1576,"children":1577},{},[1578,1587,1592],{"type":47,"tag":754,"props":1579,"children":1580},{},[1581],{"type":47,"tag":60,"props":1582,"children":1584},{"className":1583},[],[1585],{"type":53,"value":1586},"nvcf-cli self-hosted install --compute-plane --cluster-name=X | kubectl apply -f -",{"type":47,"tag":754,"props":1588,"children":1589},{},[1590],{"type":53,"value":1591},"Register cluster + render compute plane",{"type":47,"tag":754,"props":1593,"children":1594},{},[1595],{"type":53,"value":1596},"Same — manual apply path",{"type":47,"tag":732,"props":1598,"children":1599},{},[1600,1609,1614],{"type":47,"tag":754,"props":1601,"children":1602},{},[1603],{"type":47,"tag":60,"props":1604,"children":1606},{"className":1605},[],[1607],{"type":53,"value":1608},"nvcf-cli self-hosted up --cluster-name=X",{"type":47,"tag":754,"props":1610,"children":1611},{},[1612],{"type":53,"value":1613},"One-shot first install: pre-flight → control plane → register → compute plane",{"type":47,"tag":754,"props":1615,"children":1616},{},[1617],{"type":53,"value":1618},"Standard install path (both planes from scratch)",{"type":47,"tag":732,"props":1620,"children":1621},{},[1622,1631,1636],{"type":47,"tag":754,"props":1623,"children":1624},{},[1625],{"type":47,"tag":60,"props":1626,"children":1628},{"className":1627},[],[1629],{"type":53,"value":1630},"nvcf-cli self-hosted up --plan-only --cluster-name=X",{"type":47,"tag":754,"props":1632,"children":1633},{},[1634],{"type":53,"value":1635},"Dry-run: emit phase-by-phase plan + ETA without changing state",{"type":47,"tag":754,"props":1637,"children":1638},{},[1639],{"type":53,"value":1640},"Agent \u002F CI preview before commit",{"type":47,"tag":732,"props":1642,"children":1643},{},[1644,1653,1665],{"type":47,"tag":754,"props":1645,"children":1646},{},[1647],{"type":47,"tag":60,"props":1648,"children":1650},{"className":1649},[],[1651],{"type":53,"value":1652},"nvcf-cli self-hosted add-compute-plane --cluster-name=X --compute-plane-context=Y --icms-url=… --token=$JWT",{"type":47,"tag":754,"props":1654,"children":1655},{},[1656,1658,1663],{"type":53,"value":1657},"Add a new compute plane to an ",{"type":47,"tag":659,"props":1659,"children":1660},{},[1661],{"type":53,"value":1662},"existing",{"type":53,"value":1664}," control plane (no CP install)",{"type":47,"tag":754,"props":1666,"children":1667},{},[1668,1670],{"type":53,"value":1669},"Adding the 2nd, 3rd, … GPU cluster after the initial ",{"type":47,"tag":60,"props":1671,"children":1673},{"className":1672},[],[1674],{"type":53,"value":638},{"type":47,"tag":732,"props":1676,"children":1677},{},[1678,1687,1700],{"type":47,"tag":754,"props":1679,"children":1680},{},[1681],{"type":47,"tag":60,"props":1682,"children":1684},{"className":1683},[],[1685],{"type":53,"value":1686},"nvcf-cli self-hosted uninstall --control-plane",{"type":47,"tag":754,"props":1688,"children":1689},{},[1690,1692,1698],{"type":53,"value":1691},"Per-plane primitive: ",{"type":47,"tag":60,"props":1693,"children":1695},{"className":1694},[],[1696],{"type":53,"value":1697},"helmfile destroy",{"type":53,"value":1699}," on the control plane (refuses if compute planes still registered)",{"type":47,"tag":754,"props":1701,"children":1702},{},[1703],{"type":53,"value":1704},"Final teardown after all compute planes are gone, or scripted pipelines",{"type":47,"tag":732,"props":1706,"children":1707},{},[1708,1717,1728],{"type":47,"tag":754,"props":1709,"children":1710},{},[1711],{"type":47,"tag":60,"props":1712,"children":1714},{"className":1713},[],[1715],{"type":53,"value":1716},"nvcf-cli self-hosted uninstall --compute-plane --cluster-name=X",{"type":47,"tag":754,"props":1718,"children":1719},{},[1720,1721,1726],{"type":53,"value":1691},{"type":47,"tag":60,"props":1722,"children":1724},{"className":1723},[],[1725],{"type":53,"value":1697},{"type":53,"value":1727}," on a compute plane (no ICMS unregister, no drain)",{"type":47,"tag":754,"props":1729,"children":1730},{},[1731],{"type":53,"value":1732},"Just remove the helm releases without the ICMS-side cleanup",{"type":47,"tag":732,"props":1734,"children":1735},{},[1736,1745,1756],{"type":47,"tag":754,"props":1737,"children":1738},{},[1739],{"type":47,"tag":60,"props":1740,"children":1742},{"className":1741},[],[1743],{"type":53,"value":1744},"nvcf-cli self-hosted uninstall --no-apply \u003Cplane>",{"type":47,"tag":754,"props":1746,"children":1747},{},[1748,1750],{"type":53,"value":1749},"Render delete YAML via ",{"type":47,"tag":60,"props":1751,"children":1753},{"className":1752},[],[1754],{"type":53,"value":1755},"helm get manifest",{"type":47,"tag":754,"props":1757,"children":1758},{},[1759,1761,1767],{"type":53,"value":1760},"GitOps; ",{"type":47,"tag":60,"props":1762,"children":1764},{"className":1763},[],[1765],{"type":53,"value":1766},"| kubectl delete -f -",{"type":53,"value":1768}," or commit + Argo applies",{"type":47,"tag":732,"props":1770,"children":1771},{},[1772,1781,1786],{"type":47,"tag":754,"props":1773,"children":1774},{},[1775],{"type":47,"tag":60,"props":1776,"children":1778},{"className":1777},[],[1779],{"type":53,"value":1780},"nvcf-cli self-hosted down --cluster-name=X",{"type":47,"tag":754,"props":1782,"children":1783},{},[1784],{"type":53,"value":1785},"Orchestrator: drain → uninstall --compute-plane → cluster delete in ICMS",{"type":47,"tag":754,"props":1787,"children":1788},{},[1789],{"type":53,"value":1790},"Standard \"remove one GPU cluster\" path",{"type":47,"tag":732,"props":1792,"children":1793},{},[1794,1803,1808],{"type":47,"tag":754,"props":1795,"children":1796},{},[1797],{"type":47,"tag":60,"props":1798,"children":1800},{"className":1799},[],[1801],{"type":53,"value":1802},"nvcf-cli self-hosted down --all --confirm",{"type":47,"tag":754,"props":1804,"children":1805},{},[1806],{"type":53,"value":1807},"Orchestrator: tear down every registered compute plane + control plane",{"type":47,"tag":754,"props":1809,"children":1810},{},[1811],{"type":53,"value":1812},"Full uninstall",{"type":47,"tag":732,"props":1814,"children":1815},{},[1816,1825,1830],{"type":47,"tag":754,"props":1817,"children":1818},{},[1819],{"type":47,"tag":60,"props":1820,"children":1822},{"className":1821},[],[1823],{"type":53,"value":1824},"nvcf-cli self-hosted down --plan-only --cluster-name=X",{"type":47,"tag":754,"props":1826,"children":1827},{},[1828],{"type":53,"value":1829},"Dry-run preview (phases + helm releases + ICMS rows + ETAs; no helm\u002Fhelmfile contact)",{"type":47,"tag":754,"props":1831,"children":1832},{},[1833],{"type":47,"tag":630,"props":1834,"children":1835},{},[1836,1838],{"type":53,"value":1837},"ALWAYS run before any actual ",{"type":47,"tag":60,"props":1839,"children":1841},{"className":1840},[],[1842],{"type":53,"value":120},{"type":47,"tag":732,"props":1844,"children":1845},{},[1846,1855,1860],{"type":47,"tag":754,"props":1847,"children":1848},{},[1849],{"type":47,"tag":60,"props":1850,"children":1852},{"className":1851},[],[1853],{"type":53,"value":1854},"nvcf-cli self-hosted status [--cluster-name=X] [--watch] [--json]",{"type":47,"tag":754,"props":1856,"children":1857},{},[1858],{"type":53,"value":1859},"Snapshot dashboard of cluster identity + component health + recent events",{"type":47,"tag":754,"props":1861,"children":1862},{},[1863,1865,1871],{"type":53,"value":1864},"Routine health checks; ",{"type":47,"tag":60,"props":1866,"children":1868},{"className":1867},[],[1869],{"type":53,"value":1870},"--watch",{"type":53,"value":1872}," for live",{"type":47,"tag":732,"props":1874,"children":1875},{},[1876,1884,1889],{"type":47,"tag":754,"props":1877,"children":1878},{},[1879],{"type":47,"tag":60,"props":1880,"children":1882},{"className":1881},[],[1883],{"type":53,"value":1429},{"type":47,"tag":754,"props":1885,"children":1886},{},[1887],{"type":53,"value":1888},"Mint admin token from API Keys service via the public api gateway",{"type":47,"tag":754,"props":1890,"children":1891},{},[1892],{"type":53,"value":1893},"Before any cluster-management operation; idempotent",{"type":47,"tag":732,"props":1895,"children":1896},{},[1897,1906,1911],{"type":47,"tag":754,"props":1898,"children":1899},{},[1900],{"type":47,"tag":60,"props":1901,"children":1903},{"className":1902},[],[1904],{"type":53,"value":1905},"nvcf-cli cluster register --name=X --nca-id=Y --region=Z [--ignore-existing]",{"type":47,"tag":754,"props":1907,"children":1908},{},[1909],{"type":53,"value":1910},"Register a cluster JWKS+OIDC issuer with ICMS",{"type":47,"tag":754,"props":1912,"children":1913},{},[1914],{"type":53,"value":1915},"Standalone register (without compute-plane install)",{"type":47,"tag":732,"props":1917,"children":1918},{},[1919,1928,1933],{"type":47,"tag":754,"props":1920,"children":1921},{},[1922],{"type":47,"tag":60,"props":1923,"children":1925},{"className":1924},[],[1926],{"type":53,"value":1927},"nvcf-cli cluster rotate --cluster-id=ID",{"type":47,"tag":754,"props":1929,"children":1930},{},[1931],{"type":53,"value":1932},"Rotate cluster JWKS in ICMS",{"type":47,"tag":754,"props":1934,"children":1935},{},[1936],{"type":53,"value":1937},"When NVCA's K8s signing key changed and PSAT verification started 401-ing",{"type":47,"tag":732,"props":1939,"children":1940},{},[1941,1950,1955],{"type":47,"tag":754,"props":1942,"children":1943},{},[1944],{"type":47,"tag":60,"props":1945,"children":1947},{"className":1946},[],[1948],{"type":53,"value":1949},"nvcf-cli cluster delete --cluster-id=ID",{"type":47,"tag":754,"props":1951,"children":1952},{},[1953],{"type":53,"value":1954},"Remove cluster registration from ICMS",{"type":47,"tag":754,"props":1956,"children":1957},{},[1958,1963],{"type":47,"tag":630,"props":1959,"children":1960},{},[1961],{"type":53,"value":1962},"Confirm with user.",{"type":53,"value":1964}," Destroys ICMS state for the cluster.",{"type":47,"tag":732,"props":1966,"children":1967},{},[1968,1977,1982],{"type":47,"tag":754,"props":1969,"children":1970},{},[1971],{"type":47,"tag":60,"props":1972,"children":1974},{"className":1973},[],[1975],{"type":53,"value":1976},"nvcf-cli api-key generate --description=\"…\" --expires-in=1h",{"type":47,"tag":754,"props":1978,"children":1979},{},[1980],{"type":53,"value":1981},"Mint both a function API key and a task API key (default)",{"type":47,"tag":754,"props":1983,"children":1984},{},[1985,1987],{"type":53,"value":1986},"Before invoking functions or creating tasks; run after every ",{"type":47,"tag":60,"props":1988,"children":1990},{"className":1989},[],[1991],{"type":53,"value":1457},{"type":47,"tag":732,"props":1993,"children":1994},{},[1995,2004,2017],{"type":47,"tag":754,"props":1996,"children":1997},{},[1998],{"type":47,"tag":60,"props":1999,"children":2001},{"className":2000},[],[2002],{"type":53,"value":2003},"nvcf-cli api-key generate --for function --description=\"…\"",{"type":47,"tag":754,"props":2005,"children":2006},{},[2007,2009,2015],{"type":53,"value":2008},"Mint a function API key only (",{"type":47,"tag":60,"props":2010,"children":2012},{"className":2011},[],[2013],{"type":53,"value":2014},"invoke_function",{"type":53,"value":2016}," scope)",{"type":47,"tag":754,"props":2018,"children":2019},{},[2020],{"type":53,"value":2021},"When only function invocation is needed",{"type":47,"tag":732,"props":2023,"children":2024},{},[2025,2034,2039],{"type":47,"tag":754,"props":2026,"children":2027},{},[2028],{"type":47,"tag":60,"props":2029,"children":2031},{"className":2030},[],[2032],{"type":53,"value":2033},"nvcf-cli api-key generate --for task --description=\"…\"",{"type":47,"tag":754,"props":2035,"children":2036},{},[2037],{"type":53,"value":2038},"Mint a task API key only",{"type":47,"tag":754,"props":2040,"children":2041},{},[2042],{"type":53,"value":2043},"When only task operations are needed",{"type":47,"tag":732,"props":2045,"children":2046},{},[2047,2056,2061],{"type":47,"tag":754,"props":2048,"children":2049},{},[2050],{"type":47,"tag":60,"props":2051,"children":2053},{"className":2052},[],[2054],{"type":53,"value":2055},"nvcf-cli function create --input-file=\u003Cjson>",{"type":47,"tag":754,"props":2057,"children":2058},{},[2059],{"type":53,"value":2060},"Create function metadata in ICMS",{"type":47,"tag":754,"props":2062,"children":2063},{},[2064,2066,2072,2073,2079],{"type":53,"value":2065},"First step of any function deploy; use ",{"type":47,"tag":60,"props":2067,"children":2069},{"className":2068},[],[2070],{"type":53,"value":2071},"functionType: \"LLM\"",{"type":53,"value":807},{"type":47,"tag":60,"props":2074,"children":2076},{"className":2075},[],[2077],{"type":53,"value":2078},"models[].llmConfig",{"type":53,"value":2080}," for LLM functions",{"type":47,"tag":732,"props":2082,"children":2083},{},[2084,2093,2098],{"type":47,"tag":754,"props":2085,"children":2086},{},[2087],{"type":47,"tag":60,"props":2088,"children":2090},{"className":2089},[],[2091],{"type":53,"value":2092},"nvcf-cli function deploy create --input-file=\u003Cjson>",{"type":47,"tag":754,"props":2094,"children":2095},{},[2096],{"type":53,"value":2097},"Schedule a deployment of a created function",{"type":47,"tag":754,"props":2099,"children":2100},{},[2101],{"type":53,"value":2102},"Waits for ACTIVE before returning (timeout 900s)",{"type":47,"tag":732,"props":2104,"children":2105},{},[2106,2115,2120],{"type":47,"tag":754,"props":2107,"children":2108},{},[2109],{"type":47,"tag":60,"props":2110,"children":2112},{"className":2111},[],[2113],{"type":53,"value":2114},"nvcf-cli function invoke --input-file=\u003Cjson>",{"type":47,"tag":754,"props":2116,"children":2117},{},[2118],{"type":53,"value":2119},"Invoke a deployed function",{"type":47,"tag":754,"props":2121,"children":2122},{},[2123],{"type":53,"value":2124},"Requires API key (not admin token)",{"type":47,"tag":732,"props":2126,"children":2127},{},[2128,2137,2142],{"type":47,"tag":754,"props":2129,"children":2130},{},[2131],{"type":47,"tag":60,"props":2132,"children":2134},{"className":2133},[],[2135],{"type":53,"value":2136},"nvcf-cli function delete --function-id=ID --version-id=VID",{"type":47,"tag":754,"props":2138,"children":2139},{},[2140],{"type":53,"value":2141},"Remove a function and its deployment",{"type":47,"tag":754,"props":2143,"children":2144},{},[2145],{"type":47,"tag":630,"props":2146,"children":2147},{},[2148],{"type":53,"value":1962},{"type":47,"tag":732,"props":2150,"children":2151},{},[2152,2161,2166],{"type":47,"tag":754,"props":2153,"children":2154},{},[2155],{"type":47,"tag":60,"props":2156,"children":2158},{"className":2157},[],[2159],{"type":53,"value":2160},"nvcf-cli task create --name=X --gpu=H100 --instance-type=Y --image=Z",{"type":47,"tag":754,"props":2162,"children":2163},{},[2164],{"type":53,"value":2165},"Submit a container task; saves task ID to CLI state",{"type":47,"tag":754,"props":2167,"children":2168},{},[2169,2171,2177],{"type":53,"value":2170},"Requires task API key; set ",{"type":47,"tag":60,"props":2172,"children":2174},{"className":2173},[],[2175],{"type":53,"value":2176},"NVCF_BASE_NVCT_URL",{"type":53,"value":2178}," to the NVCT gateway endpoint",{"type":47,"tag":732,"props":2180,"children":2181},{},[2182,2191,2196],{"type":47,"tag":754,"props":2183,"children":2184},{},[2185],{"type":47,"tag":60,"props":2186,"children":2188},{"className":2187},[],[2189],{"type":53,"value":2190},"nvcf-cli task create --name=X --gpu=H100 --instance-type=Y --helm-chart=Z",{"type":47,"tag":754,"props":2192,"children":2193},{},[2194],{"type":53,"value":2195},"Submit a Helm task",{"type":47,"tag":754,"props":2197,"children":2198},{},[2199,2201,2207,2209],{"type":53,"value":2200},"Same as container task; ",{"type":47,"tag":60,"props":2202,"children":2204},{"className":2203},[],[2205],{"type":53,"value":2206},"--helm-chart",{"type":53,"value":2208}," replaces ",{"type":47,"tag":60,"props":2210,"children":2212},{"className":2211},[],[2213],{"type":53,"value":2214},"--image",{"type":47,"tag":732,"props":2216,"children":2217},{},[2218,2227,2232],{"type":47,"tag":754,"props":2219,"children":2220},{},[2221],{"type":47,"tag":60,"props":2222,"children":2224},{"className":2223},[],[2225],{"type":53,"value":2226},"nvcf-cli task create --input-file=\u003Cjson>",{"type":47,"tag":754,"props":2228,"children":2229},{},[2230],{"type":53,"value":2231},"Submit a task from a JSON config file",{"type":47,"tag":754,"props":2233,"children":2234},{},[2235],{"type":53,"value":2236},"Recommended for repeatable configurations",{"type":47,"tag":732,"props":2238,"children":2239},{},[2240,2249,2254],{"type":47,"tag":754,"props":2241,"children":2242},{},[2243],{"type":47,"tag":60,"props":2244,"children":2246},{"className":2245},[],[2247],{"type":53,"value":2248},"nvcf-cli task list [--status=QUEUED|RUNNING|COMPLETED]",{"type":47,"tag":754,"props":2250,"children":2251},{},[2252],{"type":53,"value":2253},"List tasks, optionally filtered by status",{"type":47,"tag":754,"props":2255,"children":2256},{},[],{"type":47,"tag":732,"props":2258,"children":2259},{},[2260,2269,2274],{"type":47,"tag":754,"props":2261,"children":2262},{},[2263],{"type":47,"tag":60,"props":2264,"children":2266},{"className":2265},[],[2267],{"type":53,"value":2268},"nvcf-cli task get [taskId]",{"type":47,"tag":754,"props":2270,"children":2271},{},[2272],{"type":53,"value":2273},"Get details for a task; uses saved task ID if omitted",{"type":47,"tag":754,"props":2275,"children":2276},{},[],{"type":47,"tag":732,"props":2278,"children":2279},{},[2280,2289,2294],{"type":47,"tag":754,"props":2281,"children":2282},{},[2283],{"type":47,"tag":60,"props":2284,"children":2286},{"className":2285},[],[2287],{"type":53,"value":2288},"nvcf-cli task events [taskId]",{"type":47,"tag":754,"props":2290,"children":2291},{},[2292],{"type":53,"value":2293},"Stream lifecycle events for a task",{"type":47,"tag":754,"props":2295,"children":2296},{},[],{"type":47,"tag":732,"props":2298,"children":2299},{},[2300,2309,2314],{"type":47,"tag":754,"props":2301,"children":2302},{},[2303],{"type":47,"tag":60,"props":2304,"children":2306},{"className":2305},[],[2307],{"type":53,"value":2308},"nvcf-cli task results [taskId]",{"type":47,"tag":754,"props":2310,"children":2311},{},[2312],{"type":53,"value":2313},"List result artifacts for a completed task",{"type":47,"tag":754,"props":2315,"children":2316},{},[2317,2319,2325],{"type":53,"value":2318},"Result upload not yet supported; returns empty list for ",{"type":47,"tag":60,"props":2320,"children":2322},{"className":2321},[],[2323],{"type":53,"value":2324},"NONE",{"type":53,"value":2326}," strategy",{"type":47,"tag":732,"props":2328,"children":2329},{},[2330,2339,2344],{"type":47,"tag":754,"props":2331,"children":2332},{},[2333],{"type":47,"tag":60,"props":2334,"children":2336},{"className":2335},[],[2337],{"type":53,"value":2338},"nvcf-cli task cancel [taskId]",{"type":47,"tag":754,"props":2340,"children":2341},{},[2342],{"type":53,"value":2343},"Cancel a queued or running task",{"type":47,"tag":754,"props":2345,"children":2346},{},[],{"type":47,"tag":732,"props":2348,"children":2349},{},[2350,2359,2364],{"type":47,"tag":754,"props":2351,"children":2352},{},[2353],{"type":47,"tag":60,"props":2354,"children":2356},{"className":2355},[],[2357],{"type":53,"value":2358},"nvcf-cli task delete [taskId]",{"type":47,"tag":754,"props":2360,"children":2361},{},[2362],{"type":53,"value":2363},"Delete a task record",{"type":47,"tag":754,"props":2365,"children":2366},{},[2367],{"type":47,"tag":630,"props":2368,"children":2369},{},[2370],{"type":53,"value":1962},{"type":47,"tag":732,"props":2372,"children":2373},{},[2374,2383,2388],{"type":47,"tag":754,"props":2375,"children":2376},{},[2377],{"type":47,"tag":60,"props":2378,"children":2380},{"className":2379},[],[2381],{"type":53,"value":2382},"nvcf-cli task update-secrets [taskId] --secrets NAME=value",{"type":47,"tag":754,"props":2384,"children":2385},{},[2386],{"type":53,"value":2387},"Update secrets on a task; supplied secrets are added or updated by name, existing secrets not in the request are preserved",{"type":47,"tag":754,"props":2389,"children":2390},{},[],{"type":47,"tag":732,"props":2392,"children":2393},{},[2394,2403,2408],{"type":47,"tag":754,"props":2395,"children":2396},{},[2397],{"type":47,"tag":60,"props":2398,"children":2400},{"className":2399},[],[2401],{"type":53,"value":2402},"nvcf-cli task bulk --task-ids=ID1,ID2",{"type":47,"tag":754,"props":2404,"children":2405},{},[2406],{"type":53,"value":2407},"Fetch details for multiple tasks in one call",{"type":47,"tag":754,"props":2409,"children":2410},{},[],{"type":47,"tag":623,"props":2412,"children":2413},{},[2414],{"type":47,"tag":56,"props":2415,"children":2416},{},[2417,2419,2425,2426,2431,2432,2437,2439,2445,2447,2453,2455,2461,2462,2467,2469,2475,2477,2483],{"type":53,"value":2418},"Registry credential propagation: after ",{"type":47,"tag":60,"props":2420,"children":2422},{"className":2421},[],[2423],{"type":53,"value":2424},"registry-credential add",{"type":53,"value":918},{"type":47,"tag":60,"props":2427,"children":2429},{"className":2428},[],[2430],{"type":53,"value":901},{"type":53,"value":918},{"type":47,"tag":60,"props":2433,"children":2435},{"className":2434},[],[2436],{"type":53,"value":908},{"type":53,"value":2438},", task creation can keep using the previous credential for up to about 5 minutes (NVCT caches account credentials at ",{"type":47,"tag":60,"props":2440,"children":2442},{"className":2441},[],[2443],{"type":53,"value":2444},"nvct.nvcf.cache-ttl",{"type":53,"value":2446},", default ",{"type":47,"tag":60,"props":2448,"children":2450},{"className":2449},[],[2451],{"type":53,"value":2452},"PT5M",{"type":53,"value":2454},"), even though ",{"type":47,"tag":60,"props":2456,"children":2458},{"className":2457},[],[2459],{"type":53,"value":2460},"registry-credential list",{"type":53,"value":918},{"type":47,"tag":60,"props":2463,"children":2465},{"className":2464},[],[2466],{"type":53,"value":984},{"type":53,"value":2468}," show the new value immediately. Wait about 5 minutes, or ",{"type":47,"tag":60,"props":2470,"children":2472},{"className":2471},[],[2473],{"type":53,"value":2474},"kubectl -n nvcf rollout restart deployment\u002Fnvct-api",{"type":53,"value":2476}," to apply immediately. See ",{"type":47,"tag":2478,"props":2479,"children":2481},"a",{"href":2480},"reference\u002Ftroubleshooting.md",[2482],{"type":53,"value":2480},{"type":53,"value":648},{"type":47,"tag":69,"props":2485,"children":2487},{"id":2486},"llm-function-type",[2488],{"type":53,"value":2489},"LLM function type",{"type":47,"tag":56,"props":2491,"children":2492},{},[2493,2495,2500,2502,2508,2510,2516,2517,2523,2525,2531,2532,2538,2540,2546],{"type":53,"value":2494},"Use ",{"type":47,"tag":60,"props":2496,"children":2498},{"className":2497},[],[2499],{"type":53,"value":2071},{"type":53,"value":2501}," for OpenAI-compatible models served through the self-managed LLM Gateway. LLM functions must define at least one ",{"type":47,"tag":60,"props":2503,"children":2505},{"className":2504},[],[2506],{"type":53,"value":2507},"models[]",{"type":53,"value":2509}," entry with ",{"type":47,"tag":60,"props":2511,"children":2513},{"className":2512},[],[2514],{"type":53,"value":2515},"name",{"type":53,"value":807},{"type":47,"tag":60,"props":2518,"children":2520},{"className":2519},[],[2521],{"type":53,"value":2522},"llmConfig.uris",{"type":53,"value":2524},"; the supported upstream paths are ",{"type":47,"tag":60,"props":2526,"children":2528},{"className":2527},[],[2529],{"type":53,"value":2530},"\u002Fv1\u002Fchat\u002Fcompletions",{"type":53,"value":140},{"type":47,"tag":60,"props":2533,"children":2535},{"className":2534},[],[2536],{"type":53,"value":2537},"\u002Fv1\u002Fresponses",{"type":53,"value":2539},", and ",{"type":47,"tag":60,"props":2541,"children":2543},{"className":2542},[],[2544],{"type":53,"value":2545},"\u002Fv1\u002Fembeddings",{"type":53,"value":648},{"type":47,"tag":56,"props":2548,"children":2549},{},[2550,2551,2557,2559,2565],{"type":53,"value":2494},{"type":47,"tag":60,"props":2552,"children":2554},{"className":2553},[],[2555],{"type":53,"value":2556},"\u002Fhealth",{"type":53,"value":2558}," on port ",{"type":47,"tag":60,"props":2560,"children":2562},{"className":2561},[],[2563],{"type":53,"value":2564},"8000",{"type":53,"value":2566}," as the default OpenAI-compatible container health probe unless the image exposes a different readiness path.",{"type":47,"tag":56,"props":2568,"children":2569},{},[2570,2572,2577,2578,2583,2585,2591,2592,2598,2600,2605,2607,2613],{"type":53,"value":2571},"LLM function type is independent of workload packaging. For a Helm-chart backed LLM function, keep ",{"type":47,"tag":60,"props":2573,"children":2575},{"className":2574},[],[2576],{"type":53,"value":2071},{"type":53,"value":807},{"type":47,"tag":60,"props":2579,"children":2581},{"className":2580},[],[2582],{"type":53,"value":2078},{"type":53,"value":2584},", then set ",{"type":47,"tag":60,"props":2586,"children":2588},{"className":2587},[],[2589],{"type":53,"value":2590},"helmChart",{"type":53,"value":807},{"type":47,"tag":60,"props":2593,"children":2595},{"className":2594},[],[2596],{"type":53,"value":2597},"helmChartServiceName",{"type":53,"value":2599}," in the create request. ",{"type":47,"tag":60,"props":2601,"children":2603},{"className":2602},[],[2604],{"type":53,"value":2597},{"type":53,"value":2606}," must match the Kubernetes Service exposed by the chart, and ",{"type":47,"tag":60,"props":2608,"children":2610},{"className":2609},[],[2611],{"type":53,"value":2612},"inferencePort",{"type":53,"value":2614}," must be that Service port.",{"type":47,"tag":56,"props":2616,"children":2617},{},[2618,2620,2626,2628,2634,2636,2642],{"type":53,"value":2619},"Invocation uses the LLM route, for example ",{"type":47,"tag":60,"props":2621,"children":2623},{"className":2622},[],[2624],{"type":53,"value":2625},"https:\u002F\u002Fllm.invocation.\u003Cdomain>\u002Fv1\u002Fchat\u002Fcompletions",{"type":53,"value":2627},". The OpenAI ",{"type":47,"tag":60,"props":2629,"children":2631},{"className":2630},[],[2632],{"type":53,"value":2633},"model",{"type":53,"value":2635}," value must be ",{"type":47,"tag":60,"props":2637,"children":2639},{"className":2638},[],[2640],{"type":53,"value":2641},"\u003Cfunction-id>\u002F\u003Cmodel-name>",{"type":53,"value":2643},"; the function ID is the routing key and the model name is forwarded upstream.",{"type":47,"tag":56,"props":2645,"children":2646},{},[2647,2649,2655,2657,2663,2665,2670,2672,2678,2680,2686,2687,2693,2694,2700,2701,2707,2708,2714,2716,2722,2724,2730],{"type":53,"value":2648},"Update mutable per-model routing settings with ",{"type":47,"tag":60,"props":2650,"children":2652},{"className":2651},[],[2653],{"type":53,"value":2654},"nvcf-cli function update --llm-model-update='name=\u003Cmodel>,routingMethod=\u003Cmethod>,tokenRateLimit=\u003Climit>'",{"type":53,"value":2656},", or put the same fields under ",{"type":47,"tag":60,"props":2658,"children":2660},{"className":2659},[],[2661],{"type":53,"value":2662},"modelUpdates[].llmConfig",{"type":53,"value":2664}," in an update JSON file. See ",{"type":47,"tag":2478,"props":2666,"children":2668},{"href":2667},"reference\u002Fflags.md",[2669],{"type":53,"value":2667},{"type":53,"value":2671}," for accepted routing methods. ",{"type":47,"tag":60,"props":2673,"children":2675},{"className":2674},[],[2676],{"type":53,"value":2677},"tokenRateLimit",{"type":53,"value":2679}," supports positive integer limits for ",{"type":47,"tag":60,"props":2681,"children":2683},{"className":2682},[],[2684],{"type":53,"value":2685},"S",{"type":53,"value":140},{"type":47,"tag":60,"props":2688,"children":2690},{"className":2689},[],[2691],{"type":53,"value":2692},"M",{"type":53,"value":140},{"type":47,"tag":60,"props":2695,"children":2697},{"className":2696},[],[2698],{"type":53,"value":2699},"H",{"type":53,"value":140},{"type":47,"tag":60,"props":2702,"children":2704},{"className":2703},[],[2705],{"type":53,"value":2706},"D",{"type":53,"value":2539},{"type":47,"tag":60,"props":2709,"children":2711},{"className":2710},[],[2712],{"type":53,"value":2713},"W",{"type":53,"value":2715},"; use JSON input for combined limits such as ",{"type":47,"tag":60,"props":2717,"children":2719},{"className":2718},[],[2720],{"type":53,"value":2721},"1000-S,5000-M,100000-H,500000-D,1000000-W",{"type":53,"value":2723},". Do not include ",{"type":47,"tag":60,"props":2725,"children":2727},{"className":2726},[],[2728],{"type":53,"value":2729},"uris",{"type":53,"value":2731}," in model updates.",{"type":47,"tag":56,"props":2733,"children":2734},{},[2735,2737,2742,2744,2749],{"type":53,"value":2736},"For ",{"type":47,"tag":60,"props":2738,"children":2740},{"className":2739},[],[2741],{"type":53,"value":2537},{"type":53,"value":2743},", the gateway proxies the native Responses path upstream, relays SSE to streaming clients, and aggregates the terminal JSON response for non-streaming clients. For ",{"type":47,"tag":60,"props":2745,"children":2747},{"className":2746},[],[2748],{"type":53,"value":2545},{"type":53,"value":2750},", input may be a string or string array, must be non-empty, and may contain at most 2048 entries.",{"type":47,"tag":56,"props":2752,"children":2753},{},[2754,2756,2762],{"type":53,"value":2755},"Session stickiness uses ",{"type":47,"tag":60,"props":2757,"children":2759},{"className":2758},[],[2760],{"type":53,"value":2761},"x-multi-turn-session-id",{"type":53,"value":2763}," for chat completions and Responses API requests only. Embeddings requests do not use stickiness.",{"type":47,"tag":69,"props":2765,"children":2767},{"id":2766},"common-workflows",[2768],{"type":53,"value":2769},"Common workflows",{"type":47,"tag":56,"props":2771,"children":2772},{},[2773],{"type":53,"value":2774},"For step-by-step playbooks, load the prompt that matches the user's intent:",{"type":47,"tag":76,"props":2776,"children":2777},{},[2778,2794,2817,2833,2857,2873,2928],{"type":47,"tag":80,"props":2779,"children":2780},{},[2781,2786,2787,2792],{"type":47,"tag":630,"props":2782,"children":2783},{},[2784],{"type":53,"value":2785},"Install from scratch.",{"type":53,"value":650},{"type":47,"tag":2478,"props":2788,"children":2790},{"href":2789},"prompts\u002Finstall-from-scratch.md",[2791],{"type":53,"value":2789},{"type":53,"value":2793}," — k3d cluster → preflight → up → deploy a smoke function.",{"type":47,"tag":80,"props":2795,"children":2796},{},[2797,2802,2803,2808,2810,2815],{"type":47,"tag":630,"props":2798,"children":2799},{},[2800],{"type":53,"value":2801},"Add a new compute plane.",{"type":53,"value":650},{"type":47,"tag":2478,"props":2804,"children":2806},{"href":2805},"prompts\u002Fadd-compute-plane.md",[2807],{"type":53,"value":2805},{"type":53,"value":2809}," — split-cluster ",{"type":47,"tag":60,"props":2811,"children":2813},{"className":2812},[],[2814],{"type":53,"value":638},{"type":53,"value":2816}," against an existing control plane.",{"type":47,"tag":80,"props":2818,"children":2819},{},[2820,2825,2826,2831],{"type":47,"tag":630,"props":2821,"children":2822},{},[2823],{"type":53,"value":2824},"Deploy and invoke a function.",{"type":53,"value":650},{"type":47,"tag":2478,"props":2827,"children":2829},{"href":2828},"prompts\u002Fdeploy-and-invoke.md",[2830],{"type":53,"value":2828},{"type":53,"value":2832}," — create → deploy → API key → invoke, including the LLM create\u002Finvoke variant.",{"type":47,"tag":80,"props":2834,"children":2835},{},[2836,2841,2842,2847,2849,2855],{"type":47,"tag":630,"props":2837,"children":2838},{},[2839],{"type":53,"value":2840},"Diagnose a failed install.",{"type":53,"value":650},{"type":47,"tag":2478,"props":2843,"children":2845},{"href":2844},"prompts\u002Fdiagnose-failed-install.md",[2846],{"type":53,"value":2844},{"type":53,"value":2848}," — ",{"type":47,"tag":60,"props":2850,"children":2852},{"className":2851},[],[2853],{"type":53,"value":2854},"status --json",{"type":53,"value":2856}," → identify failed component → kubectl describe → remediation.",{"type":47,"tag":80,"props":2858,"children":2859},{},[2860,2865,2866,2871],{"type":47,"tag":630,"props":2861,"children":2862},{},[2863],{"type":53,"value":2864},"Rotate JWKS.",{"type":53,"value":650},{"type":47,"tag":2478,"props":2867,"children":2869},{"href":2868},"prompts\u002Frotate-cluster-jwks.md",[2870],{"type":53,"value":2868},{"type":53,"value":2872}," — when PSAT auth starts failing.",{"type":47,"tag":80,"props":2874,"children":2875},{},[2876,2881,2882,2887,2888,2894,2896,2902,2904,2910,2912,2918,2920,2926],{"type":47,"tag":630,"props":2877,"children":2878},{},[2879],{"type":53,"value":2880},"Tear down.",{"type":53,"value":650},{"type":47,"tag":2478,"props":2883,"children":2885},{"href":2884},"prompts\u002Fteardown.md",[2886],{"type":53,"value":2884},{"type":53,"value":2848},{"type":47,"tag":60,"props":2889,"children":2891},{"className":2890},[],[2892],{"type":53,"value":2893},"down --plan-only",{"type":53,"value":2895}," first, then real run. ",{"type":47,"tag":60,"props":2897,"children":2899},{"className":2898},[],[2900],{"type":53,"value":2901},"down --cluster-name=X",{"type":53,"value":2903}," for one compute plane (orchestrator: drain + uninstall + cluster delete); ",{"type":47,"tag":60,"props":2905,"children":2907},{"className":2906},[],[2908],{"type":53,"value":2909},"uninstall --control-plane",{"type":53,"value":2911}," for the control plane (per-plane primitive); ",{"type":47,"tag":60,"props":2913,"children":2915},{"className":2914},[],[2916],{"type":53,"value":2917},"down --all --confirm",{"type":53,"value":2919}," for everything; ",{"type":47,"tag":60,"props":2921,"children":2923},{"className":2922},[],[2924],{"type":53,"value":2925},"uninstall --no-apply \u003Cplane> | kubectl delete -f -",{"type":53,"value":2927}," for GitOps.",{"type":47,"tag":80,"props":2929,"children":2930},{},[2931,2936,2937,2942,2944,2950,2951,2957],{"type":47,"tag":630,"props":2932,"children":2933},{},[2934],{"type":53,"value":2935},"Create and run a task.",{"type":53,"value":650},{"type":47,"tag":2478,"props":2938,"children":2940},{"href":2939},"prompts\u002Fcreate-and-run-task.md",[2941],{"type":53,"value":2939},{"type":53,"value":2943}," — mint API keys → task create (container or Helm) → monitor with ",{"type":47,"tag":60,"props":2945,"children":2947},{"className":2946},[],[2948],{"type":53,"value":2949},"task get",{"type":53,"value":190},{"type":47,"tag":60,"props":2952,"children":2954},{"className":2953},[],[2955],{"type":53,"value":2956},"task events",{"type":53,"value":2958}," → retrieve results → cleanup.",{"type":47,"tag":69,"props":2960,"children":2962},{"id":2961},"reference",[2963],{"type":53,"value":2964},"Reference",{"type":47,"tag":76,"props":2966,"children":2967},{},[2968,2978,2987,2997],{"type":47,"tag":80,"props":2969,"children":2970},{},[2971,2976],{"type":47,"tag":2478,"props":2972,"children":2974},{"href":2973},"reference\u002Fcommands.md",[2975],{"type":53,"value":2973},{"type":53,"value":2977}," — full subcommand cheat sheet",{"type":47,"tag":80,"props":2979,"children":2980},{},[2981,2985],{"type":47,"tag":2478,"props":2982,"children":2983},{"href":2667},[2984],{"type":53,"value":2667},{"type":53,"value":2986}," — global + per-command flags",{"type":47,"tag":80,"props":2988,"children":2989},{},[2990,2995],{"type":47,"tag":2478,"props":2991,"children":2993},{"href":2992},"reference\u002Fexit-codes.md",[2994],{"type":53,"value":2992},{"type":53,"value":2996}," — what each non-zero exit means",{"type":47,"tag":80,"props":2998,"children":2999},{},[3000,3004],{"type":47,"tag":2478,"props":3001,"children":3002},{"href":2480},[3003],{"type":53,"value":2480},{"type":53,"value":3005}," — known errors → remediation table",{"type":47,"tag":69,"props":3007,"children":3009},{"id":3008},"safety-rules-critical",[3010],{"type":53,"value":3011},"Safety rules — CRITICAL",{"type":47,"tag":56,"props":3013,"children":3014},{},[3015],{"type":47,"tag":630,"props":3016,"children":3017},{},[3018],{"type":53,"value":3019},"NEVER do these without explicit user confirmation:",{"type":47,"tag":76,"props":3021,"children":3022},{},[3023,3076,3102,3113,3132,3143,3154,3165,3199],{"type":47,"tag":80,"props":3024,"children":3025},{},[3026,3032,3033,3039,3041,3074],{"type":47,"tag":60,"props":3027,"children":3029},{"className":3028},[],[3030],{"type":53,"value":3031},"nvcf-cli self-hosted down",{"type":53,"value":1491},{"type":47,"tag":60,"props":3034,"children":3036},{"className":3035},[],[3037],{"type":53,"value":3038},"uninstall",{"type":53,"value":3040}," in any form — destructive. ",{"type":47,"tag":630,"props":3042,"children":3043},{},[3044,3046,3051,3053,3058,3060,3066,3067,3072],{"type":53,"value":3045},"ALWAYS run with ",{"type":47,"tag":60,"props":3047,"children":3049},{"className":3048},[],[3050],{"type":53,"value":694},{"type":53,"value":3052}," (",{"type":47,"tag":60,"props":3054,"children":3056},{"className":3055},[],[3057],{"type":53,"value":120},{"type":53,"value":3059},") or ",{"type":47,"tag":60,"props":3061,"children":3063},{"className":3062},[],[3064],{"type":53,"value":3065},"--no-apply",{"type":53,"value":3052},{"type":47,"tag":60,"props":3068,"children":3070},{"className":3069},[],[3071],{"type":53,"value":3038},{"type":53,"value":3073},") first",{"type":53,"value":3075}," and show the user what would happen. State which compute plane(s) and whether persistent state would be wiped.",{"type":47,"tag":80,"props":3077,"children":3078},{},[3079,3085,3087,3093,3095,3100],{"type":47,"tag":60,"props":3080,"children":3082},{"className":3081},[],[3083],{"type":53,"value":3084},"nvcf-cli self-hosted down --remove-persistent",{"type":53,"value":3086}," (or ",{"type":47,"tag":60,"props":3088,"children":3090},{"className":3089},[],[3091],{"type":53,"value":3092},"uninstall --remove-persistent",{"type":53,"value":3094},") — deletes Cassandra rows, OpenBao seal keys, sr-default user data. ",{"type":47,"tag":630,"props":3096,"children":3097},{},[3098],{"type":53,"value":3099},"Loss is unrecoverable.",{"type":53,"value":3101}," Confirm explicitly that this is what the user wants.",{"type":47,"tag":80,"props":3103,"children":3104},{},[3105,3111],{"type":47,"tag":60,"props":3106,"children":3108},{"className":3107},[],[3109],{"type":53,"value":3110},"nvcf-cli self-hosted uninstall --control-plane --force-with-registered-clusters",{"type":53,"value":3112}," — orphans every registered compute plane (PSAT auth breaks immediately). State the consequence before passing this flag.",{"type":47,"tag":80,"props":3114,"children":3115},{},[3116,3122,3124,3130],{"type":47,"tag":60,"props":3117,"children":3119},{"className":3118},[],[3120],{"type":53,"value":3121},"nvcf-cli self-hosted down --all",{"type":53,"value":3123}," — nukes everything. Always show the cluster list (",{"type":47,"tag":60,"props":3125,"children":3127},{"className":3126},[],[3128],{"type":53,"value":3129},"nvcf-cli cluster list",{"type":53,"value":3131},") and get confirmation.",{"type":47,"tag":80,"props":3133,"children":3134},{},[3135,3141],{"type":47,"tag":60,"props":3136,"children":3138},{"className":3137},[],[3139],{"type":53,"value":3140},"nvcf-cli cluster delete",{"type":53,"value":3142}," — removes the cluster's ICMS registration; the compute plane immediately stops being able to authenticate.",{"type":47,"tag":80,"props":3144,"children":3145},{},[3146,3152],{"type":47,"tag":60,"props":3147,"children":3149},{"className":3148},[],[3150],{"type":53,"value":3151},"nvcf-cli function delete",{"type":53,"value":3153}," — removes a function and any active deployment.",{"type":47,"tag":80,"props":3155,"children":3156},{},[3157,3163],{"type":47,"tag":60,"props":3158,"children":3160},{"className":3159},[],[3161],{"type":53,"value":3162},"nvcf-cli task delete",{"type":53,"value":3164}," — permanently removes the task record. Stop, state the task ID and current status, then wait for a subsequent user reply that explicitly confirms deletion of that specific task before running this command. Do not treat the user's original delete request as confirmation.",{"type":47,"tag":80,"props":3166,"children":3167},{},[3168,3170,3176,3177,3183,3185,3190,3192,3197],{"type":53,"value":3169},"Any raw ",{"type":47,"tag":60,"props":3171,"children":3173},{"className":3172},[],[3174],{"type":53,"value":3175},"helm uninstall",{"type":53,"value":1491},{"type":47,"tag":60,"props":3178,"children":3180},{"className":3179},[],[3181],{"type":53,"value":3182},"kubectl delete pvc\u002Fpv",{"type":53,"value":3184}," — affects persistent state. Prefer ",{"type":47,"tag":60,"props":3186,"children":3188},{"className":3187},[],[3189],{"type":53,"value":3031},{"type":53,"value":3191}," (orchestrator) or ",{"type":47,"tag":60,"props":3193,"children":3195},{"className":3194},[],[3196],{"type":53,"value":3038},{"type":53,"value":3198}," (per-plane) which handle this safely.",{"type":47,"tag":80,"props":3200,"children":3201},{},[3202,3204,3210,3212,3218,3219,3225],{"type":53,"value":3203},"Any ",{"type":47,"tag":60,"props":3205,"children":3207},{"className":3206},[],[3208],{"type":53,"value":3209},"--force",{"type":53,"value":3211}," flag (",{"type":47,"tag":60,"props":3213,"children":3215},{"className":3214},[],[3216],{"type":53,"value":3217},"--force-with-registered-clusters",{"type":53,"value":140},{"type":47,"tag":60,"props":3220,"children":3222},{"className":3221},[],[3223],{"type":53,"value":3224},"--confirm",{"type":53,"value":3226}," in non-interactive contexts).",{"type":47,"tag":56,"props":3228,"children":3229},{},[3230],{"type":47,"tag":630,"props":3231,"children":3232},{},[3233],{"type":53,"value":3234},"ALWAYS do these:",{"type":47,"tag":76,"props":3236,"children":3237},{},[3238,3251,3256,3277,3297],{"type":47,"tag":80,"props":3239,"children":3240},{},[3241,3243,3249],{"type":53,"value":3242},"Run ",{"type":47,"tag":60,"props":3244,"children":3246},{"className":3245},[],[3247],{"type":53,"value":3248},"nvcf-cli self-hosted status",{"type":53,"value":3250}," before assuming a cluster exists \u002F is healthy.",{"type":47,"tag":80,"props":3252,"children":3253},{},[3254],{"type":53,"value":3255},"Show the planned action (cluster name, function name, GPU type, cost if known) before creating.",{"type":47,"tag":80,"props":3257,"children":3258},{},[3259,3261,3267,3269,3275],{"type":53,"value":3260},"Before creating or deploying a container or LLM function, confirm the exact function name and container image with the user. For LLM functions, also confirm the exact model name used in ",{"type":47,"tag":60,"props":3262,"children":3264},{"className":3263},[],[3265],{"type":53,"value":3266},"models[].name",{"type":53,"value":3268}," and OpenAI ",{"type":47,"tag":60,"props":3270,"children":3272},{"className":3271},[],[3273],{"type":53,"value":3274},"model: \"\u003Cfunction-id>\u002F\u003Cmodel-name>\"",{"type":53,"value":3276},". If any value is missing, ask the user instead of guessing or submitting example placeholders.",{"type":47,"tag":80,"props":3278,"children":3279},{},[3280,3282,3288,3289,3295],{"type":53,"value":3281},"Confirm exact resource names before deletion — match against ",{"type":47,"tag":60,"props":3283,"children":3285},{"className":3284},[],[3286],{"type":53,"value":3287},"cluster list",{"type":53,"value":190},{"type":47,"tag":60,"props":3290,"children":3292},{"className":3291},[],[3293],{"type":53,"value":3294},"function list",{"type":53,"value":3296}," output.",{"type":47,"tag":80,"props":3298,"children":3299},{},[3300,3302,3308,3310,3315,3317,3323],{"type":53,"value":3301},"In CI \u002F non-interactive contexts, use ",{"type":47,"tag":60,"props":3303,"children":3305},{"className":3304},[],[3306],{"type":53,"value":3307},"--non-interactive --token=$JWT",{"type":53,"value":3309},". Never propose interactive ",{"type":47,"tag":60,"props":3311,"children":3313},{"className":3312},[],[3314],{"type":53,"value":1429},{"type":53,"value":3316}," when ",{"type":47,"tag":60,"props":3318,"children":3320},{"className":3319},[],[3321],{"type":53,"value":3322},"$CI",{"type":53,"value":3324}," is set.",{"type":47,"tag":56,"props":3326,"children":3327},{},[3328],{"type":47,"tag":630,"props":3329,"children":3330},{},[3331],{"type":53,"value":3332},"NEVER paste these into chat \u002F logs \u002F feedback:",{"type":47,"tag":76,"props":3334,"children":3335},{},[3336,3349,3361,3373],{"type":47,"tag":80,"props":3337,"children":3338},{},[3339,3341,3347],{"type":53,"value":3340},"Admin tokens (full JWT). Show the first 8 chars + ",{"type":47,"tag":60,"props":3342,"children":3344},{"className":3343},[],[3345],{"type":53,"value":3346},"...",{"type":53,"value":3348}," if you must reference one.",{"type":47,"tag":80,"props":3350,"children":3351},{},[3352,3354,3360],{"type":53,"value":3353},"API keys (",{"type":47,"tag":60,"props":3355,"children":3357},{"className":3356},[],[3358],{"type":53,"value":3359},"nvapi-…",{"type":53,"value":1036},{"type":47,"tag":80,"props":3362,"children":3363},{},[3364,3366,3371],{"type":53,"value":3365},"Contents of ",{"type":47,"tag":60,"props":3367,"children":3369},{"className":3368},[],[3370],{"type":53,"value":833},{"type":53,"value":3372}," or any kubeconfig.",{"type":47,"tag":80,"props":3374,"children":3375},{},[3376],{"type":53,"value":3377},"Any data marked secret in helmfile values.",{"type":47,"tag":623,"props":3379,"children":3380},{},[3381],{"type":47,"tag":56,"props":3382,"children":3383},{},[3384,3386,3391,3393,3398,3400,3406,3408,3414,3416,3421,3423,3428,3429,3435,3437,3442],{"type":53,"value":3385},"Note (only when operating more than one cluster from the same machine): the CLI's default\nconfig (",{"type":47,"tag":60,"props":3387,"children":3389},{"className":3388},[],[3390],{"type":53,"value":797},{"type":53,"value":3392},") and state (",{"type":47,"tag":60,"props":3394,"children":3396},{"className":3395},[],[3397],{"type":53,"value":833},{"type":53,"value":3399},") are a single shared slot, not\nper-cluster. With a single control plane (the common case) this needs no attention. If you\nmanage multiple clusters, pass ",{"type":47,"tag":60,"props":3401,"children":3403},{"className":3402},[],[3404],{"type":53,"value":3405},"--config \u003Ccluster>.yaml",{"type":53,"value":3407}," on every command (or keep a\ndeliberately-switched per-cluster default): with no ",{"type":47,"tag":60,"props":3409,"children":3411},{"className":3410},[],[3412],{"type":53,"value":3413},"--config",{"type":53,"value":3415},", commands target whichever\ncluster was last ",{"type":47,"tag":60,"props":3417,"children":3419},{"className":3418},[],[3420],{"type":53,"value":1457},{"type":53,"value":3422},"'d, and ",{"type":47,"tag":60,"props":3424,"children":3426},{"className":3425},[],[3427],{"type":53,"value":1457},{"type":53,"value":190},{"type":47,"tag":60,"props":3430,"children":3432},{"className":3431},[],[3433],{"type":53,"value":3434},"api-key generate",{"type":53,"value":3436}," mutate that shared default, so an\nunscoped ",{"type":47,"tag":60,"props":3438,"children":3440},{"className":3439},[],[3441],{"type":53,"value":3434},{"type":53,"value":3443}," can mint or surface keys against the wrong cluster.",{"type":47,"tag":69,"props":3445,"children":3447},{"id":3446},"output-modes-for-agent-piping",[3448],{"type":53,"value":3449},"Output modes (for agent piping)",{"type":47,"tag":56,"props":3451,"children":3452},{},[3453,3458,3460,3465,3466,3472,3473,3479],{"type":47,"tag":60,"props":3454,"children":3456},{"className":3455},[],[3457],{"type":53,"value":65},{"type":53,"value":3459}," subcommands that long-run (",{"type":47,"tag":60,"props":3461,"children":3463},{"className":3462},[],[3464],{"type":53,"value":638},{"type":53,"value":140},{"type":47,"tag":60,"props":3467,"children":3469},{"className":3468},[],[3470],{"type":53,"value":3471},"status",{"type":53,"value":140},{"type":47,"tag":60,"props":3474,"children":3476},{"className":3475},[],[3477],{"type":53,"value":3478},"check",{"type":53,"value":3480},") accept four output modes:",{"type":47,"tag":76,"props":3482,"children":3483},{},[3484,3527,3549,3592],{"type":47,"tag":80,"props":3485,"children":3486},{},[3487,3496,3498,3504,3506,3511,3513,3519,3520,3526],{"type":47,"tag":630,"props":3488,"children":3489},{},[3490],{"type":47,"tag":60,"props":3491,"children":3493},{"className":3492},[],[3494],{"type":53,"value":3495},"--json",{"type":53,"value":3497}," — JSONL events on stderr; one event per line; stable schema (",{"type":47,"tag":60,"props":3499,"children":3501},{"className":3500},[],[3502],{"type":53,"value":3503},"schemaVersion: 2",{"type":53,"value":3505},"). ",{"type":47,"tag":630,"props":3507,"children":3508},{},[3509],{"type":53,"value":3510},"Use this when running under an agent.",{"type":53,"value":3512}," Parse line-by-line with ",{"type":47,"tag":60,"props":3514,"children":3516},{"className":3515},[],[3517],{"type":53,"value":3518},"jq -c .",{"type":53,"value":1491},{"type":47,"tag":60,"props":3521,"children":3523},{"className":3522},[],[3524],{"type":53,"value":3525},"json.loads()",{"type":53,"value":648},{"type":47,"tag":80,"props":3528,"children":3529},{},[3530,3539,3541,3547],{"type":47,"tag":630,"props":3531,"children":3532},{},[3533],{"type":47,"tag":60,"props":3534,"children":3536},{"className":3535},[],[3537],{"type":53,"value":3538},"--plain",{"type":53,"value":3540}," — Plain timestamped lines, RFC3339 UTC, ",{"type":47,"tag":60,"props":3542,"children":3544},{"className":3543},[],[3545],{"type":53,"value":3546},"[NN\u002F8]",{"type":53,"value":3548}," phase prefix; grep-friendly. Default in non-TTY.",{"type":47,"tag":80,"props":3550,"children":3551},{},[3552,3561,3563,3569,3570,3576,3577,3583,3584,3590],{"type":47,"tag":630,"props":3553,"children":3554},{},[3555],{"type":47,"tag":60,"props":3556,"children":3558},{"className":3557},[],[3559],{"type":53,"value":3560},"--accessible",{"type":53,"value":3562}," — Plain output without spinners, with verbose state markers (",{"type":47,"tag":60,"props":3564,"children":3566},{"className":3565},[],[3567],{"type":53,"value":3568},"[completed]",{"type":53,"value":140},{"type":47,"tag":60,"props":3571,"children":3573},{"className":3572},[],[3574],{"type":53,"value":3575},"[running]",{"type":53,"value":140},{"type":47,"tag":60,"props":3578,"children":3580},{"className":3579},[],[3581],{"type":53,"value":3582},"[pending]",{"type":53,"value":140},{"type":47,"tag":60,"props":3585,"children":3587},{"className":3586},[],[3588],{"type":53,"value":3589},"[failed]",{"type":53,"value":3591},"). For screen readers and constrained terminals.",{"type":47,"tag":80,"props":3593,"children":3594},{},[3595,3600],{"type":47,"tag":630,"props":3596,"children":3597},{},[3598],{"type":53,"value":3599},"(no flag)",{"type":53,"value":3601}," — Bubbletea TTY dashboard. Default in TTY ≥100×30. Don't use under an agent (cursor-up sequences are noisy).",{"type":47,"tag":56,"props":3603,"children":3604},{},[3605,3607,3613,3615,3621,3623,3629,3631,3636],{"type":53,"value":3606},"Auto-detect picks the right mode for whatever stdout\u002Fstderr is. The CLI also honors ",{"type":47,"tag":60,"props":3608,"children":3610},{"className":3609},[],[3611],{"type":53,"value":3612},"NO_COLOR",{"type":53,"value":3614}," (any value → forces plain), ",{"type":47,"tag":60,"props":3616,"children":3618},{"className":3617},[],[3619],{"type":53,"value":3620},"TERM=dumb",{"type":53,"value":3622}," (forces plain), and ",{"type":47,"tag":60,"props":3624,"children":3626},{"className":3625},[],[3627],{"type":53,"value":3628},"CI=truthy",{"type":53,"value":3630}," (forces plain even on a fake TTY). When the terminal is smaller than 100×30, the bubbletea renderer falls back to a compact layout. Explicit ",{"type":47,"tag":60,"props":3632,"children":3634},{"className":3633},[],[3635],{"type":53,"value":3495},{"type":53,"value":3637}," is the right call for agent piping.",{"type":47,"tag":69,"props":3639,"children":3641},{"id":3640},"on-failure",[3642],{"type":53,"value":3643},"On failure",{"type":47,"tag":56,"props":3645,"children":3646},{},[3647,3652,3654,3660],{"type":47,"tag":60,"props":3648,"children":3650},{"className":3649},[],[3651],{"type":53,"value":65},{"type":53,"value":3653}," failures emit structured ",{"type":47,"tag":60,"props":3655,"children":3657},{"className":3656},[],[3658],{"type":53,"value":3659},"phase_failed",{"type":53,"value":3661}," events in JSON:",{"type":47,"tag":219,"props":3663,"children":3667},{"className":3664,"code":3665,"language":3666,"meta":224,"style":224},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\"event\":\"phase_failed\",\"phaseNum\":4,\"phase\":\"apply-cp\",\n \"errCategory\":\"helm_apply\",\"errMessage\":\"helm install api-keys: timed out\",\n \"retryClass\":\"backoff\",\"retryAfterSec\":60,\n \"remediation\":[\"kubectl describe pod -n cassandra-system cassandra-0\",\n                \"Re-run with --debug for verbose helmfile output\"],\n \"raw\":{\"subprocess\":\"helmfile\",\"exitCode\":1,\"stderrTail\":\"…\",\"kubernetesReason\":\"FailedScheduling\"}}\n","json",[3668],{"type":47,"tag":60,"props":3669,"children":3670},{"__ignoreMap":224},[3671,3776,3848,3911,3949,3971],{"type":47,"tag":230,"props":3672,"children":3673},{"class":232,"line":233},[3674,3679,3684,3689,3693,3697,3701,3705,3709,3714,3718,3723,3727,3731,3737,3741,3745,3750,3754,3758,3762,3767,3771],{"type":47,"tag":230,"props":3675,"children":3676},{"style":297},[3677],{"type":53,"value":3678},"{",{"type":47,"tag":230,"props":3680,"children":3681},{"style":297},[3682],{"type":53,"value":3683},"\"",{"type":47,"tag":230,"props":3685,"children":3686},{"style":1146},[3687],{"type":53,"value":3688},"event",{"type":47,"tag":230,"props":3690,"children":3691},{"style":297},[3692],{"type":53,"value":3683},{"type":47,"tag":230,"props":3694,"children":3695},{"style":297},[3696],{"type":53,"value":1317},{"type":47,"tag":230,"props":3698,"children":3699},{"style":297},[3700],{"type":53,"value":3683},{"type":47,"tag":230,"props":3702,"children":3703},{"style":252},[3704],{"type":53,"value":3659},{"type":47,"tag":230,"props":3706,"children":3707},{"style":297},[3708],{"type":53,"value":3683},{"type":47,"tag":230,"props":3710,"children":3711},{"style":297},[3712],{"type":53,"value":3713},",",{"type":47,"tag":230,"props":3715,"children":3716},{"style":297},[3717],{"type":53,"value":3683},{"type":47,"tag":230,"props":3719,"children":3720},{"style":1146},[3721],{"type":53,"value":3722},"phaseNum",{"type":47,"tag":230,"props":3724,"children":3725},{"style":297},[3726],{"type":53,"value":3683},{"type":47,"tag":230,"props":3728,"children":3729},{"style":297},[3730],{"type":53,"value":1317},{"type":47,"tag":230,"props":3732,"children":3734},{"style":3733},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[3735],{"type":53,"value":3736},"4",{"type":47,"tag":230,"props":3738,"children":3739},{"style":297},[3740],{"type":53,"value":3713},{"type":47,"tag":230,"props":3742,"children":3743},{"style":297},[3744],{"type":53,"value":3683},{"type":47,"tag":230,"props":3746,"children":3747},{"style":1146},[3748],{"type":53,"value":3749},"phase",{"type":47,"tag":230,"props":3751,"children":3752},{"style":297},[3753],{"type":53,"value":3683},{"type":47,"tag":230,"props":3755,"children":3756},{"style":297},[3757],{"type":53,"value":1317},{"type":47,"tag":230,"props":3759,"children":3760},{"style":297},[3761],{"type":53,"value":3683},{"type":47,"tag":230,"props":3763,"children":3764},{"style":252},[3765],{"type":53,"value":3766},"apply-cp",{"type":47,"tag":230,"props":3768,"children":3769},{"style":297},[3770],{"type":53,"value":3683},{"type":47,"tag":230,"props":3772,"children":3773},{"style":297},[3774],{"type":53,"value":3775},",\n",{"type":47,"tag":230,"props":3777,"children":3778},{"class":232,"line":243},[3779,3784,3789,3793,3797,3801,3806,3810,3814,3818,3823,3827,3831,3835,3840,3844],{"type":47,"tag":230,"props":3780,"children":3781},{"style":297},[3782],{"type":53,"value":3783}," \"",{"type":47,"tag":230,"props":3785,"children":3786},{"style":1146},[3787],{"type":53,"value":3788},"errCategory",{"type":47,"tag":230,"props":3790,"children":3791},{"style":297},[3792],{"type":53,"value":3683},{"type":47,"tag":230,"props":3794,"children":3795},{"style":297},[3796],{"type":53,"value":1317},{"type":47,"tag":230,"props":3798,"children":3799},{"style":297},[3800],{"type":53,"value":3683},{"type":47,"tag":230,"props":3802,"children":3803},{"style":252},[3804],{"type":53,"value":3805},"helm_apply",{"type":47,"tag":230,"props":3807,"children":3808},{"style":297},[3809],{"type":53,"value":3683},{"type":47,"tag":230,"props":3811,"children":3812},{"style":297},[3813],{"type":53,"value":3713},{"type":47,"tag":230,"props":3815,"children":3816},{"style":297},[3817],{"type":53,"value":3683},{"type":47,"tag":230,"props":3819,"children":3820},{"style":1146},[3821],{"type":53,"value":3822},"errMessage",{"type":47,"tag":230,"props":3824,"children":3825},{"style":297},[3826],{"type":53,"value":3683},{"type":47,"tag":230,"props":3828,"children":3829},{"style":297},[3830],{"type":53,"value":1317},{"type":47,"tag":230,"props":3832,"children":3833},{"style":297},[3834],{"type":53,"value":3683},{"type":47,"tag":230,"props":3836,"children":3837},{"style":252},[3838],{"type":53,"value":3839},"helm install api-keys: timed out",{"type":47,"tag":230,"props":3841,"children":3842},{"style":297},[3843],{"type":53,"value":3683},{"type":47,"tag":230,"props":3845,"children":3846},{"style":297},[3847],{"type":53,"value":3775},{"type":47,"tag":230,"props":3849,"children":3850},{"class":232,"line":268},[3851,3855,3860,3864,3868,3872,3877,3881,3885,3889,3894,3898,3902,3907],{"type":47,"tag":230,"props":3852,"children":3853},{"style":297},[3854],{"type":53,"value":3783},{"type":47,"tag":230,"props":3856,"children":3857},{"style":1146},[3858],{"type":53,"value":3859},"retryClass",{"type":47,"tag":230,"props":3861,"children":3862},{"style":297},[3863],{"type":53,"value":3683},{"type":47,"tag":230,"props":3865,"children":3866},{"style":297},[3867],{"type":53,"value":1317},{"type":47,"tag":230,"props":3869,"children":3870},{"style":297},[3871],{"type":53,"value":3683},{"type":47,"tag":230,"props":3873,"children":3874},{"style":252},[3875],{"type":53,"value":3876},"backoff",{"type":47,"tag":230,"props":3878,"children":3879},{"style":297},[3880],{"type":53,"value":3683},{"type":47,"tag":230,"props":3882,"children":3883},{"style":297},[3884],{"type":53,"value":3713},{"type":47,"tag":230,"props":3886,"children":3887},{"style":297},[3888],{"type":53,"value":3683},{"type":47,"tag":230,"props":3890,"children":3891},{"style":1146},[3892],{"type":53,"value":3893},"retryAfterSec",{"type":47,"tag":230,"props":3895,"children":3896},{"style":297},[3897],{"type":53,"value":3683},{"type":47,"tag":230,"props":3899,"children":3900},{"style":297},[3901],{"type":53,"value":1317},{"type":47,"tag":230,"props":3903,"children":3904},{"style":3733},[3905],{"type":53,"value":3906},"60",{"type":47,"tag":230,"props":3908,"children":3909},{"style":297},[3910],{"type":53,"value":3775},{"type":47,"tag":230,"props":3912,"children":3913},{"class":232,"line":278},[3914,3918,3923,3927,3932,3936,3941,3945],{"type":47,"tag":230,"props":3915,"children":3916},{"style":297},[3917],{"type":53,"value":3783},{"type":47,"tag":230,"props":3919,"children":3920},{"style":1146},[3921],{"type":53,"value":3922},"remediation",{"type":47,"tag":230,"props":3924,"children":3925},{"style":297},[3926],{"type":53,"value":3683},{"type":47,"tag":230,"props":3928,"children":3929},{"style":297},[3930],{"type":53,"value":3931},":[",{"type":47,"tag":230,"props":3933,"children":3934},{"style":297},[3935],{"type":53,"value":3683},{"type":47,"tag":230,"props":3937,"children":3938},{"style":252},[3939],{"type":53,"value":3940},"kubectl describe pod -n cassandra-system cassandra-0",{"type":47,"tag":230,"props":3942,"children":3943},{"style":297},[3944],{"type":53,"value":3683},{"type":47,"tag":230,"props":3946,"children":3947},{"style":297},[3948],{"type":53,"value":3775},{"type":47,"tag":230,"props":3950,"children":3951},{"class":232,"line":287},[3952,3957,3962,3966],{"type":47,"tag":230,"props":3953,"children":3954},{"style":297},[3955],{"type":53,"value":3956},"                \"",{"type":47,"tag":230,"props":3958,"children":3959},{"style":252},[3960],{"type":53,"value":3961},"Re-run with --debug for verbose helmfile output",{"type":47,"tag":230,"props":3963,"children":3964},{"style":297},[3965],{"type":53,"value":3683},{"type":47,"tag":230,"props":3967,"children":3968},{"style":297},[3969],{"type":53,"value":3970},"],\n",{"type":47,"tag":230,"props":3972,"children":3973},{"class":232,"line":326},[3974,3978,3983,3987,3992,3996,4001,4005,4009,4013,4018,4022,4026,4030,4035,4039,4043,4048,4052,4056,4061,4065,4069,4073,4078,4082,4086,4090,4095,4099,4103,4107,4112,4116],{"type":47,"tag":230,"props":3975,"children":3976},{"style":297},[3977],{"type":53,"value":3783},{"type":47,"tag":230,"props":3979,"children":3980},{"style":1146},[3981],{"type":53,"value":3982},"raw",{"type":47,"tag":230,"props":3984,"children":3985},{"style":297},[3986],{"type":53,"value":3683},{"type":47,"tag":230,"props":3988,"children":3989},{"style":297},[3990],{"type":53,"value":3991},":{",{"type":47,"tag":230,"props":3993,"children":3994},{"style":297},[3995],{"type":53,"value":3683},{"type":47,"tag":230,"props":3997,"children":3998},{"style":247},[3999],{"type":53,"value":4000},"subprocess",{"type":47,"tag":230,"props":4002,"children":4003},{"style":297},[4004],{"type":53,"value":3683},{"type":47,"tag":230,"props":4006,"children":4007},{"style":297},[4008],{"type":53,"value":1317},{"type":47,"tag":230,"props":4010,"children":4011},{"style":297},[4012],{"type":53,"value":3683},{"type":47,"tag":230,"props":4014,"children":4015},{"style":252},[4016],{"type":53,"value":4017},"helmfile",{"type":47,"tag":230,"props":4019,"children":4020},{"style":297},[4021],{"type":53,"value":3683},{"type":47,"tag":230,"props":4023,"children":4024},{"style":297},[4025],{"type":53,"value":3713},{"type":47,"tag":230,"props":4027,"children":4028},{"style":297},[4029],{"type":53,"value":3683},{"type":47,"tag":230,"props":4031,"children":4032},{"style":247},[4033],{"type":53,"value":4034},"exitCode",{"type":47,"tag":230,"props":4036,"children":4037},{"style":297},[4038],{"type":53,"value":3683},{"type":47,"tag":230,"props":4040,"children":4041},{"style":297},[4042],{"type":53,"value":1317},{"type":47,"tag":230,"props":4044,"children":4045},{"style":3733},[4046],{"type":53,"value":4047},"1",{"type":47,"tag":230,"props":4049,"children":4050},{"style":297},[4051],{"type":53,"value":3713},{"type":47,"tag":230,"props":4053,"children":4054},{"style":297},[4055],{"type":53,"value":3683},{"type":47,"tag":230,"props":4057,"children":4058},{"style":247},[4059],{"type":53,"value":4060},"stderrTail",{"type":47,"tag":230,"props":4062,"children":4063},{"style":297},[4064],{"type":53,"value":3683},{"type":47,"tag":230,"props":4066,"children":4067},{"style":297},[4068],{"type":53,"value":1317},{"type":47,"tag":230,"props":4070,"children":4071},{"style":297},[4072],{"type":53,"value":3683},{"type":47,"tag":230,"props":4074,"children":4075},{"style":252},[4076],{"type":53,"value":4077},"…",{"type":47,"tag":230,"props":4079,"children":4080},{"style":297},[4081],{"type":53,"value":3683},{"type":47,"tag":230,"props":4083,"children":4084},{"style":297},[4085],{"type":53,"value":3713},{"type":47,"tag":230,"props":4087,"children":4088},{"style":297},[4089],{"type":53,"value":3683},{"type":47,"tag":230,"props":4091,"children":4092},{"style":247},[4093],{"type":53,"value":4094},"kubernetesReason",{"type":47,"tag":230,"props":4096,"children":4097},{"style":297},[4098],{"type":53,"value":3683},{"type":47,"tag":230,"props":4100,"children":4101},{"style":297},[4102],{"type":53,"value":1317},{"type":47,"tag":230,"props":4104,"children":4105},{"style":297},[4106],{"type":53,"value":3683},{"type":47,"tag":230,"props":4108,"children":4109},{"style":252},[4110],{"type":53,"value":4111},"FailedScheduling",{"type":47,"tag":230,"props":4113,"children":4114},{"style":297},[4115],{"type":53,"value":3683},{"type":47,"tag":230,"props":4117,"children":4118},{"style":297},[4119],{"type":53,"value":4120},"}}\n",{"type":47,"tag":56,"props":4122,"children":4123},{},[4124,4126,4131],{"type":53,"value":4125},"The ",{"type":47,"tag":60,"props":4127,"children":4129},{"className":4128},[],[4130],{"type":53,"value":3859},{"type":53,"value":4132}," field tells the agent how to handle the failure:",{"type":47,"tag":724,"props":4134,"children":4135},{},[4136,4160],{"type":47,"tag":728,"props":4137,"children":4138},{},[4139],{"type":47,"tag":732,"props":4140,"children":4141},{},[4142,4150,4155],{"type":47,"tag":736,"props":4143,"children":4144},{},[4145],{"type":47,"tag":60,"props":4146,"children":4148},{"className":4147},[],[4149],{"type":53,"value":3859},{"type":47,"tag":736,"props":4151,"children":4152},{},[4153],{"type":53,"value":4154},"Meaning",{"type":47,"tag":736,"props":4156,"children":4157},{},[4158],{"type":53,"value":4159},"Agent action",{"type":47,"tag":747,"props":4161,"children":4162},{},[4163,4192,4220,4256,4285],{"type":47,"tag":732,"props":4164,"children":4165},{},[4166,4175,4180],{"type":47,"tag":754,"props":4167,"children":4168},{},[4169],{"type":47,"tag":60,"props":4170,"children":4172},{"className":4171},[],[4173],{"type":53,"value":4174},"immediate",{"type":47,"tag":754,"props":4176,"children":4177},{},[4178],{"type":53,"value":4179},"Transient blip",{"type":47,"tag":754,"props":4181,"children":4182},{},[4183,4185,4190],{"type":53,"value":4184},"Retry the same ",{"type":47,"tag":60,"props":4186,"children":4188},{"className":4187},[],[4189],{"type":53,"value":638},{"type":53,"value":4191}," command now",{"type":47,"tag":732,"props":4193,"children":4194},{},[4195,4203,4208],{"type":47,"tag":754,"props":4196,"children":4197},{},[4198],{"type":47,"tag":60,"props":4199,"children":4201},{"className":4200},[],[4202],{"type":53,"value":3876},{"type":47,"tag":754,"props":4204,"children":4205},{},[4206],{"type":53,"value":4207},"Rate limit \u002F pending operation",{"type":47,"tag":754,"props":4209,"children":4210},{},[4211,4213,4218],{"type":53,"value":4212},"Wait ",{"type":47,"tag":60,"props":4214,"children":4216},{"className":4215},[],[4217],{"type":53,"value":3893},{"type":53,"value":4219}," seconds, then retry",{"type":47,"tag":732,"props":4221,"children":4222},{},[4223,4232,4237],{"type":47,"tag":754,"props":4224,"children":4225},{},[4226],{"type":47,"tag":60,"props":4227,"children":4229},{"className":4228},[],[4230],{"type":53,"value":4231},"after_remediation",{"type":47,"tag":754,"props":4233,"children":4234},{},[4235],{"type":53,"value":4236},"Operator must intervene",{"type":47,"tag":754,"props":4238,"children":4239},{},[4240,4242,4247,4249,4254],{"type":53,"value":4241},"Surface ",{"type":47,"tag":60,"props":4243,"children":4245},{"className":4244},[],[4246],{"type":53,"value":3822},{"type":53,"value":4248}," + ",{"type":47,"tag":60,"props":4250,"children":4252},{"className":4251},[],[4253],{"type":53,"value":3922},{"type":53,"value":4255},", STOP. Don't auto-retry.",{"type":47,"tag":732,"props":4257,"children":4258},{},[4259,4268,4273],{"type":47,"tag":754,"props":4260,"children":4261},{},[4262],{"type":47,"tag":60,"props":4263,"children":4265},{"className":4264},[],[4266],{"type":53,"value":4267},"none",{"type":47,"tag":754,"props":4269,"children":4270},{},[4271],{"type":53,"value":4272},"Non-retryable",{"type":47,"tag":754,"props":4274,"children":4275},{},[4276,4278,4283],{"type":53,"value":4277},"Same as ",{"type":47,"tag":60,"props":4279,"children":4281},{"className":4280},[],[4282],{"type":53,"value":4231},{"type":53,"value":4284}," — surface and stop",{"type":47,"tag":732,"props":4286,"children":4287},{},[4288,4297,4302],{"type":47,"tag":754,"props":4289,"children":4290},{},[4291],{"type":47,"tag":60,"props":4292,"children":4294},{"className":4293},[],[4295],{"type":53,"value":4296},"unknown",{"type":47,"tag":754,"props":4298,"children":4299},{},[4300],{"type":53,"value":4301},"Classifier unsure",{"type":47,"tag":754,"props":4303,"children":4304},{},[4305],{"type":53,"value":4306},"Treat conservatively: surface and stop",{"type":47,"tag":56,"props":4308,"children":4309},{},[4310,4312,4317,4319,4324,4326,4331],{"type":53,"value":4311},"Never re-run with ",{"type":47,"tag":60,"props":4313,"children":4315},{"className":4314},[],[4316],{"type":53,"value":3209},{"type":53,"value":4318}," (no command takes one). The ",{"type":47,"tag":60,"props":4320,"children":4322},{"className":4321},[],[4323],{"type":53,"value":3982},{"type":53,"value":4325}," block carries the underlying signal (subprocess exit, HTTP status, K8s reason) — quote relevant fields when explaining failures to the user, but don't dump ",{"type":47,"tag":60,"props":4327,"children":4329},{"className":4328},[],[4330],{"type":53,"value":4060},{"type":53,"value":4332}," verbatim into chat without scanning for secrets first.",{"type":47,"tag":69,"props":4334,"children":4336},{"id":4335},"quick-command-reference",[4337],{"type":53,"value":4338},"Quick command reference",{"type":47,"tag":219,"props":4340,"children":4342},{"className":221,"code":4341,"language":223,"meta":224,"style":224},"nvcf-cli self-hosted check --pre              # pre-flight\nnvcf-cli self-hosted up --cluster-name=NAME   # one-shot install\nnvcf-cli self-hosted status                   # snapshot\nnvcf-cli self-hosted status --watch           # live\nnvcf-cli init                                 # mint admin token (clears all saved API keys)\nnvcf-cli cluster register …                   # register cluster\nnvcf-cli api-key generate --description=…     # mint both function and task API keys (run after every init)\nnvcf-cli api-key generate --for function …    # function key only\nnvcf-cli api-key generate --for task …        # task key only\nnvcf-cli function create --input-file=…       # create function\nnvcf-cli function create --function-type=LLM --llm-model=\u003Cspec>  # create LLM function metadata\nnvcf-cli function create --name=llm-helm --inference-url=\u002F --inference-port=8000 \\\n  --function-type=LLM --helm-chart=\u003Cchart> --helm-chart-service=\u003Cservice> --llm-model=\u003Cspec>\nnvcf-cli function update --llm-model-update=\u003Cspec>  # update LLM routing\u002Ftoken limits\nnvcf-cli function deploy create --input-file=…\nnvcf-cli function invoke --input-file=…\n\n# Task commands — requires NVCF_BASE_NVCT_URL=http:\u002F\u002F\u003Cnvct-gateway>\nnvcf-cli task create --name=X --gpu=H100 --instance-type=Y --image=Z\nnvcf-cli task create --input-file=task.json   # from JSON config\nnvcf-cli task list                            # list all tasks\nnvcf-cli task list --status=RUNNING           # filter by status\nnvcf-cli task get [taskId]                    # task details\nnvcf-cli task events [taskId]                 # lifecycle events\nnvcf-cli task results [taskId]                # result artifacts\nnvcf-cli task cancel [taskId]\nnvcf-cli task delete [taskId]\n",[4343],{"type":47,"tag":60,"props":4344,"children":4345},{"__ignoreMap":224},[4346,4372,4397,4418,4443,4460,4487,4514,4548,4581,4607,4652,4686,4747,4785,4810,4830,4837,4845,4880,4905,4926,4951,4977,5003,5030,5052],{"type":47,"tag":230,"props":4347,"children":4348},{"class":232,"line":233},[4349,4353,4357,4362,4367],{"type":47,"tag":230,"props":4350,"children":4351},{"style":247},[4352],{"type":53,"value":65},{"type":47,"tag":230,"props":4354,"children":4355},{"style":252},[4356],{"type":53,"value":255},{"type":47,"tag":230,"props":4358,"children":4359},{"style":252},[4360],{"type":53,"value":4361}," check",{"type":47,"tag":230,"props":4363,"children":4364},{"style":252},[4365],{"type":53,"value":4366}," --pre",{"type":47,"tag":230,"props":4368,"children":4369},{"style":237},[4370],{"type":53,"value":4371},"              # pre-flight\n",{"type":47,"tag":230,"props":4373,"children":4374},{"class":232,"line":243},[4375,4379,4383,4387,4392],{"type":47,"tag":230,"props":4376,"children":4377},{"style":247},[4378],{"type":53,"value":65},{"type":47,"tag":230,"props":4380,"children":4381},{"style":252},[4382],{"type":53,"value":255},{"type":47,"tag":230,"props":4384,"children":4385},{"style":252},[4386],{"type":53,"value":260},{"type":47,"tag":230,"props":4388,"children":4389},{"style":252},[4390],{"type":53,"value":4391}," --cluster-name=NAME",{"type":47,"tag":230,"props":4393,"children":4394},{"style":237},[4395],{"type":53,"value":4396},"   # one-shot install\n",{"type":47,"tag":230,"props":4398,"children":4399},{"class":232,"line":268},[4400,4404,4408,4413],{"type":47,"tag":230,"props":4401,"children":4402},{"style":247},[4403],{"type":53,"value":65},{"type":47,"tag":230,"props":4405,"children":4406},{"style":252},[4407],{"type":53,"value":255},{"type":47,"tag":230,"props":4409,"children":4410},{"style":252},[4411],{"type":53,"value":4412}," status",{"type":47,"tag":230,"props":4414,"children":4415},{"style":237},[4416],{"type":53,"value":4417},"                   # snapshot\n",{"type":47,"tag":230,"props":4419,"children":4420},{"class":232,"line":278},[4421,4425,4429,4433,4438],{"type":47,"tag":230,"props":4422,"children":4423},{"style":247},[4424],{"type":53,"value":65},{"type":47,"tag":230,"props":4426,"children":4427},{"style":252},[4428],{"type":53,"value":255},{"type":47,"tag":230,"props":4430,"children":4431},{"style":252},[4432],{"type":53,"value":4412},{"type":47,"tag":230,"props":4434,"children":4435},{"style":252},[4436],{"type":53,"value":4437}," --watch",{"type":47,"tag":230,"props":4439,"children":4440},{"style":237},[4441],{"type":53,"value":4442},"           # live\n",{"type":47,"tag":230,"props":4444,"children":4445},{"class":232,"line":287},[4446,4450,4455],{"type":47,"tag":230,"props":4447,"children":4448},{"style":247},[4449],{"type":53,"value":65},{"type":47,"tag":230,"props":4451,"children":4452},{"style":252},[4453],{"type":53,"value":4454}," init",{"type":47,"tag":230,"props":4456,"children":4457},{"style":237},[4458],{"type":53,"value":4459},"                                 # mint admin token (clears all saved API keys)\n",{"type":47,"tag":230,"props":4461,"children":4462},{"class":232,"line":326},[4463,4467,4472,4477,4482],{"type":47,"tag":230,"props":4464,"children":4465},{"style":247},[4466],{"type":53,"value":65},{"type":47,"tag":230,"props":4468,"children":4469},{"style":252},[4470],{"type":53,"value":4471}," cluster",{"type":47,"tag":230,"props":4473,"children":4474},{"style":252},[4475],{"type":53,"value":4476}," register",{"type":47,"tag":230,"props":4478,"children":4479},{"style":252},[4480],{"type":53,"value":4481}," …",{"type":47,"tag":230,"props":4483,"children":4484},{"style":237},[4485],{"type":53,"value":4486},"                   # register cluster\n",{"type":47,"tag":230,"props":4488,"children":4489},{"class":232,"line":339},[4490,4494,4499,4504,4509],{"type":47,"tag":230,"props":4491,"children":4492},{"style":247},[4493],{"type":53,"value":65},{"type":47,"tag":230,"props":4495,"children":4496},{"style":252},[4497],{"type":53,"value":4498}," api-key",{"type":47,"tag":230,"props":4500,"children":4501},{"style":252},[4502],{"type":53,"value":4503}," generate",{"type":47,"tag":230,"props":4505,"children":4506},{"style":252},[4507],{"type":53,"value":4508}," --description=…",{"type":47,"tag":230,"props":4510,"children":4511},{"style":237},[4512],{"type":53,"value":4513},"     # mint both function and task API keys (run after every init)\n",{"type":47,"tag":230,"props":4515,"children":4516},{"class":232,"line":352},[4517,4521,4525,4529,4534,4539,4543],{"type":47,"tag":230,"props":4518,"children":4519},{"style":247},[4520],{"type":53,"value":65},{"type":47,"tag":230,"props":4522,"children":4523},{"style":252},[4524],{"type":53,"value":4498},{"type":47,"tag":230,"props":4526,"children":4527},{"style":252},[4528],{"type":53,"value":4503},{"type":47,"tag":230,"props":4530,"children":4531},{"style":252},[4532],{"type":53,"value":4533}," --for",{"type":47,"tag":230,"props":4535,"children":4536},{"style":252},[4537],{"type":53,"value":4538}," function",{"type":47,"tag":230,"props":4540,"children":4541},{"style":252},[4542],{"type":53,"value":4481},{"type":47,"tag":230,"props":4544,"children":4545},{"style":237},[4546],{"type":53,"value":4547},"    # function key only\n",{"type":47,"tag":230,"props":4549,"children":4550},{"class":232,"line":365},[4551,4555,4559,4563,4567,4572,4576],{"type":47,"tag":230,"props":4552,"children":4553},{"style":247},[4554],{"type":53,"value":65},{"type":47,"tag":230,"props":4556,"children":4557},{"style":252},[4558],{"type":53,"value":4498},{"type":47,"tag":230,"props":4560,"children":4561},{"style":252},[4562],{"type":53,"value":4503},{"type":47,"tag":230,"props":4564,"children":4565},{"style":252},[4566],{"type":53,"value":4533},{"type":47,"tag":230,"props":4568,"children":4569},{"style":252},[4570],{"type":53,"value":4571}," task",{"type":47,"tag":230,"props":4573,"children":4574},{"style":252},[4575],{"type":53,"value":4481},{"type":47,"tag":230,"props":4577,"children":4578},{"style":237},[4579],{"type":53,"value":4580},"        # task key only\n",{"type":47,"tag":230,"props":4582,"children":4583},{"class":232,"line":374},[4584,4588,4592,4597,4602],{"type":47,"tag":230,"props":4585,"children":4586},{"style":247},[4587],{"type":53,"value":65},{"type":47,"tag":230,"props":4589,"children":4590},{"style":252},[4591],{"type":53,"value":4538},{"type":47,"tag":230,"props":4593,"children":4594},{"style":252},[4595],{"type":53,"value":4596}," create",{"type":47,"tag":230,"props":4598,"children":4599},{"style":252},[4600],{"type":53,"value":4601}," --input-file=…",{"type":47,"tag":230,"props":4603,"children":4604},{"style":237},[4605],{"type":53,"value":4606},"       # create function\n",{"type":47,"tag":230,"props":4608,"children":4609},{"class":232,"line":382},[4610,4614,4618,4622,4627,4632,4637,4642,4647],{"type":47,"tag":230,"props":4611,"children":4612},{"style":247},[4613],{"type":53,"value":65},{"type":47,"tag":230,"props":4615,"children":4616},{"style":252},[4617],{"type":53,"value":4538},{"type":47,"tag":230,"props":4619,"children":4620},{"style":252},[4621],{"type":53,"value":4596},{"type":47,"tag":230,"props":4623,"children":4624},{"style":252},[4625],{"type":53,"value":4626}," --function-type=LLM",{"type":47,"tag":230,"props":4628,"children":4629},{"style":252},[4630],{"type":53,"value":4631}," --llm-model=",{"type":47,"tag":230,"props":4633,"children":4634},{"style":297},[4635],{"type":53,"value":4636},"\u003C",{"type":47,"tag":230,"props":4638,"children":4639},{"style":252},[4640],{"type":53,"value":4641},"spec",{"type":47,"tag":230,"props":4643,"children":4644},{"style":297},[4645],{"type":53,"value":4646},">",{"type":47,"tag":230,"props":4648,"children":4649},{"style":237},[4650],{"type":53,"value":4651},"  # create LLM function metadata\n",{"type":47,"tag":230,"props":4653,"children":4654},{"class":232,"line":391},[4655,4659,4663,4667,4672,4677,4682],{"type":47,"tag":230,"props":4656,"children":4657},{"style":247},[4658],{"type":53,"value":65},{"type":47,"tag":230,"props":4660,"children":4661},{"style":252},[4662],{"type":53,"value":4538},{"type":47,"tag":230,"props":4664,"children":4665},{"style":252},[4666],{"type":53,"value":4596},{"type":47,"tag":230,"props":4668,"children":4669},{"style":252},[4670],{"type":53,"value":4671}," --name=llm-helm",{"type":47,"tag":230,"props":4673,"children":4674},{"style":252},[4675],{"type":53,"value":4676}," --inference-url=\u002F",{"type":47,"tag":230,"props":4678,"children":4679},{"style":252},[4680],{"type":53,"value":4681}," --inference-port=8000",{"type":47,"tag":230,"props":4683,"children":4684},{"style":291},[4685],{"type":53,"value":323},{"type":47,"tag":230,"props":4687,"children":4688},{"class":232,"line":400},[4689,4694,4699,4703,4708,4712,4717,4721,4726,4730,4734,4738,4742],{"type":47,"tag":230,"props":4690,"children":4691},{"style":252},[4692],{"type":53,"value":4693},"  --function-type=LLM",{"type":47,"tag":230,"props":4695,"children":4696},{"style":252},[4697],{"type":53,"value":4698}," --helm-chart=",{"type":47,"tag":230,"props":4700,"children":4701},{"style":297},[4702],{"type":53,"value":4636},{"type":47,"tag":230,"props":4704,"children":4705},{"style":252},[4706],{"type":53,"value":4707},"chart",{"type":47,"tag":230,"props":4709,"children":4710},{"style":297},[4711],{"type":53,"value":4646},{"type":47,"tag":230,"props":4713,"children":4714},{"style":252},[4715],{"type":53,"value":4716}," --helm-chart-service=",{"type":47,"tag":230,"props":4718,"children":4719},{"style":297},[4720],{"type":53,"value":4636},{"type":47,"tag":230,"props":4722,"children":4723},{"style":252},[4724],{"type":53,"value":4725},"service",{"type":47,"tag":230,"props":4727,"children":4728},{"style":297},[4729],{"type":53,"value":4646},{"type":47,"tag":230,"props":4731,"children":4732},{"style":252},[4733],{"type":53,"value":4631},{"type":47,"tag":230,"props":4735,"children":4736},{"style":297},[4737],{"type":53,"value":4636},{"type":47,"tag":230,"props":4739,"children":4740},{"style":252},[4741],{"type":53,"value":4641},{"type":47,"tag":230,"props":4743,"children":4744},{"style":297},[4745],{"type":53,"value":4746},">\n",{"type":47,"tag":230,"props":4748,"children":4749},{"class":232,"line":421},[4750,4754,4758,4763,4768,4772,4776,4780],{"type":47,"tag":230,"props":4751,"children":4752},{"style":247},[4753],{"type":53,"value":65},{"type":47,"tag":230,"props":4755,"children":4756},{"style":252},[4757],{"type":53,"value":4538},{"type":47,"tag":230,"props":4759,"children":4760},{"style":252},[4761],{"type":53,"value":4762}," update",{"type":47,"tag":230,"props":4764,"children":4765},{"style":252},[4766],{"type":53,"value":4767}," --llm-model-update=",{"type":47,"tag":230,"props":4769,"children":4770},{"style":297},[4771],{"type":53,"value":4636},{"type":47,"tag":230,"props":4773,"children":4774},{"style":252},[4775],{"type":53,"value":4641},{"type":47,"tag":230,"props":4777,"children":4778},{"style":297},[4779],{"type":53,"value":4646},{"type":47,"tag":230,"props":4781,"children":4782},{"style":237},[4783],{"type":53,"value":4784},"  # update LLM routing\u002Ftoken limits\n",{"type":47,"tag":230,"props":4786,"children":4787},{"class":232,"line":434},[4788,4792,4796,4801,4805],{"type":47,"tag":230,"props":4789,"children":4790},{"style":247},[4791],{"type":53,"value":65},{"type":47,"tag":230,"props":4793,"children":4794},{"style":252},[4795],{"type":53,"value":4538},{"type":47,"tag":230,"props":4797,"children":4798},{"style":252},[4799],{"type":53,"value":4800}," deploy",{"type":47,"tag":230,"props":4802,"children":4803},{"style":252},[4804],{"type":53,"value":4596},{"type":47,"tag":230,"props":4806,"children":4807},{"style":252},[4808],{"type":53,"value":4809}," --input-file=…\n",{"type":47,"tag":230,"props":4811,"children":4812},{"class":232,"line":447},[4813,4817,4821,4826],{"type":47,"tag":230,"props":4814,"children":4815},{"style":247},[4816],{"type":53,"value":65},{"type":47,"tag":230,"props":4818,"children":4819},{"style":252},[4820],{"type":53,"value":4538},{"type":47,"tag":230,"props":4822,"children":4823},{"style":252},[4824],{"type":53,"value":4825}," invoke",{"type":47,"tag":230,"props":4827,"children":4828},{"style":252},[4829],{"type":53,"value":4809},{"type":47,"tag":230,"props":4831,"children":4832},{"class":232,"line":460},[4833],{"type":47,"tag":230,"props":4834,"children":4835},{"emptyLinePlaceholder":272},[4836],{"type":53,"value":275},{"type":47,"tag":230,"props":4838,"children":4839},{"class":232,"line":474},[4840],{"type":47,"tag":230,"props":4841,"children":4842},{"style":237},[4843],{"type":53,"value":4844},"# Task commands — requires NVCF_BASE_NVCT_URL=http:\u002F\u002F\u003Cnvct-gateway>\n",{"type":47,"tag":230,"props":4846,"children":4847},{"class":232,"line":482},[4848,4852,4856,4860,4865,4870,4875],{"type":47,"tag":230,"props":4849,"children":4850},{"style":247},[4851],{"type":53,"value":65},{"type":47,"tag":230,"props":4853,"children":4854},{"style":252},[4855],{"type":53,"value":4571},{"type":47,"tag":230,"props":4857,"children":4858},{"style":252},[4859],{"type":53,"value":4596},{"type":47,"tag":230,"props":4861,"children":4862},{"style":252},[4863],{"type":53,"value":4864}," --name=X",{"type":47,"tag":230,"props":4866,"children":4867},{"style":252},[4868],{"type":53,"value":4869}," --gpu=H100",{"type":47,"tag":230,"props":4871,"children":4872},{"style":252},[4873],{"type":53,"value":4874}," --instance-type=Y",{"type":47,"tag":230,"props":4876,"children":4877},{"style":252},[4878],{"type":53,"value":4879}," --image=Z\n",{"type":47,"tag":230,"props":4881,"children":4882},{"class":232,"line":491},[4883,4887,4891,4895,4900],{"type":47,"tag":230,"props":4884,"children":4885},{"style":247},[4886],{"type":53,"value":65},{"type":47,"tag":230,"props":4888,"children":4889},{"style":252},[4890],{"type":53,"value":4571},{"type":47,"tag":230,"props":4892,"children":4893},{"style":252},[4894],{"type":53,"value":4596},{"type":47,"tag":230,"props":4896,"children":4897},{"style":252},[4898],{"type":53,"value":4899}," --input-file=task.json",{"type":47,"tag":230,"props":4901,"children":4902},{"style":237},[4903],{"type":53,"value":4904},"   # from JSON config\n",{"type":47,"tag":230,"props":4906,"children":4907},{"class":232,"line":533},[4908,4912,4916,4921],{"type":47,"tag":230,"props":4909,"children":4910},{"style":247},[4911],{"type":53,"value":65},{"type":47,"tag":230,"props":4913,"children":4914},{"style":252},[4915],{"type":53,"value":4571},{"type":47,"tag":230,"props":4917,"children":4918},{"style":252},[4919],{"type":53,"value":4920}," list",{"type":47,"tag":230,"props":4922,"children":4923},{"style":237},[4924],{"type":53,"value":4925},"                            # list all tasks\n",{"type":47,"tag":230,"props":4927,"children":4928},{"class":232,"line":553},[4929,4933,4937,4941,4946],{"type":47,"tag":230,"props":4930,"children":4931},{"style":247},[4932],{"type":53,"value":65},{"type":47,"tag":230,"props":4934,"children":4935},{"style":252},[4936],{"type":53,"value":4571},{"type":47,"tag":230,"props":4938,"children":4939},{"style":252},[4940],{"type":53,"value":4920},{"type":47,"tag":230,"props":4942,"children":4943},{"style":252},[4944],{"type":53,"value":4945}," --status=RUNNING",{"type":47,"tag":230,"props":4947,"children":4948},{"style":237},[4949],{"type":53,"value":4950},"           # filter by status\n",{"type":47,"tag":230,"props":4952,"children":4953},{"class":232,"line":27},[4954,4958,4962,4967,4972],{"type":47,"tag":230,"props":4955,"children":4956},{"style":247},[4957],{"type":53,"value":65},{"type":47,"tag":230,"props":4959,"children":4960},{"style":252},[4961],{"type":53,"value":4571},{"type":47,"tag":230,"props":4963,"children":4964},{"style":252},[4965],{"type":53,"value":4966}," get",{"type":47,"tag":230,"props":4968,"children":4969},{"style":291},[4970],{"type":53,"value":4971}," [taskId]                    ",{"type":47,"tag":230,"props":4973,"children":4974},{"style":237},[4975],{"type":53,"value":4976},"# task details\n",{"type":47,"tag":230,"props":4978,"children":4979},{"class":232,"line":569},[4980,4984,4988,4993,4998],{"type":47,"tag":230,"props":4981,"children":4982},{"style":247},[4983],{"type":53,"value":65},{"type":47,"tag":230,"props":4985,"children":4986},{"style":252},[4987],{"type":53,"value":4571},{"type":47,"tag":230,"props":4989,"children":4990},{"style":252},[4991],{"type":53,"value":4992}," events",{"type":47,"tag":230,"props":4994,"children":4995},{"style":291},[4996],{"type":53,"value":4997}," [taskId]                 ",{"type":47,"tag":230,"props":4999,"children":5000},{"style":237},[5001],{"type":53,"value":5002},"# lifecycle events\n",{"type":47,"tag":230,"props":5004,"children":5006},{"class":232,"line":5005},25,[5007,5011,5015,5020,5025],{"type":47,"tag":230,"props":5008,"children":5009},{"style":247},[5010],{"type":53,"value":65},{"type":47,"tag":230,"props":5012,"children":5013},{"style":252},[5014],{"type":53,"value":4571},{"type":47,"tag":230,"props":5016,"children":5017},{"style":252},[5018],{"type":53,"value":5019}," results",{"type":47,"tag":230,"props":5021,"children":5022},{"style":291},[5023],{"type":53,"value":5024}," [taskId]                ",{"type":47,"tag":230,"props":5026,"children":5027},{"style":237},[5028],{"type":53,"value":5029},"# result artifacts\n",{"type":47,"tag":230,"props":5031,"children":5033},{"class":232,"line":5032},26,[5034,5038,5042,5047],{"type":47,"tag":230,"props":5035,"children":5036},{"style":247},[5037],{"type":53,"value":65},{"type":47,"tag":230,"props":5039,"children":5040},{"style":252},[5041],{"type":53,"value":4571},{"type":47,"tag":230,"props":5043,"children":5044},{"style":252},[5045],{"type":53,"value":5046}," cancel",{"type":47,"tag":230,"props":5048,"children":5049},{"style":291},[5050],{"type":53,"value":5051}," [taskId]\n",{"type":47,"tag":230,"props":5053,"children":5055},{"class":232,"line":5054},27,[5056,5060,5064,5068],{"type":47,"tag":230,"props":5057,"children":5058},{"style":247},[5059],{"type":53,"value":65},{"type":47,"tag":230,"props":5061,"children":5062},{"style":252},[5063],{"type":53,"value":4571},{"type":47,"tag":230,"props":5065,"children":5066},{"style":252},[5067],{"type":53,"value":611},{"type":47,"tag":230,"props":5069,"children":5070},{"style":291},[5071],{"type":53,"value":5051},{"type":47,"tag":69,"props":5073,"children":5075},{"id":5074},"feedback",[5076],{"type":53,"value":5077},"Feedback",{"type":47,"tag":56,"props":5079,"children":5080},{},[5081],{"type":53,"value":5082},"If the user hits a bug or limitation, file an issue through the project tracker. Don't include secrets.",{"type":47,"tag":5084,"props":5085,"children":5086},"style",{},[5087],{"type":53,"value":5088},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":5090,"total":5247},[5091,5109,5125,5136,5148,5162,5175,5189,5202,5213,5227,5236],{"slug":5092,"name":5092,"fn":5093,"description":5094,"org":5095,"tags":5096,"stars":5106,"repoUrl":5107,"updatedAt":5108},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5097,5100,5103],{"name":5098,"slug":5099,"type":15},"Documentation","documentation",{"name":5101,"slug":5102,"type":15},"MCP","mcp",{"name":5104,"slug":5105,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":5110,"name":5110,"fn":5111,"description":5112,"org":5113,"tags":5114,"stars":5122,"repoUrl":5123,"updatedAt":5124},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5115,5118,5119],{"name":5116,"slug":5117,"type":15},"Containers","containers",{"name":17,"slug":18,"type":15},{"name":5120,"slug":5121,"type":15},"Python","python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":5126,"name":5126,"fn":5127,"description":5128,"org":5129,"tags":5130,"stars":5122,"repoUrl":5123,"updatedAt":5135},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5131,5134],{"name":5132,"slug":5133,"type":15},"CI\u002FCD","ci-cd",{"name":17,"slug":18,"type":15},"2026-07-14T05:25:59.97109",{"slug":5137,"name":5137,"fn":5138,"description":5139,"org":5140,"tags":5141,"stars":5122,"repoUrl":5123,"updatedAt":5147},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5142,5143,5144],{"name":5132,"slug":5133,"type":15},{"name":17,"slug":18,"type":15},{"name":5145,"slug":5146,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":5149,"name":5149,"fn":5150,"description":5151,"org":5152,"tags":5153,"stars":5122,"repoUrl":5123,"updatedAt":5161},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5154,5157,5158],{"name":5155,"slug":5156,"type":15},"Debugging","debugging",{"name":5145,"slug":5146,"type":15},{"name":5159,"slug":5160,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":5163,"name":5163,"fn":5164,"description":5165,"org":5166,"tags":5167,"stars":5122,"repoUrl":5123,"updatedAt":5174},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5168,5171],{"name":5169,"slug":5170,"type":15},"Best Practices","best-practices",{"name":5172,"slug":5173,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":5176,"name":5176,"fn":5177,"description":5178,"org":5179,"tags":5180,"stars":5122,"repoUrl":5123,"updatedAt":5188},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5181,5184,5187],{"name":5182,"slug":5183,"type":15},"Machine Learning","machine-learning",{"name":5185,"slug":5186,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":5190,"name":5190,"fn":5191,"description":5192,"org":5193,"tags":5194,"stars":5122,"repoUrl":5123,"updatedAt":5201},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5195,5198],{"name":5196,"slug":5197,"type":15},"QA","qa",{"name":5199,"slug":5200,"type":15},"Testing","testing","2026-07-14T05:25:53.673039",{"slug":5203,"name":5203,"fn":5204,"description":5205,"org":5206,"tags":5207,"stars":5122,"repoUrl":5123,"updatedAt":5212},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5208,5209],{"name":17,"slug":18,"type":15},{"name":5210,"slug":5211,"type":15},"Infrastructure","infrastructure","2026-07-14T05:25:49.362534",{"slug":5214,"name":5214,"fn":5215,"description":5216,"org":5217,"tags":5218,"stars":5122,"repoUrl":5123,"updatedAt":5226},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5219,5222,5223],{"name":5220,"slug":5221,"type":15},"Code Review","code-review",{"name":5145,"slug":5146,"type":15},{"name":5224,"slug":5225,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":5228,"name":5228,"fn":5229,"description":5230,"org":5231,"tags":5232,"stars":5122,"repoUrl":5123,"updatedAt":5235},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5233,5234],{"name":5196,"slug":5197,"type":15},{"name":5199,"slug":5200,"type":15},"2026-07-14T05:25:54.928983",{"slug":5237,"name":5237,"fn":5238,"description":5239,"org":5240,"tags":5241,"stars":5122,"repoUrl":5123,"updatedAt":5246},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5242,5245],{"name":5243,"slug":5244,"type":15},"Automation","automation",{"name":5132,"slug":5133,"type":15},"2026-07-30T05:29:03.275638",496,{"items":5249,"total":268},[5250,5257,5268],{"slug":4,"name":4,"fn":5,"description":6,"org":5251,"tags":5252,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5253,5254,5255,5256],{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"slug":5258,"name":5258,"fn":5259,"description":5260,"org":5261,"tags":5262,"stars":23,"repoUrl":24,"updatedAt":5267},"nvcf-self-managed-installation","install and operate NVCF self-hosted stacks","Install and operate NVCF self-hosted control-plane and separate compute-plane stacks. Covers Helmfile values and CLI profile installation flows, teardown, values overrides, pull secrets, and troubleshooting. Use for nvcf-self-managed-stack, nvcf-compute-plane-stack, split compute-plane installation, control-plane installation, CLI-generated control-plane profiles, Helmfile, self-managed, or self-hosted deployments. Do NOT use for local k3d environments; use the local k3d development workflow instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5263,5264,5265,5266],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":5210,"slug":5211,"type":15},{"name":9,"slug":8,"type":15},"2026-07-27T06:06:46.634385",{"slug":5269,"name":5269,"fn":5270,"description":5271,"org":5272,"tags":5273,"stars":23,"repoUrl":24,"updatedAt":5278},"nvcf-self-managed-prerequisite","install NVCF self-managed prerequisites","Install the prerequisites the NVCA operator \u002F compute plane needs before nvcf-nvca-install can succeed: the operator tool nvcf-cli (required by the compute-plane stack's register-cluster step), KAI Scheduler (for the KAIScheduler feature gate), and the SMB CSI driver (for the sharedStorage Samba sidecar PVCs). The two cluster components are cloud-neutral helm installs at the NVCF-validated version pins; same install on AKS, EKS, GKE, k3d, or bare metal. Use when the user mentions NVCA prereqs, nvcf-cli, \"nvcf-cli not found\", ensure-nvcf-cli, register-cluster, KAI Scheduler, SMB CSI, csi-driver-smb, queue quotas, default-parent-queue, NVCA shared-storage PVCs stuck Pending, or asks how to prepare a cluster before installing the NVCA operator.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[5274,5275,5276,5277],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":5210,"slug":5211,"type":15},{"name":9,"slug":8,"type":15},"2026-07-14T05:33:51.764422"]