Skip to main content
skill CX Codex

dynamo-recipe-runner — Claude Code skill: what it does, how to install

Discovers, validates, patches, and deploys NVIDIA Dynamo Kubernetes recipes for model serving across vLLM or SGLang runtimes.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add NVIDIA/skills --skill dynamo-recipe-runner -a claude-code
Open on GitHub

What dynamo-recipe-runner does

The skill operates strictly within the existing recipes/ tree of the Dynamo repository. Instead of generating arbitrary Kubernetes manifests, it runs scripts/recipe_tool.py to match the target model, backend framework (vllm, sglang, trtllm, tokenspeed), deployment mode, and GPU count.

Before making changes, it runs read-only cluster preflight checks with kubectl. The skill inspects nodes, namespaces, and storage classes. It patches only target fields such as storageClassName, container image tags, and GPU limits. When the cluster is unreachable, it skips applying changes and outputs the exact bash commands instead.

The operator environment requires Python 3.10+ alongside an active kubectl context. Built-in smoke testing is limited to checking /v1/models, so multi-node transport verification must be handled by dedicated diagnostic tools.

What it helps with

  • locate existing Dynamo recipes for models and frameworks like vLLM or SGLang
  • validate recipe manifests before applying them to a Kubernetes cluster
  • patch storage classes, GPU resource limits, and image tags without rewriting YAML
  • deploy model-cache download jobs and frontend services into a namespace
  • verify deployment health using a local port-forward to /v1/models

Example prompts for the agent

  • Find and validate a Dynamo recipe for nemotron-3-super-fp8 using sglang
  • Deploy the qwen vllm recipe in disagg mode to namespace ai-serving
  • Validate the trtllm recipe and print the kubectl commands without running them

How to install dynamo-recipe-runner

1Skills CLI (Vercel)

npx skills add NVIDIA/skills --skill dynamo-recipe-runner -a claude-code

2Manually: put the files in place

~/.claude/skills/dynamo-recipe-runner/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/dynamo-recipe-runner/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about dynamo-recipe-runner

How to install dynamo-recipe-runner in Claude Code?

Run npx skills add NVIDIA/skills --skill dynamo-recipe-runner -a claude-code. The skill will be registered in ~/.claude/skills/dynamo-recipe-runner/SKILL.md.

What does dynamo-recipe-runner do?

It discovers, validates, minimally patches, and deploys NVIDIA Dynamo Kubernetes recipes to bring up model endpoints.

What prerequisites must be configured in the cluster?

You need a default StorageClass for model-cache PVCs and a Kubernetes secret named hf-token-secret containing your Hugging Face token.

Source text

SKILL.md · Apache-2.0
---
name: dynamo-recipe-runner
description: Select, validate, patch, and deploy existing NVIDIA Dynamo Kubernetes recipes. Use for model/backend/GPU/deployment-mode recipe bring-up; use router-starter for router-only mode work and troubleshoot for broken deployments.
license: Apache-2.0
metadata:
  author: Dan Gil <[email protected]>
  tags:
    - dynamo
    - kubernetes
    - recipes
    - bring-up
  permissions:
    - file_read
    - network
    - kubectl_exec
---

# Dynamo Recipe Runner

<!--
SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: CC-BY-4.0
-->

## Purpose

Get from user intent to a working Dynamo recipe endpoint with minimal back and
forth. Do not create new guide content. Operate on the existing `recipes/`
tree, patch the smallest necessary set of manifests, deploy when the user has
cluster access, and prove success with an OpenAI-compatible smoke request.

## Prerequisites

- Python 3.10+ on the operator machine.
- `kubectl` configured with a working cluster context.
- Cluster has a default storage class for model-cache PVCs.
- Hugging Face token stored in a Kubernetes secret named `hf-token-secret`
  (or equivalent) in the target namespace.
- Read access to the `recipes/` tree in the ai-dynamo/dynamo repository.

## Required Inputs

Collect or infer these before changing manifests:

- recipe target: model, framework (`vllm`, `sglang`, `trtllm`, `tokenspeed`), deployment mode, and GPU type/count
- Kubernetes context and namespace
- Hugging Face secret name, usually `hf-token-secret`
- storage class for model cache PVCs
- runtime image tag if the recipe uses a placeholder or stale test image
- whether to run commands or only produce exact commands

If a required value is missing and cannot be inferred from the selected recipe,
ask for only that value.

## Instructions

### 1. Preflight

Run read-only checks first:

```bash
git status --short
python3 scripts/recipe_tool.py list --format table
kubectl config current-context
kubectl get storageclass
kubectl get nodes -o wide
kubectl get namespace "${NAMESPACE}"
kubectl get secret hf-token-secret -n "${NAMESPACE}"
```

If `kubectl` is unavailable or the cluster is unreachable, continue by
selecting and validating the recipe, then return exact commands instead of
pretending the deployment ran.

### 2. Select The Recipe

Use the recipe matrix from `recipes/README.md` and the scanner:

```bash
python3 scripts/recipe_tool.py list \
  --query qwen --framework vllm --mode disagg --format table
```

Prefer an exact existing recipe. Do not invent new manifests unless the user
explicitly asks to author a new recipe.

### 3. Inspect And Validate

Read the selected recipe README, model-cache manifests, `deploy.yaml`, and
`perf.yaml` if present. Then run:

```bash
python3 scripts/recipe_tool.py validate \
  recipes/<model>/<framework>/<mode>
```

Resolve reported blockers before applying manifests: storage class, model cache
PVC, image tag, HF token secret, GPU count, frontend service name, and router
mode.

### 4. Patch Minimal Values

Patch only recipe-specific values needed for this run. Do not reformat whole
YAML files. Common patches:

- `storageClassName`
- image repository/tag
- model path or model cache mount path
- GPU resource requests/limits
- frontend `DYN_ROUTER_MODE`
- namespace only when a manifest hardcodes it

Never write Hugging Face tokens into files or logs. Use Kubernetes secrets.

### 5. Deploy

Follow the selected recipe README when it differs from the default sequence.
The default sequence is:

```bash
kubectl apply -f recipes/<model>/model-cache/ -n "${NAMESPACE}"
kubectl wait --for=condition=Complete job/model-download -n "${NAMESPACE}" --timeout=6000s
kubectl apply -f recipes/<model>/<framework>/<mode>/deploy.yaml -n "${NAMESPACE}"
kubectl get dynamographdeployment -n "${NAMESPACE}"
kubectl get pods -n "${NAMESPACE}" -o wide
```

Wait for the frontend and workers to be ready before testing.

### 6. Smoke Test

Port-forward the frontend service, then verify `/v1/models` and one chat
completion:

```bash
kubectl port-forward svc/<deployment-name>-frontend 8000:8000 -n "${NAMESPACE}"
curl http://127.0.0.1:8000/v1/models
```

If `dynamo-router-starter` is also installed, prefer its `scripts/check_router_health.py`
for the full OpenAI-compatible smoke test. If this fails, switch to
`dynamo-troubleshoot`.

## Available Scripts

| Script | Purpose | Arguments |
|---|---|---|
| `scripts/recipe_tool.py list` | Enumerate available recipes, optionally filtered | `--query`, `--framework`, `--mode`, `--format` |
| `scripts/recipe_tool.py validate` | Validate a recipe directory before apply | positional recipe path |

Invoke via the agentskills.io `run_script()` protocol:

```python
run_script("scripts/recipe_tool.py", args=["list", "--framework", "sglang", "--format", "table"])
run_script("scripts/recipe_tool.py", args=["validate", "recipes/nemotron-3-super-fp8/sglang/agg"])
```

## Examples

List sglang recipes that fit a single 8xB200 node:

```bash
python3 scripts/recipe_tool.py list --framework sglang --format table
```

Validate a specific recipe and resolve blockers before applying:

```bash
python3 scripts/recipe_tool.py validate recipes/nemotron-3-super-fp8/sglang/agg
```

Equivalent through the agent protocol:

```python
run_script("scripts/recipe_tool.py", args=["validate", "recipes/nemotron-3-super-fp8/sglang/agg"])
```

## Output Contract

Return:

- selected recipe path and why it was selected
- exact values patched
- commands run or commands to run
- endpoint and smoke-test result
- unresolved blockers, if any
- next troubleshooting step when deployment does not become healthy

## Limitations

- Operates on the existing `recipes/` tree only. Does not author new manifests.
- Cluster-mutating apply steps require `kubectl` permission to the target namespace.
- Smoke-test depth is intentionally minimal; for full router/endpoint coverage use `dynamo-router-starter`.
- Multi-node disagg transport correctness is out of scope; use `dynamo-interconnect-check` after deploy.

## Troubleshooting

| Symptom | Likely cause | Next step |
|---|---|---|
| `kubectl` cluster unreachable | Context not set or VPN down | Return exact commands instead of running them; resume when cluster is reachable |
| `validate` reports missing storage class | Cluster has no default `StorageClass` | Patch `storageClassName` on the model-cache manifest before applying |
| Model-cache job stuck `Pending` | PVC unbound or HF secret missing | Inspect PVC events; create or rename the HF secret to match the recipe |
| Worker pods `ImagePullBackOff` | Stale image tag or missing pull secret | Patch the image tag; verify image pull secret in the namespace |
| `/v1/models` 4xx/5xx after deploy | Frontend not ready or wrong service port | Wait for pods Ready; re-run port-forward; switch to `dynamo-troubleshoot` if it persists |

## Benchmark

See `BENCHMARK.md` for the NVCARPS-EVAL performance report (auto-generated by the NVSkills CI pipeline). To refresh, re-run `/nvskills-ci` on an upstream PR touching this skill.

## References

- Read `references/k8s-recipe-workflow.md` for command templates and readiness checks.
- Use `scripts/recipe_tool.py` for recipe discovery and lightweight validation.

© Dan Gil · Apache-2.0 · NVIDIA/skills

Similar skills

Everything for AI and ML →

From the same set178

deepstream-dev Teaches the agent to write NVIDIA DeepStream SDK code in Python: GStreamer pipelines, TensorRT inference, tracking and broker output. CX Codex +1 2,400installs nemo-retriever Indexes and queries document collections using the NeMo Retriever 26.8.1 CLI. Useful for local LanceDB storage and deployed Retriever services. CX Codex +1 2,400installs rag-eval Evaluates filesystem RAG datasets built around corpus/ and train.json. Use it to compare retrieval and generation settings with RAGAS quality scores. CX Codex +1 2,400installs cuopt-routing-api-python A skill that walks your agent through vehicle routing with the cuOpt Python API: TSP, VRP and pickup-delivery. Useful when the solver runs in Python. CX Codex +1 2,300installs deepstream-import-vision-model This skill takes an object-detection model from HuggingFace or NGC through a full NVIDIA DeepStream pipeline: ONNX, TRT engine, bbox parser, benchmark, PDF report. CX Codex +1 2,300installs omniverse-usd-performance-tuning A skill for diagnosing and optimizing USD scenes: slow loading, low FPS, high memory. It owns the user-facing workflow across phases. CX Codex +1 2,300installs cuopt-server-api-python Deploys the NVIDIA cuOpt REST server and guides client requests via Python or curl. Useful for solving routing, LP, and MILP optimization problems on GPUs. CX Codex +1 2,200installs rag-perf Runs a profiling pass and an aiperf load test against a deployed NVIDIA RAG Blueprint server, all driven by one YAML config. CX Codex +1 2,200installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor