Skip to content
Back to skills

Matriz Espiar

ASecurity

Trae el contenido viral de otra cuenta y analiza los videos que tú elijas

  • 3 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 19, 2026
content-marketinggobashvuenodeapi

Works with

  • api

Security analysis

A100/100

Scanned October 19, 2026

npx -y skills add Hainrixz/matriz-viralidad --skill matriz-espiar --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Matriz Espiar?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Matriz Espiar
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hainrixz-matriz-espiar/badge)](https://www.skillsdirectory.com/skills/hainrixz-matriz-espiar)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: matriz-espiar
description: Trae el contenido viral de otra cuenta y analiza los videos que tú elijas
argument-hint: "<handle> <red>  |  <url-de-video>"
---

# /matriz-espiar — qué está haciendo el que sí funciona

Dos caminos, según lo que venga en `$ARGUMENTS`:

- **Si empieza con `http`** → es una URL suelta de un video. Ve al **Camino B**.
- **Si son dos palabras** (handle y red) → ve al **Camino A**.
- **Si viene vacío** → pregunta: "¿de qué cuenta y en qué red?" y espera. No adivines.

Redes válidas: `instagram` (reels por defecto), `instagram-posts` si pide carruseles y fotos, `tiktok`,
`youtube`, `x`.

## RAIZ — dónde están los scripts

Raíz del plugin: ${CLAUDE_PLUGIN_ROOT}

Si la línea de arriba muestra una ruta absoluta, `RAIZ` es esa ruta (modo plugin). Si en cambio
muestra el marcador sin sustituir (un texto con signo de dólar y llaves), estás en modo clon: `RAIZ` es
la carpeta actual (`ls scripts/apify.mjs` lo confirma). En los comandos, `<RAIZ>` se reemplaza por ese
valor. Los datos de la persona viven siempre en la carpeta actual.

Si al despachar un subagente (`espia`, `analista-video`, `matricero`, `simulador`, `validador`…) el sistema no lo
encuentra con ese nombre, estás en modo plugin: usa el nombre con prefijo, p. ej. `matriz-viralidad:espia`.

---

## Antes de empezar

- `node "<RAIZ>/scripts/revisar.mjs" llaves` (nunca muestra valores). Si `APIFY_TOKEN` falta: dilo, di
  de dónde sale (https://apify.com/sign-up) y **para** — sin token no hay de dónde bajar nada.
- `GEMINI_API_KEY` es **opcional**. Si está, el análisis de video sale por Camino A y oye el audio.
  Si falta, dilo en una línea y sigue: existe Camino B, que lee el subtítulo quemado en pantalla sin
  llamar a ninguna API de pago. No te detengas por esto.
- `perfil.json` no es obligatorio aquí, pero si existe, léelo: te da el nicho y sirve para no bajar
  cosas que no vienen al caso. Si no existe, avisa en una línea que `/matriz-start` deja el sistema mejor
  armado, y sigue igual.
- Solo cuentas públicas. Si el actor devuelve que la cuenta es privada o no existe, dilo y para.

---

# Camino A — una cuenta

## A1. Saca el subagente `espia`

Lánzalo con **Agent**, `subagent_type: "espia"`. En el mensaje dale, sin ambigüedad:

- `RAIZ`, el handle y la red (en el script: `instagram-reels` para Instagram por defecto, `instagram` si
  quiere carruseles y fotos, `tiktok`, `youtube`, `x`).
- Que corra **primero** `--estimar` y te devuelva el costo; **tú se lo muestras a la persona y esperas
  su sí en este turno** (AskUserQuestion: "Voy a traer <n> piezas de @<handle> en <red>. Estimado:
  $<x>. Tope duro: $<y>. ¿Corro?" → Sí · Solo la mitad · No). Sin ese sí, no se corre.
- `--limite 40 --tope 1.00` (cuenta nueva) o `--limite 15 --tope 0.50` (cuenta que ya espiaste).
- Que el crudo quede en `fuentes/` (lo escribe el script solo) y **que no lo edite nunca**.
- Que corra `mediana.mjs` y devuelva las piezas **ordenadas por rendimiento descendente**, con: número,
  fecha, primeras 8 palabras del texto, views, múltiplo, si tiene video descargable y la URL.
- Que las piezas sin views vayan al final marcadas `s/d`, **no como cero**.

Los comandos que el subagente corre (la sintaxis es posicional; no inventes banderas, el script
rechaza las que no conoce):

```bash
node "<RAIZ>/scripts/apify.mjs" posts <handle> <red> --limite 40 --tope 1.00 --estimar
node "<RAIZ>/scripts/apify.mjs" posts <handle> <red> --limite 40 --tope 1.00 > ".matriz/normalizado-<red>-<handle>.json"
node "<RAIZ>/scripts/mediana.mjs" "fuentes/<crudo-que-escribio-el-script>.json"
```

Una corrida tarda de 15 s a unos 2 minutos. Si va a tardar, el subagente la lanza en segundo plano.

## A2. Muestra la lista y para

Imprime una lista **numerada**, de mayor a menor múltiplo. Así:

```
Mediana de @<handle> en <red>: <n> views  (sobre <k> piezas con views, de <total>)

 1.  6.8x   2026-07-14   "nadie te dice esto del desayuno"        447,000 views   video
 2.  3.2x   2026-06-02   "probé entrenar 10 minutos 30 días"      210,000 views   video
 3.  2.1x   2026-08-01   "3 errores que te frenan"                138,000 views   carrusel, sin video
 ...
 12. s/d    2026-05-20   "gracias por los 100k"                   s/d             carrusel, sin video
```

**Aquí te detienes.** No bajes nada todavía.

## A3. Pregunta qué bajar

Con **AskUserQuestion**:

- header "Videos" — "¿Cuáles analizo? Por Camino A cuesta entre $0.003 y $0.011 por video según su
  duración; por Camino B cuesta $0.00 de API. La descarga es gratis en los dos."
  - **Los 3 más virales** — rápido y suficiente para ver el patrón.
  - **Los 5 más virales** — más señal, unos 4 centavos por Camino A.
  - **Elijo yo** — me dices los números.
  - **Ninguno por ahora** — me quedo con la lista.

Si elige *Elijo yo*, pídele los números en el chat ("3, 5 y 9") y espera.

**Baja solamente los que eligió.** Ni uno más.

## A4. Baja y analiza, uno por uno

Para cada pieza elegida:

1. Si la pieza **tiene** URL de video:

```bash
node "<RAIZ>/scripts/descargar.mjs" "<video_url>" "videos/<red>-<id>.mp4"
```

La URL del video caduca rápido. Descárgala en cuanto la tengas; si da 403 o 404, dilo y sigue con la
siguiente. No la reconstruyas a mano.

2. Saca el subagente `analista-video` con **Agent**, `subagent_type: "analista-video"`, pasándole la
   ruta del `.mp4` y las métricas de la pieza. Él corre:

El agente elige camino solo, según `MATRIZ_ANALIZADOR` en el `.env` (por defecto `auto`):

```bash
# Camino A — oye el audio, cuesta dinero (pide confirmación)
node "<RAIZ>/scripts/gemini.mjs" "videos/<red>-<id>.mp4"

# Camino B — lee el subtítulo quemado, $0.00 de API
node "<RAIZ>/scripts/fotogramas.mjs" "videos/<red>-<id>.mp4"
```

Pásale a `analista-video` también el valor de `RAIZ`. Si Gemini no está disponible y la skill `watch`
está instalada, para un video suelto con URL prefiere `/matriz-ver` (Camino C: oye por subtítulos o
Whisper y ve los fotogramas).

Con `auto`, si Gemini sale con **código 3** (key ausente o inválida, cuota, sin red) el agente cae a
Camino B y lo grita. Con código 1 no cae: reporta y para. Tú no armes ninguna de las dos llamadas a
mano ni cambies el modelo.

3. Si la pieza **no tiene** video (carrusel, imagen, tuit): no hay descarga ni Gemini. Analiza el
   texto que trae el crudo y **marca como `s/d`** todo lo que solo se ve en video: hook visual,
   ritmo, duración, transcripción. Dilo en el archivo. Un carrusel analizado como si fuera video es
   dato inventado.

---

# Camino B — una URL suelta

1. Descarga directo:

```bash
node "<RAIZ>/scripts/descargar.mjs" "$ARGUMENTS" "videos/suelto-<id>.mp4"
```

`descargar.mjs` baja archivos de video directos, no páginas de posts. Si el enlace es la página de un
post o de YouTube, usa `/matriz-ver`, que baja el video con `yt-dlp` y lo analiza. Si la persona quiere
las métricas del post, necesitas el handle y la red: pídelos.

2. Saca el subagente `analista-video` igual que en A4.

3. **Advierte esto y no lo escondas:** sin la cuenta completa no hay mediana, así que
   **`RENDIMIENTO` va `s/d`**. Un video suelto te dice cómo está hecho, no si funcionó. Para saber
   si funcionó, corre `/matriz-espiar <handle> <red>`.

---

## El archivo de cada análisis

Lo escribe el subagente `analista-video`, uno por pieza, en `transcripciones/<id>.json`. **JSON, no
markdown**: `matricero` lo lee por nombre de campo y cruza con `fuentes/` por el id, así que las
métricas no se repiten aquí — ya viven en el crudo.

Las 7 claves y el bloque `_meta` están especificados en `agents/analista-video.md`. No inventes una
forma distinta ni le agregues campos: la matriz depende de que todas las piezas tengan la misma.

Reglas que no cambian: el hook va **literal**, entre comillas, sin arreglar la redacción. Lo que no
sepas, `s/d`. Nunca conviertas `s/d` en cero ni en promedio.

---

## Al cerrar

- Si `perfil.json` existe, añade la cuenta a `competencia` con la fecha y el archivo fuente.
- Di cuántas piezas hay ya en `transcripciones/`: `ls transcripciones/*.json | wc -l`.
  Si son 10 o más, sugiere `/matriz-construir`. Si son menos, di cuántas faltan para llegar a 10.
- Di cuánto costó de verdad la corrida si Apify lo devolvió; si no lo devolvió, di `s/d`.

Imprime la lista de archivos que escribiste, con su ruta.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.