NeMo Platform skill selection
Decide which downstream NeMo Platform skill should run. Bash access is unrestricted at runtime and
can execute state-changing commands; the scope below is a behavioral constraint, not an enforced
allowlist. Execute only the host scan in this skill's Pre-flight section, then announce the choice
and hand off. Never run downstream workflow or state-changing platform commands from this skill.
New NeMo Platform agent builds use a Platform-managed agent.yaml with
config_format: nemo-agents-spec-v1 and a supported harness. NVIDIA NeMo Agent
Toolkit (NAT) workflow YAML remains a compatibility path. Do not describe NAT
as the only supported implementation model.
If an existing agent does not fit a supported harness contract, route based on
the user's goal: preserve an existing NAT workflow, identify a custom adapter,
or use nemo-agent-config for a best-effort migration. Do not promise that an
arbitrary Python entrypoint can be converted mechanically.
Decision table
Match the user's intent to one downstream skill. Pick exactly one.
| The user says or implies |
Hand off to |
Why |
| "set up", "install", "get started", "try NeMo", "first time" |
setup |
Verify the platform is installed and running. If not, the skill tells the user how to run the CLI install (make bootstrap + nemo setup). Install itself is CLI-only. |
| "design an agent", "I want an agent that handles X", "what should my agent do" |
nemo-explore |
Capture the agent's job, audience, categories, tools, model, constraints before any code |
| "write the ethos", "save the design", "capture what we agreed" |
nemo-ethos |
Persist the explore answers as agents/<name>-ethos/ETHOS.md |
| "write agent.yaml", "validate agent.yaml", "choose a harness", "migrate this NAT YAML", "convert to nemo-agents-spec-v1" |
nemo-agent-config |
Author or migrate the Platform-managed machine-readable config without running the full build |
| "build the agent", "create the agent", "deploy", "scaffold from ethos" |
nemo-build-agent |
Build from the approved Ethos, default to Platform agent.yaml, register, deploy, evaluate, and optionally apply guardrails |
| "ask my agent", "try the agent", "test it", "invoke this agent.yaml" |
nemo-try-agent |
Invoke a named deployment or run a local agent YAML config once |
| "instrument my agent", "send traces", "use Intake", "agent observability", "query spans or traces" |
nemo-intake |
Choose an ingest path, instrument the source, ingest telemetry, and verify spans, traces, sessions, or evaluator results |
| "create an experiment", "publish evaluation runs", "evaluation leaderboard" |
nemo-experiments-upload |
Create Experiments and Evaluations, ingest their telemetry and scores, and verify leaderboard rollups |
| "status", "what is running", "platform health", "is the platform up", "what's deployed", "show me what's running" |
nemo-status |
Read-only dashboard: platform, agents, providers, models |
| "shut down", "stop NeMo", "tear down", "clean up" |
nemo-teardown |
Stop the cluster (keep data, delete platform data, or full cleanup) |
| "fine-tune", "customize the model", "train on my data", "SFT", "LoRA" |
nemo-customizer |
Model customization via installed customization contributor plugins (nemo-customizer-plugin). Requires plugin skills to be installed (nemo skills install / enabled-plugins). |
| "why does my agent keep failing", "analyze my agent's traces", "find recurring failure patterns", "generate insights for my agent" |
nemo-analyst (plugin-owned, in plugins/nemo-insights) |
Reads an agent's existing telemetry and files each recurring failure pattern as an Insight citing the traces that evidence it. Requires the Insights plugin; produces the Insight nemo-experimentalist acts on. |
| "improve the agent's own code", "fix my agent harness", "candidate code change", "optimize from an Insight", "improve on train and validation datasets" |
nemo-experimentalist (plugin-owned, in plugins/nemo-experimentalist) |
Source/harness optimization: generate and validate candidate code changes against Harbor-compatible evaluation data. Requires the Experimentalist plugin; use after agents analyst has created an Insight, or with explicit datasets. |
| "optimize my agent", "make it cheaper", "reduce latency", "smaller model", "switchyard", "routing split", "compare against a newer model" |
agents-optimize (plugin-owned, in plugins/nemo-agents) |
Cost / latency / quality optimization for a deployed agent. Routing splits, skill tuning, prompt tuning, new-model scans. |
| "secure my agent", "harden my agent", "check for PII", "leaked secrets", "guardrail coverage" |
agents-secure (plugin-owned, in plugins/nemo-agents) |
Safety and security audit for a deployed agent. Guardrails, PII, secrets scan. |
| "evaluate my agent", "run a benchmark", "eval suite" |
nemo-evaluator (plugin-owned, in plugins/nemo-evaluator) |
Evaluation metrics, LLM-judge, benchmark jobs against a deployed agent or model. |
Optimize vs build: Do NOT route optimize asks to nemo-build-agent. Build is for creating new agents from a spec. Use agents-optimize for a deployed agent's routing, prompts, skills, cost, or latency; use nemo-experimentalist when the requested improvement changes the agent's own source or harness and is evaluated with candidate code changes. If the user says "make my agent faster" or "use a cheaper model," that is agents-optimize, not nemo-build-agent.
If a request includes both config authoring and deployment, choose
nemo-build-agent; it delegates the config portion to nemo-agent-config.
Choose nemo-agent-config when the requested output stops at a validated config
or migration. Otherwise, if two rows fit, pick the earliest one in the
lifecycle. If nothing matches, ask one disambiguating question with the
relevant rows as a numbered list.
Pre-flight
Before handing off, run a host-wide platform scan. Three signals, in order — the first one that fires wins:
# 1. Ground truth: is anything listening on the canonical port?
lsof -iTCP:8080 -sTCP:LISTEN 2>/dev/null
# 2. Functional check: does the platform readiness endpoint answer?
curl -sS --connect-timeout 2 --max-time 5 http://localhost:8080/health/ready -o /dev/null -w "%{http_code}\n" 2>/dev/null || echo "no-response"
# 3. Conflict check: other platform processes / data dirs / configs on this host?
ps -eo pid=,user=,comm=,args= 2>/dev/null \
| awk '$0 ~ /[n]emo services (run|start)|[n]emo-platform run/ {print $1, $2, $3}'
ls -d ~/.local/share/nemo* 2>/dev/null
ls ~/.config/nmp*/config.yaml 2>/dev/null
Interpretation:
| What you observe |
Hand off to |
Why |
(1) returns a listener AND (2) returns 200 |
the requested downstream skill |
Platform is up and ready. Skip setup. |
(1) returns a listener but (2) returns no-response or non-200 |
nemo-status |
Something is bound to :8080 but the platform is not ready. Do not start a second platform. |
(1) empty but (3) finds another nemo services process OR more than one data dir / config |
stop, do not hand off yet |
Another install on this host, possibly on a different port. Surface only the redacted PID, user, and executable inventory emitted above. Ask whether to tear that one down first, pick a different port + data dir, or abort. Two installs writing to the same ~/.config/nmp/config.yaml is how users end up with one Studio frontend pointing at the wrong backend. |
| (1), (2), and (3) all empty |
setup |
Clean machine, no platform installed. |
Read-only callers (this skill, nemo-status, the build/try pre-flights) should not trust nemo services status or nemo services ls as an up-check. Both report stale "running" from a held instance lock after the underlying process has died. The lock reconciles automatically the next time nemo services run is invoked, but until that happens, lsof is ground truth. (Tracking a CLI-side fix for this so we can drop the workaround from skills.)
What to announce
Tell the user, in one sentence, which skill is next and what it will do. For example: "Handing off to setup to verify the platform is installed and running. If it isn't, the skill will tell you the CLI command to run; install is a 5-minute shell step that this skill cannot do reliably for you."
Then hand off. Do not run downstream workflow or state-changing platform commands from this skill.
If nothing matches
If the user's intent doesn't fit any row, do not guess. Read out the available skills and ask which one they want:
NeMo Platform skills I can route to:
setup verify install or get the CLI install command
nemo-explore design conversation: capture goal, audience, tools, constraints
nemo-ethos write the design to agents/<name>-ethos/ETHOS.md
nemo-agent-config author, validate, or migrate Platform agent.yaml
nemo-build-agent build from the Ethos, register, deploy, evaluate, and sign off
nemo-try-agent invoke a named deployment or local agent YAML config
nemo-intake instrument agents, ingest/query telemetry, attach scores
nemo-experiments-upload publish named evaluation runs to an Experiments leaderboard
nemo-status read-only platform health dashboard
nemo-teardown guided shutdown
Plugin-owned skills:
agents-optimize cost / latency / quality optimization for a deployed agent
agents-secure safety and security audit for a deployed agent
nemo-evaluator evaluation metrics, LLM-judge, benchmark jobs
nemo-customizer fine-tuning of models
nemo-analyst analyze agent telemetry and file recurring problems as Insights
nemo-experimentalist source/harness optimization from Insights or evaluation datasets
guardrails content-safety middleware via virtual models
auditor red-team vulnerability scanning (garak)
data-designer synthetic dataset generation
anonymizer PII handling for datasets
Which one fits what you're trying to do?
For things outside this catalog (for example, "show me how Switchyard routes between models"), point at the relevant repo skill (nemo-evaluator, nemo-auditor, etc.) or tell the user no skill claims that intent yet. Do not invent a path.
If the pre-flight finds no platform but the user insists they have installed one: ask them to report
the output of lsof -iTCP:8080 -sTCP:LISTEN and the redacted scan below from the shell where they ran
setup. The platform may be bound to a non-default port, or the install may be in a venv whose nemo
binary is not on PATH.
ps -eo pid=,user=,comm=,args= 2>/dev/null \
| awk '$0 ~ /[n]emo services|[n]emo-platform run/ {print $1, $2, $3}'
If the user asks about Studio (web UI)
Skills route through CLI commands, not Studio. But customers ask "what's Studio?" or "do you have a web UI?" Answer honestly, do not invent capabilities, and do not steer users into the experimental flows.
What to say:
- Studio is the NeMo Platform web UI. When the platform is running locally, it serves at
http://localhost:8080/studio.
- Documentation:
docs/studio/index.md in this repo covers the stable views (Agents, Optimizations, Monitor, Workspaces, Datasets). Point users there rather than enumerating features in-conversation — the docs stay up to date, this skill won't.
- Honest caveats to flag every time:
- The Optimizations "Apply suggestion" flow is incomplete today. Suggestions render, but the apply action is not reliable end-to-end. Tell the user to apply optimizer suggestions via the CLI (
nemo agents …) instead, using the suggestion's apply block as the source of truth — see agents-optimize.
- Other views may evolve; refer to the docs for the current state rather than promising specific behavior.
- For local development on Studio itself, the source lives at
web/packages/studio/. The studio-dev skill (if available) covers that workflow.
Do not proactively suggest Studio as the path for anything a skill already covers (chat, deploy, status, teardown, optimization). The CLI path is what these skills verify and what we can confidently support.
Gotchas
- One skill at a time. Do not load more than one downstream skill in the same turn. Each downstream skill is a full procedure with its own context budget.
- Install must happen before any skill can do useful work. Build, try, and status all assume the platform is up. If the user has not run the CLI install (
make bootstrap + nemo setup), the skills cannot work around that; hand them to setup for instructions.
- NeMo Platform is the product name. Capital N, e, M, o, P. Not "nemo" or "Nemo." NAT on first mention is "NVIDIA NeMo Agent Toolkit (NAT)."
- Model customization goes to the
nemo-customizer plugin skill when nemo-customizer-plugin (and a training backend) are installed. If that skill is not available, tell the user to enable customization plugins and install skills — do not improvise training with an external library.
- Execution compatibility. New Platform configs must select a supported
harness. Existing NAT workflows may remain on the NAT compatibility path.
For another framework or an arbitrary Python entrypoint, inspect whether a
supported harness owns its lifecycle; otherwise identify a custom adapter or
NAT wrapper instead of claiming direct support.
1---2name: nemo-skill-selection3description: Top-level skill selector for ambiguous tasks involving NeMo Platform (NVIDIA's agent platform). Picks the right downstream skill for setup, design, specification, agent configuration, build, deployment, testing, observability, status, teardown, evaluation, optimization, security, or model customization. Use when the user needs help deciding where a NeMo Platform task should start.4license: Apache-2.05---67# NeMo Platform skill selection89Decide which downstream NeMo Platform skill should run. Bash access is unrestricted at runtime and10can execute state-changing commands; the scope below is a behavioral constraint, not an enforced11allowlist. Execute only the host scan in this skill's Pre-flight section, then announce the choice12and hand off. Never run downstream workflow or state-changing platform commands from this skill.1314New NeMo Platform agent builds use a Platform-managed `agent.yaml` with15`config_format: nemo-agents-spec-v1` and a supported harness. NVIDIA NeMo Agent16Toolkit (NAT) workflow YAML remains a compatibility path. Do not describe NAT17as the only supported implementation model.1819If an existing agent does not fit a supported harness contract, route based on20the user's goal: preserve an existing NAT workflow, identify a custom adapter,21or use `nemo-agent-config` for a best-effort migration. Do not promise that an22arbitrary Python entrypoint can be converted mechanically.2324## Decision table2526Match the user's intent to one downstream skill. Pick exactly one.2728| The user says or implies | Hand off to | Why |29|---|---|---|30| "set up", "install", "get started", "try NeMo", "first time" | `setup` | Verify the platform is installed and running. If not, the skill tells the user how to run the CLI install (`make bootstrap` + `nemo setup`). Install itself is CLI-only. |31| "design an agent", "I want an agent that handles X", "what should my agent do" | `nemo-explore` | Capture the agent's job, audience, categories, tools, model, constraints before any code |32| "write the ethos", "save the design", "capture what we agreed" | `nemo-ethos` | Persist the explore answers as `agents/<name>-ethos/ETHOS.md` |33| "write agent.yaml", "validate agent.yaml", "choose a harness", "migrate this NAT YAML", "convert to nemo-agents-spec-v1" | `nemo-agent-config` | Author or migrate the Platform-managed machine-readable config without running the full build |34| "build the agent", "create the agent", "deploy", "scaffold from ethos" | `nemo-build-agent` | Build from the approved Ethos, default to Platform `agent.yaml`, register, deploy, evaluate, and optionally apply guardrails |35| "ask my agent", "try the agent", "test it", "invoke this agent.yaml" | `nemo-try-agent` | Invoke a named deployment or run a local agent YAML config once |36| "instrument my agent", "send traces", "use Intake", "agent observability", "query spans or traces" | `nemo-intake` | Choose an ingest path, instrument the source, ingest telemetry, and verify spans, traces, sessions, or evaluator results |37| "create an experiment", "publish evaluation runs", "evaluation leaderboard" | `nemo-experiments-upload` | Create Experiments and Evaluations, ingest their telemetry and scores, and verify leaderboard rollups |38| "status", "what is running", "platform health", "is the platform up", "what's deployed", "show me what's running" | `nemo-status` | Read-only dashboard: platform, agents, providers, models |39| "shut down", "stop NeMo", "tear down", "clean up" | `nemo-teardown` | Stop the cluster (keep data, delete platform data, or full cleanup) |40| "fine-tune", "customize the model", "train on my data", "SFT", "LoRA" | `nemo-customizer` | Model customization via installed customization contributor plugins (`nemo-customizer-plugin`). Requires plugin skills to be installed (`nemo skills install` / enabled-plugins). |41| "why does my agent keep failing", "analyze my agent's traces", "find recurring failure patterns", "generate insights for my agent" | `nemo-analyst` (plugin-owned, in `plugins/nemo-insights`) | Reads an agent's existing telemetry and files each recurring failure pattern as an Insight citing the traces that evidence it. Requires the Insights plugin; produces the Insight `nemo-experimentalist` acts on. |42| "improve the agent's own code", "fix my agent harness", "candidate code change", "optimize from an Insight", "improve on train and validation datasets" | `nemo-experimentalist` (plugin-owned, in `plugins/nemo-experimentalist`) | Source/harness optimization: generate and validate candidate code changes against Harbor-compatible evaluation data. Requires the Experimentalist plugin; use after `agents analyst` has created an Insight, or with explicit datasets. |43| "optimize my agent", "make it cheaper", "reduce latency", "smaller model", "switchyard", "routing split", "compare against a newer model" | `agents-optimize` (plugin-owned, in `plugins/nemo-agents`) | Cost / latency / quality optimization for a **deployed** agent. Routing splits, skill tuning, prompt tuning, new-model scans. |44| "secure my agent", "harden my agent", "check for PII", "leaked secrets", "guardrail coverage" | `agents-secure` (plugin-owned, in `plugins/nemo-agents`) | Safety and security audit for a **deployed** agent. Guardrails, PII, secrets scan. |45| "evaluate my agent", "run a benchmark", "eval suite" | `nemo-evaluator` (plugin-owned, in `plugins/nemo-evaluator`) | Evaluation metrics, LLM-judge, benchmark jobs against a deployed agent or model. |4647**Optimize vs build:** Do NOT route optimize asks to `nemo-build-agent`. Build is for creating new agents from a spec. Use `agents-optimize` for a deployed agent's routing, prompts, skills, cost, or latency; use `nemo-experimentalist` when the requested improvement changes the agent's own source or harness and is evaluated with candidate code changes. If the user says "make my agent faster" or "use a cheaper model," that is `agents-optimize`, not `nemo-build-agent`.4849If a request includes both config authoring and deployment, choose50`nemo-build-agent`; it delegates the config portion to `nemo-agent-config`.51Choose `nemo-agent-config` when the requested output stops at a validated config52or migration. Otherwise, if two rows fit, pick the earliest one in the53lifecycle. If nothing matches, ask one disambiguating question with the54relevant rows as a numbered list.5556## Pre-flight5758Before handing off, run a host-wide platform scan. Three signals, in order — the first one that fires wins:5960```bash61# 1. Ground truth: is anything listening on the canonical port?62lsof -iTCP:8080 -sTCP:LISTEN 2>/dev/null6364# 2. Functional check: does the platform readiness endpoint answer?65curl -sS --connect-timeout 2 --max-time 5 http://localhost:8080/health/ready -o /dev/null -w "%{http_code}\n" 2>/dev/null || echo "no-response"6667# 3. Conflict check: other platform processes / data dirs / configs on this host?68ps -eo pid=,user=,comm=,args= 2>/dev/null \69 | awk '$0 ~ /[n]emo services (run|start)|[n]emo-platform run/ {print $1, $2, $3}'70ls -d ~/.local/share/nemo* 2>/dev/null71ls ~/.config/nmp*/config.yaml 2>/dev/null72```7374Interpretation:7576| What you observe | Hand off to | Why |77|---|---|---|78| (1) returns a listener AND (2) returns `200` | the requested downstream skill | Platform is up and ready. Skip `setup`. |79| (1) returns a listener but (2) returns `no-response` or non-200 | `nemo-status` | Something is bound to :8080 but the platform is not ready. Do not start a second platform. |80| (1) empty but (3) finds another `nemo services` process OR more than one data dir / config | **stop, do not hand off yet** | Another install on this host, possibly on a different port. Surface only the redacted PID, user, and executable inventory emitted above. Ask whether to tear that one down first, pick a different port + data dir, or abort. Two installs writing to the same `~/.config/nmp/config.yaml` is how users end up with one Studio frontend pointing at the wrong backend. |81| (1), (2), and (3) all empty | `setup` | Clean machine, no platform installed. |8283Read-only callers (this skill, `nemo-status`, the build/try pre-flights) should not trust `nemo services status` or `nemo services ls` as an up-check. Both report stale "running" from a held instance lock after the underlying process has died. The lock reconciles automatically the next time `nemo services run` is invoked, but until that happens, `lsof` is ground truth. (Tracking a CLI-side fix for this so we can drop the workaround from skills.)8485## What to announce8687Tell the user, in one sentence, which skill is next and what it will do. For example: "Handing off to `setup` to verify the platform is installed and running. If it isn't, the skill will tell you the CLI command to run; install is a 5-minute shell step that this skill cannot do reliably for you."8889Then hand off. Do not run downstream workflow or state-changing platform commands from this skill.9091## If nothing matches9293If the user's intent doesn't fit any row, do not guess. Read out the available skills and ask which one they want:9495```96NeMo Platform skills I can route to:97 setup verify install or get the CLI install command98 nemo-explore design conversation: capture goal, audience, tools, constraints99 nemo-ethos write the design to agents/<name>-ethos/ETHOS.md100 nemo-agent-config author, validate, or migrate Platform agent.yaml101 nemo-build-agent build from the Ethos, register, deploy, evaluate, and sign off102 nemo-try-agent invoke a named deployment or local agent YAML config103 nemo-intake instrument agents, ingest/query telemetry, attach scores104 nemo-experiments-upload publish named evaluation runs to an Experiments leaderboard105 nemo-status read-only platform health dashboard106 nemo-teardown guided shutdown107108Plugin-owned skills:109 agents-optimize cost / latency / quality optimization for a deployed agent110 agents-secure safety and security audit for a deployed agent111 nemo-evaluator evaluation metrics, LLM-judge, benchmark jobs112 nemo-customizer fine-tuning of models113 nemo-analyst analyze agent telemetry and file recurring problems as Insights114 nemo-experimentalist source/harness optimization from Insights or evaluation datasets115 guardrails content-safety middleware via virtual models116 auditor red-team vulnerability scanning (garak)117 data-designer synthetic dataset generation118 anonymizer PII handling for datasets119120Which one fits what you're trying to do?121```122123For things outside this catalog (for example, "show me how Switchyard routes between models"), point at the relevant repo skill (`nemo-evaluator`, `nemo-auditor`, etc.) or tell the user no skill claims that intent yet. Do not invent a path.124125If the pre-flight finds no platform but the user insists they have installed one: ask them to report126the output of `lsof -iTCP:8080 -sTCP:LISTEN` and the redacted scan below from the shell where they ran127setup. The platform may be bound to a non-default port, or the install may be in a venv whose `nemo`128binary is not on `PATH`.129130```bash131ps -eo pid=,user=,comm=,args= 2>/dev/null \132 | awk '$0 ~ /[n]emo services|[n]emo-platform run/ {print $1, $2, $3}'133```134135## If the user asks about Studio (web UI)136137Skills route through CLI commands, not Studio. But customers ask "what's Studio?" or "do you have a web UI?" Answer honestly, do not invent capabilities, and do not steer users into the experimental flows.138139What to say:140141- Studio is the NeMo Platform web UI. When the platform is running locally, it serves at `http://localhost:8080/studio`.142- Documentation: `docs/studio/index.md` in this repo covers the stable views (Agents, Optimizations, Monitor, Workspaces, Datasets). Point users there rather than enumerating features in-conversation — the docs stay up to date, this skill won't.143- **Honest caveats to flag every time:**144 - The **Optimizations "Apply suggestion"** flow is **incomplete today**. Suggestions render, but the apply action is not reliable end-to-end. Tell the user to apply optimizer suggestions via the CLI (`nemo agents …`) instead, using the suggestion's `apply` block as the source of truth — see `agents-optimize`.145 - Other views may evolve; refer to the docs for the current state rather than promising specific behavior.146- For local development on Studio itself, the source lives at `web/packages/studio/`. The `studio-dev` skill (if available) covers that workflow.147148Do not proactively suggest Studio as the path for anything a skill already covers (chat, deploy, status, teardown, optimization). The CLI path is what these skills verify and what we can confidently support.149150## Gotchas151152- **One skill at a time.** Do not load more than one downstream skill in the same turn. Each downstream skill is a full procedure with its own context budget.153- **Install must happen before any skill can do useful work.** Build, try, and status all assume the platform is up. If the user has not run the CLI install (`make bootstrap` + `nemo setup`), the skills cannot work around that; hand them to `setup` for instructions.154- **NeMo Platform is the product name.** Capital N, e, M, o, P. Not "nemo" or "Nemo." NAT on first mention is "NVIDIA NeMo Agent Toolkit (NAT)."155- **Model customization** goes to the `nemo-customizer` plugin skill when `nemo-customizer-plugin` (and a training backend) are installed. If that skill is not available, tell the user to enable customization plugins and install skills — do not improvise training with an external library.156- **Execution compatibility.** New Platform configs must select a supported157 harness. Existing NAT workflows may remain on the NAT compatibility path.158 For another framework or an arbitrary Python entrypoint, inspect whether a159 supported harness owns its lifecycle; otherwise identify a custom adapter or160 NAT wrapper instead of claiming direct support.