chore: complete release/0.1 forward merge - #151
Conversation
#### Overview Slim the Python adapter dependency boundary for the `release/0.1` line without changing adapter behavior. - `nemo-fabric` remains a metadata-only package that unconditionally installs the exact matching `nemo-fabric-runtime`. - Root harness extras delegate to the matching adapter package's `harness` extra. - Bare adapter distributions contain only adapter-owned runtime dependencies. - Every adapter provides `harness` and `full`; only Deep Agents and Hermes provide the Python `relay` extra. Claude and Codex continue to use the separately installed `nemo-relay` CLI. - Wrapped harness packages required by repository tests remain in the non-published `adapter-tests` dependency group. #### Details The supported install modes are now explicit: - `nemo-fabric[<harness>]`: Runtime, adapter, and supported harness dependencies in one environment. - `nemo-fabric` plus a bare adapter package: Runtime and adapter with an existing host-managed harness. - `nemo-fabric-adapters-<adapter>[harness]`: Adapter and supported harness without Runtime, for a separate adapter interpreter. - Bare `nemo-fabric-adapters-<adapter>`: Adapter-owned dependencies only. - Adapter `full`: All package-installable dependencies; for Claude and Codex this equals `harness` because Relay is an external CLI. The README, package description, install guide, adapter guides, Harbor examples, CI, consumer skill, and maintainer packaging skills now describe the same matrix. Metadata tests guard the root-to-adapter delegation and the exact adapter dependency boundaries. #### Validation - Focused metadata, README, and Harbor checks: `55 passed` - Full Python suite: `529 passed, 15 skipped` - Latest upstream Hermes streaming coverage plus metadata checks: `21 passed` - Root and all adapter lockfiles: `uv lock --check` - `just build-python` - `cargo check -p fabric-python --locked` - `just docs` (all checks passed; unauthenticated redirect check skipped with the expected warning) - `just wheels`, followed by root and adapter wheel `METADATA` inspection - License diff against `upstream/release/0.1`: no Rust or Python additions, removals, or changes - Full `pre-commit run --all-files` - `just --fmt --check` - `git diff --check` #### Where should the reviewer start? Start with `pyproject.toml`, the four adapter `pyproject.toml` files, and `tests/adapters/test_adapter_package_metadata.py`. Then review `docs/getting-started/install.mdx`, `.github/workflows/ci_python.yml`, and `.agents/skills/contribute-adapter/SKILL.md`. The branch is rebased onto the latest `release/0.1`. It includes and preserves the adapter configuration changes from NVIDIA#117. #### Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) - Closes [FABRIC-125](https://linear.app/nvidia/issue/FABRIC-125/slim-adapter-runtime-dependencies) - Relates to NVIDIA#117 - [x] I confirm this contribution is my own work, or I have the right to submit it under this project's license. - [x] I searched existing issues and open pull requests, and this does not duplicate existing work. ## Summary by CodeRabbit * **Documentation** * Clarified installation options for runtime, adapters, harnesses, and Relay integrations. * Added supported Python version guidance and separate-environment setup instructions. * Updated Hermes, Claude, Codex, and Deep Agents quick starts and deployment scenarios. * Improved Harbor setup and command examples, including version-alignment guidance. * **Bug Fixes** * Improved Hermes configuration writing when YAML support is unavailable. * Clarified Relay CLI requirements and adapter-specific integration behavior. * **Tests** * Added validation for package dependency boundaries, installation metadata, and adapter configuration behavior. Authors: - Zhongxuan (Daniel) Wang (https://github.com/zhongxuanwang-nv) Approvers: - Anuradha Karuppiah (https://github.com/AnuradhaKaruppiah) - David Gardner (https://github.com/dagardner-nv) URL: NVIDIA#105
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Resolve the 0.2.0 internal package pins and Cargo lock entries during the manual forward merge. Teach the version and lock checks to cover adapter extras and the complete Cargo graph. Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
WalkthroughThe change standardizes root and leaf adapter packaging metadata, adds adapter-specific dependency synchronization and metadata tests, updates CI and Harbor commands, and rewrites installation guidance for runtime, harness, full, and Relay configurations. ChangesAdapter Packaging and Installation Alignment
Estimated code review effort: 3 (Moderate) | ~30 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Fern docs preview: https://nvidia-preview-pull-request-151.docs.buildwithfern.com/nemo/fabric |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@examples/harbor/README.md`:
- Around line 68-77: Update the package version pins in the two-environment
requirements table to the current 0.2.0 release, including every nemo-fabric
dependency for Harbor, Claude, and Hermes Agent environments. Preserve the
existing extras and Relay CLI 0.6.x requirement, and keep all documented
nemo-fabric versions consistent.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Enterprise
Run ID: b8dd39be-9e99-4449-bcdd-cec884fae1bb
⛔ Files ignored due to path filters (6)
Cargo.lockis excluded by!**/*.lockadapters/claude/uv.lockis excluded by!**/*.lockadapters/codex/uv.lockis excluded by!**/*.lockadapters/deepagents/uv.lockis excluded by!**/*.lockadapters/hermes/uv.lockis excluded by!**/*.lockuv.lockis excluded by!**/*.lock
📒 Files selected for processing (36)
.agents/skills/contribute-adapter/SKILL.md.agents/skills/maintain-packaging/SKILL.md.agents/skills/python-tests/SKILL.md.github/workflows/ci_python.yml.pre-commit-config.yamlCONTRIBUTING.mdREADME.mdadapters/claude/README.mdadapters/claude/pyproject.tomladapters/codex/README.mdadapters/codex/pyproject.tomladapters/deepagents/README.mdadapters/deepagents/pyproject.tomladapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/README.mdadapters/hermes/pyproject.tomldocs/getting-started/install.mdxdocs/getting-started/quickstart.mdxdocs/integrations/harness/claude.mdxdocs/integrations/harness/codex.mdxdocs/integrations/harness/deepagents.mdxdocs/integrations/harness/hermes.mdxdocs/sdk/python.mdxexamples/harbor/README.mdexamples/harbor/calculator/README.mdexamples/harbor/calculator/task/environment/Dockerfileexamples/harbor/swebench/README.mdjustfilepypi.mdpyproject.tomlskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdtests/adapters/test_adapter_package_metadata.pytests/adapters/test_hermes_config_builder.pytests/integrations/test_harbor_runner.pytests/python/test_harbor_integration.pytests/python/test_readme_examples.py
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
- GitHub Check: Test (Python 3.12, windows-amd64)
- GitHub Check: Test (Python 3.12, macos-arm64)
- GitHub Check: Test (Python 3.13, windows-amd64)
- GitHub Check: Test (Python 3.14, windows-amd64)
- GitHub Check: Test (Python 3.11, windows-amd64)
🧰 Additional context used
📓 Path-based instructions (56)
**/*
📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)
**/*: Before implementing, explicitly state assumptions, surface ambiguity and tradeoffs, present multiple interpretations when relevant, and ask for clarification rather than silently deciding or proceeding when requirements are unclear.
Prefer the minimum code needed to solve the requested problem: avoid speculative features, unnecessary abstractions, unrequested flexibility, and handling of impossible scenarios; simplify overcomplicated solutions.
When editing existing code, make surgical changes only: do not modify unrelated code, comments, formatting, or pre-existing dead code; match the existing style, and remove only unused imports, variables, or functions introduced by your changes.
Define verifiable success criteria for each task, such as writing regression tests for bugs and invalid-input tests for validation, then verify the implementation against those criteria. For multi-step work, state a brief plan with a verification check for each step.
**/*: Always spellNVIDIAin all caps; do not useNvidia,nvidia,nVidia,nVIDIA, orNV.
Usean NVIDIAbefore a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol afterNVIDIAwhen referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names withNVIDIAon first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...
Files:
adapters/claude/pyproject.tomlexamples/harbor/calculator/task/environment/Dockerfiledocs/getting-started/quickstart.mdxdocs/sdk/python.mdxtests/python/test_readme_examples.pyadapters/hermes/README.mddocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxCONTRIBUTING.mdpypi.mddocs/integrations/harness/hermes.mdxexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pydocs/integrations/harness/claude.mdxadapters/hermes/pyproject.tomldocs/getting-started/install.mdxadapters/codex/README.mdtests/adapters/test_hermes_config_builder.pyadapters/deepagents/pyproject.tomlREADME.mdexamples/harbor/swebench/README.mdtests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pyskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.mdpyproject.tomljustfileadapters/codex/pyproject.tomltests/python/test_harbor_integration.py
**/*.{rs,toml}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For any Rust change, run
just test-rustandcargo fmt --all -- --check.For Rust core, CLI, or shared runtime semantic changes, run Rust formatting and tests, and add Python tests when behavior is exposed through the SDK.
Files:
adapters/claude/pyproject.tomladapters/hermes/pyproject.tomladapters/deepagents/pyproject.tomlpyproject.tomladapters/codex/pyproject.toml
**/{Cargo.toml,Cargo.lock,pyproject.toml,package.json}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For new or updated dependencies, document the functional need, alternatives considered, and why the selected dependency is the narrowest fit.
Files:
adapters/claude/pyproject.tomladapters/hermes/pyproject.tomladapters/deepagents/pyproject.tomlpyproject.tomladapters/codex/pyproject.toml
**/*.{toml,lock}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If a manifest or lockfile changes, run the license-diff script against
origin/main, review transitive license changes, and run theattributions-rustandattributions-pythonpre-commit hooks.
Files:
adapters/claude/pyproject.tomladapters/hermes/pyproject.tomladapters/deepagents/pyproject.tomlpyproject.tomladapters/codex/pyproject.toml
**/*.{yml,yaml,toml,lock}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For CI or packaging changes, use
maintain-ciormaintain-packaging, then run recipes and checks whose behavior changed.
Files:
adapters/claude/pyproject.tomladapters/hermes/pyproject.tomladapters/deepagents/pyproject.tomlpyproject.tomladapters/codex/pyproject.toml
{pyproject.toml,adapters/**/pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
{pyproject.toml,adapters/**/pyproject.toml}: Update the literalproject.versionin the root setuptools project and every adapterpyproject.toml.
Keep internal exact-version requirements aligned: rootnemo-fabric-* == <version>optional dependencies and each adapter'snemo-fabric-adapters-common == <version>dependency.
Files:
adapters/claude/pyproject.tomladapters/hermes/pyproject.tomladapters/deepagents/pyproject.tomlpyproject.tomladapters/codex/pyproject.toml
**/*.{rs,py,toml}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
When editing version helpers, verify every
nemo-fabric-*workspace package through Cargo metadata and reject a static version inpython/pyproject.toml.
Files:
adapters/claude/pyproject.tomltests/python/test_readme_examples.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/pyproject.tomltests/adapters/test_hermes_config_builder.pyadapters/deepagents/pyproject.tomltests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pypyproject.tomladapters/codex/pyproject.tomltests/python/test_harbor_integration.py
**/*.{toml,rs,py}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
Avoid blind repository-wide replacement of version-like strings; distinguish package-version references from examples and unrelated dependency versions.
Files:
adapters/claude/pyproject.tomltests/python/test_readme_examples.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/pyproject.tomltests/adapters/test_hermes_config_builder.pyadapters/deepagents/pyproject.tomltests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pypyproject.tomladapters/codex/pyproject.tomltests/python/test_harbor_integration.py
adapters/**/*
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
Place each repository adapter under
adapters/<name>/, keep it independent and small, and includeLICENSE -> ../../LICENSE,README.md,fabric-adapter.json, language-native package and lock files, a source entry point, and focused tests.
Files:
adapters/claude/pyproject.tomladapters/hermes/README.mdadapters/deepagents/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/pyproject.tomladapters/codex/README.mdadapters/deepagents/pyproject.tomladapters/claude/README.mdadapters/codex/pyproject.toml
adapters/*/pyproject.toml
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
adapters/*/pyproject.toml: Keep each published Python leaf adapter's runtime dependencies razor-thin and adapter-owned; do not declare the wrapped harness/SDK or dependencies already directly declared by its supported package.
Give every leaf adapter aharnessextra for supported harness packages and afullextra for every package-installable optional integration; provide arelayextra when importing NeMo Relay Python APIs, but not when Relay is an external executable.
When an optional library is used by adapter behavior, provide and test a dependency-free fallback.
Files:
adapters/claude/pyproject.tomladapters/hermes/pyproject.tomladapters/deepagents/pyproject.tomladapters/codex/pyproject.toml
**/{Cargo.toml,pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
**/{Cargo.toml,pyproject.toml}: Prefer the standard library, an existing dependency, or a small local implementation when that keeps behavior clear and maintainable.
When multiple dependencies satisfy a technical requirement, prefer a maintained OSS option with clear SPDX metadata, a smaller transitive graph, and permissive terms such as Apache-2.0, MIT, BSD, or ISC.
Files:
adapters/claude/pyproject.tomladapters/hermes/pyproject.tomladapters/deepagents/pyproject.tomlpyproject.tomladapters/codex/pyproject.toml
**/{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
**/{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock}: Inspect the resolved transitive dependency graph, not only direct package licenses.
TreatUNKNOWN, non-SPDX/custom, proprietary or source-available terms, and copyleft or network-copyleft terms as explicit review points, routing them to dependency approvers with distribution and linkage context.
For each new dependency, record the functional need, viable alternatives considered, why the selected dependency is the narrowest fit, and any unresolved licensing question.
Files:
adapters/claude/pyproject.tomladapters/hermes/pyproject.tomladapters/deepagents/pyproject.tomlpyproject.tomladapters/codex/pyproject.toml
**/*.{toml,lock,json,yml,yaml,md,py,rs}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Keep package names, import paths, and module names internally consistent across packaging metadata, source, documentation, examples, and CI.
Files:
adapters/claude/pyproject.tomltests/python/test_readme_examples.pyadapters/hermes/README.mdCONTRIBUTING.mdpypi.mdexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/pyproject.tomladapters/codex/README.mdtests/adapters/test_hermes_config_builder.pyadapters/deepagents/pyproject.tomlREADME.mdexamples/harbor/swebench/README.mdtests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pyskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.mdpyproject.tomladapters/codex/pyproject.tomltests/python/test_harbor_integration.py
**/*.{md,py,rs,toml,json,yml,yaml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Ensure generated artifacts land where downstream consumers expect, and keep documentation, examples, CI, and local workflows aligned on current install, import, build, and package names.
Files:
adapters/claude/pyproject.tomltests/python/test_readme_examples.pyadapters/hermes/README.mdCONTRIBUTING.mdpypi.mdexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/pyproject.tomladapters/codex/README.mdtests/adapters/test_hermes_config_builder.pyadapters/deepagents/pyproject.tomlREADME.mdexamples/harbor/swebench/README.mdtests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pyskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.mdpyproject.tomladapters/codex/pyproject.tomltests/python/test_harbor_integration.py
**/*.{rs,py,html,md,mdx,toml,yaml,yml,sh,bash}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Include the required SPDX copyright and Apache-2.0 license header in every source file, using the comment syntax appropriate to the file type; MDX files must use a JSX comment.
Files:
adapters/claude/pyproject.tomldocs/getting-started/quickstart.mdxdocs/sdk/python.mdxtests/python/test_readme_examples.pyadapters/hermes/README.mddocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxCONTRIBUTING.mdpypi.mddocs/integrations/harness/hermes.mdxexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pydocs/integrations/harness/claude.mdxadapters/hermes/pyproject.tomldocs/getting-started/install.mdxadapters/codex/README.mdtests/adapters/test_hermes_config_builder.pyadapters/deepagents/pyproject.tomlREADME.mdexamples/harbor/swebench/README.mdtests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pyskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.mdpyproject.tomladapters/codex/pyproject.tomltests/python/test_harbor_integration.py
**/*.{toml,yaml,yml,sh,bash}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Use
#comments for SPDX headers in TOML, YAML, and shell files.
Files:
adapters/claude/pyproject.tomladapters/hermes/pyproject.tomladapters/deepagents/pyproject.tomlpyproject.tomladapters/codex/pyproject.toml
{adapters/**,examples/**}
⚙️ CodeRabbit configuration file
{adapters/**,examples/**}: Review adapter and example changes for command correctness, config/schema consistency, artifact handling, and compatibility with the public NeMo Fabric contracts.
Files:
adapters/claude/pyproject.tomlexamples/harbor/calculator/task/environment/Dockerfileadapters/hermes/README.mdexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/pyproject.tomladapters/codex/README.mdadapters/deepagents/pyproject.tomlexamples/harbor/swebench/README.mdadapters/claude/README.mdadapters/codex/pyproject.toml
.agents/skills/**
📄 CodeRabbit inference engine (AGENTS.md)
Keep maintainer skills under
.agents/skills/focused on repository contribution work, including API, documentation, testing, CI, packaging, release, and PR preparation; do not add consumer integration guidance.Repository maintainer skills belong under
.agents/skills/and should use descriptive, task-based names such ascontribute-apiandvalidate-change.
Files:
.agents/skills/maintain-packaging/SKILL.md.agents/skills/contribute-adapter/SKILL.md.agents/skills/python-tests/SKILL.md
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Keep package names, repository references, and build commands current in documentation and examples.
Files:
docs/getting-started/quickstart.mdxdocs/sdk/python.mdxdocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxdocs/integrations/harness/hermes.mdxexamples/harbor/README.mdexamples/harbor/calculator/README.mddocs/integrations/harness/claude.mdxdocs/getting-started/install.mdxREADME.mdexamples/harbor/swebench/README.md
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Update relevant getting-started, reference, adapter, and example documentation when the corresponding examples or adapters change.
Files:
docs/getting-started/quickstart.mdxdocs/sdk/python.mdxdocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxdocs/integrations/harness/hermes.mdxexamples/harbor/README.mdexamples/harbor/calculator/README.mddocs/integrations/harness/claude.mdxdocs/getting-started/install.mdxexamples/harbor/swebench/README.md
**/*.mdx
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
In MDX files, use JSX comment delimiters (
{/*and*/}) for top-of-file comments, including SPDX headers; do not use HTML comments.Use
{/* ... */}delimiters for top-of-file MDX SPDX comments, not HTML comment delimiters.Use a JSX comment containing the required SPDX header in MDX files.
Files:
docs/getting-started/quickstart.mdxdocs/sdk/python.mdxdocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxdocs/integrations/harness/hermes.mdxdocs/integrations/harness/claude.mdxdocs/getting-started/install.mdx
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.
Files:
docs/getting-started/quickstart.mdxdocs/sdk/python.mdxdocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxdocs/integrations/harness/hermes.mdxdocs/integrations/harness/claude.mdxdocs/getting-started/install.mdx
**/*.{md,mdx,rst}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-guide.md)
**/*.{md,mdx,rst}: For NeMo Fabric documentation, verify technical claims against the current repository, public API, or documented command before reviewing style.
Always spellNVIDIAin all caps; do not useNvidia,nvidia, orNV.
Format commands, code elements, expressions, package names, file names, and paths as inline code.
Use descriptive link text; avoid raw URLs and weak anchors such ashereorread more.
Use title case consistently for technical documentation headings.
Introduce code blocks, lists, tables, and images with complete sentences.
Write procedures as imperative, parallel steps; split long procedures into smaller tasks.
Prefer active voice, present tense, short sentences, contractions, and plain English while preserving necessary technical precision.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce, and preferrefer tooverseewhen directing readers to another resource.
Avoid culture-specific idioms, unnecessary Latinisms, jokes, and marketing exaggeration in technical documentation.
Spell out months in body text, avoid ordinal dates, and use clear time zones.
Spell out whole numbers from zero through nine unless they are technical values, parameters, versions, or UI values; use numerals for 10 or greater and commas in thousands.
Do not add trademark symbols to learning-oriented documentation unless the source, platform, or legal guidance explicitly requires them.
Do not replace precise technical terms with simpler words when doing so would lose precision.
Do not flag passive voice when the actor is unknown or the action is the important part.
Do not rewrite API names, package names, command flags, or code literals for style.
**/*.{md,mdx,rst}: Use consistent title case for technical-document headings and table headers; avoid quotation marks, ampersands, and exclamation marks in headings, while preserving official product, event, research, and whitepaper title ...
Files:
docs/getting-started/quickstart.mdxdocs/sdk/python.mdxadapters/hermes/README.mddocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxCONTRIBUTING.mdpypi.mddocs/integrations/harness/hermes.mdxexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mddocs/integrations/harness/claude.mdxdocs/getting-started/install.mdxadapters/codex/README.mdREADME.mdexamples/harbor/swebench/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.md
docs/**/*
📄 CodeRabbit inference engine (AGENTS.md)
Update Fern documentation under
docs/when public behavior, thenemo-fabricpackage, examples, or supported bindings change.
Files:
docs/getting-started/quickstart.mdxdocs/sdk/python.mdxdocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxdocs/integrations/harness/hermes.mdxdocs/integrations/harness/claude.mdxdocs/getting-started/install.mdx
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
**/*.{md,mdx}: Use the full product nameNVIDIA NeMo Fabricon its first usage, typically in the title or H1; useNeMo Fabricthereafter.
Usefabricby itself only when referring to the CLI tool, and surround those references with backticks.
CapitalizeNVIDIAcorrectly in public documentation.
Format commands, code elements, expressions, file names, paths, and filenames as inline code where needed.
Use title case consistently for headings in technical documentation.
Introduce code blocks, tables, and lists with complete lead-in sentences.
Use descriptive anchor text instead of raw URLs or generic link text such ashere.
Prefer active voice, present tense, short sentences, and plain English.
Use consistent terminology for the same concept throughout a document.
Write procedures as imperative, parallel, easy-to-scan steps, and split long sequences into smaller tasks.
Useafterinstead ofoncewhen expressing temporal sequence.
Usecaninstead ofmaywhen the intended meaning is possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
Introduce examples' code blocks with full sentences and ensure examples match current APIs and build commands.
Files:
docs/getting-started/quickstart.mdxdocs/sdk/python.mdxadapters/hermes/README.mddocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxCONTRIBUTING.mdpypi.mddocs/integrations/harness/hermes.mdxexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mddocs/integrations/harness/claude.mdxdocs/getting-started/install.mdxadapters/codex/README.mdREADME.mdexamples/harbor/swebench/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.md
**/{README.md,*.md,*.mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant documentation when public behavior, adapters, examples, or workspace structure changes; keep README files, API references, embedded examples, and support notes current.
Files:
docs/getting-started/quickstart.mdxdocs/sdk/python.mdxadapters/hermes/README.mddocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxCONTRIBUTING.mdpypi.mddocs/integrations/harness/hermes.mdxexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mddocs/integrations/harness/claude.mdxdocs/getting-started/install.mdxadapters/codex/README.mdREADME.mdexamples/harbor/swebench/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.md
{docs/**,README.md,AGENTS.md}
⚙️ CodeRabbit configuration file
{docs/**,README.md,AGENTS.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency with generated schemas.
For links between files under docs/, require paths relative to the source file with the target file's .mdx extension so they work in both Fern builds and repository browsers. Flag Fern site-root links such as NeMo Fabric overview; use the repository-relative equivalent, such as NeMo Fabric overview.
Files:
docs/getting-started/quickstart.mdxdocs/sdk/python.mdxdocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxdocs/integrations/harness/hermes.mdxdocs/integrations/harness/claude.mdxdocs/getting-started/install.mdxREADME.md
{*.md,**/*.md,**/*.mdx,**/*.ipynb}
⚙️ CodeRabbit configuration file
{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercasefabricCLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.
Files:
docs/getting-started/quickstart.mdxdocs/sdk/python.mdxadapters/hermes/README.mddocs/integrations/harness/deepagents.mdxdocs/integrations/harness/codex.mdxCONTRIBUTING.mdpypi.mddocs/integrations/harness/hermes.mdxexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mddocs/integrations/harness/claude.mdxdocs/getting-started/install.mdxadapters/codex/README.mdREADME.mdexamples/harbor/swebench/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.md
.pre-commit-config.yaml
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Regenerate Rust and Python attribution files with the named
attributions-rustandattributions-pythonpre-commit hooks instead of editing generated output manually.
Files:
.pre-commit-config.yaml
docs/sdk/python.mdx
📄 CodeRabbit inference engine (AGENTS.md)
Keep
docs/sdk/python.mdxcurrent when the public Python API changes.
Files:
docs/sdk/python.mdx
**/*.{rs,py,pyi,json,yaml,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Determine and update every affected public surface, including the CLI, PyO3 bindings, Python SDK, type stubs, schemas, and adapter contract, so they remain in parity.
Files:
tests/python/test_readme_examples.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_hermes_config_builder.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pytests/python/test_harbor_integration.py
**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For native binding changes, run
cargo check -p fabric-python --locked.
**/*.{rs,py}: Use language-appropriate naming conventions: Rust and Python functions and variables usesnake_case; Rust types and Python classes usePascalCase.
Keep native Python binding declarations synchronized with their Rust implementations.
Run tests for every language surface affected by a change; changes touching the Rust core or public schemas require both Rust and Python test suites.
Files:
tests/python/test_readme_examples.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_hermes_config_builder.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pytests/python/test_harbor_integration.py
**/*.{py,pyi}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If Python code or a Python-facing adapter changes, run
just test-python.
Files:
tests/python/test_readme_examples.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_hermes_config_builder.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pytests/python/test_harbor_integration.py
**/*.{rs,py,pyi}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
**/*.{rs,py,pyi}: If public configuration types change, confirm schema snapshot tests injust test-rustpass and review generated schema diffs.
For schema or public contract changes, run both language suites and review changes underschemas/and generated API references.
Files:
tests/python/test_readme_examples.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_hermes_config_builder.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pytests/python/test_harbor_integration.py
**/*.{py,pyi,rs}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For Python SDK or PyO3 binding changes, use
python-tests, run focused pytest tests first, thenjust test-python; rebuild withjust build-pythonwhen native code or packaging changes.
Files:
tests/python/test_readme_examples.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_hermes_config_builder.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pytests/python/test_harbor_integration.py
tests/**/*.py
📄 CodeRabbit inference engine (.agents/skills/python-tests/SKILL.md)
tests/**/*.py: Use Pytest to run Python tests.
Do not add@pytest.mark.asyncioto tests; async tests are automatically detected by the async runner.
Do not add-> Nonereturn annotations to test functions.
When mocking classes, useunittest.mock.MagicMockorAsyncMock, usingspecwhen necessary; do not define replacement classes.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
Define fixtures needed by multiple test files inconftest.pyrather than repeating them.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a<fixture_name>_fixturefunction; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its returned value is unused.
Useos.environto modify environment variables in tests; do not usemonkeypatch.setenv, becausetests/conftest.pyprovides the autouserestore_environ_fixture.
Avoid defensive programming in tests; access expected data directly so missing data causes a clear failure, such as usingresults["data"]instead ofresults.get("data").
When adapter installation metadata changes, directly assert the published package composition: the root project depends unconditionally on the exact-versionnemo-fabric-runtime; root harness extras delegate to matching leaf adapter harness extras; bare leaf dependencies remain adapter-owned; the rootadapter-testsgroup installs leaves through their harness extras; every leaf providesfull, and only adapters importing NeMo Relay Python APIs providerelay, while external Relay executable adapters havefullequal toharness.
Files:
tests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pytests/python/test_harbor_integration.py
**/*.py
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Use type annotations for public Python APIs.
Files:
tests/python/test_readme_examples.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_hermes_config_builder.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pytests/python/test_harbor_integration.py
**/*.{rs,py,json}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
When adding functionality, include tests in the corresponding Rust crate or relevant
tests/area, and keep checked-in JSON Schema snapshots and native Python binding declarations synchronized for public contract changes.
Files:
tests/python/test_readme_examples.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_hermes_config_builder.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pytests/python/test_harbor_integration.py
{tests/**,python/tests/**}
⚙️ CodeRabbit configuration file
{tests/**,python/tests/**}: Tests should cover the behavior promised by the changed API surface, including error paths, lifecycle cleanup, and SDK/native parity where relevant.
Files:
tests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pytests/python/test_harbor_integration.py
**/*.{md,rst}
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Update documentation and examples in the same branch as the public API change.
Files:
adapters/hermes/README.mdCONTRIBUTING.mdpypi.mdexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdadapters/codex/README.mdREADME.mdexamples/harbor/swebench/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.md
**/*.{md,rst,txt,adoc}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-language-mechanics.md)
**/*.{md,rst,txt,adoc}: For technical documentation, use professional, active, conversational, engaging, precise, and plain-English prose. Prefer active voice, present tense, short sentences, and scannable paragraphs. Avoid casual or imprecise language, swearing, threats, insults, jokes, puns, culture-specific idioms, marketing exaggeration, and unsupported third-party comparisons.
Usecanfor possibility and reservemayfor permission; useafterfor temporal order; userefer tofor cross-references; prefer short direct sentences and specific verbs; avoid unnecessarypleasein technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: usefor exampleorsuch asinstead ofe.g.,and so oninstead ofetc.,that isinstead ofi.e.,compared toinstead ofvs., andby,through, orusinginstead ofvia. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Usethatwithout commas for essential clauses, andwhichwith commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such asJune 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space beforea.m.orp.m.; useETandPTfor needed time zones; avoid24/7; and preferfrom 12:30 to 1:00 p.m.for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...
Files:
adapters/hermes/README.mdCONTRIBUTING.mdpypi.mdexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdadapters/codex/README.mdREADME.mdexamples/harbor/swebench/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.md
adapters/*/README.md
📄 CodeRabbit inference engine (AGENTS.md)
Update adapter README files when public behavior, examples, or supported bindings change.
Document installation, supported configuration, harness-only settings, credentials, lifecycle, telemetry, artifacts, limitations, focused test commands, and canonical typed SDK or harness-native YAML examples.
Files:
adapters/hermes/README.mdadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.md
**/README.md
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Update relevant package, crate, adapter, and integration README files when public behavior or entry-point documentation changes.
Files:
adapters/hermes/README.mdexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdadapters/codex/README.mdREADME.mdexamples/harbor/swebench/README.mdadapters/claude/README.md
**/*.md
📄 CodeRabbit inference engine (.agents/skills/README.md)
Documentation and examples must be updated consistently with changes to public behavior and reviewed for NVIDIA technical-writing style.
Files:
adapters/hermes/README.mdCONTRIBUTING.mdpypi.mdexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdadapters/codex/README.mdREADME.mdexamples/harbor/swebench/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.md
**/*.{html,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Use an HTML comment containing the required SPDX header in HTML and Markdown files.
Files:
adapters/hermes/README.mdCONTRIBUTING.mdpypi.mdexamples/harbor/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdadapters/codex/README.mdREADME.mdexamples/harbor/swebench/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdadapters/claude/README.md
adapters/**/*.{py,js,ts,rs}
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
adapters/**/*.{py,js,ts,rs}: Use the existing Fabricpythonorprocessrunner and normalized request/result contracts; do not add a runner or abstraction for one adapter.
Use the complete Fabric invocation for adapters consuming normalized configuration or runtime context; treatconfig,capability_plan,telemetry_plan, andruntime_contextas authoritative, and reserveharness.settingsfor harness-specific behavior.
Apply precedence in this order: normalized config, Fabric-resolved plans and runtime context, harness-specific settings, then descriptor and adapter defaults. Reject conflicting duplicate declarations or unsupported behavior with actionable errors naming the field and supported alternatives.
Never expose credential values in output, errors, events, logs, or fixtures.
Forward only required system variables, selected credential variables, telemetry variables, and documented harness-specific environment; never forward or log unrelated environment values.
Start one local adapter host per Fabric runtime and keep it alive for orderedstart→invoke*→stop; emit one JSON lifecycle response per request on stdout and diagnostics on stderr.
Return harness-level invoke failures in a successful lifecycle response withresponse: null,failed: true, and structurederrorcontainingcode,message,retryable, and optionalmetadata.
For NeMo Relay streaming throughRuntime.invoke_stream(), do not emit stream records on adapter stdout; return exactly one terminal lifecycle response while Relay sends raw records through the SDK-owned NDJSON endpoint.
Scope workspace, generated configuration, state, sessions, and artifacts to the resolved runtime context, and isolate stateful adapters by Fabric runtime ID.
Keep stdout stable by emittingresponseand adapter-specific extensions such aserror, harnessevents,usage, and session IDs; do not duplicate Fabric-supplied top-level result fields.
Claim capabilities only when they are impl...
Files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
tests/adapters/**/*.py
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
tests/adapters/**/*.py: If an adapter or integration changes, run its focused tests.
For adapter behavior changes, run focused adapter tests undertests/adapters, then runjust test-python.
Files:
tests/adapters/test_hermes_config_builder.pytests/adapters/test_adapter_package_metadata.py
**/.github/workflows/*.{yml,yaml}
📄 CodeRabbit inference engine (.agents/skills/maintain-ci/SKILL.md)
**/.github/workflows/*.{yml,yaml}: Definepermissions:per job that needs token access, using the minimum required scopes; avoid workflow-level permissions unless centralized inheritance is intentionally documented.
Pin every third-party GitHub Action to a full commit SHA and retain a readable version comment after the SHA.
Use action-native or ecosystem-native caching instead of genericactions/cachewhen available.
Tie cache invalidation to lockfiles, dependency manifests, or explicit tool versions; avoid caching generated outputs unless deliberate repository behavior requires it.
Useastral-sh/setup-uvcache support withcache-dependency-globanchored touv.lock.
UseSwatinem/rust-cachewith explicitshared-keyandworkspacesinstead of ad hoc target-directory caching.
Keep deploy and publish permissions isolated to only the jobs that require them; restrictpages: writeandid-token: writeto Pages deployment jobs and their reusable-workflow callers.
Usecontents: readas the minimum permission for checkout-based build, test, documentation, and packaging jobs.
Grantpull-requests: readonly to jobs that perform pull-request metadata lookups.
When usingworkflow_call, inspect both caller and callee, and ensure the caller grants every permission required by the called jobs because the callee cannot elevate permissions.
Keep local workflow commands aligned with equivalentjustfilerecipes, and keep Python, Rust, and documentation jobs aligned with their lockfiles.
Preserve intended concurrency settings, branch filters, and documentation publish guards when modifying workflows.
Before editing workflows, inspect workflow relationships and settings with searches coveringuses:,permissions:,secrets:,concurrency:,cache, andjust.
Files:
.github/workflows/ci_python.yml
.github/workflows/**/*.{yml,yaml}
📄 CodeRabbit inference engine (.agents/skills/README.md)
GitHub Actions workflows must use pinned actions and be validated locally when maintained.
Files:
.github/workflows/ci_python.yml
{README.md,docs/index.yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Update
README.mdordocs/index.ymlwhen documentation entry points or example reading paths change.
Files:
README.md
README.md
📄 CodeRabbit inference engine (AGENTS.md)
Update the root
README.mdwhen public behavior, thenemo-fabricpackage, examples, or supported bindings change.Update the top-level
README.mdwhen changed behavior affects an entry point users would naturally consult.
Files:
README.md
skills/**
📄 CodeRabbit inference engine (AGENTS.md)
skills/**: Keep consumer skills underskills/self-contained and dependent only on supported public Python SDK contracts and published documentation; do not add repository-internal contribution guidance.
Keep consumer skills in parity with the public SDK guide, model, and type details when the Python/Rust binding contract changes.
Files:
skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
**/SKILL.md
📄 CodeRabbit inference engine (.agents/skills/README.md)
**/SKILL.md: Maintainer skills must begin with YAML frontmatter containing at leastnameanddescription.
Maintainer skills may reference repository internals, build and test commands, and contribution workflows, but external usage guidance must remain in the top-levelskills/directory.
Files:
skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
⚙️ CodeRabbit configuration file
**/SKILL.md: Do not flag SKILL.md files for missing SPDX headers. Skill entrypoints intentionally start with YAML frontmatter instead.
Verify that every SKILL.md keeps valid YAML frontmatter with at least name and description fields before the Markdown body.
Files:
skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
pyproject.toml
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
pyproject.toml: Keepnemo-fabric-runtimeas an exact-version unconditional dependency of the rootnemo-fabricmetapackage, and give every installable Python harness adapter one canonical root extra depending on the matchingnemo-fabric-adapters-<adapter>[harness].
Install leaf adapters through theirharnessextras in the rootadapter-testsdependency group; keep other test-only packages in an appropriate non-published group.
pyproject.toml: Keepnemo-fabricas a metapackage that unconditionally installs the exact-versionnemo-fabric-runtimedistribution.
Root harness extras must delegate to version-matched leaf adapterharnessextras; do not add root adapter-only aliases.Packaging metadata tests must verify the published dependency and extra composition described for the root project, harness extras, leaf adapters,
adapter-tests,full, andrelay.
Files:
pyproject.toml
{pyproject.toml,python/pyproject.toml,Cargo.toml,Cargo.lock,uv.lock}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Keep workspace, Python, and lockfile versions aligned where required.
Files:
pyproject.toml
justfile
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
justfile: Theset-versionrecipe must runjust lock-pythonafter source metadata is updated.
set_project_versionmust invoke both Cargo and Python project version helpers.For Python adapters, wire the package into
python_projects; also update root optional extras, adapter dependency groups,[tool.uv.sources], applicable catalogs, CI enumerations, and package the descriptor undershare/nemo-fabric/adapters/<name>.Keep build, test, clean, and documentation recipes consistent with the current package and module names.
Files:
justfile
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-29T16:41:26.467Z
Learning: Scope packaging changes appropriately, surface assumptions, and define focused validation before editing.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-29T16:41:32.645Z
Learning: Use `uv run pytest -k "<pattern>"` for focused test runs and `uv run pytest` to run the full test suite.
📚 Learning: 2026-07-09T22:28:51.689Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 43
File: adapters/claude-sdk/src/nemo_fabric_adapters/claude_sdk/adapter.py:164-168
Timestamp: 2026-07-09T22:28:51.689Z
Learning: In the NeMo-Fabric adapters, treat path values used in Fabric adapter configuration (including logic like `_resolve_path` in adapter.py) as config-root-relative. Do not apply `Path.expanduser()` (or otherwise apply `~`/home or shell-style expansion), because it will make the resolved paths normalize inconsistently across adapters. Also, do not rely on or add any resolution behavior that uses `harness.settings.cwd` as an override point for these adapter paths—`harness.settings.cwd` is explicitly unsupported in this adapter context.
Applied to files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
🪛 Ruff (0.16.0)
tests/adapters/test_hermes_config_builder.py
[warning] 52-52: Avoid specifying long messages outside the exception class
(TRY003)
tests/integrations/test_harbor_runner.py
[warning] 325-325: Consider f-string instead of string join
Replace with f-string
(FLY002)
🪛 SkillSpector (2.4.4)
.agents/skills/contribute-adapter/SKILL.md
[error] 196: [RA1] Self-Modification: Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.
Remediation: Prevent the skill from modifying its own code, SKILL.md, or configuration files. Treat skill files as read-only at runtime.
(Rogue Agent (RA1))
[error] 196: [RA1] Self-Modification: Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.
Remediation: Prevent the skill from modifying its own code, SKILL.md, or configuration files. Treat skill files as read-only at runtime.
(Rogue Agent (RA1))
🪛 zizmor (1.28.0)
.github/workflows/ci_python.yml
[warning] 91-91: code injection via template expansion (template-injection): may expand into attacker-controllable code
(template-injection)
[warning] 92-92: code injection via template expansion (template-injection): may expand into attacker-controllable code
(template-injection)
[warning] 92-92: code injection via template expansion (template-injection): may expand into attacker-controllable code
(template-injection)
🔇 Additional comments (37)
pyproject.toml (1)
40-58: LGTM!Also applies to: 76-81
adapters/claude/pyproject.toml (1)
32-38: LGTM!adapters/codex/pyproject.toml (1)
32-38: LGTM!adapters/deepagents/pyproject.toml (1)
37-48: LGTM!adapters/hermes/pyproject.toml (1)
30-41: LGTM!.agents/skills/contribute-adapter/SKILL.md (1)
52-83: LGTM!Also applies to: 179-179
.agents/skills/maintain-packaging/SKILL.md (1)
37-43: LGTM!.agents/skills/python-tests/SKILL.md (1)
39-52: LGTM!tests/adapters/test_adapter_package_metadata.py (1)
16-58: LGTM!Also applies to: 61-97, 100-129, 132-146
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
121-133: LGTM!tests/adapters/test_hermes_config_builder.py (1)
6-9: LGTM!Also applies to: 44-65
tests/python/test_readme_examples.py (1)
21-21: LGTM!.github/workflows/ci_python.yml (1)
86-92: LGTM!.pre-commit-config.yaml (1)
34-34: LGTM!justfile (1)
206-206: LGTM!Also applies to: 260-264, 350-352, 421-424
CONTRIBUTING.md (1)
54-55: LGTM!Also applies to: 61-63, 64-68
README.md (2)
38-52: LGTM!Also applies to: 73-80, 135-170
179-186: 🗄️ Data Integrity & IntegrationPin the Hermes dependency version.
adapters/claude/README.md (1)
12-31: LGTM!Also applies to: 64-65, 114-117, 139-139
adapters/codex/README.md (1)
15-30: LGTM!Also applies to: 66-66, 138-144
examples/harbor/calculator/README.md (1)
61-61: LGTM!Also applies to: 81-81, 106-106, 148-148, 177-177
examples/harbor/calculator/task/environment/Dockerfile (1)
22-22: LGTM!examples/harbor/swebench/README.md (1)
32-32: LGTM!Also applies to: 54-54, 75-75, 103-103, 141-141, 179-179, 197-197, 207-210, 231-231, 252-252, 263-263
tests/integrations/test_harbor_runner.py (1)
6-7: LGTM!Also applies to: 32-38, 267-267, 296-307, 321-332
tests/python/test_harbor_integration.py (1)
359-373: LGTM!adapters/deepagents/README.md (1)
12-29: LGTM!Also applies to: 49-49, 143-145
adapters/hermes/README.md (1)
12-31: LGTM!Also applies to: 78-79
docs/getting-started/install.mdx (1)
10-190: LGTM!docs/getting-started/quickstart.mdx (1)
12-25: LGTM!docs/integrations/harness/claude.mdx (1)
13-59: LGTM!docs/integrations/harness/codex.mdx (1)
14-55: LGTM!docs/integrations/harness/deepagents.mdx (1)
16-55: LGTM!docs/integrations/harness/hermes.mdx (1)
15-55: LGTM!docs/sdk/python.mdx (1)
509-509: LGTM!pypi.md (1)
34-87: LGTM!Also applies to: 103-113
skills/integrations/consumer/nemo-fabric-integrate/SKILL.md (1)
47-71: LGTM!examples/harbor/README.md (1)
118-120: LGTM!Also applies to: 138-138
| Use the following package requirements for the two-environment model. Pin the | ||
| host and task packages to the same NeMo Fabric release. These examples use | ||
| version `0.1.0`. | ||
|
|
||
| | Environment | Required Dependencies | Purpose | | ||
| | --- | --- | --- | | ||
| | Harbor host | `nemo-fabric[harbor]==0.1.0` | Harbor CLI, `FabricAgent`, and typed `FabricConfig` construction | | ||
| | Claude task without Relay | `nemo-fabric[claude]==0.1.0` | NeMo Fabric runner, Claude adapter, and supported Claude harness | | ||
| | Claude task with Relay | `nemo-fabric[claude]==0.1.0` plus a NeMo Relay 0.6.x CLI on `PATH` | NeMo Fabric runner, Claude adapter and harness, and the adapter-managed Relay gateway and hooks | | ||
| | Hermes Agent task with Relay | `nemo-fabric[hermes-agent,relay]==0.1.0` | NeMo Fabric runner, Hermes Agent adapter and harness, and the NeMo Relay Python package | |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Update the Harbor example pins to the current 0.2.0 release.
These newly added commands pin every environment to 0.1.0, contradicting this PR’s 0.1.0 → 0.2.0 package synchronization. The documented host and task installations will exercise the previous release instead of the packaging contract being released.
As per coding guidelines, keep package names and versions internally consistent across documentation and packaging metadata.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@examples/harbor/README.md` around lines 68 - 77, Update the package version
pins in the two-environment requirements table to the current 0.2.0 release,
including every nemo-fabric dependency for Harbor, Claude, and Hermes Agent
environments. Preserve the existing extras and Relay CLI 0.6.x requirement, and
keep all documented nemo-fabric versions consistent.
Source: Coding guidelines
Overview
Complete the manual
release/0.1forward merge required by #150 while preserving the release commit hashes. The merge resolution synchronizes the 0.2.0 internal package pins and generated Cargo lock entries, then strengthens the version and lock checks that missed the incomplete merge.No third-party dependency was added, removed, or changed. The Cargo lock diff only updates the three local workspace packages from 0.1.0 to 0.2.0.
Details
main.Cargo.lock.just set-versionto update exact internal pins that include extras such as[harness]and to resolve the complete Cargo graph.6fb26169exactly as required by the forward-merger. That squash commit predates the current sign-off requirement and lacks aSigned-off-bytrailer, so the DCO check may require a maintainer override rather than a history rewrite.Validation
just --fmt --checkcargo fmt --all -- --checkcargo check -p fabric-python --lockedjust test-rust— 59 passedjust test-python— 494 passed, 48 skippeduv lock --checkcargo metadata --format-version 1 --lockedjust build-pythonjust wheels— seven 0.2.0 wheels builtgit diff --checkBreaking changes: none beyond the packaging changes already reviewed in #105 and carried forward by this merge.
Where should the reviewer start?
Start with the merge topology, then review
pyproject.toml,Cargo.lock, and the version helpers injustfile. The.pre-commit-config.yamlchange closes the lockfile-check gap exposed by #150.Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)
Relates to Forward-merge release/0.1 into main #150
I confirm this contribution is my own work, or I have the right to submit it under this project's license.
I searched existing issues and open pull requests, and this does not duplicate existing work.
Summary by CodeRabbit
New Features
Documentation
Bug Fixes