Per iniziare
Se stai configurando un agente per la prima volta, installa prima la Youka CLI, poi installa la skill karaoke di Youka:Dai un prompt al tuo agente
Dopo aver installato CLI e skill, puoi assegnare al tuo agente un compito diretto come questo:Regole operative
Usa sempre --json
Nella CLI, passa sempre
--json. Nell’API, imposta sempre Accept: application/json. Non interpretare mai output pensato per gli esseri umani.Invia sempre una chiave di idempotenza
Ogni scrittura dovrebbe includere una chiave di idempotenza stabile, così i tentativi dopo un timeout
restituiscono il risultato originale invece di duplicare il lavoro.
Rileggi lo stato persistente
Non fidarti di risposte di mutazione obsolete. Dopo un task terminale, rileggi il
progetto o l’export per ottenere lo stato finale.
Esegui polling con backoff
Inizia con un intervallo di 2–3 secondi. Applica backoff esponenziale per job lunghi.
Rispetta le risposte 429.
Contratto di output
Ogni comando CLI in modalità--json scrive esattamente una busta su stdout.
Successo:
| Code | Meaning | Retry? |
|---|---|---|
0 | Successo. | N/A |
1 | Errore runtime (rete, API, rendering). | Controlla error.retryable. |
2 | Input non valido (flag errati, payload illeggibile). | No — correggi l’input. |
Workflow end-to-end
Il workflow canonico dell’agente è: creare un progetto, attendere, esportare, scaricare il risultato. Ecco il pattern completo con implementazioni sia CLI sia SDK.Linee guida per il polling
La maggior parte delle operazioni di scrittura restituisce handle di operazioni nell’SDK. Preferisciclient.projects.wait(...) e client.exports.wait(...) e scendi a client.tasks.* solo quando ti serve esplicitamente un accesso a basso livello ai task.
| Job type | Recommended initial interval | Max wait |
|---|---|---|
| Creazione progetto (stems + sync testi) | 3 s | 15 min |
| Solo separazione stems | 3 s | 10 min |
| Solo sync testi | 2 s | 5 min |
| Render export | 3 s | 30 min |
--wait gestisce il polling per te. Nell’SDK, gli helper di attesa usano un intervallo di 2 s per impostazione predefinita e accettano pollIntervalMs.
Chiavi di idempotenza
Ogni operazione di creazione e aggiornamento supporta una chiave di idempotenza. Regole:- Usa una chiave stabile, unica, deterministica per ogni mutazione logica. Bene:
create-song-${sourceHash}. Male: un UUID nuovo a ogni tentativo. - Riutilizza la stessa chiave tra i retry. Il server riconosce il replay e restituisce il risultato originale.
- Le chiavi sono con scope per account e scadono dopo 24 ore.
- Se il server restituisce
IDEMPOTENT_REPLAY_IN_PROGRESS(HTTP 202), la richiesta originale è ancora in esecuzione. Attendi e riprova con la stessa chiave.
Recupero dagli errori
Fai branching suerror.code e error.retryable. I casi comuni:
| Code | Cause | Action |
|---|---|---|
INVALID_REQUEST | Il body della richiesta non ha superato la validazione dello schema. | Correggi il payload. Nessun retry. |
UNAUTHORIZED | API key mancante o non valida. | Mostralo al chiamante. Nessun retry. |
NOT_FOUND | La risorsa non esiste o non hai accesso. | Nessun retry. |
CONFLICT (409) | Conflitto di versione o collisione di idempotenza. | Riprova con la stessa chiave di idempotenza. |
TOO_MANY_REQUESTS (429) | Rate limit. | Back off di Retry-After o 30 s. |
INTERNAL_SERVER_ERROR (500) | Errore transitorio del server. | Riprova fino a 3 volte con backoff. |
IDEMPOTENT_REPLAY_IN_PROGRESS (202) | La richiesta precedente è ancora in esecuzione. | Attendi e riprova con la stessa chiave. |
TASK_FAILED | Il task asincrono è terminato con errore. | Mostra error.task.error al chiamante. Nessun retry. |
TASK_TIMED_OUT | Il task asincrono ha superato il tempo previsto. | Sicuro riprovare una volta. |
Scoperta dei campi modificabili
Prima di modificare i preset, recupera lo schema del preset così il modello conosce i campi validi e i tipi di valore:youka project settings <id> --body ....
Recupera una sola volta per sessione dell’agente e memorizza in cache il risultato.
Agenti in parallelo
Quando più agenti vengono eseguiti in contemporanea sullo stesso account:- Applica lo scope delle chiavi di idempotenza sia all’identità dell’agente sia alla mutazione logica:
agent-${agentId}-create-${sourceHash}. Questo impedisce che il retry di un agente collida con una richiesta nuova di un altro agente. - Mantieni le letture senza vincoli — le richieste
GETsono economiche e non hanno effetti collaterali. - Usa una singola coda per
POST /projects/{projectId}/exportsper progetto se ti serve una cronologia degli export ordinata. Altrimenti gli export possono arrivare fuori ordine.
Cosa fare dopo
- CLI global options — tutti i flag disponibili per gli agenti
- SDK errors — riferimento completo alle classi di errore
- API async jobs — il contratto di polling
- API idempotency — il contratto di idempotenza
