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.

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 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.
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.

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ó.