maintain-dynamic-plugins
Skill238 starsChanged 2 months agoApache-2.0View on GitHub
Change NeMo Relay dynamic plugin loaders, manifests, native ABI, gRPC worker protocol, or Python worker SDK. Do not use for ordinary built-in plugin configuration.
In this repository30 other files it gives its agents.
- AGENTS.mdAGENTS.md
- 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-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
6 rules. About 0 are common, 1 is distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 9
Use this skill for plugin.kind = "rust_dynamic", plugin.kind = "worker", nemo-relay-plugin, nemo-relay-worker, nemo-relay-worker-proto, …
- Very specific: line 15
Keep the stable boundary explicit: native plugins cross a C ABI.
- Distinctive: line 17
Do not pass Rust runtime types, trait objects, futures, or allocator-owned strings across the native dynamic-library boundary.
- Very specific: line 24
Keep relay-plugin.toml dynamic records separate from generic runtime components.
- Very specific: line 30
Treat compat.relay as the plugin author's compatibility assertion, not proof that an artifact was rebuilt.
- Very specific: line 38
Do not add tests under src.
≈ “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
Maintain Dynamic Plugins
Use this skill for plugin.kind = "rust_dynamic", plugin.kind = "worker",
nemo-relay-plugin, nemo-relay-worker, nemo-relay-worker-proto,
nemo-relay-types, and the Python nemo-relay-plugin package.
Rules
- Keep the stable boundary explicit: native plugins cross a C ABI; worker
plugins cross
nvidia.nemo.relay.worker.v1(contract1.0.0). - Do not pass Rust runtime types, trait objects, futures, or allocator-owned strings across the native dynamic-library boundary.
- Typed native middleware futures run on the SDK-owned Tokio executor. Keep subscribers synchronous and preserve raw synchronous ABI registrations.
- Define closed worker transport structures in protobuf when generated clients
must enforce their fields. Keep open application payloads lossless by using
JsonValueorJsonObjectrather thangoogle.protobuf.Value. - Keep
relay-plugin.tomldynamic records separate from generic runtime components. Enabled records can create internal component specs. Disabled records remain available for inspection but do not load. - Require migrated worker plugins to regenerate their bindings, rebuild, and
declare a
compat.relayrange covering the new contract. Recommend>=1.0.0,<2.0for the current worker SDK. - Treat
compat.relayas the plugin author's compatibility assertion, not proof that an artifact was rebuilt. Do not add a legacy raw-result adapter. - The worker protocol is
nvidia.nemo.relay.worker.v1, contract version1.0.0. The native host uses ABI v8 and accepts v7 callback layouts. Guard append-only extensions withstruct_size. Keep existing fields at their original offsets. A breaking native JSON contract needs a newnative_apivalue. A breaking C layout needs a new ABI version. A breaking worker contract needs a new protocol identity. - Do not add tests under
src; Rust tests belong in cratetests/trees and Python SDK tests belong underpython/tests. - Native and worker plugins are trusted extensions. Document that native plugins are in-process and unsandboxed; worker plugins provide process isolation but not a security sandbox.
Checklist
- Manifest validation covers kind, compatibility, load contract, integrity, capability mismatch, and disabled-plugin behavior.
- Native loader keeps libraries alive until registered callbacks are cleared and deregisters plugin kinds before unload.
- Worker activation covers process launch, token auth, handshake, validation, declarative registration, proxy rollback, cancellation, and shutdown.
- Rust and Python SDKs expose every supported registration surface.
- Runtime helpers cover marks, scopes, continuations, and isolated scope stacks.
plugins list,plugins inspect, andplugins validatereport lifecycle and compatibility status without leaking secret config.- Top-level
doctorreports resolved dynamic plugin and host configuration status. - When detailed dynamic plugin guides exist, they keep Rust native, Python
worker, and
nvidia.nemo.relay.worker.v1protocol details on separate pages. justfile, Codecov, and CI package/test workflows include new plugin crates and packages.
Validation
Choose checks by the changed layer:
- Manifest or shared types: test the owning Rust crate.
- Native loader or ABI: prepare plugin fixtures and run the focused native plugin integration test.
- Worker protocol or host: test the worker crates and regenerate or test the Python worker SDK only when its protocol surface changes.
- Shared runtime behavior: run the Rust suite and only binding suites whose observable plugin behavior changes.
- Documentation or packaging: run their targeted checks only when changed.
Canonical surface suites prepare plugin fixtures. Before a raw focused native
or worker integration test, run just build-test-plugin-fixtures; never compile
fixtures inside an individual test case.
References
crates/plugin-host/src/dynamic/crates/plugincrates/workercrates/worker-protocrates/typespython/pluginexamples/rust-native-plugindocs/build-pluginsexamples/python-grpc-worker-plugin
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.

