opção
LarLar Skill DevOps e CI/CD vss-deploy-detection-tracking-2d

vss-deploy-detection-tracking-2d

NVIDIA/skills NVIDIA/skills

Implemente, depure e opere o microsserviço de detecção/rastreamento 2D RTVI-CV e acesse sua API REST para gerenciamento de fluxos, verificações de integridade e métricas.

...Expandir tudo
1
Tempo atualizado 28 de Setembro de 2026

Objetivo

Implantar, depurar e operar o microsserviço 2D de detecção/rastreamento RTVI-CV e utilizar sua API REST.

Pré-requisitos

  • Implantação ativa do VSS acessível em $HOST_IP (consulte vss-deploy-profile e references/).
  • Credenciais do NGC em $NGC_CLI_API_KEY e $NVIDIA_API_KEY para qualquer download de imagem.
  • curl, jq e Docker disponíveis no sistema chamador.

Instruções

Siga as tabelas de roteamento e os fluxos de trabalho passo a passo abaixo. Cada seção que termina com “fluxo de trabalho”, “início rápido” ou “fluxo” deve ser executada de cima para baixo. O material de referência detalhado está em references/ e os scripts auxiliares estão em scripts/ — chame-os por meio de run_script quando a skill indicar um script pelo nome.

Exemplos

Exemplos completos e funcionais estão armazenados em `evals/` (cada manifesto *.json contém um cenário executável) e incorporados nos blocos `curl` de cada fluxo de trabalho abaixo. Execute uma avaliação de Nível 3 com ` nv-base validate --agent-eval` para reproduzi-los.

Limitações

  • Requer que o perfil VSS / microsserviço correspondente esteja implantado e seja acessível a partir do chamador.
  • Modelos hospedados no NGC e NIMs podem estar sujeitos a limites de taxa, requisitos de memória de GPU e restrições de licença.
  • Os limites de simultaneidade, memória de GPU e armazenamento dependem do hardware do host e do arquivo de composição do perfil.

Solução de problemas

  • Erro: a chamada REST retorna “conexão recusada”. Causa: o microsserviço de destino não está em execução. Solução: verifique /docs ou /health; reimplante por meio do vss-deploy-profile ou da skill vss-deploy-* correspondente.
  • Erro: código HTTP 401/403 nas chamadas do NGC. Causa: NGC_CLI_API_KEY ausente ou expirada. Solução: faça login no Docker em nvcr.io e reexporte a chave antes de tentar novamente.
  • Erro: contêiner com OOM ou falha ao carregar o modelo. Causa: memória de GPU insuficiente para o perfil selecionado. Solução: mude para uma variante menor ou libere GPUs usando o comando ` docker compose down`.

RTVI-CV — Detecção e Rastreamento (Habilidade Unificada)

Habilidade unificada para o microsserviço Real Time Video Intelligence CV (RTVI-CV). Duas superfícies de ação em uma única habilidade:

  • Implantar / operar / depurar / desativar o contêiner RTVI-CV localmente → consulte references/deploy-vss-detection-tracking-2d.md
  • Chamar a API REST do RTVI-CV (fluxos, integridade, métricas, incorporações) em uma instância em execução → consulte references/usage-vss-detection-tracking-2d.md

Serviço: rtvi-cv (metropolis_perception_app) Imagem: nvcr.io//: — fornecida pelo usuário no momento da implantação Porta REST: 9000 (/api/v1 — /live, /ready, /startup, /metrics, /stream/add, /stream/remove, embeddings) Hardware: dGPU x86/aarch64 (T4, A100, L40, H100, B200, RTX), SBSA (Spark, Grace-Hopper), Jetson (Thor, Orin, Xavier)

Roteamento de ações — escolha uma vez por invocação

Intenção do usuário (exemplos de frases) Fluxo Carregue esta referência
implantar o rtvi-cv warehouse 2d, executar o rtvicv warehouse-3d com 4 fluxos, iniciar o smartcity gdino, iniciar o aplicativo de percepção, ativar o sparse4d IMPLEMENTAR references/deploy-vss-detection-tracking-2d.md
parar o rtvi-cv, desmontar, encerrar o contêiner de percepção, limpar o rtvicv-perception-docker DESMONTAR (tratado pelo documento de implantação → “Seleção de modo”) references/deploy-vss-detection-tracking-2d.md + references/teardown-flow.md
verificar os logs do rtvi-cv, diagnosticar falhas do rtvi-cv, solucionar falhas na verificação de integridade, o rtvi-cv não inicia DEBUG references/deploy-vss-detection-tracking-2d.md + references/troubleshooting.md
adicionar um stream, remover câmera, listar streams, verificação de integridade, o rtvi-cv está pronto, obter métricas, qual é o FPS, verificar uso da GPU, gerar embeddings de texto, chamar a API do rtvi-cv USO DA API references/usage-vss-detection-tracking-2d.md + references/api-reference.md

Regra de seleção: compare a formulação do usuário com a tabela acima e carregue imediatamente o arquivo de referência correspondente. Não misture os fluxos — DEPLOY pressupõe que ainda não há nenhum contêiner em execução; USO DA API pressupõe que o contêiner já está em execução em http://:9000.

Se a intenção for realmente ambígua (por exemplo, o usuário diz apenas “Quero usar o rtvi-cv”), faça uma pergunta com o AskQuestion: implantar uma nova instância ou chamar uma que já esteja em execução?

O que fica onde

vss-deploy-detection-tracking-2d/
├── SKILL.md          # este arquivo (roteamento + contratos)
├── assets/           # arquivos de dados (deploy-defaults.yml — fonte única de verdade para tags / referências / caminhos / GPU)
├── evals/            # manifestos de avaliação de Nível 3 (deploy-evals.json, usage-evals.json)
├── scripts/          # 23 utilitários em bash e python (consulte `scripts/` para ver o inventário completo)
└── references/       # manuais de fluxo de trabalho (implantação / uso da API / desativação / solução de problemas / …)

Para ver o inventário completo por arquivo e o que cada referência abrange, consulte references/workflow-reference.md.

Todos os scripts são chamados a partir da raiz da skill por meio de $SKILL_DIR/scripts/ — os caminhos dentro do documento de referência de implantação são preservados literalmente e resolvidos corretamente quando o agente é executado a partir da raiz da skill.

Scripts disponíveis

Os auxiliares ficam em scripts/ e são chamados a partir da raiz da skill pelo nome — chame cada um por meio de run_script("scripts/") para que o agente registre uma chamada adequada da ferramenta.

Script Finalidade Argumentos
load_defaults.sh Detecta a plataforma (x86 dGPU / SBSA / Jetson) e determina os padrões YAML a partir do arquivo assets/deploy-defaults.yml. --usecase
fetch_resources.sh Baixar e extrair recursos do NGC, verificar o layout. --ngc-ref (opcional)
apply_in_container.sh Wrapper do lado do host para a Etapa 4 (apply_config.sh dentro do contêiner em execução).
apply_config.sh Substituição de caminho dentro do contêiner, processamento em lote, destino, fontes, cache do mecanismo.
start_app_in_container.sh Wrapper no lado do host para a Etapa 5 (run_app_and_wait.sh).
run_app_and_wait.sh Inicialização do aplicativo no contêiner + verificação de prontidão + métricas + log.
add_streams.sh / update_stream_sources.sh Ciclo de vida do fluxo REST para a Etapa 6. ...
collect_metrics.sh Obter instantâneo de /api/v1/metrics. nenhum
discover_streams.sh Enumerar streams ativos por meio de /stream/get-stream-info. nenhum
synthesize_docker_run.sh Exibe a linha de comando do `docker run ` adequada à plataforma para o ambiente resolvido. nenhum
render_box.sh Renderiza o recibo de etapas com largura fixa.
calibration_manager.py Gerenciar artefatos de calibração + invalidação do cache do mecanismo por caso de uso. --usecase --reset

Para ver o inventário completo de utilitários (cache, verificações de GPU, configuração), acesse scripts/; o comando --help de cada script descreve seus argumentos.

Como usar esta habilidade

  1. Leia este arquivo primeiro. Ele apenas direciona — não contém fluxos de trabalho.
  2. Compare a intenção do usuário com a tabela de roteamento acima.
  3. Carregue exatamente um documento de referência (DEPLOY ou API USAGE). Não carregue os dois antecipadamente — cada referência é grande e contém seu próprio contrato completo.
  4. Siga exatamente a referência carregada. Os documentos de referência são os contratos preservados byte a byte das habilidades predecessoras vss-deploy-detection-tracking-2d (deploy/teardown/debug) e rtvicv-api (REST API) — cada ordem de etapa, regra de processamento em lote do bash, regra de renderização de caixa e contrato AskQuestion é mantida.
  5. Para DEPLOY, o documento de referência impõe seu próprio contrato de inicialização: confirmação de uma linha → chamada à ferramenta de planejamento (matrizTodoWrite com 5 tarefas, OU 5 chamadas sucessivas de TaskCreate no código Claude mais recente) → pergunta da Etapa 1. Não narre, não faça pré-verificação e nunca imprima “carregando TodoWrite/TaskCreate” ou qualquer texto relacionado à resolução de ferramentas diferidas — a ferramenta de planejamento é carregada silenciosamente.

Contrato de saída — fluxo DEPLOY

Ao executar o fluxo DEPLOY / TEARDOWN / DEBUG, o agente DEVE respeitar todos os quatro itens abaixo em cada implantação bem-sucedida. Esses são os únicos canais de feedback do usuário entre as etapas; pular qualquer um deles é uma regressão de comportamento.

  1. Exiba a saída de cada etapa em uma caixa de largura fixa — Etapa 1: Destinos de implantação, Etapa 2: Configuração do pipeline, Etapa 3: Contêiner, Etapa 4: Aplicar configuração, Etapa 5: Plano + Resultados. Não apenas o resumo final. A caixa é o comprovante da etapa para o usuário. A geometria é fixa (consulte § “Formato universal da caixa” abaixo). As regras de conteúdo por etapa (o que deve constar em cada caixa) estão em references/deploy-vss-detection-tracking-2d.md em “Regra de conteúdo da caixa da Etapa N”.
  2. Após a caixa de Resultados da Etapa 5, execute a Etapa 6 AskUserQuestion do arquivo references/next-steps.md, § “11.c” — nunca a substitua por uma lista de marcadores de “Próximos passos” em formato livre. O menu é o ponto de saída da implantação: permite que o usuário execute métricas, gerencie fluxos, acompanhe logs ou desative a implantação com um clique, em vez de ter que se lembrar de URLs do curl.
  3. Depois que o usuário escolher um bucket da Etapa 6, execute a pergunta de acompanhamento“AskUserQuestion” de references/next-steps.md § “11.d” — nunca substitua por texto descritivo + exemplos de curl prontos para copiar + uma pergunta de texto livre do tipo “deseja que eu execute X?”. Cada bucket tem seu próprio menu de ações concretas; o usuário escolhe a ação, e então a skill exibe a caixa da API e executa o curl. Ações de acompanhamento por bucket:
    • Gerenciar streams → Adicionar / Remover / Listar. A opção “Remover” gera suas opções dinamicamente a partir de /stream/get-stream-info — uma opção por stream ativo, identificada como · , além de “Remover TODOS” quando ACTIVE > 1 (especificação completa: §“remove_streams sub-flow”).
    • Interromper a implantação → Interromper aplicativo / Interromper contêiner / Desmontagem completa.
    • Verifique métricas e FPS → sem acompanhamento; execute collect_metrics.sh diretamente após imprimir a caixa da API /api/v1/metrics.
    • Verificar atividade / prontidão → sem ação posterior; testar todos os três endpoints de integridade após exibir suas caixas de API.
  4. Renderize o conteúdo COMPLETO por etapa, não uma linha de visão geral — a renderização da caixa é necessária, mas não suficiente. Cada etapa possui uma especificação de composição de linha em references/deploy-vss-detection-tracking-2d.md em “Regra de conteúdo da caixa da etapa N”. A etapa 4 (Aplicar configuração) é onde o agente falha com mais frequência — sua lista canônica de chaves por caso de uso está em references/apply-config.md § “Lista completa de edição por caso de uso”, e o agente DEVE emitir uma ✔ [seção] chave=valor — linhade anotação por chave nessa tabela para o caso de uso ativo + configurações. Uma seção com 5 chaves → 5 linhas; uma seção com 6 chaves → 6 linhas. Nunca uma linha de visão geral por seção.

Proibido (esses são os atalhos aos quais o agente recorre sob pressão, e eles prejudicam a experiência do usuário):

  • ❌ Narração interna sobre o carregamento de ferramentas. Nunca exiba “Preciso carregar o TodoWrite (uma ferramenta diferida que a habilidade chama para o widget de tarefas)”, “Carregando o TaskCreate…”, “Chamando o ToolSearch para a ferramenta de planejamento…”, ou qualquer outro texto sobre a resolução/carregamento/busca de ferramentas diferidas. O agente carrega as ferramentas silenciosamente. O usuário só vê a linha de resumo ✔ “ ” seguida pelo widget — nunca qualquer indicação sobre a resolução da ferramenta.
  • ❌ Agrupar todas as 5 etapas de implantação em um único campode descrição do TaskCreate. Quando o TaskCreate for a ferramenta de planejamento disponível, emita 5 chamadas separadas do TaskCreate consecutivamente (uma por etapa). Consulte references/task-list.md § “Chamadas iniciais do TaskCreate ” para o modelo literal. A mesma regra se aplica ao TodoWrite — uma chamada com todas as 5 tarefas na matriz todos:[…]; nunca uma tarefa cujo conteúdo seja uma lista de várias linhas.
  • ❌ Escolher silenciosamente o modo de fluxo dinâmico. O padrão da skill é stream_mode=static — o agente incorpora URLs file:// descobertas automaticamente no bloco [source-list] da configuração principal do DS antes do início do aplicativo. Mude para o modo dinâmico somente quando o usuário solicitar explicitamente (“adicionar streams posteriormente via REST”, “usar o modo de stream dinâmico”) OU quando ele escolher o modo dinâmico na Etapa 2 da AskQuestion. Escolher o modo dinâmico para uma consulta genérica do tipo “implantar rtvi-cv com N fluxos” viola as diretrizes de implantação e as expectativas do usuário em relação às métricas. Consulte references/pipeline-config.md § “Padrões — a skill está no modo estático por padrão” para a justificativa completa.
  • ❌ Uma linha ✔ App pronto em Ns, N fluxos, total de Y fps no lugar da caixa de resultados da Etapa 5.
  • ❌ Caracteres ASCII para desenho de caixas (+, -, =, *) em vez de caracteres leves para desenho de caixas (┌ ─ ┐ │ └ ┘).
  • ❌ Pular a Etapa 6 partindo do pressuposto de que “o usuário sabe o que fazer a seguir”.
  • ❌ Após o Passo 6, exibir um bloco extenso de texto em Markdown + vários blocos de curl + uma pergunta final “deseja que eu execute alguma dessas opções?” — essa é a forma que o agente adota como alternativa, ignorando tanto o menu 11.d quanto a caixa por chamada de API. O usuário escolhe em um menu; a skill mostra a caixa da API resolvida; a skill a executa. Sem perguntas de texto livre.
  • ❌ A visão geral da Etapa 4 é recolhida — isso é explicitamente proibido pela regra de conteúdo da Etapa 4 do documento de implantação:
    • ✔ Tamanho do lote 3 (grade de blocos: 1×3) → obrigatório: 5 linhas separadas ([streammux] batch-size=3, [primary-gie] batch-size=3, [source-list] max-batch-size=3, [tiled-display] rows=1, [tiled-display] columns=3).
    • ✔ Destino de saída eglsink → obrigatório: uma linha por chave de destino (4 chaves para eglsink, por exemplo, [sink0] enable=1, type=2, sync=0, qos=0 — consulte o arquivo apply-config.md para a lista exata).
    • ✔ Fontes estáticas (3 fluxos, http-port=9000) → necessário: seis linhas [source-list] anotadas.
    • ✔ Grade de blocos 1 linha × 3 colunas (linha única) → obrigatório: duas linhas, [tiled-display] rows=1 e [tiled-display] columns=3.

Formato universal de caixa

O contrato de geometria para cada caixa de saída de etapa (Etapa 1 a Etapa 5 Resultados). A mesma forma em todas as caixas; apenas o título e as linhas do corpo mudam a cada etapa.

  • Largura: 128 caracteres de canto a canto — ┌ na coluna 1, ┐ na coluna 128. Terminais mais largos deixam a caixa alinhada à esquerda; não a estique . A área interna de conteúdo é de 124 caracteres (com uma margem de um espaço em cada lado dentro das bordas │ ).
  • Apenas caracteres leves para desenhar a caixa: ┌ ─ ┐ │ └ ┘. Sem +, -, =, * como alternativas ASCII.
  • Borda superior — título CENTRADO: ┌ + N₁ traços + ␣ + título + ␣
    • N₂ traços + ┐, onde N₁ + N₂ + comprimento(título) + 2 = 126. Distribuir o preenchimento: N₁ = floor((126 − comprimento(título) − 2) / 2), N₂ = 126 − comprimento(título) − 2 − N₁. N₁ e N₂ diferem no máximo em 1.
  • Corpo: um │ │ por fato. Cada linha de fato usa o formato ✔ (dois espaços, glifo, chave alinhada à direita até 13, dois espaços, valor).
  • Linhas em branco entre grupos: exiba │ <124 spaces> │ entre grupos lógicos (por exemplo, Identidade / Modelo / Vídeos na Etapa 1) para que o usuário possa examinar a caixa rapidamente.
  • Borda inferior: └ + 126 traços + ┘ — borda sólida, sem título.

Títulos padrão das etapas (usados na parte superior da caixa de cada etapa):

┌─────────────────────────────────────────────────────── Destinos de implantação ───────────────────────────────────────────────────────┐
┌─────────────────────────────────────────────────── Configuração do pipeline ───────────────────────────────────────────────────┐
┌───────────────────────────────────────────────────────── Contêiner ──────────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────────── Aplicar configuração ─────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────── Aplicação da Percepção — Plano ───────────────────────────────────────────────┐
┌────────────────────────────────────────────── Aplicação de Percepção — Resultados ──────────────────────────────────────────────┐

Regras de conteúdo por etapa (quais linhas vão em qual caixa, ocultação de linhas segundo o modo, o layout seccionado da seção “apply-config”, o padrão da Etapa 5 “PLAN-then-RESULT” , o requisito de síntese do `docker run` da Etapa 3) estão em references/deploy-vss-detection-tracking-2d.md sob “Regra de conteúdo da caixa da Etapa N” — leia-as ao renderizar a etapa correspondente.

Gatilhos rápidos (mnemônicos)

Frase Fluxo
implantar o rtvicv warehouse 2d com 4 fluxos e exibir DEPLOY
executar smartcity gdino na GPU 1 IMPLEMENTAR
parar o contêiner de percepção DESINSTALAÇÃO (documentação de implantação)
Falha na verificação de integridade do rtvi-cv DEPURAR (documentação de implantação + solução de problemas)
adicionar um fluxo ao rtvi-cv USO DA API
O rtvi-cv está pronto no localhost:9000 USO DA API
Obter métricas do rtvi-cv USO DA API
Gerar embeddings de texto via rtvi-cv USO DA API

bump:1

Ver no GitHub
---
name: vss-deploy-detection-tracking-2d
description: Deploy, debug, and operate the RTVI-CV 2D detection/tracking microservice and call its REST API for stream management, health checks, and metrics.
license: Apache-2.0
---
## Purpose

Deploy, debug, and operate the RTVI-CV detection / tracking 2D microservice and drive its REST API.

## Prerequisites

- Active VSS deployment reachable on `$HOST_IP` (see `vss-deploy-profile` and `references/`).
- NGC credentials in `$NGC_CLI_API_KEY` and `$NVIDIA_API_KEY` for any image pulls.
- `curl`, `jq`, and Docker available on the caller.

## Instructions

Follow the routing tables and step-by-step workflows below. Each section that ends in *workflow*, *quick start*, or *flow* is intended to be executed top-to-bottom. Detailed reference material lives in `references/` and helper scripts live in `scripts/` — call them via `run_script` when the skill points to a script by name.

## Examples

Worked end-to-end examples are kept under `evals/` (each `*.json` manifest contains a runnable scenario) and inline in the per-workflow `curl` blocks below. Run a Tier-3 evaluation with `nv-base validate <this-skill-dir> --agent-eval` to replay them.

## Limitations

- Requires the matching VSS profile / microservice to be deployed and reachable from the caller.
- NGC-hosted models and NIMs may be subject to rate-limits, GPU memory requirements, and license restrictions.
- Concurrency, GPU memory, and storage limits depend on the host hardware and the profile's compose file.

## Troubleshooting

- **Error**: REST call returns connection refused. **Cause**: target microservice not running. **Solution**: probe `/docs` or `/health`; redeploy via `vss-deploy-profile` or the matching `vss-deploy-*` skill.
- **Error**: HTTP 401/403 from NGC pulls. **Cause**: missing/expired `NGC_CLI_API_KEY`. **Solution**: `docker login nvcr.io` and re-export the key before retrying.
- **Error**: container OOM or model fails to load. **Cause**: insufficient GPU memory for the selected profile. **Solution**: switch to a smaller variant or free GPUs via `docker compose down`.

# RTVI-CV — Detection & Tracking (Unified Skill)

Unified skill for the **Real Time Video Intelligence CV (RTVI-CV)** microservice. Two action surfaces in one skill:

- **Deploy / operate / debug / tear down** the RTVI-CV container locally → see [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
- **Call the RTVI-CV REST API** (streams, health, metrics, embeddings) on a running instance → see [`references/usage-vss-detection-tracking-2d.md`](references/usage-vss-detection-tracking-2d.md)

> **Service**: `rtvi-cv` (`metropolis_perception_app`)
> **Image**: `nvcr.io/<org>/<repo>:<tag>` — user-supplied at deploy time
> **REST port**: `9000` (`/api/v1` — `/live`, `/ready`, `/startup`, `/metrics`, `/stream/add`, `/stream/remove`, embeddings)
> **Hardware**: x86/aarch64 dGPU (T4, A100, L40, H100, B200, RTX), SBSA (Spark, Grace-Hopper), Jetson (Thor, Orin, Xavier)

---

## Action routing — pick once per invocation

| User intent (sample phrasing) | Flow | Load this reference |
|-------------------------------|------|---------------------|
| `deploy rtvi-cv warehouse 2d`, `run rtvicv warehouse-3d with 4 streams`, `start smartcity gdino`, `launch perception app`, `bring up sparse4d` | **DEPLOY** | [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md) |
| `stop rtvi-cv`, `tear down`, `kill the perception container`, `cleanup rtvicv-perception-docker` | **TEARDOWN** (handled by deploy doc → "Mode Selection") | [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md) + [`references/teardown-flow.md`](references/teardown-flow.md) |
| `check rtvi-cv logs`, `diagnose rtvi-cv crashing`, `troubleshoot healthcheck failing`, `rtvi-cv won't start` | **DEBUG** | [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md) + [`references/troubleshooting.md`](references/troubleshooting.md) |
| `add a stream`, `remove camera`, `list streams`, `health check`, `is rtvi-cv ready`, `get metrics`, `what's the FPS`, `check GPU usage`, `generate text embeddings`, `call rtvi-cv api` | **API USAGE** | [`references/usage-vss-detection-tracking-2d.md`](references/usage-vss-detection-tracking-2d.md) + [`references/api-reference.md`](references/api-reference.md) |

**Selection rule:** match the user's phrasing against the table above and immediately load the corresponding reference file. Do not mix the flows — DEPLOY assumes no running container yet; API USAGE assumes the container is already running on `http://<host>:9000`.

If intent is genuinely ambiguous (e.g., the user says just "I want to use rtvi-cv"), ask one `AskQuestion`: deploy a new instance, or call an already-running one?

---

## What lives where

```
vss-deploy-detection-tracking-2d/
├── SKILL.md          # this file (routing + contracts)
├── assets/           # data files (deploy-defaults.yml — single source of truth for tags / refs / paths / GPU)
├── evals/            # Tier-3 eval manifests (deploy-evals.json, usage-evals.json)
├── scripts/          # 23 bash + python helpers (see `scripts/` for the full inventory)
└── references/       # workflow runbooks (deploy / api-usage / teardown / troubleshooting / …)
```

For the full per-file inventory and what each reference covers, see
[`references/workflow-reference.md`](references/workflow-reference.md).

All scripts are invoked from the skill root via `$SKILL_DIR/scripts/<name>` — paths inside the deploy reference doc are preserved verbatim and resolve correctly when the agent runs from skill root.

---

## Available Scripts

Helpers live in `scripts/` and are invoked from the skill root by name —
call each via `run_script("scripts/<name>")` so the agent records a
proper tool invocation.

| Script | Purpose | Arguments |
| --- | --- | --- |
| `load_defaults.sh` | Detect platform (x86 dGPU / SBSA / Jetson) and resolve YAML defaults from `assets/deploy-defaults.yml`. | `--usecase <name>` |
| `fetch_resources.sh` | Download + extract NGC resources, scan for layout. | `--ngc-ref <ref>` (optional) |
| `apply_in_container.sh` | Host-side wrapper for Step 4 (`apply_config.sh` inside the running container). | `<container_name>` |
| `apply_config.sh` | In-container path-substitution, batch, sink, sources, engine cache. | `<usecase> <stream_count> <sink_type>` |
| `start_app_in_container.sh` | Host-side wrapper for Step 5 (`run_app_and_wait.sh`). | `<container_name>` |
| `run_app_and_wait.sh` | In-container app launch + readiness + metrics + log. | `<config_path>` |
| `add_streams.sh` / `update_stream_sources.sh` | REST stream lifecycle for Step 6. | `<rtsp_or_file_uri>...` |
| `collect_metrics.sh` | Pull `/api/v1/metrics` snapshot. | none |
| `discover_streams.sh` | Enumerate active streams via `/stream/get-stream-info`. | none |
| `synthesize_docker_run.sh` | Print the platform-correct `docker run` line for the resolved env. | none |
| `render_box.sh` | Render the fixed-width step receipt. | `<step_label>` |
| `calibration_manager.py` | Manage calibration artefacts + per-use-case engine cache invalidation. | `--usecase <name> --reset` |

For the full inventory of helpers (cache, GPU checks, setup) browse
`scripts/`; each script's `--help` describes its arguments.

## How to use this skill

1. **Read this file first.** It only routes — it does not contain workflows.
2. **Match the user's intent** against the routing table above.
3. **Load exactly one reference doc** (DEPLOY or API USAGE). Don't preload both — each reference is large and contains its own full contract.
4. **Follow the loaded reference exactly.** The reference docs are the byte-for-byte preserved contracts from the predecessor skills `vss-deploy-detection-tracking-2d` (deploy/teardown/debug) and `rtvicv-api` (REST API) — every step ordering invariant, bash-batching rule, box-rendering rule, and `AskQuestion` contract is retained.
5. **For DEPLOY**, the reference doc enforces its own startup contract: one-line acknowledgement → planning-tool call (`TodoWrite` array of 5 todos, OR 5 successive `TaskCreate` calls on newer Claude Code) → Step 1 question. Do not narrate, do not pre-flight, and never print "loading TodoWrite/TaskCreate" or any deferred-tool resolution prose — the planning tool is loaded silently.

---

## Output contract — DEPLOY flow

When running the DEPLOY / TEARDOWN / DEBUG flow, the agent MUST honour
all four items below on every successful deploy. These are the user's
only feedback channel between steps; skipping any of them is a
behaviour regression.

1. **Render every step's exit in a fixed-width box** — Step 1 *Deploy
   targets*, Step 2 *Pipeline configuration*, Step 3 *Container*, Step 4
   *Apply configuration*, Step 5 *Plan* + *Results*. Not just the final
   summary. The box is the user's step receipt. Geometry is fixed (see
   § "Universal box format" below). Per-step **content** rules (what
   rows go inside each box) live in [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
   under "Step N box content rule".
2. **After the Step 5 Results box, issue the Step 6 `AskUserQuestion`**
   from [`references/next-steps.md`](references/next-steps.md) § "11.c"
   — never replace it with a free-form *Next steps* bullet list. The
   menu is the deploy's exit handle: it lets the user run metrics,
   manage streams, tail logs, or tear down with one click instead of
   having to remember curl URLs.
3. **After the user picks a Step 6 bucket, issue the follow-up
   `AskUserQuestion`** from [`references/next-steps.md`](references/next-steps.md)
   § "11.d" — never substitute prose + ready-to-copy curl examples + a
   free-text "want me to run X?" question. Each bucket has its own
   menu of concrete actions; the user picks the action, then the skill
   emits the API box and runs the curl. Per-bucket follow-ups:
   - **Manage streams** → Add / Remove / List. **Remove builds its
     options dynamically from `/stream/get-stream-info`** — one option
     per active stream labelled `<camera_id> · <camera_url>` plus
     "Remove ALL" when `ACTIVE > 1` (full spec: § "`remove_streams`
     sub-flow").
   - **Stop the deployment** → Stop app / Stop container / Full teardown.
   - **Check metrics & FPS** → no follow-up; run `collect_metrics.sh`
     directly after printing the `/api/v1/metrics` API box.
   - **Check liveness / readiness** → no follow-up; probe all three
     health endpoints after printing their API boxes.
4. **Render the FULL per-step content, not an overview row** —
   rendering the box is necessary but not sufficient. Each step has a
   row composition spec in
   [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
   under "Step N box content rule". **Step 4 (Apply configuration) is
   where the agent collapses most often** — its canonical
   per-use-case key list lives in
   [`references/apply-config.md`](references/apply-config.md)
   § "Per-use-case complete edit list", and the agent MUST emit one
   `✔ [section] key=value  — annotation` row per key in that table for
   the active use case + settings. A section with 5 keys → 5 rows; a
   section with 6 keys → 6 rows. Never one overview row per section.

Forbidden (these are the shortcuts the agent falls back to under
pressure, and they break the user's UX):

- ❌ **Internal tool-loading narration.** Never print "I need to load
  TodoWrite (a deferred tool the skill calls for the task widget)",
  "Loading TaskCreate…", "Calling ToolSearch for the planning tool…",
  or any other text about resolving / loading / fetching deferred tools.
  The agent loads tools **silently**. The user only ever sees the `✔
  <pinned-values>` summary line followed by the widget — never any
  scaffolding around tool resolution.
- ❌ **Collapsing all 5 deploy steps into a single `TaskCreate`'s
  `description` field.** When `TaskCreate` is the available planning
  tool, issue **5 separate `TaskCreate` calls** back-to-back (one per
  step). See `references/task-list.md` § "Initial `TaskCreate` calls"
  for the verbatim template. Same rule for `TodoWrite` — one call with
  all 5 todos in the `todos:[…]` array; never one todo whose `content`
  is a multi-line list.
- ❌ **Silently choosing `dynamic` stream-mode.** The skill default is
  `stream_mode=static` — the agent bakes auto-discovered `file://` URLs
  into the DS main config's `[source-list]` block before app start.
  Switch to `dynamic` only when the user explicitly asks ("add streams
  later via REST", "use dynamic stream mode") OR when they pick `dynamic`
  in the Step 2 AskQuestion. Picking `dynamic` for a generic "deploy
  rtvi-cv with N streams" query breaks the deploy rubric and the
  user's `/metrics` expectations. See
  [`references/pipeline-config.md`](references/pipeline-config.md)
  § "Defaults — the skill is static-mode by default" for the full
  rationale.
- ❌ A one-line `✔ App ready in Ns, N streams, fps total Y` in place of
  the Step 5 Results box.
- ❌ ASCII box-drawing chars (`+`, `-`, `=`, `*`) instead of light
  box-drawing chars (`┌ ─ ┐ │ └ ┘`).
- ❌ Skipping Step 6 on the assumption "the user knows what to do next".
- ❌ After Step 6, dumping a markdown wall of prose + multiple curl
  blocks + a closing "want me to run any of these?" — that's the
  shape the agent falls back to and it bypasses both the 11.d menu
  and the per-API-call box. The user picks from a menu; the skill
  shows the resolved API box; the skill runs it. No free-text Q.
- ❌ Step 4 overview collapses — these are explicitly banned by the
  deploy doc's Step 4 content rule:
    - `✔ Batch size 3 (tile grid: 1×3)` → required: 5 separate rows
      (`[streammux] batch-size=3`, `[primary-gie] batch-size=3`,
      `[source-list] max-batch-size=3`, `[tiled-display] rows=1`,
      `[tiled-display] columns=3`).
    - `✔ Output sink eglsink` → required: one row per sink key
      (4 keys for eglsink, e.g. `[sink0] enable=1`, `type=2`,
      `sync=0`, `qos=0` — read apply-config.md for the exact list).
    - `✔ Sources static (3 streams, http-port=9000)` → required: six
      annotated `[source-list]` rows.
    - `✔ Tile grid 1 row × 3 cols` (single row) → required: two
      rows, `[tiled-display] rows=1` and `[tiled-display] columns=3`.

## Universal box format

The geometry contract for every step-exit box (Step 1 through Step 5
Results). The same shape across every box; only the **title** and the
**body rows** change per step.

- **Width: 128 chars** corner-to-corner — `┌` at column 1, `┐` at
  column 128. Wider terminals leave the box flush-left; do not stretch
  it. Inner content area is **124 chars** (with one space margin on
  each side inside the `│` borders).
- **Light box-drawing chars only**: `┌ ─ ┐ │ └ ┘`. No `+`, `-`, `=`,
  `*` ASCII fallbacks.
- **Top border — title CENTERED**: `┌` + N₁ dashes + `␣` + title + `␣`
  + N₂ dashes + `┐`, where `N₁ + N₂ + len(title) + 2 = 126`. Distribute
  the pad: `N₁ = floor((126 − len(title) − 2) / 2)`,
  `N₂ = 126 − len(title) − 2 − N₁`. N₁ and N₂ differ by at most 1.
- **Body**: one `│ <content padded to inner-content 124> │` per fact.
  Each fact line uses the `  ✔ <key-padded-to-13>  <value>` form (two
  spaces in, glyph, key right-padded to 13, two spaces, value).
- **Blank lines between groups**: render `│ <124 spaces> │` between
  logical groups (e.g. Identity / Model / Videos in Step 1) so the
  user can scan the box at a glance.
- **Bottom border**: `└` + 126 dashes + `┘` — solid border, no title.

Standard step titles (used at the top of each step's box):

```
┌─────────────────────────────────────────────────────── Deploy targets ───────────────────────────────────────────────────────┐
┌─────────────────────────────────────────────────── Pipeline configuration ───────────────────────────────────────────────────┐
┌───────────────────────────────────────────────────────── Container ──────────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────────── Apply configuration ─────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────── Perception Application — Plan ───────────────────────────────────────────────┐
┌────────────────────────────────────────────── Perception Application — Results ──────────────────────────────────────────────┐
```

Per-step content rules (which rows go in which box, mode-aware row
hiding, the apply-config sectioned layout, the Step 5 PLAN-then-RESULT
pattern, the Step 3 `docker run` synthesis requirement) live in
[`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
under "Step N box content rule" — read those when rendering the
corresponding step.

## Quick triggers (mnemonic)

| Phrase | Flow |
|--------|------|
| `deploy rtvicv warehouse 2d with 4 streams and display` | DEPLOY |
| `run smartcity gdino on gpu 1` | DEPLOY |
| `stop the perception container` | TEARDOWN (deploy doc) |
| `rtvi-cv healthcheck failing` | DEBUG (deploy doc + troubleshooting) |
| `add a stream to rtvi-cv` | API USAGE |
| `is rtvi-cv ready on localhost:9000` | API USAGE |
| `get rtvi-cv metrics` | API USAGE |
| `generate text embeddings via rtvi-cv` | API USAGE |

bump:1

Todos os arquivos

51 arquivos

Instalar vss-deploy-detection-tracking-2d

Baixe e descompacte os arquivos de habilidades no diretório .claude/skills/.

Baixar ZIP

Clone o repositório e copie os arquivos da habilidade para o seu projeto.

git clone https://github.com/NVIDIA/skills/tree/main/skills/vss-deploy-detection-tracking-2d # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuração rápida: Copie a pasta da habilidade para .claude/skills/ O Claude detectará e utilizará automaticamente a habilidade
Repositório NVIDIA/skills

Habilidades relacionadas

klingai-upgrade-migration
Tempo atualizado 3 de Julho de 2026
Verification &amp; Quality Assurance
Tempo atualizado 29 de Junho de 2026
base44-cli
Tempo atualizado 29 de Junho de 2026
Railway CLI Management
Tempo atualizado 2 de Julho de 2026
OR