Repository navigation
Conversation
VoiceClaw and NemoClaw lacked one byte-pinned corpus for the agreed semantic boundary, so either implementation could drift while its local tests passed. Publish revision 1 unchanged and make the Rust workspace verify its digest, required outcomes, and absence of native protocol fields. Validated with the portable Python fixture suite, cargo fmt --check, workspace clippy with warnings denied, and cargo test --workspace.
Failure: v1 had no private semantic endpoint that could authenticate VoiceClaw, bind access to the deployed agent generation, or maintain the agreed readiness stream. Decision: add a loopback-only SDK server for nemoclaw-voice-r0/1 with fifteen-minute random bearer authority, digest-only server storage, bounded strict requests, native probe injection, one active stream, heartbeats, and terminal close reasons. VoiceClaw client admission remains outside NemoClaw. Validation: cargo fmt --all --check; cargo clippy --workspace --all-targets -- -D warnings; cargo test --workspace; focused shared-fixture and semantic-server tests (8 server tests, 2 fixture tests).
Failure: v1 configuration could not name a VoiceClaw integration or bind it to the one OpenClaw agent without placing external implementation details outside the desired-state model. Decision: add an optional strict integration object containing only name, voiceclaw kind, and agentRef; require the bounded R0 one-agent ownership shape; and publish a hand-authored example plus generated schema/reference output. Runtime onboarding remains a dependent slice. Validation: focused config_input and config_schema tests; nemoclaw-build schema tests and freshness check; cargo fmt --all --check; cargo clippy --workspace --all-targets -- -D warnings; cargo test --workspace.
Failure: v1 could declare and serve the agreed VoiceClaw profile but could not invoke the trusted VoiceClaw bootstrap, deliver scoped access, or retain the semantic stream for the independently owned gateway lifecycle. Decision: add the exact prepare/connect ABI, owner-only descriptor delivery, post-prepare target revalidation, opaque generation binding, real agent readiness probes, and disconnected/not-managed reporting while preserving the applied agent on every integration failure. Validation: cargo fmt --all -- --check; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo test --workspace --all-features; focused R0 onboarding and semantic-server tests.
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
Failure: VoiceClaw correctly rejected NemoClaw's temporary result directory on a Brev host whose umask produced mode 0775. Decision: Normalize each Unix handoff exchange directory to owner-only mode 0700 before launching the trusted bootstrap. Validation: cargo test -p nemoclaw-sdk voice::onboarding::tests::exchange_directory_is_owner_only -- --exact; cargo fmt --all -- --check
Failure: The pinned VoiceClaw artifact rejects credential descriptor 0 because the agreed handoff requires a separate inherited descriptor at or above fd 3. Decision: Map the owner-only credential file to child fd 3 with a safe Unix command extension and leave stdin disconnected. Validation: cargo test -p nemoclaw-sdk --test voiceclaw_r0_onboarding; cargo fmt --all -- --check
|
CI disposition for |
The revision 1 server proved only connection readiness, so an independent VoiceClaw client could not demonstrate sandboxed-agent reachability. Add the fixed authenticated one-shot probe, reserve it before native dispatch, revalidate the bound target, and normalize bounded results without exposing native state. Validated with cargo fmt --all -- --check, cargo clippy --offline --workspace --all-targets --all-features -- -D warnings, and cargo test --offline --workspace.
|
@jyaunches, this needs an architecture revision before we merge it. The successful fixed-question exchange is useful experimental evidence, but the implementation couples the VoiceClaw connection to the lifetime of In The required behavior is: apply establishes the deployment, verifies readiness, and returns. A separate client must then be able to connect through VoiceClaw to the already-running agent without another NemoClaw command. 1. Give every running component an explicit ownerPlease revise the design around these responsibilities:
VoiceClaw supplying its installation/startup implementation is compatible with NemoClaw managing a declared VoiceClaw service. We need to specify that service's creation, readiness, observation, restart, and deletion behavior instead of starting processes and reporting their lifecycle as For the intended integrated deployment, use a pinned VoiceClaw artifact and a supervisor-owned service outside the agent sandbox. Configuration acquisition can be a separate explicit setup operation; ordinary reconciliation must not depend on an interactive onboarding session. Preserve secrets through protected storage and references rather than putting values into YAML, arguments, logs, exported configuration, or provider state. The proposed steady-state path is:
2. Reuse existing agent interfaces; identify the actual access gapThe existing Fabric/OpenClaw adapter already owns a persistent native gateway. OpenShell service forwarding already gives us an example of access whose lifetime is independent of OpenClaw exposes native WebSocket operations and an OpenResponses-compatible HTTP API. Please evaluate those existing interfaces against the pinned image and VoiceClaw's actual needs: ordinary text submission, streamed output, session continuity, and interruption. Use an existing protocol and client implementation where they meet those needs. Do not introduce a VoiceClaw-specific agent protocol merely to implement the demonstration. There is a real authorization question to resolve. The requirement that VoiceClaw receives neither OpenClaw nor OpenShell credentials must remain explicit. Upstream OpenClaw documents shared-secret HTTP access as full operator access, so handing VoiceClaw the dashboard token is not a substitute for agent-scoped authorization: Those upstream interfaces are candidates, not evidence that the pinned composition already meets our requirements. Likewise, Fabric's runtime/adapter APIs do not by themselves establish a remotely attachable, appropriately authorized service. First determine whether existing gateway authorization and OpenShell access can enforce the required restriction. If they cannot, describe the exact missing capability. Prefer adding that capability to an appropriate existing runtime component. If a separate access component is necessary, make it a declared, supervised service with a lifecycle independent of the CLI. Its responsibilities should be limited to authenticating VoiceClaw, enforcing the permitted agent binding, retaining native credentials, and adapting the selected existing request/streaming interface. That component must not own voice-specific admission windows, speech formatting, or a hard-coded question/answer policy. Simply moving the current R0 server into a daemon would not resolve the unnecessary protocol and policy surface. 3. Define lifecycle behavior in user termsPlease make these behaviors explicit in the revised design and tests:
These service and access capabilities are proposed implementation work, not claims that current 4. Put the demonstration in the integration testThe fixed question, the regular expression accepting only The first acceptance test should be structured so that the architecture in this PR cannot pass it:
Use focused deterministic tests for authorization and failure behavior, and an explicitly configured live test for the real composed path. Do not replace one narrow demo with a second large mock implementation of the product. 5. Rework the PR descriptions and dependencies around the revised resultPlease keep #11822 and #11814 unmerged while the ownership and access design is revised. #11814's current fixtures describe the temporary R0 protocol; they should follow the selected interface rather than make that protocol a permanent requirement. A checksum proves that the fixture file has not changed, not that the deployed implementation conforms to it. Any retained shared corpus should exercise the actual implementation at its boundary. The current descriptions obscure the consequential choices behind terms such as “semantic boundary” and “complete lifecycle.” The revision should lead with the user-visible behavior, identify which process serves requests after apply exits, state what is reused and what must be added, and distinguish experimental evidence from supported behavior. Preserve the old R0 results as historical evidence rather than presenting them as qualification of a revised architecture. #11833 has also been closed as superseded by Docker Bake consolidation in 6141179. Rebase on current Please start with a concise architecture revision answering who owns the VoiceClaw service, where scoped agent access is enforced, which existing interface is used, and how both survive apply exiting. Then implement the smallest missing capability against the acceptance test above. |
|
@jyaunches The application integration definition/reference mechanism is now on Definitions and attachments are separate. A definition in spec:
integrations:
search:
kind: webSearch
provider: brave
credential:
env: BRAVE_API_KEY
sandboxes:
- name: assistant
agents:
- name: researcher
harness: openclaw
integrationRefs: [search]
- name: writer
harness: openclaw
integrationRefs: [search]For one consumer, the same definition can be inline and attaches directly to that agent: spec:
sandboxes:
- name: assistant
agents:
- name: researcher
harness: openclaw
integrations:
search:
kind: webSearch
provider: brave
credential:
env: BRAVE_API_KEYThese are fragments; For the VoiceClaw revision:
The current Brave implementation still supports one attached search definition per sandbox, which multiple agents may reference; distinct definitions are not silently deduplicated by equal settings. That is a Brave runtime constraint, not a global one-integration limit. The schema currently supports one sandbox; this change does not claim multi-sandbox support. Validation for this mechanism: workspace tests, formatting, Clippy, generated schema/reference and documentation checks; the SDK/CLI/provider lifecycle fixture exercises all three forms against a local OpenShell fixture. This qualifies reference resolution and retained-state behavior, not a live VoiceClaw service or live Brave credentials. |
Merge v1 and preserve its schema, explicit integration selection, named sandbox targets, OpenTofu readiness, and simplified guides. Keep the operator-managed R0 protocol distinct from managed VoiceClaw service installation. Independent review reproduced expiry during target checks and dispatch to the sandbox name instead of the native agent. Recheck expiry before admission and dispatch, select the validated native agent, and reject unsupported credential-descriptor platforms before bootstrap launch. Validated failing-then-passing expiry and native-agent regressions, 609 workspace tests (94 opt-in ignored), fmt, workspace clippy, generated schema, and Fern docs. Independent code and documentation review found no remaining issues; native R0 qualification is not claimed for this port.
cv
left a comment
There was a problem hiding this comment.
Independent code and documentation review completed on the v1 port. Fixed two reproduced review findings: grant expiry during target revalidation and native dispatch using a sandbox name instead of the configured agent identity. The port also preserves explicit integration selection, named sandbox lookup, persisted deployment recovery, and current OpenTofu readiness. Unix credential-descriptor support is enforced before bootstrap launch. Local validation: 609 workspace tests passed (94 opt-in ignored), fmt, workspace clippy, schema, and Fern docs passed. No remaining code findings. This review covers the implementation and fixtures; historical native VoiceClaw evidence has not been repeated on this head. Hosted CI is running and draft status is unchanged.
Windows CI rejected the result metadata binding as unused because only the Unix device/inode identity check consumes it. Read that metadata in the same Unix-only block, retaining the existing identity verification. Validation: observed Windows clippy -D warnings failure; four focused bootstrap tests, cargo fmt --check, and workspace all-target clippy pass. The Windows job will validate the conditional compilation on the new head.
|
v1 documentation preview: https://nvidia-preview-nemoclaw-v1-pr-11822.docs.buildwithfern.com/nemoclaw |
cv
left a comment
There was a problem hiding this comment.
Reviewed the follow-up portability fix: the metadata binding now shares the Unix-only scope of the device/inode comparison, removing the Windows clippy failure while preserving the Unix identity check. Four onboarding tests, formatting, and all-target workspace clippy pass. Prior full review remains applicable; hosted CI is rerunning on this head. Draft status is unchanged.
The latest v1 merges refactored hosted lifecycle assertions and added Hermes coverage. Preserve that coverage and expect empty integration results for scenarios without VoiceClaw; compiling the unadapted assertions failed on the five missing fields. Validation: hosted parity tests pass (3 passed, 2 opt-in live tests ignored), cargo fmt --check, cargo clippy --workspace --all-targets -- -D warnings, cargo test --workspace -- --test-threads=2, generated schema check, and Fern documentation check pass. Independent integration review found no issues.
Integrate v1 signal registration before command dispatch so immediate interruption cannot bypass CLI cancellation. The shared fix closes the observed onboarding SIGTERM race. Validation: cargo fmt --check, cargo clippy --workspace --all-targets -- -D warnings, and cargo test --workspace -- --test-threads=2 pass on the integrated tree. Schema and Fern checks passed before this CLI-only merge. Independent review found no issues.
cv
left a comment
There was a problem hiding this comment.
Reviewed the integration with current v1, including the hosted lifecycle test conflict resolution and the shared CLI signal-registration fix. The Hermes/OpenClaw lifecycle assertions remain intact; five result assertions now explicitly expect no VoiceClaw integrations. Tavily bindings, readiness, and non-interactive CLI behavior are preserved. Independent review found no remaining issue.
Validation on this head: formatting, workspace/all-target clippy, and 625 workspace tests passed (95 explicitly opt-in tests ignored). Schema and documentation checks passed before the CLI-only base update. Hosted checks are running. Existing draft status and live VoiceClaw qualification limits remain unchanged.
Integrate the shared test-only synchronization fix after Linux ARM CI exposed cancellation before the fixture finished reading request headers. Production, image, configuration, and VoiceClaw behavior are unchanged. Validation: cargo fmt --check and the focused snapshot regression pass after integration. The prior integrated tree passed workspace clippy and all 625 workspace tests; the six-line base fixture fix separately passed the full suite and 100 repeated regressions. Independent review confirms assertions are preserved.
cv
left a comment
There was a problem hiding this comment.
Reviewed the final merge of the shared six-line snapshot fixture synchronization fix. Production, VoiceClaw behavior, and documented qualification limits remain unchanged. Formatting and the focused cancellation regression pass after integration; prior full workspace clippy and all 625 tests passed, along with schema/docs checks. Independent review confirms no assertions were weakened. No remaining review findings; hosted checks are running.
Current v1 port
The current head ports the operator-managed R0/2 handoff to v1's explicit integration selection and native identity contracts. The integration kind is
voiceclawR0, separate from the managedvoiceclawinstaller in #12160. Apply selects one attached OpenClaw agent and resolves its sandbox by name; Unix bootstrap credentials use descriptor 3. Windows rejects this bootstrap before launch.Independent review found and fixed credential expiry during target revalidation and dispatch using a sandbox name instead of its native agent name. Both defects have failing-then-passing regression tests. Local validation passes: 609 workspace tests (94 opt-in ignored), formatting, workspace clippy, generated schema, and Fern documentation checks. Hosted CI is running. Draft status is unchanged.
The Brev results below are retained historical evidence from before this port; the current head has not repeated native VoiceClaw qualification. See the experimental CLI contract for prerequisites, retained-agent recovery, and unmanaged process lifetime.
Outcome
NemoClaw now implements the complete
nemoclaw-voice-r0/2boundary: after VoiceClaw establishes the scoped connection, an independent client can submit the one allowed question through VoiceClaw and trigger one native dispatch to the already-running sandboxed OpenClaw agent. Only a validated answer containing one ASCII4, surrounded at most by Unicode whitespace or punctuation, is returned.Brev R0 validation
Focused ARM64 Brev validation completed the R0 path. The independent client reached the sandboxed OpenClaw agent through VoiceClaw and NemoClaw. OpenRouter returned HTTP 200, and the client received exactly
4.The run also verified duplicate-probe rejection, authenticated close, completed cleanup, and agent preservation. See the full redacted process, configuration, and evidence.
The pinned VoiceClaw runner has a cleanup-observation race. Post-run inspection confirmed zero run directories and processes, so this does not indicate a NemoClaw response or product-cleanup defect.
Reason
Revision 1 proved connection readiness but did not prove that the agent inside the sandbox was reachable. Revision 2 adds the smallest end-to-end semantic operation needed for R0 while keeping arbitrary prompts, multiple turns, correlation, receipts, replay, and speech or detail results deferred to R1a.
Related issues
Part of #11746
Refs #11747, #11749, #11750, #11751, #11752, #11753
Changes
/r0/probeendpoints with short-lived scoped access.Verification
python3 -m unittest discover -s . -p 'test*fixture.py' -vfrom the revision 2 fixture directory — passed 3 tests covering all 17 connection cases and all 17 probe cases.cargo test --offline -p nemoclaw-sdk --test voiceclaw_r0_server --test voiceclaw_r0_onboarding --test voiceclaw_r0_fixture— passed 22 tests: 15 semantic-server, 4 onboarding, and 3 fixture tests.cargo fmt --all -- --check— passed with Rust 1.98.1.cargo clippy --offline --workspace --all-targets --all-features -- -D warnings— passed with pinned protoc 36.1.cargo test --offline --workspace— passed; opt-in live and verified-bundle tests remained ignored by their declared contracts.Review notes
The maintainer accepted the revision 2 lifecycle contract and shared fixture bundle in #11747. PR #11814 owns those fixtures, and #11833 owns the separate Python 3.10 Fabric prerequisite. Until #11814 merges, its fixture commit also appears in this diff because both PRs target
v1. This draft awaits independent review.Signed-off-by: Julie Yaunches jyaunches@nvidia.com