Primeros pasos
Si estás configurando un agente por primera vez, instala primero la CLI de Youka y luego instala la skill de karaoke de Youka:Indícale a tu agente
Después de instalar la CLI y la skill, puedes darle a tu agente una tarea directa como esta:Reglas operativas
Usa siempre --json
En la CLI, pasa siempre
--json. En la API, establece siempre Accept: application/json. Nunca analices la salida para humanos.Envía siempre una clave de idempotencia
Cada escritura debe llevar una clave de idempotencia estable para que los reintentos tras un timeout
devuelvan el resultado original en lugar de duplicar el trabajo.
Vuelve a leer el estado duradero
No confíes en respuestas de mutación obsoletas. Tras una tarea terminal, vuelve a leer el
proyecto o la exportación para obtener el estado final.
Haz polling con backoff
Empieza con un intervalo de 2–3 segundos. Aplica backoff exponencial para trabajos largos.
Respeta las respuestas 429.
Contrato de salida
Cada comando de la CLI en modo--json escribe exactamente un sobre en stdout.
Éxito:
| Code | Meaning | Retry? |
|---|---|---|
0 | Éxito. | N/A |
1 | Error en tiempo de ejecución (red, API, render). | Comprueba error.retryable. |
2 | Entrada inválida (flags erróneos, payload ilegible). | No — corrige la entrada. |
Flujo de trabajo de extremo a extremo
El flujo de trabajo canónico para un agente es: crear un proyecto, esperar, exportar, descargar el resultado. Aquí está el patrón completo con implementaciones tanto de la CLI como del SDK.Guía de polling
La mayoría de las escrituras devuelven handles de operación en el SDK. Prefiereclient.projects.wait(...) y client.exports.wait(...), y baja a client.tasks.* solo cuando necesites explícitamente acceso de bajo nivel a tareas.
| Job type | Recommended initial interval | Max wait |
|---|---|---|
| Creación de proyecto (stems + sincronización de letras) | 3 s | 15 min |
| Solo separación de stems | 3 s | 10 min |
| Solo sincronización de letras | 2 s | 5 min |
| Render de exportación | 3 s | 30 min |
--wait gestiona el polling por ti. En el SDK, los helpers de espera usan un intervalo de 2 s por defecto y aceptan pollIntervalMs.
Claves de idempotencia
Cada operación de creación y actualización admite una clave de idempotencia. Reglas:- Usa una clave estable, única y determinista por mutación lógica. Bien:
create-song-${sourceHash}. Mal: un UUID nuevo por reintento. - Reutiliza la misma clave en los reintentos. El servidor reconoce la repetición y devuelve el resultado original.
- Las claves están acotadas por cuenta y expiran tras 24 horas.
- Si el servidor devuelve
IDEMPOTENT_REPLAY_IN_PROGRESS(HTTP 202), la solicitud original sigue ejecutándose. Espera y reintenta con la misma clave.
Recuperación de errores
Ramifica enerror.code y error.retryable. Los casos comunes:
| Code | Cause | Action |
|---|---|---|
INVALID_REQUEST | El body de la solicitud no pasó la validación del esquema. | Corrige el payload. Sin reintento. |
UNAUTHORIZED | Falta la API key o es inválida. | Muéstralo al solicitante. Sin reintento. |
NOT_FOUND | El recurso no existe o no tienes acceso. | Sin reintento. |
CONFLICT (409) | Conflicto de versión o colisión de idempotencia. | Reintenta con la misma clave de idempotencia. |
TOO_MANY_REQUESTS (429) | Límite de tasa. | Aplica backoff según Retry-After o 30 s. |
INTERNAL_SERVER_ERROR (500) | Fallo transitorio del servidor. | Reintenta hasta 3 veces con backoff. |
IDEMPOTENT_REPLAY_IN_PROGRESS (202) | La solicitud anterior sigue ejecutándose. | Espera y reintenta con la misma clave. |
TASK_FAILED | La tarea asíncrona terminó en fallo. | Muéstrale error.task.error al solicitante. Sin reintento. |
TASK_TIMED_OUT | La tarea asíncrona excedió su presupuesto. | Es seguro reintentar una vez. |
Descubrimiento de campos mutables
Antes de mutar presets, obtiene el esquema del preset para que el modelo conozca los campos válidos y los tipos de valor:youka project settings <id> --body ....
Obténlo una vez por sesión del agente y cachea el resultado.
Agentes en paralelo
Cuando varios agentes se ejecutan de forma concurrente contra la misma cuenta:- Acota las claves de idempotencia tanto a la identidad del agente como a la mutación lógica:
agent-${agentId}-create-${sourceHash}. Esto evita que el reintento de un agente colisione con la solicitud nueva de otro agente. - Mantén las lecturas sin restricciones — las solicitudes
GETson baratas y no tienen efectos secundarios. - Usa una sola cola para
POST /projects/{projectId}/exportspor proyecto si necesitas un historial de exportaciones ordenado. De lo contrario, las exportaciones pueden llegar fuera de orden.
Qué sigue
- CLI global options — todas las flags disponibles para agentes
- SDK errors — referencia completa de clases de error
- API async jobs — el contrato de polling
- API idempotency — el contrato de idempotencia
