NeMo-Relay
AGENTS.md238 starsChanged 2 months agoApache-2.0View on GitHub
- Inspect the relevant code and existing patterns before editing. State material assumptions, keep the change scoped, and avoid unrelated cleanup. - Prefer the smallest implementation and validation that prove the requested behavior. Do not add speculative abstractions or tests that mirror the code. - Use rg for repository search and the justfile recipes for standard build, test, documentation, and packaging workflows. Run just --list to discover current recipes instead of relying on copied command catalogs. - Preserve user changes…
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,700 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository30 other files it gives its agents.
- add-binding-featureSkill
- add-middlewareSkill
- check-release-deploymentsSkill
- contribute-docsSkill
- contribute-integrationSkill
- create-beta-tagSkill
- create-rc-tagSkill
- create-release-tagSkill
- draft-release-notesSkill
- maintain-ciSkill
- maintain-dynamic-pluginsSkill
- maintain-observabilitySkill
- maintain-optimizerSkill
- maintain-packagingSkill
- prepare-code-freezeSkill
- prepare-prSkill
- rename-surfacesSkill
- review-doc-styleSkill
- update-project-versionSkill
- nemo-relay-debug-runtime-integrationSkill
- nemo-relay-get-startedSkill
- nemo-relay-installSkill
- nemo-relay-instrument-callsSkill
- nemo-relay-instrument-context-isolationSkill
- nemo-relay-instrument-typed-wrappersSkill
- nemo-relay-integrate-upstreamSkill
- nemo-relay-migrate-from-flowSkill
- nemo-relay-plugin-adaptive-tuningSkill
- nemo-relay-plugin-buildSkill
- nemo-relay-plugin-observabilitySkill
The file
We split this AGENTS.md into the rules it gives an agent
12 rules. About 0 are common, 5 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 12
Prefer the smallest implementation and validation that prove the requested behavior.
- Very specific: line 14
Use rg for repository search and the justfile recipes for standard build, test, documentation, and packaging workflows.
- Distinctive: line 19
Never create, publish, comment on, or respond to a GitHub or GitLab pull request, merge request, or issue without explicit user approval.
- Very specific: line 45
Before handoff, run the canonical suite only for each directly affected surface: just test-rust, just test-python, just test-node, or just …
- Distinctive: line 49
Run integration, docs, packaging, FFI, generated-output, or build-only checks only when those surfaces change or the relevant test does not …
- Very specific: line 51
Use uv run pre-commit run for repository hooks.
- Very specific: line 62
Keep SPDX headers on source, documentation, scripts, and configuration files.
- Very specific: line 65
Follow binding naming conventions: Rust and Python snake_case, C exports prefixed nemo_relay_, Go public APIs PascalCase, and Node.js …
- Very specific: line 67
Use serde_json::Value through the repository Json alias where existing Rust runtime APIs expect JSON.
- Distinctive: line 71
Update public documentation and examples when public behavior, package names, supported bindings, or documented workflows change.
- Very specific: line 73
Keep release-process policy in maintainer sources such as RELEASING.md and complete release history in GitHub Releases.
- Distinctive: line 75
Use signed-off commits and repository branch naming only when the user asks for commit or branch work.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
<!--
SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->NeMo Relay Repository Guidance
Working Agreement
- Inspect the relevant code and existing patterns before editing. State material assumptions, keep the change scoped, and avoid unrelated cleanup.
- Prefer the smallest implementation and validation that prove the requested behavior. Do not add speculative abstractions or tests that mirror the code.
- Use
rgfor repository search and thejustfilerecipes for standard build, test, documentation, and packaging workflows. Runjust --listto discover current recipes instead of relying on copied command catalogs. - Preserve user changes in a dirty worktree. Do not edit generated or packaged outputs by hand; use the repository workflow that owns them.
- Never create, publish, comment on, or respond to a GitHub or GitLab pull request, merge request, or issue without explicit user approval.
Architecture
- Rust is the runtime source of truth. Primary supported bindings are Rust, Python, and Node.js. Go and the raw C FFI are experimental and source-first.
- Scope stacks establish ownership, visibility, cleanup, and event parentage. Middleware and plugins operate within that scope model; events are emitted in Agent Trajectory Observability Format (ATOF) and consumed by subscribers or exporters.
- A public or observable runtime change requires identifying which bindings expose the affected contract. Keep those surfaces aligned, but do not modify or test an unrelated binding solely because the implementation is in Rust.
- Python wrappers live under
python/nemo_relay, their PyO3 bridge undercrates/python, Node.js undercrates/node, and Go undergo/nemo_relay. - User documentation lives under
docs/; Fern configuration and presentation live underfern/. Maintainer skills live under.agents/skillsand are shared with Claude Code through.claude/skills.
Validation
- Decide which observable behavior and language surfaces can change.
- During implementation, run the narrowest focused test or check that proves the behavior: usually one affected test, file, or module through its native runner rather than a canonical surface suite.
- Before handoff, run the canonical suite only for each directly affected
surface:
just test-rust,just test-python,just test-node, orjust test-go. Add binding suites for shared-runtime changes only when the binding's exposed or observable contract is affected. - Run integration, docs, packaging, FFI, generated-output, or build-only checks only when those surfaces change or the relevant test does not build them.
- Use
uv run pre-commit runfor repository hooks; it checks the staged changes. Reserve--all-filesfor an explicit request, release preparation, or CI.
Documentation, comments, mechanical metadata, and other reversible low-impact changes do not require language test suites unless they alter executable examples, generated output, packaging, or build behavior. Report what was validated and any relevant checks not run.
Repository Conventions
- Keep SPDX headers on source, documentation, scripts, and configuration files.
SKILL.mdfiles instead start with YAML frontmatter containingnameanddescription. - Follow binding naming conventions: Rust and Python
snake_case, C exports prefixednemo_relay_, Go public APIsPascalCase, and Node.jscamelCase. - Use
serde_json::Valuethrough the repositoryJsonalias where existing Rust runtime APIs expect JSON. UseResult<T>withFlowErrorin core paths. - Preserve the existing tokio async model and callback or future lifetimes across bindings.
- Update public documentation and examples when public behavior, package names, supported bindings, or documented workflows change.
- Keep release-process policy in maintainer sources such as
RELEASING.mdand complete release history in GitHub Releases. - Use signed-off commits and repository branch naming only when the user asks for commit or branch work. For PR work, read the current repository template.
On-Demand Guidance
Load at most the directly applicable maintainer skill for specialized work such as middleware, bindings, dynamic plugins, observability, CI, packaging, documentation review, releases, or PR preparation. Do not load another skill for generic coding behavior or validation; this file owns those policies.
See CONTRIBUTING.md and docs/contribute/testing-and-docs.mdx for contributor
details, and .agents/skills/README.md for the maintainer skill boundary.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

