add-binding-feature
Skill238 starsChanged 2 months agoApache-2.0View on GitHub
Add or change a public NeMo Relay runtime API across Rust and affected language bindings when no more specific maintainer skill owns the domain. Do not use for middleware additions, internal refactors, binding-local fixes, or docs-only changes.
In this repository30 other files it gives its agents.
- AGENTS.mdAGENTS.md
- 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 skill into the rules it gives an agent
8 rules. About 0 are common, 6 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 10
Use this skill when a change affects the public runtime surface and must stay in parity across the Rust core, FFI, and one or more bindings.
- Distinctive: line 13
Do not use this skill for:
- Very specific: line 27
Update crates/ffi and its generated header only when the capability is exposed through the C ABI or Go binding.
- Distinctive: line 30
Update each binding that exposes the capability.
- Distinctive: line 33
Update Python wrapper modules, Go shorthand packages, typed helpers, or adaptive/plugin helpers if the new behavior belongs there.
- Distinctive: line 36
Update reference docs, language-binding docs, and examples when the public surface or expected usage changed.
- Distinctive: line 39
Follow the repository validation policy for the surfaces whose public or observable behavior changed.
- Very specific: line 79
If tool execution is affected, does every callback, continuation, managed return, and manual end surface use the canonical …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill 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
Add a Binding Feature
Use this skill when a change affects the public runtime surface and must stay in parity across the Rust core, FFI, and one or more bindings.
Do not use this skill for:
- Internal-only core refactors with no public API change
- New middleware contracts, which use the middleware-specific workflow
- Binding-local bug fixes that do not change shared behavior
- Docs-only or example-only updates
Implementation Order
- Core Rust
Implement the behavior first in
crates/core/src/api/and related core modules such ascrates/core/src/api/runtime/,crates/core/src/codec/, orcrates/core/src/json.rs. - FFI / shared C surface, when affected
Update
crates/ffiand its generated header only when the capability is exposed through the C ABI or Go binding. - Language-native bindings Update each binding that exposes the capability; leave unrelated bindings unchanged.
- Language wrapper helpers Update Python wrapper modules, Go shorthand packages, typed helpers, or adaptive/plugin helpers if the new behavior belongs there.
- Docs and examples Update reference docs, language-binding docs, and examples when the public surface or expected usage changed.
- Validation Follow the repository validation policy for the surfaces whose public or observable behavior changed.
Naming Conventions
| Layer | Convention | Example |
| Rust | snake_case | nemo_relay_tool_call |
| C FFI | nemo_relay_ prefix | nemo_relay_tool_call |
| Python | snake_case | nemo_relay.tools.call |
| Go | PascalCase | nemo_relay.ToolCall |
| Node.js | camelCase | toolCall |
Parity Checklist
- Core function with doc comment in
crates/core/src/api/ - Runtime callback/state, codec, JSON, or event/tool/LLM/scope types added in the relevant core module if needed
- FFI wrapper and generated header updated if the C ABI changes
- Python native binding, wrapper, docstring, and stubs updated if exposed
- Go wrapper and shorthand package updated if the experimental Go surface exposes the capability
- Node.js native binding and wrapper updated if exposed
- Typed wrapper or adaptive/plugin helper surfaces updated when applicable
- Meaningful tests added in every affected language surface
- SPDX license header on any new files
- Relevant pages under
docs/reference/updated README.md,docs/getting-started/, or binding-level READMEs updated if behavior differs by language- Relevant getting-started, README, or example docs updated if usage changed
Decision Points
Lock these before implementing:
- Which bindings actually expose the new surface?
- Is the change part of the plain JSON API, typed wrappers, adaptive/plugin helpers, or observability helpers?
- Does the new API need manual lifecycle and managed execute variants, or only one of them?
- Does the new behavior change event fields, metadata, or scope expectations?
- If tool execution is affected, does every callback, continuation, managed
return, and manual end surface use the canonical
ToolExecutionResultcontract and preserve its opaque annotation? - Are docs/examples required because the intended usage changed?
Key References
- Architecture:
docs/about-nemo-relay/architecture.mdx - Reference index:
docs/reference/api/index.mdx - Getting started and binding status:
README.md,docs/getting-started/quick-start/index.mdx,docs/reference/support-matrix.mdx - Typed wrappers and codecs:
docs/integrate-into-frameworks/using-codecs.mdx,docs/integrate-into-frameworks/provider-codecs.mdx - Adaptive config/plugins:
docs/configure-plugins/about.mdx,docs/build-plugins/about.mdx,docs/configure-plugins/adaptive/configuration.mdx - Existing pattern: follow a surface already implemented across core, FFI, Python, Go, and Node.js rather than inventing a new shape
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.

