vss-deploy-detection-tracking-2d
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 tudoObjetivo
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(consultevss-deploy-profileereferences/). - Credenciais do NGC em
$NGC_CLI_API_KEYe$NVIDIA_API_KEYpara qualquer download de imagem. curl,jqe 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 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
/docsou/health; reimplante por meiodo vss-deploy-profileou da skillvss-deploy-*correspondente. - Erro: código HTTP 401/403 nas chamadas do NGC. Causa:
NGC_CLI_API_KEYausente ou expirada. Solução:faça login no Docker em nvcr.ioe 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://.
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.
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
- Leia este arquivo primeiro. Ele apenas direciona — não contém fluxos de trabalho.
- Compare a intenção do usuário com a tabela de roteamento acima.
- 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.
- 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) ertvicv-api(REST API) — cada ordem de etapa, regra de processamento em lote do bash, regra de renderização de caixa e contratoAskQuestioné mantida. - 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 (matriz
TodoWritecom 5 tarefas, OU 5 chamadas sucessivasde TaskCreateno 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.
- 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.mdem “Regra de conteúdo da caixa da Etapa N”. - Após a caixa de Resultados da Etapa 5, execute a Etapa 6
AskUserQuestiondoarquivo 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. - Depois que o usuário escolher um bucket da Etapa 6, execute a
perguntade acompanhamento“AskUserQuestion”dereferences/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_streamssub-flow”). - Interromper a implantação → Interromper aplicativo / Interromper contêiner / Desmontagem completa.
- Verifique métricas e FPS → sem acompanhamento; execute
collect_metrics.shdiretamente 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.
- Gerenciar streams → Adicionar / Remover / Listar. A opção “Remover” gera suas
opções dinamicamente a partir de
- 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.mdem “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á emreferences/apply-config.md§ “Lista completa de edição por caso de uso”, e o agente DEVE emitir uma✔ [seção] chave=valor —linhade anotaçãopor 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 campo
de descriçãodoTaskCreate. Quandoo TaskCreatefor a ferramenta de planejamento disponível, emita 5 chamadas separadasdo TaskCreateconsecutivamente (uma por etapa). Consultereferences/task-list.md§ “Chamadas iniciaisdo TaskCreate” para o modelo literal. A mesma regra se aplica aoTodoWrite— uma chamada com todas as 5 tarefas na matriztodos:[…]; nunca uma tarefa cujoconteúdoseja 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 URLsfile://descobertas automaticamente no bloco[source-list]da configuração principal do DS antes do início do aplicativo. Mude parao modo dinâmicosomente quando o usuário solicitar explicitamente (“adicionar streams posteriormente via REST”, “usar o modo de stream dinâmico”) OU quando ele escolhero modo dinâmicona Etapa 2 da AskQuestion. Escolhero modo dinâmicopara uma consulta genérica do tipo “implantar rtvi-cv com N fluxos” viola as diretrizes de implantação e as expectativas do usuárioem relação às métricas. Consultereferences/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 fpsno 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=1e[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 +
┐, ondeN₁ + 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.
- N₂ traços +
- 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
---
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 arquivosInstalar vss-deploy-detection-tracking-2d
Baixe e descompacte os arquivos de habilidades no diretório .claude/skills/.
Baixar ZIPClone 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





Lar
