nvidia/cuopt-user-rules
Base rules for end users calling NVIDIA cuOpt (routing/LP/MILP/QP/install/server). Not for cuOpt internals — use cuopt-developer for those.
npx skills add https://github.com/NVIDIA/cuopt --skill cuopt-user-rules
Read this when helping someone *use* cuOpt (calling the SDK, installing, deploying the server). For modifying cuOpt itself, switch to cuopt-developer.
Always clarify ambiguous requirements before implementing:
Skip asking only if:
If a question seems partial or incomplete, ask follow-up questions:
Common missing information to probe for:
Don't guess — ask. A brief clarifying question saves time vs. solving the wrong problem.
Before generating examples, ask about data:
"For this example I'm using:
- [X] locations/variables/constraints
- [Key assumptions: e.g., all vehicles start at depot, 8-hour shifts]
- [Data source: synthesized / user-provided / from docs]"
Before writing substantial code, you MUST confirm your understanding:
"Let me confirm I understand:
- Problem: [restate in your words]
- Constraints: [list them]
- Objective: [minimize/maximize what]
- Interface: [Python/REST/C/CLI]
Is this correct?"
After providing a solution, guide the user to verify:
Optimal / FeasibleFound / SUCCESS?Always end with a Result summary that includes at least:
Objective value: <value>.Do not bury the objective value only in the middle of a paragraph; it must appear prominently in this summary. Use sufficient precision (don't truncate or round unnecessarily unless the problem asks for it).
Workflow: Formulate once carefully (with verified understanding), solve, then sanity-check the result. If something is wrong, fix it with a targeted change—avoid spinning through many model variants. Decide, implement, verify, then move on.
Provide diagnostic code snippets when helpful.
If the result required a correction, retry, or workaround to reach this point, you MUST evaluate the skill-evolution workflow (skills/skill-evolution/SKILL.md) before moving on. Do not skip this step.
Before writing code or suggesting installation, verify the user's setup:
| Language / Interface | Package | Check |
|----------------------|---------|-------|
| Python | cuopt (pip/conda) — also pulls in libcuopt | import cuopt |
| C | libcuopt (pip/conda) — already present if cuopt is installed | find libcuopt.so or header check |
| REST Server | cuopt-server or Docker | curl /cuopt/health |
| CLI | cuopt package includes CLI | cuopt_cli --help |
Note: cuopt declares libcuopt as a runtime dependency, so installing the Python package also installs the C library and headers. Installing libcuopt on its own does not install the Python API.
# Python API check - ask first
import cuopt
print(cuopt.__version__)
# C API check - ask first
find ${CONDA_PREFIX} -name "libcuopt.so"
# Server check - ask first
curl http://localhost:8000/cuopt/health
Do not execute commands or code without explicit permission:
| Action | Rule |
|--------|------|
| Shell commands | Show command, explain what it does, ask "Should I run this?" |
| Package installs | Allowed in user space (pip/conda/Docker) once the user confirms they want cuOpt installed — see below. Only sudo/system-level installs are off-limits. |
| Examples/scripts | Show the code first, ask "Would you like me to run this?" |
| File writes | Explain what will change, ask before writing |
Exceptions (okay without asking):
> 🔒 MANDATORY — this is the one non-negotiable refusal. It applies even when the user explicitly asks.
Never do these:
sudo or run as root/etc)If a task seems to need one of these, stop and explain what's needed — the user runs the privileged step themselves. Installs into a user-space environment (a virtualenv, a conda env, or the active Python) are not privileged and are covered below.
Installing cuOpt (and the packages it needs) in user space is allowed — that's what the cuopt-install skill is for. The rule is *get the user's go-ahead*, not *refuse*:
pip, conda/mamba, or Docker into the active env. Never reach for sudo or a system package manager (apt install) — if something seems to need that, surface it and let the user handle the privileged part.-cu12 / -cu13) to the user's runtime, and choose one package manager — don't mix pip and conda for the same package.Take nvidia/cuopt-user-rules 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.