·
Last changedVersion:
This version passed the hardening gate. Hardening updated the skill content and independently checked the resulting changes. Classified findings before hardening: 6. Classified findings closed: 0. Classified findings remaining: 6. Unclassified scanner findings remaining: 0. Review findings closed: 17. Review findings remaining: 0.
4
2
4
2
Expand | File | Group | Subtype | Severity | Status |
|---|---|---|---|---|---|
references/ngc-api-key-registry-login.md | Privilege Escalation & Host / Cloud Compromise | Privilege escalation | Medium | Open | |
references/ngc-api-key-registry-login.md | Supply Chain & Install-Time Trust | — | Medium | Open | |
BENCHMARK.md | Sensitive Data & Secret Exposure | Agent snooping | Medium | Open | |
references/ngc-api-key-registry-login.md | Excessive Agency & Rogue Autonomy | — | Medium | Open | |
references/ngc-api-key-registry-login.md | Malicious Code & Command Execution | — | Low | Open | |
references/ngc-api-key-registry-login.md | Supply Chain & Install-Time Trust | Install-time download and execute | Low | Open |
6 findings
Deploy the behavior-analytics service standalone with the user's chosen entrypoint, config, and calibration.
Follow the routing tables and step-by-step workflows below as guidance to walk through with the user. Before any compose file edit, any docker compose up or down, or any broker publish, show the user the exact command or diff and get the user's explicit confirmation first. Scope any teardown to the behavior-analytics compose file and service. Detailed reference material lives in references/.
The skill needs only docker, docker compose, and optionally nv-base. Every shell command it suggests goes through the confirmation step above.
Worked end-to-end examples are kept under evals/ (each *.json manifest
contains a runnable scenario). Replaying them is optional. Run a Tier-3 evaluation only when the user explicitly asks for it, from a pinned and reviewed checkout, after reviewing the manifest contents, and inside an isolated environment. Run nv-base only if it was installed from a trusted, verified source the operator controls; otherwise skip the eval.
A minimal standalone bring-up looks like the block below. Before running it, confirm the repo path is set and points at the pinned checkout, stop if the directory change fails, and confirm that services/analytics/behavior-analytics/compose.yml exists under $VSS_APPS_DIR and that the path holds no spaces. Get the user's confirmation before starting the container.
Follow references/deploy-behavior-analytics-service.md for the full
workflow (entrypoint pick, config source, dynamic updates).
/docs or /health; redeploy via vss-deploy-profile or the matching vss-deploy-* skill.NGC_CLI_API_KEY. Solution: set the key with a hidden prompt as described in references/ngc-api-key-registry-login.md, then log in with printf '%s' "$NGC_CLI_API_KEY" | docker login --username '$oauthtoken' --password-stdin nvcr.io before retrying. Prefer a docker credential helper over plain text Docker config, and keep the key out of logs, output, and command arguments.docker compose -f services/analytics/behavior-analytics/compose.yml down once the user confirms. Ask the user before stopping any other container.Deploy just the vss-behavior-analytics container (the spatial-AI analytics pipeline from the upstream behavior-analytics repo), not as part of the full warehouse blueprint stack.
The full operational walkthrough — entrypoint table, config-source options, calibration types, dynamic-update wire contract, troubleshooting — is references/deploy-behavior-analytics-service.md. This SKILL.md only handles routing and prerequisites.
$VSS_APPS_DIR pointing at <repo>/deploy/docker/. Required by the service compose's volume binds. The checkout should be at a pinned release tag or commit of the repository named in the metadata github-url.$NGC_CLI_API_KEY set so docker can pull the image. See references/ngc-api-key-registry-login.md.docker --version and docker compose version.restart: always cycles the container. Status will show Restarting (N) in docker ps until a broker is reachable. With a broker, dynamic config / dynamic calibration over mdx-notification become available. Any broker used for dynamic updates must require authentication and encrypted connections, and must be reachable only from the local host or a private network, kept off public networks. When no broker is planned, report the restart loop to the user and offer to override restart: to on-failure or no instead of leaving the loop running.behavior-analytics/src/mdx/analytics/core/transform/calibration/schemas/calibration.schema.json, and check a custom config against the shape in references/configuration.md, before mounting. Mount both read only where possible.vss-behavior-analytics image to a specific release tag and content digest the operator has reviewed, and confirm the pulled digest matches the published value before starting. Use a fixed release rather than a floating or latest image.If any required prerequisite fails, surface the gap before going further.
Hand the user references/deploy-behavior-analytics-service.md and walk them through its steps in order:
The compose-file edits, YAML diffs, deploy + verify commands, and troubleshooting table all live in that reference — don't duplicate them here. Show each compose or YAML diff and each command to the user for approval before applying or running it.
Once the container is up and a broker is reachable, two runtime-update flows are available — neither requires redeploying.
Use these flows only on a broker that requires authentication, uses encrypted connections, and restricts write access on the mdx-notification topic to approved producers. Get the operator's explicit confirmation before publishing any update, and back up the current config or calibration first so it can be rolled back.
Publish an upsert (per-key patch) or upsert-all (full snapshot) message to the mdx-notification topic with Kafka key behavior-analytics-config and headers:
event.type: upsert | upsert-all | request-config | ackreference-id: video-analytics-api-<uuid> (web-api originated), behavior-analytics-<uuid> (bootstrap reply), or the source-type literal (kafka / redis / mqtt) for direct-publisher upserts.Body: {"status": ..., "config": <patch>, "error": ...}.
The listener validates each message at the envelope layer (rejects unknown keys, missing config, malformed status/error) and at the per-payload layer (rejects forbidden sections, bad item shapes). Successful upserts are persisted to disk, applied to every worker, and ACK'd back over the topic. Because every worker applies the change, confirm each upsert or upsert-all with the operator before publishing it.
Full wire contract + ack semantics: references/dynamic-config.md.
Publish to the same topic with Kafka key calibration and headers:
event.type: upsert-all (full snapshot) | upsert (per-sensor merge) | delete (per-sensor removal)timestamp: ISO-8601 UTC (YYYY-MM-DDTHH:MM:SS.fffZ).Body: JSON sensor list (and ROIs / tripwires / homographies for upsert-all).
Calibration updates need the same authenticated, write-restricted broker. Get the operator's explicit confirmation before publishing upsert-all or delete, save the current calibration before each change, and check the container logs afterward. Schema validation checks the shape of a message, not who sent it.
The listener validates against the vendored AJV schema before persisting. Schema violations log a calibration schema violation warning and are dropped — the previously-good calibration stays loaded.
Full wire contract + per-action validation policy: references/dynamic-calibration.md.
Both flows live entirely on the broker — the producer can be video-analytics-api or another producer the operator has approved. They're the recommended way to change configuration after the container is running, so the operator doesn't have to redeploy.
vss-deploy-profile with profile warehouse (or alerts). Don't run this skill in parallel.references/configuration.md, references/dynamic-config.md, or references/dynamic-calibration.md before editing the JSON.Get started with chainctlchainctl skill install public/nvidia/vss-setup-behavior-analytics:latest
Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.
skills.cgr.dev/public/github.com/nvidia/skills/vss-setup-behavior-analytics:latest
Apache-2.0
BENCHMARK.md
HARDENING.md
SKILL.md
evals/evals.json
evals/standalone_deploy.json
references/configuration.md
references/deploy-behavior-analytics-service.md
references/dynamic-calibration.md
references/dynamic-config.md
references/ngc-api-key-registry-login.md
skill-card.md
skill.oms.sig