refactor: slim adapter runtime dependencies - #105
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughThe change separates adapter-owned dependencies from harness-managed packages, revises root extras and adapter test groups, documents co-located and split installation paths, updates Relay CLI guidance, and aligns CI, Harbor examples, and metadata tests with the new packaging contracts. ChangesAdapter packaging contracts
Installation guidance
CI and Harbor integration
Estimated code review effort: 4 (Complex) | ~60 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
Fern docs preview: https://nvidia-preview-pull-request-105.docs.buildwithfern.com/nemo/fabric |
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
pypi.md (1)
28-36: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winTell readers to choose one adapter extra.
The block presents four commands without stating that they are alternatives. Copying the block installs every adapter, which defeats the minimal adapter-installation boundary described immediately afterward.
Suggested wording
-When the runtime and adapter share an environment, install a short adapter -extra: +When the runtime and adapter share an environment, choose one short adapter +extra:🤖 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 `@pypi.md` around lines 28 - 36, Update the adapter installation instructions in the “When the runtime and adapter share an environment” section to explicitly tell readers to choose exactly one adapter extra, clarifying that the four pip commands are alternatives and preventing installation of all adapters together.
🤖 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 `@adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py`:
- Around line 139-141: Update the adapter’s dependency guard around the existing
Deep Agents availability check to validate that deepagents, langchain, and
langgraph are all installed and satisfy the versions advertised in the error
message. Keep the diagnostic tied to the combined compatibility check so agent
creation is not reached when any dependency is missing or incompatible.
In `@adapters/hermes/README.md`:
- Around line 12-16: Update the installation instructions near the “pip install
nemo-fabric-adapters-hermes” command to also install the compatible hermes-agent
harness version, or link to the required harness setup, so a fresh environment
can start the adapter under the separate adapter-and-harness installation
contract.
In `@examples/notebooks/README.md`:
- Around line 28-34: Update the “Deep Agents, Codex, Claude” installation
instructions in the notebooks README so the Codex credentials are presented as
alternatives: users may authenticate with an existing Codex/ChatGPT login or
provide OPENAI_API_KEY, rather than requiring both. Keep the Deep Agents and
Claude credential requirements unchanged.
In `@tests/adapters/test_deepagents.py`:
- Line 490: Update the pytest.raises match patterns near the affected tests to
use raw regex literals, including both occurrences of the
“nemo-relay.*deepagents” pattern, so Ruff RUF043 is satisfied while preserving
the intended regex matching behavior.
---
Outside diff comments:
In `@pypi.md`:
- Around line 28-36: Update the adapter installation instructions in the “When
the runtime and adapter share an environment” section to explicitly tell readers
to choose exactly one adapter extra, clarifying that the four pip commands are
alternatives and preventing installation of all adapters together.
🪄 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: 0ba68397-a238-4bb9-be18-c1fba54d3f3b
⛔ Files ignored due to path filters (5)
adapters/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 (23)
README.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/experimentation/cli.mdxdocs/getting-started/install.mdxdocs/integrations/claude.mdxexamples/code_review_agent/README.mdexamples/harbor/calculator/task/environment/Dockerfileexamples/harbor/prepare_swebench.shexamples/notebooks/02_variations.ipynbexamples/notebooks/README.mdpypi.mdpyproject.tomltests/adapters/test_adapter_package_metadata.pytests/adapters/test_deepagents.pytests/integrations/test_harbor_runner.py
💤 Files with no reviewable changes (3)
- adapters/claude/pyproject.toml
- adapters/hermes/pyproject.toml
- adapters/codex/pyproject.toml
📜 Review details
⏰ Context from checks skipped due to timeout. (15)
- GitHub Check: Preview docs
- GitHub Check: Test (Python 3.12, windows-amd64)
- GitHub Check: Test (Python 3.13, windows-amd64)
- GitHub Check: Test (Python 3.14, windows-amd64)
- GitHub Check: Test (Python 3.11, windows-amd64)
- GitHub Check: Test (Python 3.12, linux-arm64)
- GitHub Check: Test (Python 3.13, linux-amd64)
- GitHub Check: Test (Python 3.12, macos-arm64)
- GitHub Check: Test (Python 3.13, linux-arm64)
- GitHub Check: Test (Python 3.13, macos-arm64)
- GitHub Check: Test (Python 3.11, macos-arm64)
- GitHub Check: Test (Python 3.14, macos-arm64)
- GitHub Check: Test (Python 3.11, linux-amd64)
- GitHub Check: Test (Python 3.12, linux-amd64)
- GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (41)
**/*.{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:
examples/code_review_agent/README.mdexamples/notebooks/README.mdpypi.mdadapters/hermes/README.mdadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.mdREADME.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:
examples/code_review_agent/README.mddocs/integrations/claude.mdxexamples/notebooks/README.mddocs/getting-started/install.mdxdocs/experimentation/cli.mdxREADME.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:
examples/code_review_agent/README.mddocs/integrations/claude.mdxexamples/notebooks/README.mddocs/getting-started/install.mdxdocs/experimentation/cli.mdx
**/*
📄 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:
examples/code_review_agent/README.mdexamples/harbor/prepare_swebench.shdocs/integrations/claude.mdxexamples/harbor/calculator/task/environment/Dockerfileexamples/notebooks/README.mddocs/getting-started/install.mdxpypi.mdpyproject.tomldocs/experimentation/cli.mdxadapters/hermes/README.mdtests/adapters/test_adapter_package_metadata.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.mdtests/adapters/test_deepagents.pyexamples/notebooks/02_variations.ipynbREADME.mdadapters/deepagents/pyproject.tomltests/integrations/test_harbor_runner.py
**/*.{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:
examples/code_review_agent/README.mddocs/integrations/claude.mdxexamples/notebooks/README.mddocs/getting-started/install.mdxpypi.mddocs/experimentation/cli.mdxadapters/hermes/README.mdadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.mdREADME.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:
examples/code_review_agent/README.mdexamples/notebooks/README.mdpypi.mdadapters/hermes/README.mdadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.mdREADME.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:
examples/code_review_agent/README.mdexamples/notebooks/README.mdadapters/hermes/README.mdadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.mdREADME.md
**/*.{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.For documentation-site changes, run
just docsto regenerate Python and Rust API references and validate Fern configuration.
Files:
examples/code_review_agent/README.mddocs/integrations/claude.mdxexamples/notebooks/README.mddocs/getting-started/install.mdxpypi.mddocs/experimentation/cli.mdxadapters/hermes/README.mdadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.mdREADME.md
**/{README.md,*.md,*.mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant SDK, API, adapter, example, integration, and embedded documentation when public behavior or the corresponding surface changes.
Files:
examples/code_review_agent/README.mddocs/integrations/claude.mdxexamples/notebooks/README.mddocs/getting-started/install.mdxpypi.mddocs/experimentation/cli.mdxadapters/hermes/README.mdadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.mdREADME.md
**/*.{html,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
HTML and Markdown files must use the specified HTML comment form for SPDX license headers.
Files:
examples/code_review_agent/README.mdexamples/notebooks/README.mdpypi.mdadapters/hermes/README.mdadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.mdREADME.md
{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:
examples/code_review_agent/README.mdexamples/harbor/prepare_swebench.shexamples/harbor/calculator/task/environment/Dockerfileexamples/notebooks/README.mdadapters/hermes/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.mdexamples/notebooks/02_variations.ipynbadapters/deepagents/pyproject.toml
{*.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:
examples/code_review_agent/README.mddocs/integrations/claude.mdxexamples/notebooks/README.mddocs/getting-started/install.mdxpypi.mddocs/experimentation/cli.mdxadapters/hermes/README.mdadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.mdexamples/notebooks/02_variations.ipynbREADME.md
**/*.{toml,yml,yaml,sh,bash}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
TOML, YAML, and shell files must use the specified
#-comment SPDX license header.
Files:
examples/harbor/prepare_swebench.shpyproject.tomladapters/deepagents/pyproject.toml
**/*.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.MDX files must use a JSX comment for the SPDX license header.
Files:
docs/integrations/claude.mdxdocs/getting-started/install.mdxdocs/experimentation/cli.mdx
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.
Files:
docs/integrations/claude.mdxdocs/getting-started/install.mdxdocs/experimentation/cli.mdx
docs/**/*
📄 CodeRabbit inference engine (AGENTS.md)
Update Fern documentation under
docs/when public behavior, thenemo-fabricpackage, examples, or supported bindings change.
Files:
docs/integrations/claude.mdxdocs/getting-started/install.mdxdocs/experimentation/cli.mdx
{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.
Files:
docs/integrations/claude.mdxdocs/getting-started/install.mdxdocs/experimentation/cli.mdxREADME.md
{Cargo.toml,python/pyproject.toml,pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Keep Rust workspace/package metadata and Python/maturin package metadata internally consistent, including package names, versions, import paths, and module names.
Files:
pyproject.toml
{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock,python/pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock,python/pyproject.toml}: Keep workspace, Python, and lockfile dependency versions aligned where required, and review both direct and transitive dependency changes from resolved lockfiles.
Inspect resolved transitive licenses, explicitly surface UNKNOWN, non-SPDX/custom, proprietary, source-available, copyleft, or network-copyleft terms, and route unresolved licensing questions to dependency approvers with distribution and linkage context.
Document the functional need, alternatives considered, rationale for the selected dependency, and any unresolved licensing question when introducing dependencies.
Files:
pyproject.toml
{Cargo.toml,pyproject.toml,python/pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Before adding a dependency, prefer the standard library, an existing dependency, or a small local implementation when appropriate; otherwise select a maintained, narrow-fit dependency with clear SPDX metadata and a permissive license where possible.
Files:
pyproject.toml
{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
After updating manifests or lockfiles, run
uv run --no-project python scripts/licensing/license_diff.py --base-ref origin/mainand review added packages and license changes.
Files:
pyproject.toml
{pyproject.toml,python/pyproject.toml,Cargo.toml,docs/package.json,.github/workflows/*.yml,justfile}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Reflect public packaging changes in release-facing documentation and ensure CI references the same package names and commands used by local workflows.
Files:
pyproject.toml
**/*.{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.
Use Rust stable tooling; format Rust code with
cargo fmt --all, check formatting withcargo fmt --all -- --check, and compile withcargo check --workspace --locked.
Files:
pyproject.tomladapters/deepagents/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:
pyproject.tomladapters/deepagents/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:
pyproject.tomladapters/deepagents/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:
pyproject.tomladapters/deepagents/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:
pyproject.tomladapters/deepagents/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:
pyproject.tomltests/adapters/test_adapter_package_metadata.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_deepagents.pyadapters/deepagents/pyproject.tomltests/integrations/test_harbor_runner.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:
pyproject.tomltests/adapters/test_adapter_package_metadata.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_deepagents.pyadapters/deepagents/pyproject.tomltests/integrations/test_harbor_runner.py
adapters/*/README.md
📄 CodeRabbit inference engine (AGENTS.md)
Update adapter README files when public behavior, examples, or supported bindings change.
Files:
adapters/hermes/README.mdadapters/deepagents/README.mdadapters/codex/README.mdadapters/claude/README.md
**/*.{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/adapters/test_adapter_package_metadata.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_deepagents.pytests/integrations/test_harbor_runner.py
**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For native binding changes, run
cargo check -p fabric-python --locked.
Files:
tests/adapters/test_adapter_package_metadata.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_deepagents.pytests/integrations/test_harbor_runner.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.Use type annotations for public Python APIs and keep native Python binding declarations synchronized with their Rust implementations.
Files:
tests/adapters/test_adapter_package_metadata.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_deepagents.pytests/integrations/test_harbor_runner.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.
**/*.{rs,py,pyi}: Usesnake_casefor Rust and Python functions and variables; usePascalCasefor Rust types and Python classes.
Keep native Python binding declarations synchronized with their Rust implementations when public contracts change.
Files:
tests/adapters/test_adapter_package_metadata.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_deepagents.pytests/integrations/test_harbor_runner.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_adapter_package_metadata.pytests/adapters/test_deepagents.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/adapters/test_adapter_package_metadata.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_deepagents.pytests/integrations/test_harbor_runner.py
tests/**/*.{rs,py}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
When adding functionality, include tests in the corresponding Rust crate or the relevant area under
tests/.
Files:
tests/adapters/test_adapter_package_metadata.pytests/adapters/test_deepagents.pytests/integrations/test_harbor_runner.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 and run by the async runner.
Do not add-> Nonereturn type annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorunittest.mock.AsyncMock, using thespecargument when necessary, rather than defining a new class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
Do not repeat fixtures; place fixtures needed by multiple test files inconftest.py.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a function named<fixture_name>_fixture; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its return value is unused or it does not return a value.
Use the autouserestore_environ_fixturefromtests/conftest.pyto restore environment variables; modify variables withos.environand do not usemonkeypatch.setenv.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear failure, such as usingresults["data"]instead ofresults.get("data").
Files:
tests/adapters/test_adapter_package_metadata.pytests/adapters/test_deepagents.pytests/integrations/test_harbor_runner.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/adapters/test_adapter_package_metadata.pytests/adapters/test_deepagents.pytests/integrations/test_harbor_runner.py
{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.Update the root
README.mdwhen workspace structure, supported adapters, or top-level documentation changes.
Files:
README.md
🧠 Learnings (1)
📚 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.15.21)
tests/adapters/test_deepagents.py
[warning] 490-490: Pattern passed to match= contains metacharacters but is neither escaped nor raw
(RUF043)
[warning] 512-512: Pattern passed to match= contains metacharacters but is neither escaped nor raw
(RUF043)
🔇 Additional comments (21)
adapters/deepagents/pyproject.toml (2)
29-34: LGTM!
36-46: LGTM!pyproject.toml (1)
48-52: LGTM!Also applies to: 93-102, 133-133
tests/adapters/test_adapter_package_metadata.py (1)
1-79: LGTM!README.md (1)
140-143: LGTM!Also applies to: 158-158, 176-181
adapters/claude/README.md (1)
12-15: LGTM!Also applies to: 17-42, 153-155
adapters/codex/README.md (1)
10-13: LGTM!Also applies to: 15-33, 71-74
adapters/deepagents/README.md (1)
12-34: LGTM!Also applies to: 153-167
adapters/hermes/README.md (1)
18-29: LGTM!docs/experimentation/cli.mdx (1)
188-192: LGTM!docs/getting-started/install.mdx (1)
32-35: LGTM!Also applies to: 48-68
docs/integrations/claude.mdx (1)
13-16: LGTM!examples/code_review_agent/README.md (1)
62-62: LGTM!examples/notebooks/02_variations.ipynb (1)
203-204: LGTM!Also applies to: 206-209, 210-214
pypi.md (1)
38-58: LGTM!adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
754-755: LGTM!tests/adapters/test_deepagents.py (2)
309-319: LGTM!
322-325: 🎯 Functional CorrectnessNo issue here.
fake_relayinstallsnemo_relayandnemo_relay.integrationsas plain modules without a package path, so removing onlynemo_relay.integrations.deepagentsstill leaves the later test on the missing-integration path.> Likely an incorrect or invalid review comment.examples/harbor/calculator/task/environment/Dockerfile (1)
18-18: LGTM!examples/harbor/prepare_swebench.sh (1)
67-67: LGTM!tests/integrations/test_harbor_runner.py (1)
20-20: LGTM!Also applies to: 257-265
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 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 `@adapters/deepagents/README.md`:
- Around line 54-58: Update the installation guidance around the “nemo-fabric
doctor” reference in the adapter README to state that the command requires the
NeMo Fabric Runtime installation, or place the runtime installation step before
invoking it. Keep the adapter-only installation instructions accurate and
preserve the existing doctor validation purpose.
In `@docs/reference/api/python-library-reference/nemo_fabric.client.md`:
- Line 4: Update scripts/generate_api_docs.sh lines 70-80 so the client and
models descriptions start with “NVIDIA NeMo Fabric”; update the module docstring
in python/src/nemo_fabric/runtime.py line 4 to start with the same wording, then
regenerate the affected API Markdown pages:
docs/reference/api/python-library-reference/nemo_fabric.client.md line 4,
nemo_fabric.models.md line 4, and nemo_fabric.runtime.md line 10.
In `@tests/adapters/test_adapters_common_relay_gateway.py`:
- Around line 82-84: Update the pytest.raises matcher in the RelayGatewayError
test to escape the literal periods in both version numbers, preserving the
intended “NeMo Fabric requires >=0.6.0,<0.7.0” message match and satisfying Ruff
RUF043.
🪄 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: 0f9d08d2-bb83-48a2-81fc-26bfd80842aa
⛔ Files ignored due to path filters (2)
examples/notebooks/img/fabric-contract.svgis excluded by!**/*.svgexamples/notebooks/img/variations.svgis excluded by!**/*.svg
📒 Files selected for processing (99)
.agents/skills/contribute-docs/SKILL.md.agents/skills/prepare-pr/SKILL.md.agents/skills/review-doc-style/SKILL.md.agents/skills/review-doc-style/assets/nvidia-style-guide.md.coderabbit.yamlAGENTS.mdadapters/claude/src/nemo_fabric_adapters/claude/adapter.pyadapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/common/src/nemo_fabric_adapters/common/__init__.pyadapters/common/src/nemo_fabric_adapters/common/lifecycle.pyadapters/common/src/nemo_fabric_adapters/common/relay_gateway.pyadapters/deepagents/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/README.mdadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-cli/src/app.rscrates/fabric-core/src/config.rscrates/fabric-core/src/doctor.rscrates/fabric-core/src/error.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rscrates/fabric-python/src/lib.rsdocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/enum-errorstage.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/fn-run-plan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-environmenthandle.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-errorinfo.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-fabricevent.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runrequest.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runresult.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimehandle.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimetelemetrycontext.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdxexamples/code_review_agent/config.pyexamples/harbor/calculator/task/task.tomlexamples/harbor/prepare_swebench.shjustfilepython/src/nemo_fabric/client.pypython/src/nemo_fabric/errors.pypython/src/nemo_fabric/integrations/harbor/fabric_agent.pypython/src/nemo_fabric/integrations/harbor/models.pypython/src/nemo_fabric/integrations/harbor/runner.pypython/src/nemo_fabric/integrations/harbor/telemetry.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/runtime.pypython/src/nemo_fabric/types.pyschemas/adapter-descriptor.schema.jsonschemas/adapter-invocation.schema.jsonschemas/agent.schema.jsonschemas/environment-handle.schema.jsonschemas/error-info.schema.jsonschemas/fabric-event.schema.jsonschemas/run-plan.schema.jsonschemas/run-request.schema.jsonschemas/run-result.schema.jsonschemas/runtime-context.schema.jsonschemas/runtime-handle.schema.jsontests/_utils/configs.pytests/adapters/test_adapters_common_relay_gateway.pytests/adapters/test_deepagents.pytests/adapters/test_hermes_adapter.pytests/e2e/test_codex.pytests/e2e/test_harbor_swebench_task.pytests/e2e/test_hermes_config_mapping.pytests/e2e/test_hermes_runtime.pytests/e2e/test_swebench_style.pytests/integrations/test_harbor_runner.pytests/python/test_sdk_concurrency.pytests/python/test_sdk_contract.pytests/python/test_typed_config.py
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
.agents/skills/review-doc-style/SKILL.md (1)
60-62: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winMake the shell example runnable.
<changed-files>is parsed as shell redirection, so copying this command literally produces a shell syntax error. Use a concrete path list or a shell-safe variable, for example:git diff --unified=0 -- . \ | rg --pcre2 '^\+(?!\+\+).*?(?<!NeMo )\bFabric\b'As per coding guidelines, documentation commands must remain current and usable.
🤖 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 @.agents/skills/review-doc-style/SKILL.md around lines 60 - 62, Update the shell command in the documentation to replace the placeholder <changed-files> with a shell-safe path argument, such as ., while preserving the existing git diff and rg filtering behavior so the example can be copied and run directly.Source: Coding guidelines
adapters/deepagents/README.md (2)
30-35: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winClarify that the harness install is still required with the combined command.
The adapter-only path above explicitly notes the harness is not bundled, but this combined-install snippet doesn't repeat that. A reader who skips straight to
pip install "nemo-fabric[deepagents]"could reasonably assume the harness is now included.Proposed wording
To install the NeMo Fabric Runtime and Deep Agents adapter in the same environment: ```bash pip install "nemo-fabric[deepagents]"
+This still does not install
deepagents,langchain, orlanggraph; install
+the compatible harness versions shown above in the same environment.</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@adapters/deepagents/README.mdaround lines 30 - 35, Update the
combined-install section adjacent to thepip install "nemo-fabric[deepagents]"
command to state that it does not installdeepagents,langchain, or
langgraph. Direct readers to install the compatible harness versions specified
earlier in the README within the same environment.</details> <!-- cr-comment:v1:7eb87a7db7bf22013b4bedb1 --> --- `165-168`: _📐 Maintainability & Code Quality_ | _🔵 Trivial_ | _⚡ Quick win_ **Reword the conditional `relay` extra explanation for clarity.** "If the host environment constrains the Deep Agents and LangGraph stack independently, the adapter's `relay` extra is a minimal shorthand..." — the `if` clause doesn't clearly gate the statement about what the extra installs. This reads as two unrelated ideas stitched together. <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@adapters/deepagents/README.mdaround lines 165 - 168, Reword the paragraph
describing the adapter’srelayextra so its purpose and installation behavior
are stated directly, without making the explanation conditional on independently
constrained Deep Agents and LangGraph dependencies. Preserve the detail that the
extra installs only the basenemo-relaypackage.</details> <!-- cr-comment:v1:b2ca34316338713e0f83cd0c --> </blockquote></details> <details> <summary>pypi.md (1)</summary><blockquote> `41-48`: _📐 Maintainability & Code Quality_ | _🔵 Trivial_ | _⚡ Quick win_ **Separate the co-located vs. separate-environment install scenarios explicitly.** This paragraph blends two installation scenarios (harness co-located with the adapter vs. harness in its own environment) into one run-on set of sentences, and doesn't state that the harness package itself must also be installed alongside `nemo-fabric-adapters-*` in the separate-environment case. <details> <summary>Proposed rewording</summary> ```diff -Install a compatible harness separately in the same virtual environment as the -adapter. If the harness environment is separate from the NeMo Fabric runtime, -install the corresponding `nemo-fabric-adapters-*` distribution directly in the -harness environment. Refer to the -[adapter compatibility reference](https://github.com/NVIDIA/NeMo-Fabric/tree/main/adapters) -for package names and harness installation instructions. +- **Co-located:** install a compatible harness separately in the same virtual + environment as the adapter. +- **Separate environment:** install the corresponding `nemo-fabric-adapters-*` + distribution, plus the compatible harness itself, directly in the harness + environment. Refer to the + [adapter compatibility reference](https://github.com/NVIDIA/NeMo-Fabric/tree/main/adapters) + for package names and harness installation instructions.🤖 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 `@pypi.md` around lines 41 - 48, Revise the installation guidance in pypi.md to explicitly separate the co-located harness-and-adapter scenario from the separate-environment scenario. State that co-located setups install a compatible harness in the adapter environment, while separate setups require installing both the harness package and the corresponding nemo-fabric-adapters-* distribution in the harness environment, preserving the existing compatibility-reference link.
🤖 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 `@python/src/nemo_fabric/errors.py`:
- Line 4: Update the module docstrings in python/src/nemo_fabric/errors.py at
lines 4-4 and python/src/nemo_fabric/types.py at lines 4-4 to use the short
product name “NeMo Fabric” instead of “NVIDIA NeMo Fabric.”
---
Outside diff comments:
In @.agents/skills/review-doc-style/SKILL.md:
- Around line 60-62: Update the shell command in the documentation to replace
the placeholder <changed-files> with a shell-safe path argument, such as .,
while preserving the existing git diff and rg filtering behavior so the example
can be copied and run directly.
In `@adapters/deepagents/README.md`:
- Around line 30-35: Update the combined-install section adjacent to the `pip
install "nemo-fabric[deepagents]"` command to state that it does not install
`deepagents`, `langchain`, or `langgraph`. Direct readers to install the
compatible harness versions specified earlier in the README within the same
environment.
- Around line 165-168: Reword the paragraph describing the adapter’s `relay`
extra so its purpose and installation behavior are stated directly, without
making the explanation conditional on independently constrained Deep Agents and
LangGraph dependencies. Preserve the detail that the extra installs only the
base `nemo-relay` package.
In `@pypi.md`:
- Around line 41-48: Revise the installation guidance in pypi.md to explicitly
separate the co-located harness-and-adapter scenario from the
separate-environment scenario. State that co-located setups install a compatible
harness in the adapter environment, while separate setups require installing
both the harness package and the corresponding nemo-fabric-adapters-*
distribution in the harness environment, preserving the existing
compatibility-reference link.
🪄 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: bc76c0e5-1ab8-484a-a001-4793c9a66808
📒 Files selected for processing (22)
.agents/skills/contribute-docs/SKILL.md.agents/skills/prepare-pr/SKILL.md.agents/skills/review-doc-style/SKILL.md.agents/skills/review-doc-style/assets/nvidia-style-guide.md.coderabbit.yamlAGENTS.mdadapters/deepagents/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pydocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/nemo_fabric.types.mdpypi.mdpython/src/nemo_fabric/errors.pypython/src/nemo_fabric/runtime.pypython/src/nemo_fabric/types.pyscripts/generate_api_docs.shtests/adapters/test_adapters_common_relay_gateway.pytests/adapters/test_deepagents.py
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
- GitHub Check: Test (Python 3.13, windows-amd64)
- GitHub Check: Test (Python 3.11, windows-amd64)
- GitHub Check: Test (Python 3.12, windows-amd64)
- GitHub Check: Test (Python 3.14, windows-amd64)
🧰 Additional context used
📓 Path-based instructions (38)
**/*.{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:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdpypi.mdAGENTS.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
**/*
📄 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:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdpython/src/nemo_fabric/runtime.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pypypi.mdAGENTS.mdpython/src/nemo_fabric/errors.pydocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mdtests/adapters/test_adapters_common_relay_gateway.pyscripts/generate_api_docs.shdocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.mdpython/src/nemo_fabric/types.pytests/adapters/test_deepagents.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
⚙️ CodeRabbit configuration file
**/*: Enforce the product name in user-facing prose. In standalone documents, pages, and pull request descriptions, use "NVIDIA NeMo Fabric" on the first product mention and "NeMo Fabric" thereafter. In source comments, docstrings, diagnostics, and schema-description fragments, use "NeMo Fabric" whenever the product is named, except when source text renders as the first product mention on a standalone generated page; use "NVIDIA NeMo Fabric" there. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag exact package/import/crate/command names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word; examples includeFabric,FabricConfig,nemo_fabric,nemo-fabric-core,nemo-fabric, andcrates/fabric-core.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdpython/src/nemo_fabric/runtime.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pypypi.mdAGENTS.mdpython/src/nemo_fabric/errors.pydocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mdtests/adapters/test_adapters_common_relay_gateway.pyscripts/generate_api_docs.shdocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.mdpython/src/nemo_fabric/types.pytests/adapters/test_deepagents.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{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:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdpypi.mdAGENTS.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{md,mdx,rst}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-technical-docs.md)
**/*.{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 case.
Format code elements, commands, parameters, package names, expressions, directories, file names, and paths in monospace; represent path placeholders as angle-bracketed values inside monospace.
Use quotation marks for error messages and strings when appropriate, while retaining code formatting for literal code strings when it provides clearer meaning.
Format UI buttons, menus, fields, and labels in bold; separate consecutive menu selections with>and match UI text exactly, including capitalization.
Use italics on first use of new terms, italicize publication titles, and do so sparingly where appropriate.
Write keyboard shortcuts as plain text and link GitHub repositories using owner/repository link text, such as[NVIDIA/NeMo](link).
Introduce every code block with a complete sentence; do not let a code block complete or continue the surrounding sentence, and use syntax highlighting when supported.
Avoid the word “snippet” unless the surrounding documentation already uses it as a term of art, and keep inline method, function, and class references consistent with nearby documentation.
Use descriptive link text matching the destination title when possible; avoid raw URLs, generic anchors, long-sentence links, and unnecessary links that distract from procedures.
Ensure lists have a complete lead-in sentence, more than one item, no more than two levels, parallel construction, one idea or action per item, and appropriate end punctuation.
Use bulleted lists when order does not matter and numbered lists when order matters or the list is a task sequence.
Format definition lists with a bold term followed by a complete, parallel, punctuated definition.
Use tables for reference information, decision support, compatibility matrices,...
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdpypi.mdAGENTS.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
**/{README.md,*.md,*.mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant SDK, API, adapter, example, integration, and embedded documentation when public behavior or the corresponding surface changes.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdpypi.mdAGENTS.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
For documentation-site changes, run
just docsto regenerate Python and Rust API references and validate Fern configuration.
**/*.{md,mdx}: In standalone documentation, useNVIDIA NeMo Fabricfor the first product mention andNeMo Fabricthereafter; never use standalone capitalizedFabricas the product name.
CapitalizeNVIDIAcorrectly and use descriptive inline code formatting for commands, code, APIs, filenames, and paths.
Use title case for technical-documentation headings.
Introduce code blocks, tables, and lists with complete lead-in sentences.
Use descriptive link text instead of raw URLs or generic labels such ashere.
Prefer active voice, present tense, short sentences, and plain English; usecanfor possibility rather thanmay, and preferafteroveronce.
Write procedures as concise, imperative, parallel steps and split long sequences into smaller tasks.
Use unambiguous date formats and avoid ordinal dates in body text.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdpypi.mdAGENTS.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{html,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
HTML and Markdown files must use the specified HTML comment form for SPDX license headers.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdpypi.mdAGENTS.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{md,mdx,rst,yml,yaml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
**/*.{md,mdx,rst,yml,yaml}: Prefer the documented public API over internal shortcuts in documentation and examples.
Keep package names, repository references, and build commands current.
Update entry-point documentation, includingREADME.mdordocs/index.yml, when examples or reading paths change.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdpypi.mdAGENTS.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
docs/reference/api/**
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Treat files under
docs/reference/api/as generated output; do not modify them directly.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{py,rs,md,mdx}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Preserve exact code and API identifiers such as
Fabric,FabricConfig,FabricError, andnemo_fabric, as well as exact package, command, and path forms such asnemo-fabric-core,nemo-fabric, andcrates/fabric-core.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdpython/src/nemo_fabric/runtime.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pypypi.mdAGENTS.mdpython/src/nemo_fabric/errors.pydocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mdtests/adapters/test_adapters_common_relay_gateway.pydocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.mdpython/src/nemo_fabric/types.pytests/adapters/test_deepagents.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
{README.md,docs/**/*,adapters/*/README.md,python/src/nemo_fabric/integrations/*/README.md,examples/README.md}
📄 CodeRabbit inference engine (AGENTS.md)
Update user-facing entry points when public behavior, the
nemo-fabricpackage, examples, or supported bindings change, including the root README, Fern documentation, adapter and integration READMEs, and examples README.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
{docs/sdk/python.mdx,schemas/SCHEMA.md,docs/reference/api/**/*,skills/**/*}
📄 CodeRabbit inference engine (AGENTS.md)
When the public API changes, keep the Python/Rust binding contract current in the Python SDK documentation, JSON Schema notes, generated API references, and consumer skills; run
just docsafter changing the docs site.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
{README.md,examples/**/*,docs/**/*}
📄 CodeRabbit inference engine (AGENTS.md)
Use the stable public wrapper
scripts/generate_api_docs.shin documentation and examples; referencescripts/docs/helper paths only when documenting internal maintenance work.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
{README.md,docs/**/*,*.md,**/*.md}
📄 CodeRabbit inference engine (AGENTS.md)
For the first product mention in standalone documents, pages, and pull-request descriptions, write
NVIDIA NeMo Fabric; useNeMo Fabricthereafter. Never shorten the product name toFabric, and preserve exact code, package, command, and path forms such asFabric,FabricConfig,nemo_fabric,nemo-fabric-core,nemo-fabric, andcrates/fabric-core.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdpypi.mdAGENTS.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mdadapters/deepagents/README.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.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.
Files:
docs/reference/api/python-library-reference/nemo_fabric.runtime.mdAGENTS.mddocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{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:
python/src/nemo_fabric/runtime.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pypython/src/nemo_fabric/errors.pytests/adapters/test_adapters_common_relay_gateway.pypython/src/nemo_fabric/types.pytests/adapters/test_deepagents.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
python/src/nemo_fabric/**
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Ensure the editable maturin build continues to produce the native extension at
nemo_fabric._native, with generated artifacts placed where downstream consumers expect.
Files:
python/src/nemo_fabric/runtime.pypython/src/nemo_fabric/errors.pypython/src/nemo_fabric/types.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.Use type annotations for public Python APIs and keep native Python binding declarations synchronized with their Rust implementations.
Files:
python/src/nemo_fabric/runtime.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pypython/src/nemo_fabric/errors.pytests/adapters/test_adapters_common_relay_gateway.pypython/src/nemo_fabric/types.pytests/adapters/test_deepagents.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.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.
**/*.{rs,py,pyi}: Usesnake_casefor Rust and Python functions and variables; usePascalCasefor Rust types and Python classes.
Keep native Python binding declarations synchronized with their Rust implementations when public contracts change.
Files:
python/src/nemo_fabric/runtime.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pypython/src/nemo_fabric/errors.pytests/adapters/test_adapters_common_relay_gateway.pypython/src/nemo_fabric/types.pytests/adapters/test_deepagents.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.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:
python/src/nemo_fabric/runtime.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pypython/src/nemo_fabric/errors.pytests/adapters/test_adapters_common_relay_gateway.pypython/src/nemo_fabric/types.pytests/adapters/test_deepagents.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{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:
python/src/nemo_fabric/runtime.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pypython/src/nemo_fabric/errors.pytests/adapters/test_adapters_common_relay_gateway.pypython/src/nemo_fabric/types.pytests/adapters/test_deepagents.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.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:
python/src/nemo_fabric/runtime.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pypython/src/nemo_fabric/errors.pytests/adapters/test_adapters_common_relay_gateway.pypython/src/nemo_fabric/types.pytests/adapters/test_deepagents.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For native binding changes, run
cargo check -p fabric-python --locked.
Files:
python/src/nemo_fabric/runtime.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pypython/src/nemo_fabric/errors.pytests/adapters/test_adapters_common_relay_gateway.pypython/src/nemo_fabric/types.pytests/adapters/test_deepagents.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
python/src/nemo_fabric/**/*.py
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
For Python API reference changes, update source docstrings under
python/src/nemo_fabric/rather than generated reference files.
Files:
python/src/nemo_fabric/runtime.pypython/src/nemo_fabric/errors.pypython/src/nemo_fabric/types.py
python/src/nemo_fabric/**/*
⚙️ CodeRabbit configuration file
python/src/nemo_fabric/**/*: Review Python SDK changes for typed API consistency, import-time dependency neutrality, async/session behavior, and parity with the native extension.
Stubs and runtime implementations should stay aligned.
Files:
python/src/nemo_fabric/runtime.pypython/src/nemo_fabric/errors.pypython/src/nemo_fabric/types.py
.agents/skills/**/SKILL.md
📄 CodeRabbit inference engine (.agents/skills/README.md)
Each maintainer skill file must begin with YAML frontmatter containing at least
nameanddescription.
Files:
.agents/skills/prepare-pr/SKILL.md.agents/skills/contribute-docs/SKILL.md.agents/skills/review-doc-style/SKILL.md
.agents/skills/*/
📄 CodeRabbit inference engine (.agents/skills/README.md)
Use descriptive, task-based names for maintainer skill directories, such as
contribute-apiandvalidate-change.
Files:
.agents/skills/prepare-pr/SKILL.md.agents/skills/contribute-docs/SKILL.md.agents/skills/review-doc-style/assets/nvidia-style-guide.md.agents/skills/review-doc-style/SKILL.md
.agents/skills/**
📄 CodeRabbit inference engine (.agents/skills/README.md)
Maintainer skills are auto-discovered from
.agents/skills/; Claude Code uses.claude/skillsas a symlink to the same directory rather than a separate skill set.Keep maintainer skills under
.agents/skills/focused on repository contribution work, including API, documentation, testing, CI, packaging, release, and PR preparation.
Files:
.agents/skills/prepare-pr/SKILL.md.agents/skills/contribute-docs/SKILL.md.agents/skills/review-doc-style/assets/nvidia-style-guide.md.agents/skills/review-doc-style/SKILL.md
{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/deepagents/src/nemo_fabric_adapters/deepagents/middleware.pyadapters/deepagents/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
*
📄 CodeRabbit inference engine (AGENTS.md)
*: Use branch prefixesfeat/,fix/,docs/,test/, orrefactor/, and name branches after the work rather than Linear tickets; do not include ticket IDs or slugs.
Use Conventional Commit pull-request titles in the form<type>: <summary>; reservefixfor actual product bugs, not CI, documentation, or chores.
Use signed-off commits for pull-request work withgit commit -s.
When creating a pull request from the current branch, target the upstream repository rather than a fork.
If repository-local PR guidance conflicts with generic GitHub connector or plugin guidance, follow the repository-local guidance for PR body format and review handoff details.
PR descriptions must state what changed, why it changed, how it was tested, and any breaking changes within the repository template format.
Files:
pypi.mdAGENTS.md
**/AGENTS.md
📄 CodeRabbit inference engine (CLAUDE.md)
Follow the instructions documented in
AGENTS.mdwhen working in the repository.
Files:
AGENTS.md
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_adapters_common_relay_gateway.pytests/adapters/test_deepagents.py
tests/**/*.{rs,py}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
When adding functionality, include tests in the corresponding Rust crate or the relevant area under
tests/.
Files:
tests/adapters/test_adapters_common_relay_gateway.pytests/adapters/test_deepagents.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 and run by the async runner.
Do not add-> Nonereturn type annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorunittest.mock.AsyncMock, using thespecargument when necessary, rather than defining a new class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
Do not repeat fixtures; place fixtures needed by multiple test files inconftest.py.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a function named<fixture_name>_fixture; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its return value is unused or it does not return a value.
Use the autouserestore_environ_fixturefromtests/conftest.pyto restore environment variables; modify variables withos.environand do not usemonkeypatch.setenv.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear failure, such as usingresults["data"]instead ofresults.get("data").
Files:
tests/adapters/test_adapters_common_relay_gateway.pytests/adapters/test_deepagents.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/adapters/test_adapters_common_relay_gateway.pytests/adapters/test_deepagents.py
**/*.{toml,yml,yaml,sh,bash}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
TOML, YAML, and shell files must use the specified
#-comment SPDX license header.
Files:
scripts/generate_api_docs.sh
scripts/generate_api_docs.sh
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Update
scripts/generate_api_docs.shwhen the Python API documentation generator itself requires a change.
Files:
scripts/generate_api_docs.sh
**/README.md
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Update relevant package, crate, adapter, or integration README files when their documented public behavior or entry points change.
Files:
adapters/deepagents/README.md
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T02:45:53.332Z
Learning: Keep documentation and example changes scoped, surface assumptions, and define focused validation before editing.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T02:45:53.332Z
Learning: Run `just docs` when the documentation site changes.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T02:46:07.714Z
Learning: Prioritize factual accuracy, current repository behavior, commands, paths, package names, APIs, bindings, support claims, and executable examples over copy polish.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T02:46:07.714Z
Learning: Run `just docs` after changing API documentation sources or generators to regenerate and validate the API reference.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T02:46:14.565Z
Learning: Report documentation findings by severity with the file and line, explain the reader or accuracy impact, and provide a concrete rewrite or remediation direction.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T02:46:14.565Z
Learning: Avoid style-only findings when wording is clear, accurate, and consistent with nearby documentation; do not enforce marketing or social-media rules on technical documentation.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T02:46:14.565Z
Learning: Open only the smallest support document needed to resolve an ambiguity or finding, rather than loading all support documents.
📚 Learning: 2026-06-28T04:03:32.877Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 26
File: python/tests/smoke_typed_config.py:163-177
Timestamp: 2026-06-28T04:03:32.877Z
Learning: In NVIDIA NeMo Fabric Python SDK serialization of `RuntimeCapabilities` (to satisfy the “parity contract” with Rust core and the CLI), do not emit metadata keys when the corresponding metadata is absent. Instead, omit those fields entirely so the produced JSON matches the Rust/CLI output (e.g., avoid `null`, empty objects, or placeholder metadata). During review, verify the serializer/builders follow this omission rule and that Python outputs/parity tests reflect the same shape.
Applied to files:
python/src/nemo_fabric/runtime.pypython/src/nemo_fabric/errors.pypython/src/nemo_fabric/types.py
📚 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
🪛 ast-grep (0.44.1)
tests/adapters/test_deepagents.py
[error] 348-355: Command coming from incoming request
Context: subprocess.run(
[sys.executable, "-c", script, blocked],
check=False,
capture_output=True,
input=f"{json.dumps(request)}\n",
text=True,
timeout=30,
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').
(subprocess-from-request)
[error] 383-389: Command coming from incoming request
Context: subprocess.run(
[sys.executable, "-c", script],
check=False,
capture_output=True,
text=True,
timeout=30,
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').
(subprocess-from-request)
[info] 352-352: use jsonify instead of json.dumps for JSON output
Context: json.dumps(request)
Note: [CWE-116] Improper Encoding or Escaping of Output.
(use-jsonify)
🪛 Ruff (0.15.21)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
[warning] 18-18: Missing return type annotation for special method __init__
Add return type annotation: None
(ANN204)
[warning] 26-26: Dynamically typed expressions (typing.Any) are disallowed in request
(ANN401)
[warning] 34-34: Dynamically typed expressions (typing.Any) are disallowed in request
(ANN401)
[warning] 34-34: Dynamically typed expressions (typing.Any) are disallowed in handler
(ANN401)
[warning] 34-34: Dynamically typed expressions (typing.Any) are disallowed in awrap_tool_call
(ANN401)
[warning] 39-39: Dynamically typed expressions (typing.Any) are disallowed in request
(ANN401)
[warning] 39-39: Dynamically typed expressions (typing.Any) are disallowed in handler
(ANN401)
[warning] 39-39: Dynamically typed expressions (typing.Any) are disallowed in wrap_tool_call
(ANN401)
tests/adapters/test_deepagents.py
[error] 349-349: subprocess call: check for execution of untrusted input
(S603)
[error] 384-384: subprocess call: check for execution of untrusted input
(S603)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
[warning] 122-124: Abstract raise to an inner function
(TRY301)
[warning] 122-124: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 265-265: Dynamically typed expressions (typing.Any) are disallowed in _tool_gate_middleware
(ANN401)
🔇 Additional comments (24)
python/src/nemo_fabric/runtime.py (1)
4-4: LGTM!tests/adapters/test_adapters_common_relay_gateway.py (1)
82-84: LGTM!scripts/generate_api_docs.sh (1)
44-46: LGTM!Also applies to: 68-73, 83-83
docs/reference/api/python-library-reference/index.md (1)
4-4: LGTM!Also applies to: 14-14, 26-26, 42-42, 57-63
docs/reference/api/python-library-reference/nemo_fabric.client.md (1)
4-4: LGTM!Also applies to: 43-43, 115-115
docs/reference/api/python-library-reference/nemo_fabric.errors.md (1)
10-18: LGTM!Also applies to: 44-44, 79-79, 114-114, 149-149, 184-184, 219-219
docs/reference/api/python-library-reference/nemo_fabric.models.md (1)
4-4: LGTM!Also applies to: 262-262, 1426-1426, 1564-1564
.agents/skills/review-doc-style/assets/nvidia-style-guide.md (1)
8-10: LGTM!Also applies to: 29-34
.coderabbit.yaml (1)
77-79: LGTM!AGENTS.md (1)
10-11: LGTM!Also applies to: 47-55
docs/reference/api/python-library-reference/nemo_fabric.runtime.md (1)
10-10: 📐 Maintainability & Code QualityRegenerate changed API references from source docstrings.
Both changed files are generated output. Update the corresponding Python source docstrings and run
just docs; do not rely on hand-edits that can be overwritten.
docs/reference/api/python-library-reference/nemo_fabric.runtime.md#L10-L10: regenerate the runtime reference from its source docstring.docs/reference/api/python-library-reference/nemo_fabric.types.md#L10-L10: regenerate the types reference from its source docstring.As per path instructions, generated API references must not be modified directly. Based on learnings, run
just docsafter docs-site changes.Sources: Path instructions, Learnings
python/src/nemo_fabric/errors.py (1)
35-35: LGTM!python/src/nemo_fabric/types.py (1)
175-175: LGTM!Also applies to: 545-545, 875-875, 1152-1161, 1205-1205, 1220-1220, 1230-1230
.agents/skills/contribute-docs/SKILL.md (1)
3-3: LGTM!Also applies to: 24-29, 41-42
.agents/skills/prepare-pr/SKILL.md (1)
3-3: LGTM!Also applies to: 35-37
.agents/skills/review-doc-style/SKILL.md (1)
3-3: LGTM!Also applies to: 42-52, 84-85, 115-120
adapters/deepagents/README.md (1)
54-59: LGTM!pypi.md (1)
28-29: LGTM!adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (2)
43-55: LGTM! The compatibility guard now walks deepagents, langchain, langchain_core, and langgraph symbols and matches the version guidance shown in the README and test assertions.Also applies to: 107-153
759-760: 🗄️ Data Integrity & IntegrationNo change needed for
_relay_dependency_errorThe message already uses the same
nemo-relay[deepagents]>=0.5.0,<0.7range as the README, so there’s no drift here.> Likely an incorrect or invalid review comment.adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py (1)
1-43: LGTM!tests/adapters/test_deepagents.py (3)
113-129: LGTM! The stub expansion and cache eviction correctly force the lazily-importedToolGateMiddlewareto bind to the test's stubbed SDK modules.Also applies to: 145-167, 270-273
323-421: LGTM! The subprocess-based import-blocking test, the "supported deps pass" test, and the parametrizedREQUIRED_HARNESS_APIScoverage all correctly exercise the new preflight guard and its metadata contract.
958-999: LGTM! Middleware-class reference updated correctly to the newnemo_fabric_adapters.deepagents.middlewaremodule.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.agents/skills/review-doc-style/SKILL.md (1)
88-89: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winKeep the identifier exception consistent with the canonical rule.
This blocking bullet exempts only exact code or API identifiers, while
.coderabbit.yamlalso preserves exact package, command, configuration-key, and path forms. Reuse the broader exception so reviewers do not flag valid identifiers.Proposed wording
-- The product is shortened to standalone capitalized "Fabric" outside an exact - code or API identifier +- The product is shortened to standalone capitalized "Fabric" outside an exact + code, API, package, command, configuration-key, or path identifier🤖 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 @.agents/skills/review-doc-style/SKILL.md around lines 88 - 89, Update the “Fabric” naming rule in the review-doc-style skill to use the same broad exact-identifier exception as the canonical rule, covering package, command, configuration-key, path, code, and API identifiers. Keep the standalone capitalized “Fabric” restriction unchanged outside those exact forms.Source: Coding guidelines
🤖 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.
Outside diff comments:
In @.agents/skills/review-doc-style/SKILL.md:
- Around line 88-89: Update the “Fabric” naming rule in the review-doc-style
skill to use the same broad exact-identifier exception as the canonical rule,
covering package, command, configuration-key, path, code, and API identifiers.
Keep the standalone capitalized “Fabric” restriction unchanged outside those
exact forms.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Enterprise
Run ID: 20e60740-86c6-426b-bddc-710e06c1e119
📒 Files selected for processing (4)
.agents/skills/review-doc-style/SKILL.md.coderabbit.yamladapters/deepagents/README.mdpypi.md
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
- GitHub Check: Test (Python 3.13, windows-amd64)
- GitHub Check: Test (Python 3.12, windows-amd64)
- GitHub Check: Test (Python 3.14, windows-amd64)
- GitHub Check: Test (Python 3.11, windows-amd64)
🧰 Additional context used
📓 Path-based instructions (17)
**/*.{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:
pypi.mdadapters/deepagents/README.md
**/*
📄 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:
pypi.mdadapters/deepagents/README.md
⚙️ CodeRabbit configuration file
**/*: Enforce the product name in user-facing prose. In standalone documents, pages, and pull request descriptions, use "NVIDIA NeMo Fabric" on the first product mention and "NeMo Fabric" thereafter. In source comments, docstrings, diagnostics, and schema-description fragments, use "NeMo Fabric" whenever the product is named, except when source text renders as the first product mention on a standalone generated page; use "NVIDIA NeMo Fabric" there. Module docstrings copied bylazydocsthat become the first product mention on standalone API reference pages are an example of this exception and must keep the full name; their repeated overview-page summaries use the short name after the overview introduces the product. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag exact package/import/crate/command names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word; examples includeFabric,FabricConfig,nemo_fabric,nemo-fabric-core,nemo-fabric, andcrates/fabric-core.
Files:
pypi.mdadapters/deepagents/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:
pypi.mdadapters/deepagents/README.md
**/*.{md,mdx,rst}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-technical-docs.md)
**/*.{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 case.
Format code elements, commands, parameters, package names, expressions, directories, file names, and paths in monospace; represent path placeholders as angle-bracketed values inside monospace.
Use quotation marks for error messages and strings when appropriate, while retaining code formatting for literal code strings when it provides clearer meaning.
Format UI buttons, menus, fields, and labels in bold; separate consecutive menu selections with>and match UI text exactly, including capitalization.
Use italics on first use of new terms, italicize publication titles, and do so sparingly where appropriate.
Write keyboard shortcuts as plain text and link GitHub repositories using owner/repository link text, such as[NVIDIA/NeMo](link).
Introduce every code block with a complete sentence; do not let a code block complete or continue the surrounding sentence, and use syntax highlighting when supported.
Avoid the word “snippet” unless the surrounding documentation already uses it as a term of art, and keep inline method, function, and class references consistent with nearby documentation.
Use descriptive link text matching the destination title when possible; avoid raw URLs, generic anchors, long-sentence links, and unnecessary links that distract from procedures.
Ensure lists have a complete lead-in sentence, more than one item, no more than two levels, parallel construction, one idea or action per item, and appropriate end punctuation.
Use bulleted lists when order does not matter and numbered lists when order matters or the list is a task sequence.
Format definition lists with a bold term followed by a complete, parallel, punctuated definition.
Use tables for reference information, decision support, compatibility matrices,...
Files:
pypi.mdadapters/deepagents/README.md
**/{README.md,*.md,*.mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant SDK, API, adapter, example, integration, and embedded documentation when public behavior or the corresponding surface changes.
In standalone documents, pages, and pull request descriptions, use “NVIDIA NeMo Fabric” for the first product mention and “NeMo Fabric” thereafter; never shorten it to “Fabric”.
Files:
pypi.mdadapters/deepagents/README.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
For documentation-site changes, run
just docsto regenerate Python and Rust API references and validate Fern configuration.Top-of-file MDX SPDX comments must use
{/* ... */}delimiters rather than HTML comment delimiters.
Files:
pypi.mdadapters/deepagents/README.md
**/*.{html,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
HTML and Markdown files must use the specified HTML comment form for SPDX license headers.
Files:
pypi.mdadapters/deepagents/README.md
**/*.{md,mdx,rst,yml,yaml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
**/*.{md,mdx,rst,yml,yaml}: Prefer the documented public API over internal shortcuts in documentation and examples.
Keep package names, repository references, and build commands current.
Update entry-point documentation when examples or documentation reading paths change.
Files:
pypi.mdadapters/deepagents/README.md
**/*.{md,mdx,rst,txt,yml,yaml,py,rs}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Use current repository commands, package names, APIs, bindings, paths, entry points, and support claims; flag stale or incorrect documentation.
Files:
pypi.mdadapters/deepagents/README.md
**/*.{md,mdx,rst,txt,py,rs}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Use
NVIDIA NeMo Fabricfor the first product mention in a standalone document or generated standalone page, then useNeMo Fabric; useNeMo Fabricin source prose fragments. Never use standalone capitalizedFabricas the product name, while preserving exact identifiers such asFabric,FabricConfig,FabricError, andnemo_fabric.
Files:
pypi.mdadapters/deepagents/README.md
**/*.{md,mdx,rst,txt,py,rs,yml,yaml}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Capitalize
NVIDIAcorrectly and keep user-facing terminology consistent with current repository terminology.
Files:
pypi.mdadapters/deepagents/README.md
.agents/skills/**/SKILL.md
📄 CodeRabbit inference engine (.agents/skills/README.md)
Each maintainer skill file must begin with YAML frontmatter containing at least
nameanddescription.
Files:
.agents/skills/review-doc-style/SKILL.md
.agents/skills/*/
📄 CodeRabbit inference engine (.agents/skills/README.md)
Use descriptive, task-based names for maintainer skill directories, such as
contribute-apiandvalidate-change.
Files:
.agents/skills/review-doc-style/SKILL.md
.agents/skills/**
📄 CodeRabbit inference engine (.agents/skills/README.md)
Maintainer skills are auto-discovered from
.agents/skills/; Claude Code uses.claude/skillsas a symlink to the same directory rather than a separate skill set.Maintainer skills may reference repository internals and contribution commands; do not add consumer integration guidance to this tier.
Files:
.agents/skills/review-doc-style/SKILL.md
**/README.md
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Update relevant getting-started, reference, example, or adapter documentation when those areas change.
Check package, crate, adapter, and integration README files for corresponding updates when public behavior changes.
Files:
adapters/deepagents/README.md
{README.md,docs/**,adapters/*/README.md,python/src/nemo_fabric/integrations/*/README.md,examples/README.md}
📄 CodeRabbit inference engine (AGENTS.md)
Update user-facing entry points when public behavior, the
nemo-fabricpackage, examples, or supported bindings change.
Files:
adapters/deepagents/README.md
{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/deepagents/README.md
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:29.970Z
Learning: Run `just docs` when the documentation site changes.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:38.656Z
Learning: Run relevant validation under `validate-change` before opening a pull request.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:38.656Z
Learning: Update documentation and examples when public behavior changes.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:38.656Z
Learning: Use `NVIDIA NeMo Fabric` on the first product mention and `NeMo Fabric` thereafter; use standalone `Fabric` only as an exact code or API identifier.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:38.656Z
Learning: Update dependent maintainer or consumer skills when code changes affect their APIs, bindings, commands, paths, packaging guidance, or best practices.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:38.656Z
Learning: For new or updated dependencies, document the functional need, alternatives considered, and why the selected dependency is the narrowest fit.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:38.656Z
Learning: Use Conventional Commit style for pull-request titles: `<type>: <concise imperative summary>`. Choose the type from the actual change surface; use `fix` only for an actual user-facing or runtime/product code bug fix, never for chores, CI, docs, tests, packaging metadata, generated output, or agent/skill guidance.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:38.656Z
Learning: The pull-request body must contain `#### Overview`, `#### Details`, `#### Validation`, `#### Where should the reviewer start?`, and `#### Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)` sections, with the required summary, changes, validation, reviewer-start point, and issue reference or `Relates to: none`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:38.656Z
Learning: For dependency changes, include dependency rationale and material license-diff findings in the `#### Overview`; treat the license diff as review evidence, not a compatibility decision.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:38.656Z
Learning: Only check contribution-confirmation boxes when they are true; if either confirmation cannot be made, stop before opening the pull request and surface the blocker.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:38.656Z
Learning: After creating or editing a pull request, fetch the rendered body and verify that the template's visible headings and checklist items remain present.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:38.656Z
Learning: Explicitly call out breaking changes or renamed surfaces in the pull request.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:46.974Z
Learning: Prioritize factual accuracy, current repository behavior, and actionable findings over copy polish during documentation reviews.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:46.974Z
Learning: Keep documentation changes scoped, surface assumptions, and define focused validation before editing.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:46.974Z
Learning: When reporting documentation findings, lead with `Must fix`, `Should fix`, and `Nice to have` sections; include a file path, line reference, current problem, rationale, and concrete rewrite or direction.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:57.523Z
Learning: Review documentation in this order: verify facts, run the fast-path checklist, consult only the relevant support document, and report findings with severity and a concrete rewrite or direction.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:57.523Z
Learning: Classify findings as Must fix for incorrect, stale, misleading, or clearly noncompliant content; Should fix for comprehension, scanability, or consistency problems; and Nice to have for optional polish that does not affect accuracy or reader success.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:57.523Z
Learning: Omit style-only findings when wording is clear, accurate, and consistent with nearby documentation unless a deep copyedit is requested.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:57.523Z
Learning: Do not enforce marketing or social-media rules on technical documentation.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:57.523Z
Learning: Do not replace precise technical terms with simpler words when precision would be lost.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:57.523Z
Learning: Do not report a style issue without a concrete rewrite or remediation path.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:57.523Z
Learning: When support documents do not answer a question, consult Merriam-Webster, AP Stylebook, Chicago Manual of Style, and then Microsoft Style Guide in that order.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:57.523Z
Learning: Use the finding format: severity and short issue, file and line, current problem, why it matters, and a concrete rewrite.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:11:57.523Z
Learning: For code review output, use the review tool's inline finding format when available and keep the finding body focused on reader impact and the fix.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:12:05.454Z
Learning: Use branch prefixes `feat/`, `fix/`, `docs/`, `test/`, or `refactor/`; name branches after the work and never include Linear ticket IDs or slugs.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:12:05.454Z
Learning: Use signed-off commits for pull request work by running `git commit -s`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:12:05.454Z
Learning: When creating a pull request from the current branch, target the upstream repository rather than a fork.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T03:12:05.454Z
Learning: PR descriptions must state what changed, why, how it was tested, and any breaking changes within the repository template format.
🔇 Additional comments (7)
.coderabbit.yaml (1)
77-79: LGTM!.agents/skills/review-doc-style/SKILL.md (3)
3-3: LGTM!
42-68: LGTM!
119-124: LGTM!adapters/deepagents/README.md (1)
37-39: LGTM!Also applies to: 62-62, 169-177
pypi.md (2)
28-29: LGTM!
41-53: LGTM!
78f61e8 to
0e3ac3e
Compare
✅ Action performedReview finished.
|
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
.agents/skills/contribute-adapter/SKILL.md (2)
1-5: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winAdd the required SPDX header.
The
licensefrontmatter is not an SPDX header. Add the required HTML SPDX comments after the frontmatter so this new source file complies with the repository-wide license-header rule.Proposed fix
--- name: contribute-adapter description: Add or substantially change a NeMo Fabric harness adapter, including its architecture, descriptor claims, package wiring, capability and policy mapping, runtime behavior, and validation. license: Apache-2.0 --- +<!-- SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. --> +<!-- SPDX-License-Identifier: Apache-2.0 --> + # Contribute an Adapter to NVIDIA NeMo Fabric🤖 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 @.agents/skills/contribute-adapter/SKILL.md around lines 1 - 5, Add the repository-required HTML SPDX license comments immediately after the frontmatter in SKILL.md, while preserving the existing name, description, and license metadata.Source: Coding guidelines
150-154: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winSync
adapter-testsbefore the focused adapter command.just test-pythonalready installs that group, but the standaloneuv run --no-sync pytest tests/adapters/test_<name>*.pyexample can fail on a fresh environment. Adduv sync --group adapter-testsfirst, or point readers tojust test-python.🤖 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 @.agents/skills/contribute-adapter/SKILL.md around lines 150 - 154, Update the validation instructions in the contribute-adapter skill to synchronize the adapter-tests dependency group before the standalone focused pytest command, using uv sync --group adapter-tests, or direct readers to just test-python instead. Keep the existing validate-change and applicable adapter test guidance intact.
🤖 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 `@adapters/deepagents/pyproject.toml`:
- Around line 42-44: Update the Relay version comment in the dependency
configuration to state that 0.6.0 is already published, while preserving the
lockfile behavior: use 0.5.0 today and adopt 0.6.x on the next re-lock.
In `@adapters/deepagents/README.md`:
- Around line 61-62: Update the adapter documentation command from “fabric
doctor” to “nemo-fabric doctor” while preserving the existing NeMo Fabric
Runtime installation qualification. Apply this change in
adapters/deepagents/README.md lines 61-62 and adapters/hermes/README.md line 77.
In `@pypi.md`:
- Around line 28-29: Update the adapter-extra installation examples in the
runtime/adapter environment section to explicitly require choosing exactly one
adapter. Replace the sequential install commands with a placeholder command or
clearly labeled mutually exclusive alternatives so readers install only the
selected adapter distribution.
---
Outside diff comments:
In @.agents/skills/contribute-adapter/SKILL.md:
- Around line 1-5: Add the repository-required HTML SPDX license comments
immediately after the frontmatter in SKILL.md, while preserving the existing
name, description, and license metadata.
- Around line 150-154: Update the validation instructions in the
contribute-adapter skill to synchronize the adapter-tests dependency group
before the standalone focused pytest command, using uv sync --group
adapter-tests, or direct readers to just test-python instead. Keep the existing
validate-change and applicable adapter test guidance intact.
🪄 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: 2537bba3-1e06-449f-b1cb-1684e494a9b0
⛔ Files ignored due to path filters (5)
adapters/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 (26)
.agents/skills/contribute-adapter/SKILL.md.github/workflows/ci_python.ymlREADME.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/experimentation/cli.mdxdocs/getting-started/install.mdxdocs/integrations/claude.mdxexamples/code_review_agent/README.mdexamples/harbor/calculator/task/environment/Dockerfileexamples/harbor/prepare_swebench.shexamples/notebooks/02_variations.ipynbexamples/notebooks/README.mdjustfilepypi.mdpyproject.tomltests/adapters/test_adapter_package_metadata.pytests/adapters/test_deepagents.pytests/integrations/test_harbor_runner.py
💤 Files with no reviewable changes (3)
- adapters/hermes/pyproject.toml
- adapters/claude/pyproject.toml
- adapters/codex/pyproject.toml
📜 Review details
🧰 Additional context used
📓 Path-based instructions (53)
**/*.{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:
examples/code_review_agent/README.mdREADME.mdadapters/claude/README.mdadapters/hermes/README.mdexamples/notebooks/README.mdpypi.mdadapters/codex/README.mdadapters/deepagents/README.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:
examples/code_review_agent/README.mdREADME.mddocs/integrations/claude.mdxdocs/getting-started/install.mdxdocs/experimentation/cli.mdxexamples/notebooks/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:
examples/code_review_agent/README.mddocs/integrations/claude.mdxdocs/getting-started/install.mdxdocs/experimentation/cli.mdxexamples/notebooks/README.md
**/*
📄 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:
examples/code_review_agent/README.mdexamples/harbor/calculator/task/environment/DockerfileREADME.mddocs/integrations/claude.mdxadapters/claude/README.mdadapters/hermes/README.mddocs/getting-started/install.mdxdocs/experimentation/cli.mdxexamples/notebooks/README.mdexamples/harbor/prepare_swebench.shadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pypyproject.tomlpypi.mdtests/adapters/test_adapter_package_metadata.pyexamples/notebooks/02_variations.ipynbadapters/codex/README.mdadapters/deepagents/README.mdadapters/deepagents/pyproject.tomljustfiletests/integrations/test_harbor_runner.pytests/adapters/test_deepagents.py
**/*.{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:
examples/code_review_agent/README.mdREADME.mddocs/integrations/claude.mdxadapters/claude/README.mdadapters/hermes/README.mddocs/getting-started/install.mdxdocs/experimentation/cli.mdxexamples/notebooks/README.mdpypi.mdadapters/codex/README.mdadapters/deepagents/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:
examples/code_review_agent/README.mdREADME.mdadapters/claude/README.mdadapters/hermes/README.mdexamples/notebooks/README.mdpypi.mdadapters/codex/README.mdadapters/deepagents/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:
examples/code_review_agent/README.mdREADME.mdadapters/claude/README.mdadapters/hermes/README.mdexamples/notebooks/README.mdadapters/codex/README.mdadapters/deepagents/README.md
**/*.{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.For documentation-site changes, run
just docsto regenerate Python and Rust API references and validate Fern configuration.
Files:
examples/code_review_agent/README.mdREADME.mddocs/integrations/claude.mdxadapters/claude/README.mdadapters/hermes/README.mddocs/getting-started/install.mdxdocs/experimentation/cli.mdxexamples/notebooks/README.mdpypi.mdadapters/codex/README.mdadapters/deepagents/README.md
**/{README.md,*.md,*.mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant SDK, API, adapter, example, integration, and embedded documentation when public behavior or the corresponding surface changes.
Files:
examples/code_review_agent/README.mdREADME.mddocs/integrations/claude.mdxadapters/claude/README.mdadapters/hermes/README.mddocs/getting-started/install.mdxdocs/experimentation/cli.mdxexamples/notebooks/README.mdpypi.mdadapters/codex/README.mdadapters/deepagents/README.md
**/*.{html,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
HTML and Markdown files must use the specified HTML comment form for SPDX license headers.
Files:
examples/code_review_agent/README.mdREADME.mdadapters/claude/README.mdadapters/hermes/README.mdexamples/notebooks/README.mdpypi.mdadapters/codex/README.mdadapters/deepagents/README.md
{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:
examples/code_review_agent/README.mdexamples/harbor/calculator/task/environment/Dockerfileadapters/claude/README.mdadapters/hermes/README.mdexamples/notebooks/README.mdexamples/harbor/prepare_swebench.shadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyexamples/notebooks/02_variations.ipynbadapters/codex/README.mdadapters/deepagents/README.mdadapters/deepagents/pyproject.toml
{*.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:
examples/code_review_agent/README.mdREADME.mddocs/integrations/claude.mdxadapters/claude/README.mdadapters/hermes/README.mddocs/getting-started/install.mdxdocs/experimentation/cli.mdxexamples/notebooks/README.mdpypi.mdexamples/notebooks/02_variations.ipynbadapters/codex/README.mdadapters/deepagents/README.md
**/.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
{docs/package.json,docs/package-lock.json,.github/workflows/*.yml,justfile}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Keep documentation tooling, CI workflows, install commands, build/test/clean recipes, and examples consistent with current package names and commands.
Files:
.github/workflows/ci_python.ymljustfile
{pyproject.toml,python/pyproject.toml,Cargo.toml,docs/package.json,.github/workflows/*.yml,justfile}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Reflect public packaging changes in release-facing documentation and ensure CI references the same package names and commands used by local workflows.
Files:
.github/workflows/ci_python.ymlpyproject.tomljustfile
{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.Update the root
README.mdwhen workspace structure, supported adapters, or top-level documentation changes.
Files:
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.
Files:
README.mddocs/integrations/claude.mdxdocs/getting-started/install.mdxdocs/experimentation/cli.mdx
**/*.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.MDX files must use a JSX comment for the SPDX license header.
Files:
docs/integrations/claude.mdxdocs/getting-started/install.mdxdocs/experimentation/cli.mdx
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.
Files:
docs/integrations/claude.mdxdocs/getting-started/install.mdxdocs/experimentation/cli.mdx
docs/**/*
📄 CodeRabbit inference engine (AGENTS.md)
Update Fern documentation under
docs/when public behavior, thenemo-fabricpackage, examples, or supported bindings change.
Files:
docs/integrations/claude.mdxdocs/getting-started/install.mdxdocs/experimentation/cli.mdx
.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.Maintainer skills are auto-discovered from
.agents/skills/; Claude Code uses.claude/skillsas a symlink to the same directory rather than a separate skill set.
Files:
.agents/skills/contribute-adapter/SKILL.md
.agents/skills/**/SKILL.md
📄 CodeRabbit inference engine (.agents/skills/README.md)
Each maintainer skill file must begin with YAML frontmatter containing at least
nameanddescription.
Files:
.agents/skills/contribute-adapter/SKILL.md
.agents/skills/*/
📄 CodeRabbit inference engine (.agents/skills/README.md)
Use descriptive, task-based names for maintainer skill directories, such as
contribute-apiandvalidate-change.
Files:
.agents/skills/contribute-adapter/SKILL.md
adapters/*/README.md
📄 CodeRabbit inference engine (AGENTS.md)
Update adapter README files when public behavior, examples, or supported bindings change.
Files:
adapters/claude/README.mdadapters/hermes/README.mdadapters/codex/README.mdadapters/deepagents/README.md
adapters/**/*
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
adapters/**/*: Place repository adapters underadapters/<name>and include the required adapter structure, includingLICENSE -> ../../LICENSE,README.md,fabric-adapter.json, native package and lock files, a source entry point, and focused tests.
Provide a credential-free fixture coveringplan,doctor, andrun; keep live credential-dependent harness tests opt-in while retaining a deterministic CI end-to-end path.
Files:
adapters/claude/README.mdadapters/hermes/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/codex/README.mdadapters/deepagents/README.mdadapters/deepagents/pyproject.toml
adapters/**/README.md
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
Document installation, supported configuration, harness-only settings, credentials, lifecycle, telemetry, artifacts, limitations, focused test commands, and canonical typed SDK or harness-native YAML examples where applicable.
Files:
adapters/claude/README.mdadapters/hermes/README.mdadapters/codex/README.mdadapters/deepagents/README.md
**/*.{toml,yml,yaml,sh,bash}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
TOML, YAML, and shell files must use the specified
#-comment SPDX license header.
Files:
examples/harbor/prepare_swebench.shpyproject.tomladapters/deepagents/pyproject.toml
**/*.{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:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_adapter_package_metadata.pytests/integrations/test_harbor_runner.pytests/adapters/test_deepagents.py
**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For native binding changes, run
cargo check -p fabric-python --locked.
Files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_adapter_package_metadata.pytests/integrations/test_harbor_runner.pytests/adapters/test_deepagents.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.Use type annotations for public Python APIs and keep native Python binding declarations synchronized with their Rust implementations.
Files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_adapter_package_metadata.pytests/integrations/test_harbor_runner.pytests/adapters/test_deepagents.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.
**/*.{rs,py,pyi}: Usesnake_casefor Rust and Python functions and variables; usePascalCasefor Rust types and Python classes.
Keep native Python binding declarations synchronized with their Rust implementations when public contracts change.
Files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_adapter_package_metadata.pytests/integrations/test_harbor_runner.pytests/adapters/test_deepagents.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:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/adapters/test_adapter_package_metadata.pytests/integrations/test_harbor_runner.pytests/adapters/test_deepagents.py
**/*.{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/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pypyproject.tomltests/adapters/test_adapter_package_metadata.pyadapters/deepagents/pyproject.tomltests/integrations/test_harbor_runner.pytests/adapters/test_deepagents.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/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pypyproject.tomltests/adapters/test_adapter_package_metadata.pyadapters/deepagents/pyproject.tomltests/integrations/test_harbor_runner.pytests/adapters/test_deepagents.py
adapters/**/*.py
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
adapters/**/*.py: For Python adapters, usepyproject.toml,uv.lock,src/nemo_fabric_adapters/<name>/adapter.py, andtests/adapters/test_<name>*.py.
Use the existing Fabricpythonorprocessrunner and normalized request/result contracts; do not add a runner or one-off abstraction for a single adapter.
Treat normalizedconfig,capability_plan,telemetry_plan, andruntime_contextas authoritative; reserveharness.settingsfor harness-specific behavior and apply precedence in that order before descriptor and adapter defaults.
Reject conflicting duplicate declarations or unsupported behavior with an actionable error naming the field and supported alternatives; never silently drop configuration.
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 only on stderr.
Return harness-level invoke failures as successful lifecycle responses withresponse: null,failed: true, and structurederrorfields (code,message,retryable, and optionalmetadata).
Scope workspace, generated configuration, state, sessions, and artifacts to the resolved runtime context, and isolate stateful adapters by Fabric runtime ID.
Keep stdout stable: emitresponseplus adapter-specific extensions such aserror, harness events, usage, and session IDs; do not duplicate Fabric-owned result fields.
Files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
adapters/**/*.{py,json}
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
Add focused evidence for descriptor shape and exact capabilities, positive mappings, unsupported-value rejection, unenforceable-policy rejection, result normalization without secret leakage, one-shot and continuation behavior, runtime isolation, and packaged entry-point execution.
Files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
{Cargo.toml,python/pyproject.toml,pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Keep Rust workspace/package metadata and Python/maturin package metadata internally consistent, including package names, versions, import paths, and module names.
Files:
pyproject.toml
{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock,python/pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock,python/pyproject.toml}: Keep workspace, Python, and lockfile dependency versions aligned where required, and review both direct and transitive dependency changes from resolved lockfiles.
Inspect resolved transitive licenses, explicitly surface UNKNOWN, non-SPDX/custom, proprietary, source-available, copyleft, or network-copyleft terms, and route unresolved licensing questions to dependency approvers with distribution and linkage context.
Document the functional need, alternatives considered, rationale for the selected dependency, and any unresolved licensing question when introducing dependencies.
Files:
pyproject.toml
{Cargo.toml,pyproject.toml,python/pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Before adding a dependency, prefer the standard library, an existing dependency, or a small local implementation when appropriate; otherwise select a maintained, narrow-fit dependency with clear SPDX metadata and a permissive license where possible.
Files:
pyproject.toml
{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
After updating manifests or lockfiles, run
uv run --no-project python scripts/licensing/license_diff.py --base-ref origin/mainand review added packages and license changes.
Files:
pyproject.toml
**/*.{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.
Use Rust stable tooling; format Rust code with
cargo fmt --all, check formatting withcargo fmt --all -- --check, and compile withcargo check --workspace --locked.
Files:
pyproject.tomladapters/deepagents/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:
pyproject.tomladapters/deepagents/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:
pyproject.tomladapters/deepagents/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:
pyproject.tomladapters/deepagents/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:
pyproject.tomladapters/deepagents/pyproject.toml
**/pyproject.toml
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
Wire public Python adapter packages into root optional extras, the adapter dependency group,
[tool.uv.sources], andpython_projectsinjustfile; ship descriptors undershare/nemo-fabric/adapters/<name>.
Files:
pyproject.tomladapters/deepagents/pyproject.toml
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_adapter_package_metadata.pytests/adapters/test_deepagents.py
tests/**/*.{rs,py}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
When adding functionality, include tests in the corresponding Rust crate or the relevant area under
tests/.
Files:
tests/adapters/test_adapter_package_metadata.pytests/integrations/test_harbor_runner.pytests/adapters/test_deepagents.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 and run by the async runner.
Do not add-> Nonereturn type annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorunittest.mock.AsyncMock, using thespecargument when necessary, rather than defining a new class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
Do not repeat fixtures; place fixtures needed by multiple test files inconftest.py.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a function named<fixture_name>_fixture; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its return value is unused or it does not return a value.
Use the autouserestore_environ_fixturefromtests/conftest.pyto restore environment variables; modify variables withos.environand do not usemonkeypatch.setenv.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear failure, such as usingresults["data"]instead ofresults.get("data").
Files:
tests/adapters/test_adapter_package_metadata.pytests/integrations/test_harbor_runner.pytests/adapters/test_deepagents.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/adapters/test_adapter_package_metadata.pytests/integrations/test_harbor_runner.pytests/adapters/test_deepagents.py
adapters/**/pyproject.toml
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
Keep published runtime dependencies razor-thin and adapter-owned. Do not declare wrapped harness or consumer-agent libraries; declare only other directly imported runtime libraries owned by the adapter.
Files:
adapters/deepagents/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.
Files:
justfile
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T21:08:38.534Z
Learning: Read the authoritative reference surfaces before editing and use the closest existing adapter only for harness-specific patterns, not for the core contract.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-23T21:08:38.534Z
Learning: Use companion guidance for scoped changes, tests, packaging, documentation, validation, and review handoff; do not use this adapter-contribution guidance for applications that merely select an existing adapter.
📚 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
🪛 SkillSpector (2.3.11)
.agents/skills/contribute-adapter/SKILL.md
[error] 169: [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.26.1)
.github/workflows/ci_python.yml
[warning] 91-91: code injection via template expansion (template-injection): may expand into attacker-controllable code
(template-injection)
[warning] 91-91: code injection via template expansion (template-injection): may expand into attacker-controllable code
(template-injection)
🔇 Additional comments (23)
.agents/skills/contribute-adapter/SKILL.md (1)
7-146: LGTM!Also applies to: 155-178
adapters/deepagents/pyproject.toml (1)
36-40: LGTM!Also applies to: 45-46
pyproject.toml (1)
48-52: LGTM!Also applies to: 93-101
tests/adapters/test_adapter_package_metadata.py (1)
1-79: LGTM!.github/workflows/ci_python.yml (1)
91-91: LGTM!examples/notebooks/02_variations.ipynb (1)
203-214: LGTM!examples/notebooks/README.md (1)
28-35: LGTM!adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
139-139: LGTM!examples/harbor/calculator/task/environment/Dockerfile (1)
18-18: LGTM!examples/harbor/prepare_swebench.sh (1)
67-67: LGTM!tests/adapters/test_deepagents.py (1)
315-318: LGTM!tests/integrations/test_harbor_runner.py (1)
20-20: LGTM!Also applies to: 257-265
justfile (1)
404-404: LGTM!README.md (1)
140-143: LGTM!Also applies to: 158-158, 176-181
adapters/claude/README.md (1)
12-42: LGTM!Also applies to: 153-154
adapters/codex/README.md (1)
10-33: LGTM!Also applies to: 71-74
adapters/deepagents/README.md (1)
12-40: LGTM!Also applies to: 157-171
adapters/hermes/README.md (1)
12-36: LGTM!docs/experimentation/cli.mdx (1)
188-192: LGTM!docs/getting-started/install.mdx (1)
32-67: LGTM!docs/integrations/claude.mdx (1)
13-16: LGTM!pypi.md (1)
38-63: LGTM!examples/code_review_agent/README.md (1)
62-62: LGTM!
a3897ef to
bb5294d
Compare
bb5294d to
8fd8458
Compare
8fd8458 to
6daba0d
Compare
6daba0d to
8b03fcc
Compare
8a5229e to
4650297
Compare
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
4650297 to
737bef2
Compare
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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/swebench/README.md`:
- Line 32: Update the FABRIC_PACKAGE declaration in the README to pin
nemo-fabric[claude,hermes-agent,relay] to version 0.1.0 instead of the obsolete
alpha release, and remove the stale alpha-tag warning.
In `@tests/integrations/test_harbor_runner.py`:
- Line 258: Strengthen the assertions in the affected Harbor runner tests to
verify the exact expected dependency install command and explicitly reject
obsolete root extras such as runtime, hermes, and other legacy selectors. Update
the checks around the existing Dockerfile and README assertions so they fail
when removed selectors remain while preserving validation of the new nemo-fabric
selectors.
🪄 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: 8637344b-113a-42ae-b93f-b26328b502ed
⛔ Files ignored due to path filters (5)
adapters/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 (35)
.agents/skills/contribute-adapter/SKILL.md.agents/skills/maintain-packaging/SKILL.md.agents/skills/python-tests/SKILL.md.github/workflows/ci_python.ymlCONTRIBUTING.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
🧰 Additional context used
📓 Path-based instructions (52)
**/*
📄 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:
examples/harbor/calculator/task/environment/Dockerfileadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pydocs/integrations/harness/codex.mdxdocs/sdk/python.mdxtests/python/test_readme_examples.pyexamples/harbor/README.mdadapters/hermes/README.mdCONTRIBUTING.mddocs/getting-started/quickstart.mdxadapters/codex/README.mdadapters/deepagents/README.mdtests/adapters/test_hermes_config_builder.pyadapters/codex/pyproject.tomlexamples/harbor/calculator/README.mddocs/integrations/harness/hermes.mdxskills/integrations/consumer/nemo-fabric-integrate/SKILL.mddocs/integrations/harness/deepagents.mdxdocs/integrations/harness/claude.mdxpyproject.tomladapters/hermes/pyproject.tomltests/python/test_harbor_integration.pyadapters/claude/pyproject.tomlREADME.mdtests/integrations/test_harbor_runner.pyjustfileexamples/harbor/swebench/README.mddocs/getting-started/install.mdxpypi.mdtests/adapters/test_adapter_package_metadata.pyadapters/deepagents/pyproject.tomladapters/claude/README.md
{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:
examples/harbor/calculator/task/environment/Dockerfileadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyexamples/harbor/README.mdadapters/hermes/README.mdadapters/codex/README.mdadapters/deepagents/README.mdadapters/codex/pyproject.tomlexamples/harbor/calculator/README.mdadapters/hermes/pyproject.tomladapters/claude/pyproject.tomlexamples/harbor/swebench/README.mdadapters/deepagents/pyproject.tomladapters/claude/README.md
**/*.{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:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pytests/python/test_harbor_integration.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.py
**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For native binding changes, run
cargo check -p fabric-python --locked.
Files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pytests/python/test_harbor_integration.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.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.Use the existing Python style, add type annotations to public APIs, and keep native binding declarations synchronized with their Rust implementations.
Files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pytests/python/test_harbor_integration.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.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.
**/*.{rs,py,pyi}: Usesnake_casefor Rust and Python functions and variables; usePascalCasefor Rust types and Python classes.
Run tests for every affected language surface; changes touching the Rust core or public schemas must run both Rust and Python test suites.
Files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pytests/python/test_harbor_integration.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.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:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pytests/python/test_harbor_integration.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.py
**/*.{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/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pyadapters/codex/pyproject.tomlpyproject.tomladapters/hermes/pyproject.tomltests/python/test_harbor_integration.pyadapters/claude/pyproject.tomltests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pyadapters/deepagents/pyproject.toml
**/*.{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/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pyadapters/codex/pyproject.tomlpyproject.tomladapters/hermes/pyproject.tomltests/python/test_harbor_integration.pyadapters/claude/pyproject.tomltests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.pyadapters/deepagents/pyproject.toml
adapters/*/src/**/*.py
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
adapters/*/src/**/*.py: Use the existing Fabricpythonorprocessrunner and normalized request/result contracts; do not add a runner or abstraction for a single adapter.
Treat normalizedconfig,capability_plan,telemetry_plan, andruntime_contextas authoritative; reserveharness.settingsfor harness-specific behavior.
Apply configuration 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 an actionable error.
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 structurederrorfields includingcode,message, andretryable.
Do not emit NeMo Relay stream records on adapter stdout; return exactly one terminal lifecycle response while streaming records through the SDK-owned out-of-band endpoint.
Scope workspace, generated configuration, state, sessions, and artifacts to the resolved runtime context, and isolate stateful adapters by Fabric runtime ID.
Claim capabilities only when they are implemented and tested end to end; reject unsupported providers, transports, fields, and unenforceable policies rather than silently accepting them.
Files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{rs,py,pyi,json}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Public contract changes must keep checked-in JSON Schema snapshots and native Python binding declarations synchronized.
Files:
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pytests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pytests/python/test_harbor_integration.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.py
.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/python-tests/SKILL.md.agents/skills/maintain-packaging/SKILL.md.agents/skills/contribute-adapter/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/integrations/harness/codex.mdxdocs/sdk/python.mdxexamples/harbor/README.mddocs/getting-started/quickstart.mdxexamples/harbor/calculator/README.mddocs/integrations/harness/hermes.mdxdocs/integrations/harness/deepagents.mdxdocs/integrations/harness/claude.mdxREADME.mdexamples/harbor/swebench/README.mddocs/getting-started/install.mdx
{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/integrations/harness/codex.mdxdocs/sdk/python.mdxexamples/harbor/README.mddocs/getting-started/quickstart.mdxexamples/harbor/calculator/README.mddocs/integrations/harness/hermes.mdxdocs/integrations/harness/deepagents.mdxdocs/integrations/harness/claude.mdxexamples/harbor/swebench/README.mddocs/getting-started/install.mdx
**/*.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.
Files:
docs/integrations/harness/codex.mdxdocs/sdk/python.mdxdocs/getting-started/quickstart.mdxdocs/integrations/harness/hermes.mdxdocs/integrations/harness/deepagents.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/integrations/harness/codex.mdxdocs/sdk/python.mdxdocs/getting-started/quickstart.mdxdocs/integrations/harness/hermes.mdxdocs/integrations/harness/deepagents.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/integrations/harness/codex.mdxdocs/sdk/python.mdxexamples/harbor/README.mdadapters/hermes/README.mdCONTRIBUTING.mddocs/getting-started/quickstart.mdxadapters/codex/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mddocs/integrations/harness/hermes.mdxskills/integrations/consumer/nemo-fabric-integrate/SKILL.mddocs/integrations/harness/deepagents.mdxdocs/integrations/harness/claude.mdxREADME.mdexamples/harbor/swebench/README.mddocs/getting-started/install.mdxpypi.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/integrations/harness/codex.mdxdocs/sdk/python.mdxdocs/getting-started/quickstart.mdxdocs/integrations/harness/hermes.mdxdocs/integrations/harness/deepagents.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.
**/*.{md,mdx}: If public behavior, adapters, examples, or workspace structure changes, update the corresponding documentation in the same branch.
For docs site changes, runjust docsto regenerate Python and Rust API references and validate Fern configuration.
Files:
docs/integrations/harness/codex.mdxdocs/sdk/python.mdxexamples/harbor/README.mdadapters/hermes/README.mdCONTRIBUTING.mddocs/getting-started/quickstart.mdxadapters/codex/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mddocs/integrations/harness/hermes.mdxskills/integrations/consumer/nemo-fabric-integrate/SKILL.mddocs/integrations/harness/deepagents.mdxdocs/integrations/harness/claude.mdxREADME.mdexamples/harbor/swebench/README.mddocs/getting-started/install.mdxpypi.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/integrations/harness/codex.mdxdocs/sdk/python.mdxdocs/getting-started/quickstart.mdxdocs/integrations/harness/hermes.mdxdocs/integrations/harness/deepagents.mdxdocs/integrations/harness/claude.mdxREADME.mddocs/getting-started/install.mdx
{*.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/integrations/harness/codex.mdxdocs/sdk/python.mdxexamples/harbor/README.mdadapters/hermes/README.mdCONTRIBUTING.mddocs/getting-started/quickstart.mdxadapters/codex/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mddocs/integrations/harness/hermes.mdxskills/integrations/consumer/nemo-fabric-integrate/SKILL.mddocs/integrations/harness/deepagents.mdxdocs/integrations/harness/claude.mdxREADME.mdexamples/harbor/swebench/README.mddocs/getting-started/install.mdxpypi.mdadapters/claude/README.md
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
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 shared fixtures once inconftest.pyrather than repeating them across test files.
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 required but its return value is unused.
Use the autouserestore_environ_fixturefromtests/conftest.pyto restore environment variables; modify variables withos.environand do not usemonkeypatch.setenv.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear failure, such as usingresults["data"]instead ofresults.get("data").
Run focused tests withuv run pytest -k "<pattern>"and all tests withuv run pytest.
Files:
tests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pytests/python/test_harbor_integration.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.py
**/{test,tests}/**/*.{rs,py,pyi}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
When adding functionality, include tests in the corresponding Rust crate or relevant area under
tests/.
Files:
tests/python/test_readme_examples.pytests/adapters/test_hermes_config_builder.pytests/python/test_harbor_integration.pytests/integrations/test_harbor_runner.pytests/adapters/test_adapter_package_metadata.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/python/test_harbor_integration.pytests/integrations/test_harbor_runner.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
{docs/package.json,docs/package-lock.json,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml,justfile}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Keep documentation tooling, CI workflows, local recipes, install commands, package names, and build/test commands consistent with the current packaging interfaces.
Files:
.github/workflows/ci_python.ymljustfile
**/*.{md,rst}
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Update documentation and examples in the same branch as the public API change.
Reflect public packaging changes in release-facing documentation, examples, and install/import/build commands.
Files:
examples/harbor/README.mdadapters/hermes/README.mdCONTRIBUTING.mdadapters/codex/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdREADME.mdexamples/harbor/swebench/README.mdpypi.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:
examples/harbor/README.mdadapters/hermes/README.mdCONTRIBUTING.mdadapters/codex/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdREADME.mdexamples/harbor/swebench/README.mdpypi.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.
Update the relevant adapter or example
README.mdwhen that surface changes.
Files:
examples/harbor/README.mdadapters/hermes/README.mdadapters/codex/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/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:
examples/harbor/README.mdadapters/hermes/README.mdCONTRIBUTING.mdadapters/codex/README.mdadapters/deepagents/README.mdexamples/harbor/calculator/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdREADME.mdexamples/harbor/swebench/README.mdpypi.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/codex/README.mdadapters/deepagents/README.mdadapters/claude/README.md
adapters/*/{LICENSE,README.md,fabric-adapter.json,pyproject.toml,uv.lock}
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
A repository adapter should live under
adapters/<name>and include the required license link, README, packaged descriptor, language-native package and lock files, source entry point, and focused tests.
Files:
adapters/hermes/README.mdadapters/codex/README.mdadapters/deepagents/README.mdadapters/codex/pyproject.tomladapters/hermes/pyproject.tomladapters/claude/pyproject.tomladapters/deepagents/pyproject.tomladapters/claude/README.md
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
**/*.{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/codex/pyproject.tomlpyproject.tomladapters/hermes/pyproject.tomladapters/claude/pyproject.tomladapters/deepagents/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/codex/pyproject.tomlpyproject.tomladapters/hermes/pyproject.tomladapters/claude/pyproject.tomladapters/deepagents/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/codex/pyproject.tomlpyproject.tomladapters/hermes/pyproject.tomladapters/claude/pyproject.tomladapters/deepagents/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/codex/pyproject.tomlpyproject.tomladapters/hermes/pyproject.tomladapters/claude/pyproject.tomladapters/deepagents/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/codex/pyproject.tomlpyproject.tomladapters/hermes/pyproject.tomladapters/claude/pyproject.tomladapters/deepagents/pyproject.toml
adapters/*/{pyproject.toml,package.json}
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
Keep each published leaf adapter's runtime dependencies razor-thin and adapter-owned; do not directly depend on the wrapped harness or its transitive dependencies.
Files:
adapters/codex/pyproject.tomladapters/hermes/pyproject.tomladapters/claude/pyproject.tomladapters/deepagents/pyproject.toml
adapters/*/pyproject.toml
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
For Python leaf adapters, provide a
harnessextra for supported harness packages and afullextra for package-installable optional integrations; provide arelayextra when importing NeMo Relay Python APIs.
Files:
adapters/codex/pyproject.tomladapters/hermes/pyproject.tomladapters/claude/pyproject.tomladapters/deepagents/pyproject.toml
adapters/*/{pyproject.toml,uv.lock}
📄 CodeRabbit inference engine (.agents/skills/contribute-adapter/SKILL.md)
Keep the leaf adapter base installation limited to adapter-owned dependencies and maintain its lockfile consistently with the declared package metadata.
Files:
adapters/codex/pyproject.tomladapters/hermes/pyproject.tomladapters/claude/pyproject.tomladapters/deepagents/pyproject.toml
**/{Cargo.toml,pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Treat every direct dependency as a long-lived API, supply-chain, and licensing commitment; prefer the standard library, existing dependencies, or a small local implementation when appropriate.
Files:
adapters/codex/pyproject.tomlpyproject.tomladapters/hermes/pyproject.tomladapters/claude/pyproject.tomladapters/deepagents/pyproject.toml
**/{Cargo.toml,pyproject.toml,python/pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
**/{Cargo.toml,pyproject.toml,python/pyproject.toml}: When selecting dependencies, prefer maintained OSS packages with clear SPDX metadata, smaller transitive graphs, and permissive licenses such as Apache-2.0, MIT, BSD, or ISC; inspect transitive licenses as well as direct licenses.
Record the functional need, viable alternatives, rationale for the selected dependency being the narrowest fit, and any unresolved licensing question.
Files:
adapters/codex/pyproject.tomlpyproject.tomladapters/hermes/pyproject.tomladapters/claude/pyproject.tomladapters/deepagents/pyproject.toml
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 adapter a canonical root extra delegating to the matching leaf adapter.
Install leaf adapters through theirharnessextras in the rootadapter-testsdependency group, and verify root runtime, root-to-leaf delegation, adapter-test delegation, and leaf metadata.Keep
nemo-fabricas a metapackage that unconditionally installs the exact-versionnemo-fabric-runtimedistribution; root harness extras must delegate to version-matched leaf-adapterharnessextras, without root adapter-only aliases.
pyproject.toml: Packaging metadata tests must assert that the root project unconditionally depends on the exact-versionnemo-fabric-runtimedistribution.
Each root harness extra must delegate to the matching version of the leaf adapter'sharnessextra.
Bare leaf dependencies remain adapter-owned, and the rootadapter-testsdependency group must install each leaf through itsharnessextra.
Every leaf providesfull; only adapters importing NeMo Relay Python APIs providerelay; adapters using an external Relay executable must definefullequal toharness.
Files:
pyproject.toml
{Cargo.toml,pyproject.toml,python/pyproject.toml,Cargo.lock,uv.lock}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Keep workspace, Python, and lockfile versions aligned where required, and keep package names, import paths, and module names internally consistent.
Files:
pyproject.toml
{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.Keep the top-level
README.mdaligned with the current workspace, supported adapters, and top-level documentation.
Files:
README.md
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.
Files:
justfile
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-28T22:14:41.041Z
Learning: Read the authoritative references before editing and use the closest existing adapter only for harness-specific patterns, not as a substitute for the core contract.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-28T22:14:41.041Z
Learning: Keep the change scoped and update package, runtime/test dependencies, installation, resolution, documentation, examples, fixtures, generated artifacts, and CI catalogs together without unrelated changes.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-28T22:14:59.611Z
Learning: Versioned release tags must use raw Rust-compatible SemVer without a leading `v`, such as `0.1.0` or `0.1.0-rc.1`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-28T22:14:59.611Z
Learning: All contributors must sign off every commit using `git commit -s`; unsigned commits will not be accepted.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-28T22:14:59.611Z
Learning: Before submitting a pull request, run relevant tests, verify affected packages compile, update documentation, and rebase on the latest `main`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-28T22:14:59.611Z
Learning: Pull requests require at least one approving review and passing CI; do not force-push during review.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-07-28T22:14:59.611Z
Learning: Use commit messages in the form `type: short description`, with an allowed type and a first line shorter than 72 characters.
📚 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
🪛 LanguageTool
adapters/claude/README.md
[style] ~90-~90: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ion deadline. - environment.workspace sets the Claude working directory, and `en...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
🪛 Ruff (0.16.0)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
[warning] 101-103: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 107-109: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 163-165: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 170-170: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 174-174: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 179-181: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 247-247: Dynamically typed expressions (typing.Any) are disallowed in tool_policy_middleware
(ANN401)
[warning] 413-413: Dynamically typed expressions (typing.Any) are disallowed in subagents
(ANN401)
[warning] 420-422: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 427-429: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 432-434: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 436-438: Avoid specifying long messages outside the exception class
(TRY003)
tests/adapters/test_hermes_config_builder.py
[warning] 52-52: Avoid specifying long messages outside the exception class
(TRY003)
🪛 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))
[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 (26)
.agents/skills/contribute-adapter/SKILL.md (1)
52-83: LGTM!Also applies to: 111-115, 179-179
.agents/skills/maintain-packaging/SKILL.md (1)
37-43: LGTM!.agents/skills/python-tests/SKILL.md (1)
39-52: LGTM!adapters/claude/pyproject.toml (1)
32-39: LGTM!adapters/codex/pyproject.toml (1)
32-39: LGTM!adapters/deepagents/pyproject.toml (2)
29-40: 🩺 Stability & AvailabilityVerify that harness imports are lazy.
The base install no longer includes
deepagents,langchain, orlanggraph, while the supplied dependency graph identifiesdeepagentsas an adapter import. If any of these imports execute at module import time, a bare leaf installation fails before the harness extra is installed. Keep harness-only imports inside the harness-dependent path and add a bare-install import test.Based on the supplied dependency graph,
deepagentsis an adapter import while now being harness-only.#!/usr/bin/env bash set -euo pipefail python - <<'PY' import ast from pathlib import Path path = Path("adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py") tree = ast.parse(path.read_text(encoding="utf-8"), filename=str(path)) for node in tree.body: if isinstance(node, ast.Import): names = [alias.name for alias in node.names] elif isinstance(node, ast.ImportFrom): names = [node.module or ""] else: continue if any(name == "deepagents" or name.startswith(("langchain", "langgraph")) for name in names): print(f"module-level harness import at line {node.lineno}: {names}") PY
42-49: LGTM!adapters/hermes/pyproject.toml (1)
29-41: LGTM!pyproject.toml (1)
40-62: LGTM!Also applies to: 76-80
justfile (1)
346-348: LGTM!Also applies to: 417-417
tests/python/test_harbor_integration.py (1)
359-373: LGTM!tests/python/test_readme_examples.py (1)
21-21: LGTM!pypi.md (2)
46-51: Make the harness-install alternatives explicitly exclusive.These sequential commands install every harness if copied as a block. State “Choose one” and use a placeholder or clearly labeled alternatives.
34-41: LGTM!Also applies to: 53-113
tests/adapters/test_adapter_package_metadata.py (1)
1-145: LGTM!tests/adapters/test_hermes_config_builder.py (1)
6-65: LGTM!CONTRIBUTING.md (1)
38-70: LGTM!Also applies to: 112-120
README.md (1)
38-52: LGTM!Also applies to: 73-80, 135-197
adapters/claude/README.md (1)
12-31: LGTM!Also applies to: 41-47, 61-63, 84-116, 130-139, 154-207
skills/integrations/consumer/nemo-fabric-integrate/SKILL.md (1)
47-71: LGTM!.github/workflows/ci_python.yml (1)
86-92: LGTM!examples/harbor/README.md (1)
66-80: LGTM!Also applies to: 118-120, 138-138
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)
17-22: LGTM!examples/harbor/swebench/README.md (1)
54-54: LGTM!Also applies to: 75-76, 103-104, 141-142, 179-179, 197-210, 231-232, 252-252, 263-264
adapters/deepagents/README.md (1)
46-50: Restore the runtime-qualifiednemo-fabric doctorcommand.Line 49 reintroduces the previously addressed issue: this adapter-only path has no runtime CLI, and the executable is
nemo-fabric, notfabric. State thatnemo-fabric doctoris available when the NeMo Fabric Runtime is installed.
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
|
/merge |
#### 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 #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 #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: #105 Signed-off-by: Zhongxuan (Daniel) Wang <daniewang@nvidia.com>
Overview
Slim the Python adapter dependency boundary for the
release/0.1line without changing adapter behavior.nemo-fabricremains a metadata-only package that unconditionally installs the exact matchingnemo-fabric-runtime.harnessextra.harnessandfull; only Deep Agents and Hermes provide the Pythonrelayextra. Claude and Codex continue to use the separately installednemo-relayCLI.adapter-testsdependency group.Details
The supported install modes are now explicit:
nemo-fabric[<harness>]: Runtime, adapter, and supported harness dependencies in one environment.nemo-fabricplus 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.nemo-fabric-adapters-<adapter>: Adapter-owned dependencies only.full: All package-installable dependencies; for Claude and Codex this equalsharnessbecause 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
55 passed529 passed, 15 skipped21 passeduv lock --checkjust build-pythoncargo check -p fabric-python --lockedjust docs(all checks passed; unauthenticated redirect check skipped with the expected warning)just wheels, followed by root and adapter wheelMETADATAinspectionupstream/release/0.1: no Rust or Python additions, removals, or changespre-commit run --all-filesjust --fmt --checkgit diff --checkWhere should the reviewer start?
Start with
pyproject.toml, the four adapterpyproject.tomlfiles, andtests/adapters/test_adapter_package_metadata.py. Then reviewdocs/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 #117.Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)
Closes FABRIC-125
Relates to feat: normalize portable adapter configuration #117
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
Documentation
Bug Fixes
Tests