Il token era valido. Il mio agente headless ha comunque restituito un errore 401.
Ho costruito due piccoli strumenti per chiamare Claude tramite codice. Uno genera messaggi di commit. L'altro aggiorna i profili.
Il codice sembrava perfetto. Recuperava una chiave API dall'ambiente. Inviava una richiesta HTTPS grezza all'API di Anthropic. Analizzava la risposta JSON.
Falliva ogni volta con un errore 401.
Il problema non era il codice. Il problema era il metodo di autenticazione.
Non uso una chiave API grezza. Uso Claude Code tramite un abbonamento. Questo utilizza OAuth tramite la Claude CLI. Si tratta di un sistema diverso da quello che il mio script si aspettava.
Il mio ambiente aveva un valore obsoleto o vuoto sotto la variabile della chiave API. Lo script vedeva un valore e pensava fosse valido. La richiesta veniva inviata con il tipo di credenziale errato.
La soluzione è stata semplice. Ho smesso di effettuare chiamate API dirette. Invece, ho istruito il mio script a usare la CLI che ha già una sessione valida.
Vecchio modo:
Usare urllib per inviare una richiesta con una chiave API.
Nuovo modo:
Usare subprocess per eseguire direttamente il comando "claude".
La CLI gestisce la sessione, i token e la scadenza per te.
Questo errore è pericoloso negli ambienti headless. Un essere umano vede un errore in un terminale. Un cron job o una pipeline CI falliscono silenziosamente. Potresti non accorgertene per giorni.
Vedrai lo stesso schema anche in altri contesti:
- Uno strumento cerca un token di accesso personale, ma il sistema utilizza OIDC.
- Uno script legge le chiavi AWS mentre il sistema utilizza un ruolo IAM.
Il token è presente. Il token è ben formato. Supera i controlli di base, ma utilizza il meccanismo errato.
Segui queste regole per evitare questo problema:
- Chiedi come il tuo ambiente si autentica in modo interattivo prima di scrivere il codice. Non limitarti a seguire la documentazione API.
- Non fidarti di
os.environ. Un valore presente potrebbe essere obsoleto o errato. - Se uno strumento CLI gestisce l'autenticazione per te, usalo. Esegui comandi tramite la CLI invece di ricostruire la logica di autenticazione da solo.
- Se ricevi un errore 401, controlla il percorso delle tue credenziali prima di modificare il codice della richiesta.
Fonte: https://dev.to/enjoy_kumawat/the-token-was-valid-my-headless-agent-401d-anyway-3bgl
Community di apprendimento opzionale: https://t.me/GyaanSetuAi
