
Skill
nemo-relay-instrument-context-isolation
isolate NeMo Relay execution contexts
Description
Use this skill when concurrent requests, async tasks, threads, workers, goroutines, or agents need independent NeMo Relay scope stacks and correct ancestry propagation.
SKILL.md
Use Context Isolation
Use this skill when an application runs concurrent requests, worker pools, async tasks, goroutines, or multiple agents in the same process. Treat scope-stack ownership as part of the request boundary.
Core Rule
Each independent request, agent, or workflow needs its own scope stack. Do not share one mutable stack across unrelated concurrent work unless you want shared ancestry and shared scope-local middleware.
Embedded Scope Model
- A root scope is always present, and pushed scopes form a parent-child tree beneath it.
- Scope hierarchy determines event parentage, lifetime boundaries, and visibility for scope-local middleware and subscribers.
- Standard scope types include
Agent,Function,Tool,Llm,Retriever,Embedder,Reranker,Guardrail,Evaluator,Custom, andUnknown. - Scope start and end events can carry semantic
inputandoutputpayloads when the scope represents a request, task, or meaningful result boundary. - Scope-local registrations disappear when the owning scope closes; use them for behavior that should not outlive a request or agent run.
- Mark events are useful for retries, checkpoints, interrupts, and important state transitions that are not full spans.
Per-Language Defaults
- Python: rely on task-local behavior via
get_scope_stack()andcontextvars, or explicitly propagate when work leaves the current execution context - Rust core: use runtime helpers such as
create_scope_stack(),current_scope_stack(), andset_thread_scope_stack(...)when an integration needs explicit stack ownership - Go: use
NewScopeStack()andScopeStack.Run(...)for goroutine-safe usage - Node.js: create and set a scope stack explicitly for the current execution
path with
createScopeStack()andsetThreadScopeStack(...)
Common Failures
- Events from different requests appear under one root UUID
- Scope-local middleware leaks across requests
- Worker-thread work runs without the expected active scope
- Integrations activate NeMo Relay without an explicitly initialized stack
- Relying on a thread-local stack after crossing async tasks, goroutines, or JS worker boundaries
Related Skills
nemo-relay-instrument-callsnemo-relay-plugin-observabilitynemo-relay-debug-runtime-integration
More skills from the NeMo-Relay repository
View all 10 skillsnemo-relay-debug-runtime-integration
debug NeMo Relay runtime integrations
Jul 17DebuggingEngineeringMiddlewareNVIDIAnemo-relay-get-started
get started with NeMo Relay
Jul 17CLINVIDIAOnboardingPythonnemo-relay-install
install NeMo Relay for various environments
Jul 17CLIDeploymentNode.jsNVIDIA +2nemo-relay-instrument-calls
instrument LLM calls with NeMo Relay
Jul 17AutomationLLMMiddlewareNVIDIAnemo-relay-instrument-typed-wrappers
instrument NeMo Relay typed wrappers
Jul 17API DevelopmentJSONMiddlewareNVIDIAnemo-relay-migrate-from-flow
migrate applications from NeMo Flow to Relay
Jul 17GoMigrationNode.jsNVIDIA +2
More from NVIDIA
View publishernemoclaw-user-guide
retrieve NemoClaw documentation and configuration
NemoClaw
Jul 20DocumentationMCPSearchmcore-build-and-dependency
manage Megatron-LM development environments
Megatron-LM
Jul 14ContainersDeploymentPythonmcore-bump-base-image
update NVIDIA PyTorch base images
Megatron-LM
Jul 14CI/CDDeploymentmcore-cicd
manage CI/CD pipelines for Megatron-LM
Megatron-LM
Jul 14CI/CDDeploymentGitHubmcore-create-issue
investigate CI failures and create issues
Megatron-LM
Jul 14DebuggingGitHubTriagemcore-linting-and-formatting
lint and format Megatron-LM code
Megatron-LM
Jul 14Best PracticesCode Analysis