Primeiros passos
Se você estiver configurando um agente pela primeira vez, instale primeiro a Youka CLI e, em seguida, instale a skill de karaokê da Youka:Instrua seu agente
Após instalar a CLI e a skill, você pode dar ao seu agente uma tarefa direta como esta:Regras operacionais
Sempre use --json
Na CLI, sempre passe
--json. Na API, sempre defina Accept: application/json. Nunca faça parse de saída humana.Sempre envie uma chave de idempotência
Toda escrita deve levar uma chave de idempotência estável para que novas tentativas após um timeout
retornem o resultado original em vez de duplicar trabalho.
Releia o estado durável
Não confie em respostas de mutação desatualizadas. Após uma tarefa terminal, releia o
projeto ou a exportação para obter o estado final.
Faça polling com backoff
Comece com um intervalo de 2–3 segundos. Aplique backoff exponencial para jobs longos.
Respeite respostas 429.
Contrato de saída
Todo comando da CLI no modo--json escreve exatamente um envelope no stdout.
Sucesso:
| Code | Meaning | Retry? |
|---|---|---|
0 | Sucesso. | N/A |
1 | Erro de runtime (rede, API, renderização). | Verifique error.retryable. |
2 | Entrada inválida (flags ruins, payload ilegível). | Não — corrija a entrada. |
Workflow de ponta a ponta
O workflow canônico do agente é: criar um projeto, aguardar, exportar, baixar o resultado. Aqui está o padrão completo com implementações em CLI e SDK.Orientações de polling
A maioria das escritas retorna handles de operação no SDK. Prefiraclient.projects.wait(...) e client.exports.wait(...) e recorra a client.tasks.* apenas quando você precisar explicitamente de acesso a tasks de baixo nível.
| Job type | Recommended initial interval | Max wait |
|---|---|---|
| Criação de projeto (stems + sync de letras) | 3 s | 15 min |
| Apenas separação de stems | 3 s | 10 min |
| Apenas sync de letras | 2 s | 5 min |
| Render de exportação | 3 s | 30 min |
--wait cuida do polling para você. No SDK, os helpers de wait usam um intervalo de 2 s por padrão e aceitam pollIntervalMs.
Chaves de idempotência
Toda operação de criação e atualização suporta uma chave de idempotência. Regras:- Use uma chave estável, única e determinística por mutação lógica. Bom:
create-song-${sourceHash}. Ruim: um UUID novo a cada retry. - Reuse a mesma chave em novas tentativas. O servidor reconhece o replay e retorna o resultado original.
- As chaves têm escopo por conta e expiram após 24 horas.
- Se o servidor retornar
IDEMPOTENT_REPLAY_IN_PROGRESS(HTTP 202), a requisição original ainda está em execução. Aguarde e tente novamente com a mesma chave.
Recuperação de erros
Faça branch com base emerror.code e error.retryable. Os casos comuns:
| Code | Cause | Action |
|---|---|---|
INVALID_REQUEST | O corpo da requisição falhou na validação do schema. | Corrija o payload. Sem retry. |
UNAUTHORIZED | Chave de API ausente ou inválida. | Exiba ao chamador. Sem retry. |
NOT_FOUND | O recurso não existe ou você não tem acesso. | Sem retry. |
CONFLICT (409) | Conflito de versão ou colisão de idempotência. | Tente novamente com a mesma chave de idempotência. |
TOO_MANY_REQUESTS (429) | Rate limit. | Aplique backoff por Retry-After ou 30 s. |
INTERNAL_SERVER_ERROR (500) | Falha transitória no servidor. | Retry até 3 vezes com backoff. |
IDEMPOTENT_REPLAY_IN_PROGRESS (202) | Requisição anterior ainda em execução. | Aguarde e tente novamente com a mesma chave. |
TASK_FAILED | A task assíncrona terminou em falha. | Exiba error.task.error ao chamador. Sem retry. |
TASK_TIMED_OUT | A task assíncrona excedeu seu orçamento. | Seguro tentar novamente uma vez. |
Descobrindo campos mutáveis
Antes de mutar presets, busque o schema do preset para que o modelo conheça os campos válidos e os tipos de valor:youka project settings <id> --body ....
Busque uma vez por sessão do agente e faça cache do resultado.
Agentes em paralelo
Quando vários agentes executam simultaneamente na mesma conta:- Defina o escopo das chaves de idempotência para ambos: a identidade do agente e a mutação lógica:
agent-${agentId}-create-${sourceHash}. Isso evita que o retry de um agente colida com a requisição nova de outro agente. - Mantenha leituras sem limites — requisições
GETsão baratas e não têm efeitos colaterais. - Use uma única fila para
POST /projects/{projectId}/exportspor projeto se você precisar de histórico de exportações ordenado. Caso contrário, as exportações podem chegar fora de ordem.
Próximos passos
- CLI global options — todas as flags disponíveis para agentes
- SDK errors — referência completa de classes de erro
- API async jobs — o contrato de polling
- API idempotency — o contrato de idempotência
