nvidia/optimization-intent-router
Classify whether a data-backed request is LP, MILP, QP, routing, or non-optimization analytics.
npx skills add https://github.com/NVIDIA/cuopt-examples --skill optimization-intent-router
Use this skill when a user asks a question in natural language and it is not yet clear whether the request should be handled as:
This skill exists to decide whether cuOpt should be involved at all, and if so, which downstream formulation path should be used.
The classification from this skill is provisional. A later data-ingestion step may refine or correct the problem family if the uploaded tables clearly support a different interpretation.
The user often does not say:
Instead they ask questions like:
Your job is to recognize when the request is really asking for an optimization model.
Route to optimization when the user wants a **plan produced under
constraints** — assignment, schedule, allocation, route, mix, or mix of
resources — whether they say feasible/valid, minimize/maximize, or
best/optimal.
Use structure, not exact keywords:
| Signal | Route to cuOpt? |
|---|---|
| Constructive + constraint tables (uploaded or referenced) | Yes — family TBD (MILP/LP/QP/routing) |
| Minimize / maximize / best / optimal / least cost | Yes |
| Feasible / valid / make it work / respect rules (constructive) | Yes — feasibility = hard constraints |
| Summarize / chart / filter / explain data only | No |
NemoClaw sandbox: When constructive + constraint data →
cuopt-sandbox gates immediately before any schedule, roster,
assignment, or route output — regardless of whether the user said
minimize or optimal. Do not use a greedy Python builder as a first
deliverable.
Paraphrase examples (non-exhaustive): "plan the season", "set game times",
"fill the calendar", "assign shifts", "put jobs on machines", "build a
schedule" — same intent. See cuopt-sandbox/references/intent-and-triggers.md.
If the user is only asking for:
then do not force the request into optimization.
Strong signals:
from structured data (sandbox: treat as MILP even without minimize)
Weaker but meaningful signals:
When weaker signals appear, inspect whether there are real constraints and decisions. If yes, treat it as optimization — and in the NemoClaw sandbox, cuopt-sandbox gates apply immediately (probe before any schedule/heuristic output).
Use LP when:
Common examples:
Use MILP when:
Common signals:
Common examples:
and resources) — including when the user only says "build a schedule"
Use QP when:
Common signals:
If the user is maximizing a quadratic expression, note that the modeling path may require reformulation as a minimization of the negated objective.
Use routing when the decisions are fundamentally about movement through locations.
Common signals:
Common routing types:
Do not route to cuOpt when the user is asking for:
If it is unclear whether the request is optimization or analytics, ask a concise clarifier such as:
If it is clearly optimization but unclear which family applies, ask the minimum clarifier needed.
Examples:
Before handing off, produce an internal working conclusion with at least:
is_optimization: yes / noproblem_family: lp | milp | qp | routing | unknownwhy: short explanation grounded in the user’s wording and available datamissing_information: only the minimum unresolved itemsproblem_family = lp | milp:numerical-optimization-formulationcuopt-numerical-optimization-api-python (orcuopt-numerical-optimization-api-cli for MPS inputs)
problem_family = qp:numerical-optimization-formulationcuopt-numerical-optimization-api-pythonproblem_family = routing:routing-formulationcuopt-routing-api-pythonis_optimization = yes and there is a meaningful signal that replayability, audit, export, or reuse may matter:optimization-mode-router before deep data interpretation or model constructionis_optimization = no:User says:
> "I uploaded a product table and a capacity table. What’s the best production plan?"
Interpretation:
User says:
> "I uploaded depots, customers, and a travel-time matrix. What’s the cheapest delivery plan?"
Interpretation:
User says:
> "I uploaded sales.csv. Which product had the highest revenue last month?"
Interpretation:
Take nvidia/optimization-intent-router from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.