NVIDIA / NVIDIA/OpenShell

feat: governed realtime media membrane

Open
#2,166 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

question state:stale
Dominant language
Rust
Stars
8.7k
Forks
1.3k
Avg merge
2d 11h
Merged PRs (30d)
253

Description

Problem Statement

Related: https://github.com/NVIDIA/NemoClaw/issues/6207.
VoiceClaw referencces

P0: OpenShell needs a governed realtime media path for audio streams.
OpenShell 0.0.72 can relay WebSocket binary bytes, but only the WebSocket upgrade and text messages have policy semantics today. WebRTC/TURN-style media is also outside the current TCP CONNECT proxy model.

VoiceClaw needs realtime audio without turning the sandbox boundary into an opaque raw socket escape. Media must remain deny-by-default, auditable, rate-limited, and bound to declared destinations and sessions.

Who will use this
  • VoiceClaw realtime voice assistant.
  • OpenClaw voice-call and Talk sessions.
  • NemoClaw sandboxes running voice-enabled OpenClaw.
  • NVIDIA speech integrations such as Parakeet ASR, Magpie TTS, and PersonaPlex once its serving wrapper is confirmed.
  • Operators and security teams who need media egress governed by OpenShell policy instead of hidden behind host bridges.
Concrete protocol evidence
  • Parakeet is served through NVIDIA ASR NIM / Riva Speech Recognition:
    • HTTP REST for offline transcription.
    • gRPC over HTTP/2 for RivaSpeechRecognition/Recognize and bidirectional StreamingRecognize.
    • Realtime WebSocket for /v1/realtime?intent=transcription, using JSON events with base64 audio.
  • Magpie is served through NVIDIA TTS NIM / Riva Speech Synthesis:
    • HTTP REST for /v1/audio/synthesize and /v1/audio/synthesize_online.
    • gRPC over HTTP/2 for RivaSpeechSynthesis/Synthesize and server-streaming SynthesizeOnline.
    • Realtime WebSocket for /v1/realtime?intent=synthesize, using JSON events.
  • PersonaPlex is publicly described as a full-duplex speech-to-speech model/checkpoint, not a documented Speech NIM API surface:
    • Treat its network protocol as unconfirmed until the serving wrapper is known.
    • If wrapped as Riva/NIM, expect gRPC or realtime WebSocket.
    • If exposed directly for browser voice, expect WebSocket or WebRTC.

Proposed Design

Add a governed media protocol surface to OpenShell.

This could be a new protocol: media, or staged support through:

  1. WEBSOCKET_BINARY for realtime audio over WebSocket.
  2. Realtime WebSocket JSON media policy.
  3. protocol: grpc for streaming gRPC.
  4. Optional TURN/WebRTC support later, only when there is a concrete sandbox use case.

The media policy should include:

  • transport allowlist
  • codec allowlist
  • destination and session binding
  • direction controls
  • max frame/message size
  • bitrate limits
  • session duration limits
  • concurrency limits
  • OCSF media session logging

Alternatives Considered

  • Keep using raw L4 passthrough. This moves bytes, but it cannot express media policy, session caps, gRPC method policy, or useful audit semantics.
  • Keep VoiceClaw audio on the host forever. This avoids sandbox risk but forces every voice/media integration to rebuild a host-side shadow plane.
  • Add raw UDP/RTP/WebRTC first. The current VoiceClaw POC does not require that inside the sandbox. Start with WebSocket binary and gRPC streaming, then add TURN/WebRTC only with a concrete requirement.

Agent Investigation

  • Reviewed NemoClaw #6207, which frames this as the P0 OpenShell ask: governed realtime media without raw socket escape.
  • Inspected local ../openclaw Voice Call code. Carrier and provider paths use WebSocket media streams; some providers use JSON events with base64 audio and some use binary audio frames.
  • Checked OpenShell docs/code. protocol: websocket governs upgrade and client text frames; binary WebSocket frames are relayed but not policy-governed. protocol: grpc is not currently listed as an L7 protocol.
  • Checked NVIDIA Speech NIM docs for Parakeet and Magpie protocols.

Sources:

Acceptance Criteria

  • Realtime audio can be allowed without granting arbitrary raw socket egress.
  • WebSocket binary media is denied unless explicitly allowed.
  • Realtime WebSocket JSON media can be governed by event type and size limits.
  • gRPC streaming can be restricted by host, service, method, metadata, size, rate, duration, and concurrency.
  • Media sessions have frame/message size, bitrate, duration, and concurrency caps.
  • OCSF logs record allow, deny, and limit decisions without logging audio payloads, base64 media, or secrets.

Non-Goals

  • Unrestricted raw socket escape.
  • Generic UDP/RTP/WebRTC support in the first implementation.
  • Audio transcription or semantic inspection inside OpenShell.
  • OpenClaw provider implementation.
  • NemoClaw plugin packaging work.

Checklist

  • I've reviewed existing issues and the architecture docs
  • This is a design proposal, not a "please build this" request

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with OpenShell's existing protocol: websocket handling and the architecture documentation referenced in the issue. Compare the current policy behavior with the proposed staged media surfaces and acceptance criteria. Done means producing an agreed design that governs binary and JSON media, streaming gRPC, session limits, and OCSF decisions without raw socket escape.

Written by the indexing model from the issue text.

Assessment

Tech stack
grpc, rust
Domain
backend-api-design, networking, security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.