·
Last changedVersion:
This version passed the hardening gate. Hardening applied 7 targeted changes and preserved all other text. Classified findings before hardening: 5. Classified findings closed: 2. Classified findings remaining: 3. Unclassified scanner findings remaining: 0. Review findings closed: 17. Review findings remaining: 0.
1
3
1
3
Expand | File | Group | Subtype | Severity | Status |
|---|---|---|---|---|---|
SKILL.md | Privilege Escalation & Host / Cloud Compromise | Privilege escalation | High | Closed | |
evals/base_profile_video_understanding.json | Sensitive Data & Secret Exposure | Agent snooping | Medium | Open | |
BENCHMARK.md | Sensitive Data & Secret Exposure | Agent snooping | Medium | Open | |
SKILL.md | Sensitive Data & Secret Exposure | Data exfiltration | Medium | Open | |
SKILL.md | Sensitive Data & Secret Exposure | Hardcoded secret | Low | Closed |
5 findings
Use this skill when you need details about the video which requires VLM to look at the video frames — for example the agent has no usable prior answer and needs a fresh look at the pixels for a specific clip.
Do not use this skill when a database / MCP / prior tool output already answers the question, unless the user explicitly wants verification against the video.
This skill requires a VSS profile that serves the video_understanding tool — typically base (recommended) or lvs. Before any request:
This skill only needs curl and jq for HTTP calls to the VSS agent and VST on the deployment host, plus python3 for the answer stripping step. Keep shell use to those commands, and leave local files unchanged apart from reading the one video the user names for upload.
Confirm that $HOST_IP is set, not empty, and holds a host name or IP address before running any curl. If it is not, ask the user for the host. All traffic in this skill is plain HTTP with no authentication, so use it only with a trusted host on a private network, and show the resolved host to the user before uploading or querying.
Probe the VSS agent:
If the probe fails, ask the user:
/vss-deploy-profile -p base (or -p lvs if the user prefers). Return here once it succeeds. Hand off only after an explicit yes from the user. In a run where nobody can answer, stop and report that no profile is running.If the probe passes, proceed.
You MUST list VST sensors before any /generate call. This is required even when the user names the sensor explicitly, even when the user asserts the video is already uploaded, and even when a previous turn appeared to use the same video. Do not skip this step.
List sensors:
Compare the returned name values against the user-supplied <sensor-id> (or filename stem, e.g. warehouse_safety_0001). Require an exact, case sensitive match of the whole name. Partial or substring matches do not count. If there are several candidates, or none, list what was found and ask the user which one to use.
If a matching sensor is present → proceed to the Agent workflow below.
If no matching sensor is present — upload the video first, then re-list to confirm the new sensor appears:
See /vss-manage-video-io-storage for full upload semantics (v1 vs v2, conflict handling, delete flow). Never issue an unconditional PUT without first running the sensor-list check above — that is exactly the failure mode this prerequisite exists to prevent.
This skill only uploads. Deletion and other storage changes are out of scope here. Upload only a video file the user explicitly named. If the user's request already asked for that exact video to be uploaded, that request counts as consent. Otherwise confirm the exact local path and the target host with the user before the upload, and stop if nobody can answer. Before uploading, check that:
If the user gave no timestamp, ask for one, or tell the user that the placeholder default is in use and that any timing answers are relative to it. If the upload command fails or returns an error, report it as a failure, and re-list sensors to confirm the new sensor before continuing.
The Sensor prerequisite above must have already confirmed (or made) the sensor exist on VST. Then:
/generate)Point the agent base URL at the same host and port that passed the probe on $HOST_IP. The localhost value below is only an example for an agent running on this machine.
Fill the placeholders in the request body carefully:
/generate returns a JSON object with the assistant output in value, for example:
There is no separate clean-answer field. The consumable answer is the text in .value after removing any <agent-think>...</agent-think> block.
Required handling for this skill (and any downstream caller):
.value from the JSON response.<agent-think>...</agent-think> sections wherever they appear.Example extraction:
VIDEO_URL is valid for the VLM./generate for ad-hoc video Q&A.Get started with chainctlchainctl skill install public/nvidia/vss-ask-video: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-ask-video:latest
Apache-2.0
BENCHMARK.md
HARDENING.md
SKILL.md
evals/base_profile_video_understanding.json
evals/evals.json
skill-card.md
skill.oms.sig