cuopt-developer
Modify, build, test, debug, and contribute to NVIDIA cuOpt (C++/CUDA, Python, server, CI). Use for solver internals, PRs, DCO, and code conventions.
Install / Use
npx skills add NVIDIA/skills --skill cuopt-developerInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
Our assessment of cuopt-developer
cuopt-developer scores 93/100 on our quality scale, 530th of 3,356 Development & Engineering skills we index (top 16%).
Its SKILL.md is 13 KB long, well organised into 28 sections with 3 code examples: a thorough specification that gives an agent plenty to work with.
With 3,421 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 5 days ago, so cuopt-developer is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
cuopt-developer compared with similar skills
All 4 of these similar skills score higher than cuopt-developer; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| cuopt-developer (this skill)by NVIDIA | 93 | 3.4k | 5d ago | SKILL.md |
| Agent-Reachby Panniantong | 100 | 86.0k | 13d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 74.0k | today | CLAUDE.md |
| ai-job-searchby MadsLorentzen | 100 | 44.4k | today | CLAUDE.md |
| claude-howtoby luongnv89 | 100 | 41.7k | 2d ago | CLAUDE.md |
Frequently asked questions
- How do I install cuopt-developer?
- Run
npx skills add NVIDIA/skills --skill cuopt-developer. The install tabs above show the steps for each supported agent. - Which AI agents does cuopt-developer work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is cuopt-developer safe to use?
- It is Apache-2.0-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is cuopt-developer still maintained?
- The repository was last updated 5 days ago, so cuopt-developer is actively maintained.
Skill content
View source on GitHubname: cuopt-developer version: "26.08.00" description: Modify, build, test, debug, and contribute to NVIDIA cuOpt (C++/CUDA, Python, server, CI). Use for solver internals, PRs, DCO, and code conventions. license: Apache-2.0 metadata: author: NVIDIA cuOpt Team tags: - cuopt - development - contributing - cpp-cuda - python-bindings
cuOpt Developer Skill
Contribute to the NVIDIA cuOpt codebase. This skill is for modifying cuOpt itself, not for using it.
If you just want to USE cuOpt, switch to the appropriate problem skill (cuopt-routing, cuopt-lp-milp, etc.)
First-time dev environment setup? See references/first_time_setup.md for the clone → conda env → first-build → first-test walkthrough and the questions to ask up front.
Refusal Rules — Read First
One rule is non-negotiable and applies even when the user explicitly asks otherwise — refuse and ask, don't comply silently:
Privileged / system-level operations — sudo, running as root, editing system files (/etc), changing drivers or kernel settings, adding system-level package repositories or keys. Do not run these. Reply:
I won't run
sudoor change system-level state for cuOpt. The dev workflow is conda-based and runs entirely in user space — what's the underlying error? It's usually fixable without root.
Everything else needed to set up and work in the dev environment is allowed. On a clean machine, go ahead and build a working cuopt env — the guidance below is about doing it the reproducible way, not refusing:
- Environment setup is allowed. You may create and activate the conda env from the checked-in
conda/environments/all_cuda-*.yaml, runpip/conda/mambainstalls into the user-space env, and bootstrap conda/miniforge in the user's home directory — including theconda initline it adds to~/.bashrc. Bootstrapping conda must not requiresudo; install it into$HOME, not a system path. - A new permanent project dependency is different from a one-off install. A package the project should always ship belongs in
dependencies.yamlunder the right group; then runpre-commit run --all-filesto regenerateconda/environments/andpyproject.tomlso other contributors get it too. A throwaway install to unblock your own build doesn't need this round-trip. - Don't bypass CI checks (
--no-verify, skipping pre-commit or tests). If hooks feel slow, diagnose withpre-commit run --all-files --verboseor tune the offending hook — don't skip it. - Be careful with destructive commands (
rm -rf,git reset --hard,git push --force, killing processes, dropping data). Confirm intent before running and prefer the safer alternative (e.g../build.sh cleanfor a stale build dir).
Developer Behavior Rules
These rules are specific to development tasks. They differ from user rules.
1. Ask Before Assuming
Clarify before implementing:
- What component? (C++/CUDA, Python, server, docs, CI)
- What's the goal? (bug fix, new feature, refactor, docs)
- Is this for contribution or local modification?
2. Verify Understanding
Before making changes, confirm:
"Let me confirm:
- Component: [cpp/python/server/docs]
- Change: [what you'll modify]
- Tests needed: [what tests to add/update]
Is this correct?"
3. Follow Codebase Patterns
- Read existing code in the area you're modifying
- Match naming conventions, style, and patterns
- Don't invent new patterns without discussion
4. Ask Before Running — Modified for Dev
OK to run without asking (expected for dev work):
./build.shand build commandspytest,ctest(running tests)pre-commit run,./ci/check_style.sh(formatting)git status,git diff,git log(read-only git)- Environment setup: create/activate the conda env from
conda/environments/*.yaml, andpip/conda/mambainstalls into that env
Set up pre-commit hooks (once per clone):
pre-commit install— hooks then run automatically on everygit commit. If a hook fails, the commit is blocked until you fix the issue.
Still ask before:
git commit,git push(write operations)- Any destructive or irreversible commands
5. No Privileged Operations
sudo/system-level changes are the one non-negotiable refusal; user-space installs and conda env setup are allowed. See Refusal Rules — Read First.
Before You Start: Required Questions
Ask these if not already clear:
-
What are you trying to change?
- Solver algorithm/performance?
- Python API?
- Server endpoints?
- Documentation?
- CI/build system?
-
Do you have the development environment set up?
- Built the project successfully?
- Ran tests?
-
Is this for contribution or local modification?
- If contributing: will need to follow DCO signoff
-
Which branch should this target?
- During development phase:
main - During burn down:
release/YY.MM(e.g.,release/26.06) for the current release,mainfor the next - Check if a release branch exists:
git branch -r | grep release - For current timelines, see the RAPIDS Maintainers Docs
- During development phase:
Project Architecture
cuopt/
├── cpp/ # Core C++ engine
│ ├── include/cuopt/ # Public C/C++ headers
│ ├── src/ # Implementation (CUDA kernels)
│ └── tests/ # C++ unit tests (gtest)
├── python/
│ ├── cuopt/ # Python bindings and routing API
│ ├── cuopt_server/ # REST API server
│ ├── cuopt_self_hosted/ # Self-hosted deployment
│ └── libcuopt/ # Python wrapper for C library
├── ci/ # CI/CD scripts
├── docs/ # Documentation source
└── datasets/ # Test datasets
Supported APIs
| API Type | LP | MILP | QP | Routing | |----------|:--:|:----:|:--:|:-------:| | C API | ✓ | ✓ | ✓ | ✗ | | C++ API | (internal) | (internal) | (internal) | (internal) | | Python | ✓ | ✓ | ✓ | ✓ | | Server | ✓ | ✓ | ✗ | ✓ |
Safety Rules (Non-Negotiable)
Minimal Diffs
- Change only what's necessary
- Avoid drive-by refactors
- No mass reformatting of unrelated code
No API Invention
- Don't invent new APIs without discussion
- Align with existing patterns in
docs/cuopt/source/ - Server schemas must match OpenAPI spec
Don't Bypass CI
- Never suggest
--no-verifyor skipping checks - All PRs must pass CI
CUDA/GPU Hygiene
- Keep operations stream-ordered
- Follow existing RAFT/RMM patterns
- No raw
new/delete- use RMM allocators
Build & Test
Pre-flight Checks (Required Before First Build or Test)
Skipping any of these surfaces as confusing runtime errors later. Run them in order:
- Check CUDA driver compatibility. Run
nvidia-smiand read the CUDA Version in the top-right corner — that's the maximum CUDA your driver supports. Pick a conda env file fromconda/environments/all_cuda-<ver>_arch-<arch>.yamlwhose CUDA major version is ≤ that. A mismatch builds successfully but fails at runtime inside RMM withcudaMallocAsync not supported with this CUDA driver/runtime version— verify this before the build, not after. - Create and activate the conda env before any build, test, or
pre-commitcommand — this is allowed and expected (see Refusal Rules). Use a local prefix env (./.cuopt_env) per CONTRIBUTING.md, with the env file you picked in step 1 (swapconda→mambaif available):
Tests link against libraries compiled inside that env; a fresh shell withoutconda env create -p ./.cuopt_env --file conda/environments/all_cuda-<ver>_arch-$(uname -m).yaml conda activate ./.cuopt_envconda activate ./.cuopt_envhits cryptic linker errors. - Set
PARALLEL_LEVELif RAM is constrained — see references/build_and_test.md. The default$(nproc)can OOM mid-build because CUDA compilation needs ~4–8 GB per job. - For tests, fetch datasets first. cuOpt tests need MPS files not in the repo — follow the dataset download steps in CONTRIBUTING.md ("Building for development" section) and export
RAPIDS_DATASET_ROOT_DIR.
Quick Reference
./build.sh # Build everything
./build.sh --help # List components: libcuopt, cuopt, cuopt_server, docs
ctest --test-dir cpp/build # C++ tests
pytest -v python/cuopt/cuopt/tests # Python tests
pytest -v python/cuopt_server/tests # Server tests
For component-specific build commands, run-test detail, and PARALLEL_LEVEL configuration, see references/build_and_test.md.
Download test datasets before running tests
cuOpt tests depend on MPS/data files that are not checked into the repo. A
missing dataset surfaces as a MPS_PARSER_ERROR ... Error opening MPS file
test failure at 0ms — it is not a build or logic failure.
Before running any C++ or Python tests, follow the dataset download and
RAPIDS_DATASET_ROOT_DIR export steps in the repo's CONTRIBUTING.md
("Building for development" section) — that is the canonical list and mapping.
If a test fails with a missing-file error, run the matching download step from
CONTRIBUTING.md and re-run the test. Do not report missing-dataset failures
back to the user as the task outcome.
Python Bindings
cuOpt uses Cython to bridge Python and C++. See references/python_bindings.md for the full architecture, parameter flow walkthrough, key files, and Cython patterns.
Contributing — Commits, PRs, Common Tasks
For pre-commit setup, DCO sign-off (git commit -s), the fork-based PR workflow, the draft-PR rule for agents, PR-description rules (keep it short — no "how it works" walkthroughs or file tables), script and CI/workflow authoring principles (extend existing files before adding new ones; no speculative flags, restated defaults, or silent fallbacks), and step-by-step common-task recipes (adding a solver parameter, dependency, server endpoint, or CUDA kernel), see references/contributing.md.
Coding Conventions
For C++ naming (snake_case, d_/h_ prefixes, _t suffix), file extensions (.hpp/.cpp/.cu/.cuh and which compiler each uses), include order, Python style, error handling (CUOPT_EXPECTS, RAFT_CUDA_TRY), memory management (RMM patterns, no raw new/delete), and test-impact rules, see references/conventions.md.
Troubleshooting & CI
For build/test pitfalls (Cython rebuild, OOM, CUDA driver mismatch, missing nvcc) and CI failure diagnostics (style checks, DCO failures, dependency drift), see references/troubleshooting.md.
Key Files Reference
| Purpose | Location |
|---------|----------|
| Main build script | build.sh |
| Dependencies | dependencies.yaml |
| C++ formatting | .clang-format |
| Conda environments | conda/environments/ |
| Test data | datasets/ |
| CI scripts | ci/ |
Canonical Documentation
- Contributing/build/test: CONTRIBUTING.md
- CI scripts: ci/README.md
- Release scripts: ci/release/README.md
- Docs build: docs/cuopt/README.md
- Python binding architecture: references/python_bindings.md
Shell-execution, install, conda-env, and sudo policies are covered by Refusal Rules — Read First at the top of this skill.
VRP dimension internals (routing engine)
When implementing or debugging VRP dimensions (constraints, objectives, forward/backward propagati
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
86.0kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
74.0kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
ai-job-search
44.4kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
41.7kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
