agentleFS
NVIDIAKnown publisherNVIDIA/IsaacCapture/src/plugins/sharpa_avatar/AGENTS.md

IsaacCapture / sharpa_avatar

AGENTS.md438 starsChanged 31 days agoApache-2.0View on GitHub

CRITICAL: Before editing this tree, read this file and the repo root AGENTS.md. - Keep the Avatar SDK external. install_avatar_sdk.sh installs the official package under /opt/avatar-sdk; the build consumes the selected SDK root in place (-DAVATAR_SDK_ROOT > $AVATAR_SDK_ROOT > /opt/avatar-sdk). Do not copy, patch, or package SDK files. - Install the pinned production avatar-sdk package from the signed production channel, and never substitute -dev or -beta. Do not parse or duplicate production_version: CMake calls install_avatar_sdk.sh --check, which holds the default…

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this AGENTS.md into the rules it gives an agent

13 rules. About 0 are common, 2 are distinctive, and 11 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 11

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    CRITICAL: Before editing this tree, read this file and the repo root AGENTS.md.

    line 8
  2. Very specific:

    After rebasing, verify the root option is still gated through src/plugins/CMakeLists.txt.

    line 25
  3. Very specific:

    Keep installer responsibilities separate: SDK/APT in install_avatar_sdk.sh, host device permissions in install_udev_rules.sh, and plugin …

    line 30
  4. Very specific:

    Do not mutate loader environment variables or SDK configuration at runtime.

    line 35
  5. Very specific:

    Keep shared enum iteration tables in one scope.

    line 41
  6. Very specific:

    Use plugin_utils::WristPoseSource for world-space wrist placement.

    line 43
  7. Very specific:

    When that query is invalid (no headset optical pose and no controller), still inject HUMAN at identity with VALID-only flags.

    line 45
  8. Very specific:

    Keep initialization non-blocking.

    line 50
  9. Very specific:

    Treat a successful list_device_info() result as the handle-lifecycle authority: retain handles while their row exists (including …

    line 67
  10. Very specific:

    Keep transport presence, physical-glove ingress/faults, and HUMAN/RAW/ROBOT output freshness/errors as separate health layers.

    line 71
  11. Very specific:

    Keep the static HUMAN-to-OpenXR index table synchronized with the pinned production SDK's landmark order.

    line 76
  12. Distinctive:

    When reconciling the maintained feature branch, use it as the baseline and retain local divergence only for an explicit API or correctness …

    line 81
  13. Very specific:

    Keep this plugin tree C++-only (core/ + app/).

    line 83

≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md 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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
AGENTS.md
<!-- SPDX-FileCopyrightText: Copyright (c) 2025-2026 Avatar SDK contributors. All rights reserved. SPDX-License-Identifier: Apache-2.0 -->

Sharpa Avatar plugin — agent notes

CRITICAL: Before editing this tree, read this file and the repo root AGENTS.md.

  • Keep the Avatar SDK external. install_avatar_sdk.sh installs the official package under /opt/avatar-sdk; the build consumes the selected SDK root in place (-DAVATAR_SDK_ROOT > $AVATAR_SDK_ROOT > /opt/avatar-sdk). Do not copy, patch, or package SDK files.
  • Install the pinned production avatar-sdk package from the signed production channel, and never substitute -dev or -beta. Do not parse or duplicate production_version: CMake calls install_avatar_sdk.sh --check, which holds the default root to the full pin (layout, BUILD_TYPE=Production, dpkg package version) and layout-checks a custom root, where a non-production build only warns. Do not pin VERSION= from share/Version; the dpkg package version is authoritative.
  • Linux only. BUILD_PLUGIN_SHARPA_AVATAR=ON with no usable SDK under the selected root skips this plugin; it must not FATAL_ERROR the rest of the tree. The SDK check runs only after that layout is present.
  • After rebasing, verify the root option is still gated through src/plugins/CMakeLists.txt; defining the option alone does not create the avatar_hand_plugin target.
  • APT signing keys: require the pinned fingerprints to be present. Do not demand exact set equality (extra fingerprints from key rotation are allowed).
  • Keep installer responsibilities separate: SDK/APT in install_avatar_sdk.sh, host device permissions in install_udev_rules.sh, and plugin build/install through the repository's top-level CMake workflow.
  • Installers must not delete files derived from a configured install prefix.
  • Do not mutate loader environment variables or SDK configuration at runtime. Runtime paths come from the selected SDK root and its sdk_config.json.
  • Carry Avatar SDK enums such as DeviceSide and DeviceDataCategory through plugin internals; convert only at an existing external API boundary.
  • Adapt this plugin to shared APIs; do not refactor other plugins or shared modules solely to change this plugin's internal representation.
  • Keep shared enum iteration tables in one scope; a public kDeviceSides or category table must not have a same-named private duplicate.
  • Use plugin_utils::WristPoseSource for world-space wrist placement. Do not copy the Manus/XDev/controller fallback implementation into this plugin. When that query is invalid (no headset optical pose and no controller), still inject HUMAN at identity with VALID-only flags; do not skip HandInjector::push. HandsSource/live_view otherwise stay empty.
  • OpenXR setup is required for publication; initialization errors must abort construction instead of leaving an Avatar-only idle plugin.
  • Keep initialization non-blocking; update() owns retries for absent gloves.
  • In manual haptic freshness tests that suspend the Python producer, record its process group, resume it before cleanup, and terminate the producer/plugin group together; do not rely on repeated terminal interrupts for cleanup.
  • In pinned SDK 1.7.3, get_device() returns an initialized handle; do not call init() again. Use its lightweight ingress callback for liveness and keep SDK work off the callback thread. Scope callback signals to one device generation; callbacks must not retain a GloveState address across reset or destruction.
  • USB transport health combines physical enumeration with AvatarSDK::get_usb_connection_state(): the production SDK can retain CONNECTED while its serial listener is reconnecting, so neither signal is sufficient alone. Before stopping a glove handle, best-effort clear manual haptics. Isolate dynamic output setup failures to that side and retry without terminating the plugin.
  • Bound pending haptic commands by source observation freshness and discard them while a glove is unready. Delivery retries may retain only commands the source keeps refreshing; a cached command must never replay after reconnection.
  • Treat a successful list_device_info() result as the handle-lifecycle authority: retain handles while their row exists (including online=false), and release them only when a successful snapshot drops the row. A failed refresh makes inventory health unknown and must not reconcile cached rows.
  • Keep transport presence, physical-glove ingress/faults, and HUMAN/RAW/ROBOT output freshness/errors as separate health layers. One advancing dataset must not keep another dataset healthy.
  • Validate every emitted health state/reason pair through the Python status reducer; producer-only tests do not protect the cross-language monitoring contract.
  • Keep the static HUMAN-to-OpenXR index table synchronized with the pinned production SDK's landmark order. Do not read joint names from sdk_config.json at runtime or fill unsupported OpenXR slots with neighbouring poses. Refresh that table and the example's RAW/ROBOT name snapshots together with the package pin.
  • When reconciling the maintained feature branch, use it as the baseline and retain local divergence only for an explicit API or correctness requirement.
  • Keep this plugin tree C++-only (core/ + app/). The TeleopSession sample lives at examples/sharpa_avatar/ (live_view.py) and runs as python -m isaaccapture_examples.sharpa_avatar. Do not put Python samples under src/plugins/sharpa_avatar/, and do not add SDK-only diagnostic printers that bypass Isaac Capture.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.