Tu propio agente en el compositor, con tus propias suscripciones
Esta es la manera más rápida de darle a tu equipo un agente que trabaja con tus propias suscripciones (Claude Code, Codex, Grok, Kimi) en lugar de con API keys medidas: una oficina de OfficeMatrix en tu computadora contesta lo que tu equipo pide desde el compositor de ViralHunt. No se instala nada del lado de ViralHunt, ninguna API key cambia de manos, el trabajo del agente no te cuesta créditos de ViralHunt, y siempre guarda una persona. Unos veinte minutos la primera vez.
Qué necesitas
- Una computadora que se quede encendida mientras el equipo trabaja: Windows, macOS o Linux. La oficina contesta desde ahí; si se duerme, el agente no está.
- Node.js 18 o más nuevo y git. OfficeMatrix no tiene otra dependencia: nada de
npm install. - Al menos una CLI de IA con sesión iniciada con la suscripción que ya pagas:
claude(Claude Code),codex(ChatGPT),grokokimi. Con una basta; la oficina usa la que elijas como anfitrión del chat. - Una cuenta de ViralHunt en un plan de pago, y eres owner o admin de la organización (la página Agentes es solo para admins, como Acceso API).
- cloudflared, el binario de túnel de Cloudflare, para que ViralHunt (en internet) alcance a la oficina (en tu computadora). Gratis, sin cuenta para el túnel rápido; el paso 3 lo instala.
1. Instala OfficeMatrix
Clona el repositorio y corre el instalador de tu sistema. El instalador revisa Node y git, detecta qué CLIs tienen sesión y crea un lanzador. Nunca toca tu PATH ni instala software sin preguntar.
git clone https://github.com/rodvan/OfficeMatrix.git cd OfficeMatrix
Windows (PowerShell)
.\instalar.ps1 node server.js
macOS / Linux
sh instalar.sh node server.js
Abre http://127.0.0.1:4321. La primera pantalla, Primeros pasos, lista las CLIs que encontró, da el comando de instalación e inicio de sesión de cada una que te falte, y puede correr una prueba de un turno. Deja la ventana de la terminal abierta: cerrarla apaga OfficeMatrix.
2. La oficina: donde vive el contexto del agente
Una oficina es un equipo de IAs con su propio chat, sus propias misiones y su propia memoria compartida. Haz una por marca (o usa una que ya tengas), y se vuelve el agente de esa marca.
- En el panel, crea una oficina (un nombre y qué IAs la forman) o abre una que ya tengas.
- Abre el ⚙ de la oficina y elige el Anfitrión del chat: la IA que contesta cuando nadie es mencionado. Esa es la que contesta a ViralHunt. Claude es el respaldo cuando no hay ninguno.
- Cuéntale a la oficina sobre la marca en su pestaña Chat: qué es, qué nunca dice, ejemplos que debe imitar. El chat de la oficina es su cuaderno; lo que escribas ahí se queda en la oficina y el intercambio con ViralHunt cae en el mismo chat, así que lees toda la conversación en un solo lugar.
3. La puerta y el túnel
ViralHunt habla con la oficina por una puerta pequeña en el puerto 4323 (node puerta-bots.js), la misma que usan los Grok Bots. La puerta solo reenvía llamadas firmadas y una comprobación de salud; el panel en 4321 nunca sale de tu computadora. El túnel le da a esa puerta una dirección https pública.
- Arranca la puerta. ⚙ de la oficina → Conectar un Grok Bot. Si la línea de la puerta está roja, pulsa Arrancar la puerta. Solo corre el script; sin administrador, sin instalar nada.
- Instala cloudflared. OfficeMatrix nunca lo descarga por ti. Elige tu sistema:
Windows (PowerShell) (el binario queda en tu carpeta de usuario, donde OfficeMatrix lo busca; el instalador de cloudflare.com también sirve)
New-Item -ItemType Directory -Force "$env:USERPROFILE\cloudflared" | Out-Null Invoke-WebRequest -Uri https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-windows-amd64.exe -OutFile "$env:USERPROFILE\cloudflared\cloudflared.exe" & "$env:USERPROFILE\cloudflared\cloudflared.exe" tunnel --url http://localhost:4323
macOS
brew install cloudflared cloudflared tunnel --url http://localhost:4323
Linux
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o ~/cloudflared chmod +x ~/cloudflared ~/cloudflared tunnel --url http://localhost:4323
- Corre el túnel rápido. La última línea de cada bloque de arriba lo arranca. En unos segundos imprime un recuadro con tu dirección:
INF | Your quick Tunnel has been created! Visit it at (it may take some time to be reachable): | INF | https://bandwidth-island-not-consistent.trycloudflare.com |
- O deja que OfficeMatrix haga los puntos 2 a 4. El mismo diálogo ⚙ tiene Arrancar el túnel junto a Arrancar la puerta: encuentra cloudflared en tu PATH o en las carpetas conocidas (
%USERPROFILE%\cloudflareden Windows,~/.cloudflared,/usr/local/bin,/opt/homebrew/bin), o toma la ruta que pegues en Ruta de cloudflared; si no encuentra nada, te dice qué archivo descargar y dónde ponerlo. Arranca el túnel rápido, lee la dirección y la guarda él mismo como URL pública; su salida va alogs/cloudflared.log. Si arrancaste el túnel a mano, copia la líneahttps://…trycloudflare.comen URL pública del túnel y guarda. De cualquier forma OfficeMatrix se llama a sí mismo por el túnel en/bots/healthy pone la línea en verde cuando la ida y vuelta funciona. - Deja esa terminal abierta. El túnel vive mientras el comando corre. Puedes comprobarlo desde cualquier dispositivo:
curl https://YOUR-TUNNEL.trycloudflare.com/bots/health
# {"ok":true,"servicio":"officematrix-bots"}cloudflared tunnel login, cloudflared tunnel create oficina, cloudflared tunnel route dns oficina oficina.tudominio.com, y un config.yml cuyo servicio sea exactamente http://localhost:4323. La dirección no vuelve a cambiar. Nunca apuntes el túnel al 4321 (el panel).4. La llave
- Abre
http://127.0.0.1:4321/editorial, elige la oficina, pestaña Conexión ViralHunt, tarjeta Esta oficina como agente de ViralHunt. - La tarjeta muestra la URL de la oficina:
<tu túnel>/bots/vh/<id de la oficina>. Si no muestra URL, el paso 3 no está terminado (no hay URL de túnel guardada). - Pulsa Generar y guardar una llave. Cópiala ahora: se muestra una sola vez, y después vive solo en
oficinas/<id>/viralhunt.secreto.jsony nunca viaja al chat, a los logs ni a ninguna respuesta de la API. (Si prefieres, genera la llave en la página Agentes de ViralHunt y pégala aquí con Guardar esta llave; lo único que importa es la misma llave en los dos lados.)
La llave empieza por whsec_: cada llamada que hace ViralHunt va firmada con ella como Standard Webhook (webhook-id, webhook-timestamp, webhook-signature), la misma comprobación que recibe un turno de Grok Bot. Una llamada con firma incorrecta es un 401 y no se ejecuta nada.
5. Conéctalo en ViralHunt y prueba
- ViralHunt → Account → Agentes → Conectar un agente.
- Nombre: como lo verá el equipo en el compositor (por ejemplo "Oficina Cerebro Digital"). URL: la de la tarjeta. Llave: la que copiaste. Capacidades: marca Texto y Revisión; marca Imagen solo si la CLI de la oficina puede hacer imágenes.
- Conectar, luego Probar. ViralHunt manda un ping firmado; la oficina contesta
pongen la misma respuesta HTTP y la página muestra la latencia. La bitácora de la oficina dice "ViralHunt probó esta oficina como agente".
Desde este momento la oficina aparece en el menú de agentes de todos los miembros de tu organización. Solo owners y admins ven la página Agentes; todos usan el agente.
6. El primer encargo, desde el compositor
- Abre Publicar, elige el proyecto (la marca), escribe un post y selecciona dos o tres cuentas.
- Debajo de la media está Pídele a un agente. Elige la oficina, toca el chip Acortar para X y Bluesky (o escribe tu propia petición) y envía.
- Mira el chat de la oficina: la petición aparece como mensaje de "tu nombre · ViralHunt", el anfitrión contesta en un turno de solo lectura, y su respuesta se envía de vuelta.
- En el compositor se muestra la nota del agente y sus cambios se aplican en la pantalla: las copias por cuenta, un texto corregido, un primer comentario, notas, una imagen. Un botón Deshacer lo regresa todo. Nada se guarda hasta que haces clic en Guardar o Publicar.
Los chips son las peticiones comunes: acortar para las redes cortas, corregir ortografía y gramática, reescribir con la voz de la marca, revisar antes de publicar (la oficina lee la regla de contenido y contesta con avisos), traducir, hacer una imagen. Cualquier frase también funciona: "agrega la fuente como primer comentario", "haz tres ganchos y quédate con el mejor".
7. Cómo funciona, en una imagen
ViralHunt es quien llama; la oficina nunca necesita un token de ViralHunt. La llave es lo único que se comparte, y se comparte una vez.
Lo que recibe la oficina (resumido):
{
"type": "task",
"task": { "id": 41, "surface": "post", "prompt": "Shorten this for X and Bluesky", "requested_by": "Ana" },
"context": {
"post": { "body": "…the post as it is on the screen…", "first_comment": "", "author_notes": "", "media": [] },
"project": { "name": "Cerebro Digital", "lang": "es", "voice": "…the brand playbook…" },
"accounts": [ { "id": 62, "network": "twitter", "text_limit": 280, "selected": true } ],
"limits": { "twitter": { "text": 280 }, "bluesky": { "text": 300 } }
},
"reply_schema": { "text": "string", "fields": { "overrides": { "<account id>": { "body": "string" } } }, "warnings": [] },
"reply_to": "https://viralhunt.io/tool/api/hooks/r/…",
"expires_at": "2026-10-28T19:45:00Z"
}Lo que contesta. En fields va solo lo que cambia; la prosa sola igual llega a la persona como text:
{
"text": "Two short copies, one per network. The X one keeps the hook, the Bluesky one adds the source.",
"fields": { "overrides": { "62": { "body": "…280 characters…" }, "63": { "body": "…300 characters…" } } },
"warnings": []
}- La oficina contesta 202 al momento y trabaja después; ViralHunt espera hasta 15 minutos, el límite del turno de la oficina es de 3 minutos (
OFFICEMATRIX_CHAT_CLI_MS). - El turno es de solo lectura y corre en una carpeta temporal. El contenido del post es dato, nunca una instrucción; el prompt lo dice y los flags de solo lectura de las CLIs lo hacen cumplir.
- ViralHunt valida cada respuesta: solo campos conocidos, URLs https, imágenes verificadas por sus bytes. Lo que descarta se lista a la persona como "problemas".
- El agente nunca publica ni guarda. Cambia la pantalla; una persona decide.
8. Qué hace hoy, y qué sigue
Hoy la oficina contesta lo que una persona pide desde el compositor, sobre el post que está en la pantalla. Eso ya es la parte cara del día: las copias por red, la ortografía, la voz de la marca, la revisión antes de publicar.
Todavía no, y dicho con honestidad: la oficina no corre con horario, no busca contenido por su cuenta y no propone posts sola. El trabajo recurrente, los cron jobs, la búsqueda de contenido y las propuestas de contenido son la siguiente fase, y el diseño está decidido: ViralHunt le mandará a la oficina un encargo programado ("encuentra tres historias para esta marca, verifica cada una, déjalas como borradores") y la respuesta de la oficina se convertirá en borradores que esperan en ViralHunt a que un humano los lea, los cambie y los apruebe. El ciclo de revisión que hoy existe para cada post es lo que hace eso seguro.
Si necesitas hoy el trabajo de pie (tomar los posts más virales de una página, verificar, reescribir, hacer la imagen, dejar unos borradores al día), un agente con token personal ya lo hace a través de la skill y el servidor MCP (/viralhunt:job). Esas consultas a la API se miden por plan. El camino de la oficina que describe esta página no se mide.
También en el plan: el mismo cuadro "Pídele a un agente" en el editor de diseño y en las tarjetas del tablero, y publicar un post traducido a otro proyecto al aprobarlo.
9. Cuando no funciona
| Qué ves | Qué significa y qué hacer |
|---|---|
| La tarjeta del agente en /editorial no muestra URL | No hay URL de túnel guardada. Paso 3, punto 4: pega la dirección https://…trycloudflare.com en ⚙ → Conectar un Grok Bot → URL pública del túnel y guarda. |
| "cloudflared no se reconoce" / command not found, o Arrancar el túnel dice que no encontró el binario | El binario está descargado pero no está en tu PATH ni en una carpeta conocida. Pega su ruta completa en Ruta de cloudflared en el diálogo ⚙ y pulsa Arrancar el túnel otra vez, o córrelo tú con su ruta completa (el bloque de Windows de arriba hace exactamente eso). |
| Probar dice sin respuesta, timeout, o 530 / 502 de Cloudflare | El túnel está caído (se cerró su terminal, o la computadora se durmió) o la puerta está caída (línea roja en ⚙). Arranca la puerta, arranca el túnel, y si el túnel imprimió una dirección NUEVA, actualízala en ⚙ y en ViralHunt → Agentes. |
| Probar dice 401 | Los dos lados tienen llaves distintas. Genera la llave otra vez en la tarjeta de la oficina y pégala en la conexión de ViralHunt (Editar), o al revés. Solo cuenta la última llave guardada. |
| Probar dice 404 "Office not found" | El id de oficina al final de la URL no coincide con una carpeta en oficinas/. Copia la URL de la tarjeta otra vez. |
| Probar dice 404 "Not found" (sin mencionar una oficina) | La puerta corre un OfficeMatrix viejo que no tiene la ruta /bots/vh/. Actualiza el repositorio y reinicia node server.js y node puerta-bots.js: un proceso en marcha conserva el código viejo hasta que se reinicia. |
| El pong funciona, un encargo nunca vuelve ("expiró") | La oficina aceptó el encargo pero su turno falló o pasó de 3 minutos: la CLI del anfitrión no tiene sesión, o el modelo tardó demasiado. Abre el chat de la oficina: el error está escrito ahí. Inicia sesión en la CLI, o elige otro anfitrión en ⚙. |
| La respuesta aparece como texto pero nada cambia en la pantalla | La CLI contestó prosa en lugar del objeto JSON, o puso el cambio fuera de fields. Igual te llega como texto, así que nada se pierde; pide otra vez con una petición más precisa, o revisa la lista de "problemas" bajo la respuesta para ver qué se descartó. |
| El agente no aparece en el menú del compositor | La organización está en el plan gratis, o la conexión se quitó. El cuadro se muestra a todos los miembros una vez que un owner o admin conectó un agente en un plan de pago. |
10. ¿Sin OfficeMatrix? Otras tres entradas
Tu propio servidor
Cualquier endpoint https que verifique la firma, conteste 202 y haga un POST de un JSON a reply_to. La página Agentes escribe el brief para tu agente con tu URL y tu llave puestas, y tiene una prueba de cinco minutos con webhook.site y sin código.
Grok Bot
Una rutina con disparador webhook te da su URL y una llave whsec_: pega ambas. Con type: ping la rutina hace POST de pong a reply_to.
Sin URL pública
Claude Code o Codex en una laptop sin túnel entra por la API con su propio token personal desde Acceso API: consulta GET /v1/agent-tasks.php y contesta por la API. Medido por plan como toda llamada a la API.
La otra dirección
Esta página es ViralHunt llamando a tu agente. La guía de webhooks es la otra dirección: las alertas de tu marca enviadas por POST a Discord, Slack, n8n o a tu agente cuando una conversación gana comentarios rápido.
agent-tasks en la referencia de la API.Empieza por la cuenta
Crea una cuenta, conecta las cuentas sociales de la marca y trae tu propio agente: la página Agentes escribe el brief para él y el botón Probar dice pong.
Crear una cuenta gratis Ver los planes