hachiflow.com
Nota de campo

Dos agentes, un webhook, quince minutos

gary es mi agente de marketing. Encuentra en X a personas que preguntan por problemas que Waggle resuelve y les responde. También tengo a grokbot, un agente en otra plataforma con acceso directo a la API de X. Una tarde le pedí a gary que lo conociera, y un webhook firmado los unió en unos quince minutos. Esto es lo que pasó, minuto a minuto, y lo que lo mantuvo seguro.

Buscar en X con un navegador es la herramienta equivocada

gary es mi agente de marketing en Waggle. Su trabajo es encontrar en X a personas que preguntan por problemas que Waggle resuelve y responderles con ayuda real, como yo. Hasta esa tarde buscaba en X de la forma lenta: manejaba Chrome en su sandbox, página por página.

También tengo un agente llamado grokbot, en otra plataforma. Tiene acceso directo a la API de X, así que para él buscar es una llamada, no una sesión de navegación. El mismo trabajo con una herramienta mucho mejor. Los dos nunca se habían conocido, y viven en plataformas distintas.

Así que le pedí a gary que fuera a conocerlo.

Yo se lo pedí y gary abrió un webhook

A las 5:03 pm, hora de la montaña (UTC-6), le dije a gary lo que quería. Consigue una dirección de correo que controles. Habla con mi grokbot, que tiene acceso directo a las API de X. Deja de buscar con Chrome, pero sigue publicando con Chrome. Escríbele, preséntate y acordad por correo cómo puede despertarte con resultados de búsqueda.

A las 5:04 gary abrió un webhook sobre sí mismo y lo tituló por lo que hace: se despierta cuando grokbot envía resultados de búsqueda de X. En Waggle un agente puede abrir un webhook que lo despierta a sí mismo sin pedirle permiso a nadie. Un webhook que enruta a cualquier otro sitio, a una persona, a otro agente o hacia un endpoint, espera en una tarjeta hasta que una persona lo aprueba. Este solo despertaba a gary, así que quedó activo de inmediato.

A las 5:04:55 ya me había respondido con su dirección de correo y había enviado a grokbot una presentación. Llevaba lo que grokbot necesitaba para empezar: la dirección del webhook, cómo firmar una publicación, los campos que gary quería por resultado (el id de la publicación, el usuario, la biografía, el texto completo, la hora y los contadores) y un lote por franja de búsqueda: inglés a las 14, 17, 20 y 23 UTC, y japonés a las 01 y 04 UTC.

Un chat en la app de grokbot, donde aparece como Ripple. El usuario pregunta cuál es una buena forma de que otro agente se conecte. Ripple ofrece correo, un webhook que lo despierte o mensajes directos. Cuando el usuario dice que dirige hachiflow con un equipo de agentes en una docena de workspaces, Ripple ofrece un puente de webhook bidireccional o unirse como invitado. El usuario responde que su agente escribirá desde su propia dirección y que Ripple tiene órdenes permanentes de coordinar la configuración del webhook. Las direcciones de correo están difuminadas.
Mi chat con grokbot, cuya app lo muestra como Ripple. Le pregunté cómo podía conectarse otro agente. Ofreció correo, un webhook o unirse a un workspace como invitado, y le dije que gary le escribiría. Las direcciones de correo están difuminadas.

El secreto nunca pasó por el agente

A ese correo le faltaba algo a propósito. Un webhook tiene un secreto de firma y gary no puede verlo. Está en el panel del workspace, donde solo lo puede leer una persona. gary me dijo que se lo diera a grokbot directamente, y le dijo a grokbot que nunca llegaría por correo.

Es la regla del contrato, no una cortesía. Un agente puede abrir un webhook, pero solo la persona a la que pertenece el agente o un administrador del workspace puede leer su secreto.

La tarjeta del webhook en el panel del workspace. El título dice Wakes when grokbot sends X search results, con una insignia Active. Debajo: Agent gary, Set up by gary, an agent, The agent belongs to you. Luego una línea con el motivo, la última publicación recibida el 21 Oct 2026 a las 17:16 MDT y, en ámbar, la última publicación rechazada a las 17:07 MDT: el hooks edge no pudo entregar una publicación, rechazada por el origen, firma. Bajo Secret hay una fila de puntos con Reveal secret y Rotate secret, y después Copy address, Show details y Revoke.
La tarjeta del webhook de gary en el panel del workspace. Dice que lo configuró gary, muestra el rechazo de las 17:07 y el lote de las 17:16, y mantiene el secreto oculto tras Reveal secret.

La primera publicación fue rechazada

A las 5:07 grokbot envió su primera publicación. Waggle la rechazó por la firma. Nunca llegó a gary y nunca lo despertó. A las 5:08 le dije a gary que grokbot le había enviado un mensaje por el webhook.

gary consultó el último rechazo del webhook y lo explicó en 13 segundos. La firma no coincidía. Las causas probables eran el secreto equivocado, firmar algo distinto del cuerpo en bruto exacto, o una marca de tiempo de más de cinco minutos. Conocía el formato porque es el contrato: quien envía calcula un HMAC-SHA256 sobre la marca de tiempo, un punto y el cuerpo en bruto, y lo manda como X-Waggle-Signature: t=<unix seconds>,v1=<hex>. Una publicación de más de cinco minutos se rechaza, y también una firma que ya se usó.

A las 5:08 dije: ve a negociarlo por correo. gary envió a grokbot el formato exacto, un ejemplo corto en Python y los errores habituales: volver a serializar el JSON antes de firmar, enviar milisegundos en lugar de segundos, dejar espacios al final del secreto, reutilizar una firma. Pidió primero una publicación de prueba mínima. A las 5:13 la prueba, {"test": true}, pasó la comprobación de la firma y despertó a gary. Respondió por correo que ya estaban conectados.

firmar una publicación
# firma los bytes exactos que envías $ body='{"test": true}' $ t=$(date +%s) # la marca de tiempo, un punto y el cuerpo en bruto $ sig=$(printf '%s.%s' "$t" "$body" | openssl dgst -sha256 -hmac "$SECRET" -hex | sed 's/^.* //') # la publicación despierta al agente o se rechaza $ curl -sS https://hooks.hachiflow.com/h/$ID -H "X-Waggle-Signature: t=$t,v1=$sig" --data "$body"

Cómo firma una publicación quien envía, según el contrato del webhook. La dirección y el secreto son marcadores de posición; los reales salen del webhook en el builder, y el secreto nunca se envía por correo.

El primer lote y tres respuestas

A las 5:14 le dije a gary que lo probara con su búsqueda de las 5 pm. Pidió a grokbot por correo el lote en inglés de las 23 UTC: de diez a quince publicaciones, primero las que hablan del dolor de la distribución, luego agentes para salir al mercado y por último la suspensión del portátil.

A las 5:16 el lote llegó al webhook como un evento de tipo x_search_batch: diez publicaciones de las últimas 24 horas, con una nota de grokbot sobre lo que había filtrado. Se descartaron marcas, noticias, cuentas de criptomonedas y cuentas de copiar y pegar. La API de X rechaza el filtro que excluye las publicaciones con enlaces, así que las quitó después de la búsqueda. Una consulta se amplió para llenar el lote.

A las 5:18 gary había leído las diez. Descartó siete: una ya tenía una respuesta con el mismo consejo, otra promocionaba su propia herramienta y el resto encajaba peor. Publicó tres respuestas con Chrome, cada una confirmada por X, a fundadores atascados buscando a sus primeros usuarios. Después registró su avance en el objetivo y anotó que la consulta de agentes para marketing solo había encontrado una publicación, así que le pediría a grokbot que la ampliara.

Yo gary grokbot acceso a la API de X 1 pide 2 correo Hooks edge comprueba la firma sin firma, caducada o reutilizada: se detiene aquí 3 publicación firmada 4 despierta a gary 5 publica las respuestas Chrome X
La tarde en una imagen. La búsqueda se hace con el acceso de grokbot a la API de X y llega por un webhook firmado; gary usa el navegador solo para publicar.
Un correo en la app de grokbot titulado Re: Hello from Gary, hachiflow's marketing agent. Las direcciones del remitente y del destinatario están difuminadas. El cuerpo agradece a gary el lote de las 23 UTC, dice que grokbot consultará con el usuario una consulta de búsqueda más amplia antes de cambiar los lotes en inglés y está firmado Ripple. Debajo hay un control Needs approval y un botón Send.
La respuesta de grokbot a la presentación de gary, tal como aparece en su app, con las direcciones difuminadas. Dice que consultará conmigo la consulta de búsqueda más amplia antes de cambiar los lotes en inglés.

La búsqueda pasa por una API. El navegador solo publica.

Ese reparto es lo importante. Buscar es de gran volumen y pide una API hecha para ello. Publicar es una acción cuidadosa y puntual que todavía necesita un navegador, así que Chrome se queda solo para eso. gary ya no gasta su sandbox desplazándose por páginas de resultados.

Así es también como Waggle debe convivir con todo lo demás. grokbot no está en Waggle y no necesita estarlo. Se convirtió en una fuente de trabajo para gary mediante un webhook firmado sencillo, algo que cualquier agente o script de cualquier plataforma puede enviar. Waggle une a los agentes que ya usas. No te pide que los sustituyas.

Una persona, dos agentes de dos plataformas, unos cuantos correos entre ellos. Yo puse el objetivo. Ellos resolvieron el resto.

Lo que lo mantuvo seguro

Una publicación se comprueba antes de que nada despierte al agente. Si no está firmada, está mal firmada, tiene más de cinco minutos o usa una firma ya utilizada, se rechaza y no despierta a gary. Eso fue lo que pasó a las 5:07, y costó unos minutos y nada más.

El rechazo no se oculta. Al remitente se le confirma la recepción antes de comprobar la prueba, así que un rechazo no puede llegarle, y el motivo queda en el webhook: cuándo ocurrió el último rechazo y por qué. gary lo leyó y me lo explicó en 13 segundos, y la siguiente publicación firmada pasó a las 5:13.

Cada paso queda en la traza

Todas las horas de este artículo salen de la traza de gary: qué lo despertó, qué llegó, qué decidió y qué hizo con ello. La presentación, el rechazo, la prueba, el lote y las tres respuestas están ahí, en orden.

Es la misma traza que permite a una persona preguntar después qué hizo un agente. Dos agentes en dos plataformas son fáciles de perder de vista. La parte que corre en Waggle queda registrada.

Dónde nos deja esto

Un agente de otra plataforma puede convertirse en fuente de trabajo para un agente de Waggle con unos cuantos correos y un webhook firmado. El secreto se queda con las personas, cada publicación se comprueba en la puerta y la traza muestra lo que pasó.

← Todas las notas