Vss Ask Video logo

Vss Ask Video

OrganizationPopular
NVIDIA-AI-Blueprints
vss-ask-video

Use this skill when answering a question about previously analyzed or freshly scoped VSS video. Route through hot context, agent Markdown memory, structured VSS memory, bounded introspection, or an exact-window vss vlm run. Not for retrieval or metadata-answerable questions.

Overview

PublisherNVIDIA-AI-Blueprints
Repositoryvideo-search-and-summarization
Skill namevss-ask-video
Stars
1.9K
Forks
393
Bundled files
3
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 3 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by NVIDIA-AI-Blueprints on GitHub. Read the source before you install it.

Installation

Install the Vss Ask Video AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/NVIDIA-AI-Blueprints/video-search-and-summarization.git /tmp/video-search-and-summarization
mkdir -p .claude/skills
cp -r /tmp/video-search-and-summarization/skills/operations/vss-ask-video .claude/skills/vss-ask-video
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Vss Ask Video in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Vss Ask Video on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Vss Ask Video is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Ask a VSS video question

Answer from the cheapest grounded source that can satisfy the question. For a running VSS deployment, use the project-local vss CLI. Do not call an OpenAI-compatible /chat/completions endpoint directly or fall back to raw REST when a CLI command fails.

This skill does not call POST /generate on the VSS agent. It requires a deployed VSS with vss configure already run.

Hard rule — never substitute a hand-built HTTP call for the CLI. Specifically, do not:

  • POST to /v1/chat/completions yourself. vss vlm run owns that call.
  • Query Elasticsearch directly. vss memory owns structured recall.
  • Build VIOS clip URLs by hand (e.g. /vst/api/v1/storage/file/<id>/url). --sensor resolves the sensor, recorded window and clip URL internally.
  • POST to http://<host>:8000/generate or /v1/summarize.

If a CLI operation fails, report the exit code. Do not retry by hand-rolling the request or by using a globally installed vss. Do not separately inspect media or call another verifier after the CLI returns.

Prerequisites

Run vss configure once per deployment. Bootstrap, exit codes, and common CLI rules live in AGENTS.md.

Direct VLM requires:

  • A configured VSS deployment.
  • Reachable RT-VLM.
  • VIOS when using sensor-based media.

Introspection requires:

  • Memory enabled and Elasticsearch reachable.
  • Existing VSS memory records.
  • Introspection configured and enabled.
  • The judge endpoint reachable from the CLI execution environment.
  • Its configured credential environment variable available, when one is named.
  • RT-VLM only when a bounded visual follow-up is required.
bash
VSS_REPO_ROOT="${VSS_REPO_ROOT:-$HOME/video-search-and-summarization}"
VSS=(uv run \
  --project "${VSS_REPO_ROOT}/libs/vss" \
  vss)

"${VSS[@]}" configure check
"${VSS[@]}" configure memory show
"${VSS[@]}" configure memory check

These checks show endpoint names and credential environment-variable names, not secret values. A judge URL on 127.0.0.1 works only when the OpenClaw Gateway and the VSS CLI process share a network namespace. Otherwise an operator must configure a private Gateway URL reachable from the CLI execution environment.

Memory layers

  • Hot conversation context is evidence already present in this conversation.
  • Agent Markdown memory is searched with the harness-native memory tools. Markdown search is not a vss command.
  • Structured VSS memory is authoritative data in Elasticsearch, accessed only through vss memory get and vss memory query.
  • Introspection performs its own structured retrieval, judge call, and bounded visual follow-ups through vss memory introspect.

The agent decides whether Markdown evidence already answers the question. Never send raw Markdown documents to the VSS judge.

Route the request

For a general question about previously analyzed video, use this exact order:

  1. Use hot conversation context if it already answers the question.
  2. Search agent Markdown memory using the harness-native memory search.
  3. If Markdown contains enough evidence, answer directly.
  4. If Markdown contains a VSS job/record pointer, retain that pointer as grounded scope.
  5. Check the configured introspection state if it is not already known in the current session.
  6. If introspection is enabled, call vss memory introspect.
  7. If introspection is disabled or unconfigured, retrieve structured VSS memory with vss memory get or vss memory query, but do not introspect.
  8. If the available memory still cannot answer, clearly report the missing information.

Do not force Markdown search when:

  • Hot context already answers.
  • The user requests a specific known job_id or complete child identity.
  • The user explicitly requests a fresh visual inspection of a grounded sensor/time window.
  • A search skill supplies a pre-resolved bounded VIDEO_URL.

Those exact routes remain:

  • Exact stored parent -> vss memory get or a group-specific get.
  • Exact fresh sensor/window -> vss vlm run.
  • Pre-resolved bounded media URL -> vss vlm run --media-url.
  • Local file with configured VSS -> vss vlm run --file.

Invoke the project-local CLI

OpenClaw may execute every tool call in a fresh shell. Never depend on a shell function or array defined in an earlier call. Define and invoke the complete project-local command in the same shell call.

For a stored parent:

bash
VSS_REPO_ROOT="${VSS_REPO_ROOT:-$HOME/video-search-and-summarization}"
VSS=(uv run \
  --project "${VSS_REPO_ROOT}/libs/vss" \
  vss)

"${VSS[@]}" memory get --job-id "${JOB_ID}"

For a known child, pass the complete identity:

bash
VSS_REPO_ROOT="${VSS_REPO_ROOT:-$HOME/video-search-and-summarization}"
VSS=(uv run \
  --project "${VSS_REPO_ROOT}/libs/vss" \
  vss)

"${VSS[@]}" memory get \
  --job-id "${JOB_ID}" \
  --record-type "${RECORD_TYPE}" \
  --record-id "${RECORD_ID}"

For structured discovery, use only relevant filters:

bash
VSS_REPO_ROOT="${VSS_REPO_ROOT:-$HOME/video-search-and-summarization}"
VSS=(uv run \
  --project "${VSS_REPO_ROOT}/libs/vss" \
  vss)

"${VSS[@]}" memory query \
  --query "${USER_QUESTION}" \
  --sensor-id "${SENSOR_NAME}" \
  --limit 20

Valid introspection scope is established by one of:

  • --sensor
  • --job-id
  • Both --start-time and --end-time
  • Complete child identity: --job-id, --record-type, and --record-id

Never pass --record-id alone. --record-type and --group may refine valid scope but do not establish it independently.

Choose visual sampling density

For every introspection or direct VLM call, choose VLM_FPS from the visual task. RT-VLM samples at that rate across the requested window:

  • Skim (0.5): locate whether or roughly when a sustained event occurred.
  • Locate (1): default event and action questions.
  • Inspect (2): fine details such as labels, clothing, object state, or precise spatial relationships. Prefer a shorter grounded window before increasing density.

RT-VLM keeps the requested FPS only while fps × clip_seconds is at most 60 frames (the same cap as video-understanding). Longer windows are sampled as 60 evenly spaced frames so the vision token budget is not spent on many tiny images. Prefer a shorter window before raising FPS.

Do not use fixed --num-frames unless the user explicitly requests a fixed frame budget or a reproducibility workflow requires it. Never combine --num-frames and --fps.

When introspection is enabled

For a general memory-aware question that Markdown does not fully answer:

  • Preserve the user's question verbatim.
  • Pass only grounded selectors.
  • Prefer a known job_id from the Markdown pointer.
  • Otherwise use a grounded sensor or complete time range.
  • Do not run vss memory query immediately before introspection merely to duplicate its internal retrieval.
  • Do not run vss vlm run after a completed or partial result. Introspection owns bounded VLM follow-ups.
bash
VSS_REPO_ROOT="${VSS_REPO_ROOT:-$HOME/video-search-and-summarization}"
VSS=(uv run \
  --project "${VSS_REPO_ROOT}/libs/vss" \
  vss)
VLM_FPS=1 # choose 0.5 (skim), 1 (locate), or 2 (inspect)

RC=0
RESULT=$("${VSS[@]}" memory introspect \
  --query "${USER_QUESTION}" \
  --sensor "${SENSOR_NAME}" \
  --fps "${VLM_FPS}") || RC=$?

if [ -n "${RESULT}" ]; then
  printf '%s\n' "${RESULT}"
fi
printf 'vss_exit_code=%s\n' "${RC}" >&2

Capture stdout and the exit code separately. Useful JSON can precede a nonzero timeout or backend exit; parse it when present while still respecting the exit code. Never pipe the CLI directly to jq, which would hide the VSS exit code.

Handle the result fields status, sufficient_from_memory, answer, memory_evidence, sufficiency, vlm_evidence, and unresolved_gaps:

  • completed: return .answer; when useful say whether memory alone or memory plus VLM supplied it, and cite available job/record handles.
  • partial with an answer: return the answer with its limitations and relevant unresolved_gaps; do not present it as fully confirmed.
  • partial without an answer: explain the failure or unresolved gaps; do not invent an answer or repeat internal VLM calls.
  • no_memory: treat it as expected not-found output. Only one direct VLM fallback is allowed, and only when an exact sensor plus exact UTC start/end range were grounded before introspection. Otherwise request the missing scope.

When introspection is disabled or unconfigured

Do not call vss memory introspect while answering an ordinary video question, and do not enable it or rewrite static configuration automatically. Users and the agent may still configure and enable introspection when the user explicitly asks. If Markdown supplies a job_id, use vss memory get; otherwise use vss memory query with relevant text, sensor, and time filters. Answer from the returned records when sufficient. If insufficient, report what is known and what is missing.

Do not simulate introspection by selecting a sensor/window and automatically calling VLM. Direct VLM is still allowed only for an explicit fresh-verification request, an exact grounded sensor/window, or a trusted bounded media handoff. If the user explicitly asks to enable or configure introspection, explain the current state and run the project-local configure command. --enable alone fails when introspection was never configured; include the judge endpoint on first setup:

bash
VSS_REPO_ROOT="${VSS_REPO_ROOT:-$HOME/video-search-and-summarization}"
VSS=(uv run \
  --project "${VSS_REPO_ROOT}/libs/vss" \
  vss)

"${VSS[@]}" configure memory introspection \
  --enable \
  --judge-endpoint "${JUDGE_ENDPOINT}"

Do not silently substitute ordinary VLM inspection.

Direct fresh inspection

For a trusted bounded URL or local file:

bash
VSS_REPO_ROOT="${VSS_REPO_ROOT:-$HOME/video-search-and-summarization}"
VSS=(uv run \
  --project "${VSS_REPO_ROOT}/libs/vss" \
  vss)
VLM_FPS=1 # choose 0.5 (skim), 1 (locate), or 2 (inspect)

RC=0
RESULT=$("${VSS[@]}" vlm run \
  --prompt "${USER_QUESTION}" \
  --media-url "${VIDEO_URL}" \
  --fps "${VLM_FPS}") || RC=$?
[ "${RC}" -eq 0 ] || [ "${RC}" -eq 6 ] || exit "${RC}"
if [ -n "${RESULT}" ]; then
  printf '%s\n' "${RESULT}"
fi
printf 'vss_exit_code=%s\n' "${RC}" >&2

# A configured VSS local-file request uses:
# RESULT=$("${VSS[@]}" vlm run --prompt "${USER_QUESTION}" --file "${VIDEO_FILE}") || RC=$?

For an exact named VIOS sensor/window:

bash
VSS_REPO_ROOT="${VSS_REPO_ROOT:-$HOME/video-search-and-summarization}"
VSS=(uv run \
  --project "${VSS_REPO_ROOT}/libs/vss" \
  vss)
VLM_FPS=1 # choose 0.5 (skim), 1 (locate), or 2 (inspect)

RC=0
RESULT=$("${VSS[@]}" vlm run \
  --prompt "${USER_QUESTION}" \
  --sensor "${SENSOR_NAME}" \
  --start-time "${START_TIME}" \
  --end-time "${END_TIME}" \
  --fps "${VLM_FPS}") || RC=$?
[ "${RC}" -eq 0 ] || [ "${RC}" -eq 6 ] || exit "${RC}"
if [ -n "${RESULT}" ]; then
  printf '%s\n' "${RESULT}"
fi
printf 'vss_exit_code=%s\n' "${RC}" >&2

For a confirmed search handoff, use only the supplied bounded VIDEO_URL and visual question. Do not rerun search, resolve another sensor/window, or treat retrieval metadata as visual evidence. A sensor route must use --sensor; do not substitute vss vios clip or raw HTTP. Cite the returned job_id, sensor, and window. Exit 6 means the answer exists but persistence failed; retain the answer and report that limitation.

Examples

  • Hot conversation: The previous turn says, "A forklift crossed the loading aisle at 10:14 UTC." Answer 10:14 UTC directly; search nothing.
  • Markdown sufficient: Native agent Markdown memory search finds a note that directly answers the question -> answer from it; call no VSS command.
  • Markdown incomplete: Retain its job_id, inspect known/configured state, then introspect by that job when enabled.
  • Explicit stored parent: "Show me the summary from job sum-01JXYZ." -> vss memory get --job-id sum-01JXYZ.
  • Disabled introspection: Search Markdown, then structured memory. Do not introspect, enable it, or escalate automatically to VLM.
  • Exact fresh verification: "Freshly verify whether the worker wore a hard hat on dock_cam from 2026-08-13T20:00:00Z to 2026-08-13T20:00:30Z." -> vss vlm run with that exact sensor/window.
  • Search handoff: a user-confirmed vss-search-archive handoff with a pre-resolved bounded VIDEO_URL -> Path A --media-url.
  • No memory with scope: Introspection returns no_memory, while trusted context provides dock_cam and 2026-08-13T20:00:00Z through 2026-08-13T20:00:30Z -> run one vss vlm run for exactly that interval.
  • No memory without scope: "Did a forklift enter the loading area last week?" returns no_memory, with no exact sensor/window -> explain no matching memory/window exists and ask for the sensor and exact UTC window; do not run the VLM.

Negative triggers

  • Archive/semantic similarity retrieval ("find videos of ...") -> /vss-search-archive. This skill may inspect only the pre-resolved bounded clip that search hands off after confirmation; it never performs the retrieval itself.
  • Long-form summarization -> /vss-summarize-video.
  • Structured reports -> /vss-generate-video-report.
  • Existing analytics incidents or metrics -> /vss-query-analytics.
  • Deployment/profile changes -> /vss-build-vision-ai.

Cross-Reference

  • /vss-manage-video-io-storage — optional Path B upload semantics.
  • /vss-generate-video-report — timestamped reports; this skill returns an ad-hoc answer.
  • /vss-query-analytics — already-computed incidents/metrics.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Vss Ask Video AI skill do?

Use this skill when answering a question about previously analyzed or freshly scoped VSS video. Route through hot context, agent Markdown memory, structured VSS memory, bounded introspection, or an exact-window vss vlm run. Not for retrieval or metadata-answerable questions.

Why use Vss Ask Video on TypingMind?

Because you install it once and use it with any model. Vss Ask Video is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Vss Ask Video in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/NVIDIA-AI-Blueprints/video-search-and-summarization/tree/develop/skills/operations/vss-ask-video. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Vss Ask Video?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Vss Ask Video?

As many as you like. As long as a model supports skills, you can use Vss Ask Video with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Vss Ask Video AI skill free?

Yes. It is published on GitHub by NVIDIA-AI-Blueprints under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇