Documentazione
Jan Agent
Jan Agent non include un motore di inferenza, quindi chiama sempre un endpoint specificato dall’utente. Un’unica istruzione jan config set salva Kunavo in ~/.jan/config.toml e consente all’agente terminale di usare Claude e GPT con una sola chiave.
Una riga `jan config set --base-url https://api.kunavo.com/v1` scrive Kunavo in ~/.jan/config.toml, e la CLI di anteprima Jan Agent — priva di motore di inferenza — usa quella chiave.
# Jan Agent is a preview on a nightly channel — check your build first.
jan --version
jan config set \
--provider kunavo \
--api-key sk-kn-... \
--base-url https://api.kunavo.com/v1 \
--model claude-sonnet-5 \
--model claude-haiku-4-5 \
--api-type openai
jan config list # configured providers as JSON, keys redacted/v1, con entrambi i tipi wire. Jan aggiunge solo la route: la pagina sull’aggiunta di un provider indica che l’accesso «convalida la chiave su GET {base_url}/models» e la pagina dei provider specifica che, la prima volta che apri /model in una sessione, viene interrogato il valore GET /models di una voce configurata. Tutti gli URL base riportati nella documentazione terminano con /v1, compreso quello Anthropic nell’esempio jan cli models list. Pertanto, anche --api-type anthropic richiede https://api.kunavo.com/v1, contrariamente a Claude Code e agli SDK ufficiali Anthropic, dove lo stesso suffisso genera /v1/v1/messages e un 404. Un percorso raddoppiato nell’errore rivela quale convenzione stai usando.dev scarica dal canale agent-nightly: «aspettati build di qualità nightly». Non esiste una release con tag da citare, quindi esegui jan --version e annota il risultato accanto a questa configurazione: i flag qui sotto sono stati ricavati dalla documentazione nella data indicata in fondo alla pagina e una build nightly potrebbe rinominarne uno. Una build dal codice sorgente (scripts/install-jan-agent.sh --source) non si aggiorna automaticamente: è un modo per mantenere fissa una versione.jan config unset --provider kunavo consente di annullare tutto.<project>/.jan/agent/memory/, anziché in un archivio vettoriale, quindi il ciclo dell’agente non ha bisogno di un secondo tipo di modello.sk-kn-) e aggiungi credito da $10: le chiamate vengono pagate con quel saldo e le chiamate non riuscite non vengono addebitate. La dashboard si apre quindi sulla configurazione Jan Agent.Passo dopo passo
- Crea una chiave su
/app/keyse copiala: viene mostrata una sola volta. - Verifica cosa stai configurando:
jan --version. Anche Jan Desktop include una CLI avviata conjan, ma con un set di comandi diverso; prima di digitare il resto, verifica chejan config set --helpelenchi--base-url. - Esegui il comando
jan config setqui sopra.--providerè un ID a tua scelta, non un nome da un elenco predefinito: l’esempio di configurazione hardware locale nella documentazione usa--provider local; inoltre,--modelpuò essere ripetuto e sostituisce l’elenco esistente invece di aggiungervi elementi. - Verifica che sia stato salvato con
jan config list(le chiavi vengono oscurate) oppure conjan config pathper il file stesso, quindi eseguijan cli models listper vedere cosa offre ogni provider. Un ID modello inserito manualmente resta disponibile anche quando l’endpoint smette di elencarlo;jan cli models refresh --provider kunavoconsidera invece autorevole l’elenco dell’endpoint. - Entra in una directory di progetto ed esegui
jan, quindi seleziona il modello con/model. Per la prima esecuzione, preferiscijan --plan: è in sola lettura, quindi un’incompatibilità del protocollo emerge prima che venga scritto qualcosa sul disco. - Assegnagli un’attività che modifichi un file. Jan Agent è un agente, quindi la prima esecuzione dovrebbe verificare chiamate agli strumenti e streaming: sono le funzionalità che darebbero problemi per prime con un endpoint solo parzialmente compatibile, mentre un saluto non ne verifica nessuna.
Verificato rispetto a la pagina Provider di Jan Agent il 21 settembre 2026. Le impostazioni di terze parti cambiano; se il nome di un campo qui non corrisponde più a quello visualizzato, fa fede quella pagina, non questa.
Verifica prima di eseguire il debug del client
Una sola richiesta stabilisce se il problema riguarda l'endpoint, la chiave o il file di configurazione. Se restituisce JSON, lo stesso base URL e la stessa chiave funzionano in Jan Agent.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."Quale model id inserire nel campo
Ogni modello di testo è raggiungibile come model id: l'elenco aggiornato è GET /v1/models e il catalogo con i prezzi è nella pagina dei modelli. Le tariffe sono in USD per 1M di token, input / output.
| ID del modello | Kunavo ingresso / uscita | Dove si inserisce in Jan Agent |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | il modello operativo predefinito: l’ID da inserire per primo sotto --model |
claude-opus-5 | $3.50 / $17.50 | un piano in cui sbagliare sarebbe costoso; abbinalo a jan --plan |
claude-haiku-4-5 | $0.70 / $3.50 | turni economici: smistamento, riepiloghi e il ciclo che gira tutto il giorno |
gpt-5-6-sol | $2.00 / $12.00 | un secondo parere da un’altra famiglia, con la stessa chiave e lo stesso URL di base |
gpt-5-6-terra | $0.70 / $4.20 | lettura di contesti lunghi, sempre con il tipo API openai |
Due cose diverse vengono chiamate chiave API Jan
Sono nello stesso file e hanno significati opposti, ed è per questo che jan config list può sembrare errato a chi si aspetta l’altra chiave.
| Cosa | Da dove proviene | A cosa serve l’autenticazione |
|---|---|---|
jan login | Accedere a Tokamak, il backend self-hosted, dalla shell o con /login nella console | La tua distribuzione Tokamak. Jan Agent scrive per te la chiave ricevuta in ~/ |
jan config set --api-key | Una credenziale che possiedi già per un endpoint — qui la chiave sk-kn- di Kunavo | Quell'endpoint, con fatturazione per richiesta. È la riga di cui tratta questa pagina |
Jan Desktop non fornisce nessuna delle due: non ha un account, quindi non c'è nulla da generare. Il suo server API locale accetta una chiave che inventi tu, che ha ancora un terzo significato e appartiene a un host diverso.
Cosa fornisce Jan Desktop e dove si ferma
Jan Agent legge le impostazioni dei provider da quattro fonti, ciascuna con precedenza su quelle elencate sopra; la seconda è quella che sorprende più persone.
~/.jan/config.toml— la base e l'unico file chejan config setscrive.settings.jsondi Jan Desktop — solo in eredità. Aggiunge i provider che non hai configurato in Agent, non sovrascrive quelli che hai configurato e non viene mai riscritto.- Un blocco
[provider]nel fileagent.tomldi un progetto — una scelta esplicita per progetto, quindi prevale su entrambi. Di solito quel file viene sottoposto a commit, quindi tienine fuoriapi_key. --provider/--api-keydalla riga di comando, oppureJAN_API_KEY/<PROVIDER>_API_KEY— l'opzione più esplicita e più temporanea.
Ci sono due conseguenze da conoscere prima di fare debug della cosa sbagliata. jan config list può non mostrare alcun provider mentre jan cli models list ne restituisce molti: il secondo include quelli ereditati da Desktop, che non sono memorizzati in ~/.jan/config.toml. Inoltre, un provider ereditato non viene mai aggiornato, perché qui non c'è una voce da riscrivere: se vuoi mantenere aggiornato l'elenco dei modelli di Kunavo, deve essere una voce jan config set a sé, come quella creata dal blocco qui sopra.
Quando due provider offrono lo stesso ID modello
Kunavo fornisce ID come claude-sonnet-5, così come una voce provider che punta direttamente al fornitore. Jan Agent deve sceglierne uno e l'ordine documentato è: prima una corrispondenza esatta nell'elenco models di un provider, poi un prefisso <provider>/<model> che identifica un provider configurato e, se più provider offrono lo stesso ID, prevale quello con credenziali rispetto al gemello senza chiave. Ecco perché kunavo/claude-sonnet-5 serve a specificare quale intendevi. Il qualificatore serve solo a Jan: viene rimosso prima dell'invio della richiesta, perché i servizi upstream rifiutano gli ID qualificati con il provider.
La stessa voce, dalla console
Se preferisci non digitare flag: /settings > providers gestisce le stesse voci ~/.jan/config.toml e a apre un modulo per aggiungerne una, con i campi name, base url, api key e models separati da spazi. Il modulo fa due cose che i flag non fanno: l'URL di base deve essere https:// (oppure http:// per un endpoint localhost), così una chiave non viene mai inviata tramite una connessione remota in testo non crittografato — Kunavo usa https://, quindi non è un problema — e, quando modifichi una voce, il campo della chiave API mostra (unchanged) e conserva quella memorizzata a meno che tu non inserisca un nuovo valore. Se lasci vuoto il campo, la chiave viene cancellata invece di restare invariata.
Domande frequenti
Come posso indirizzare Jan Agent a un endpoint API personalizzato?
Con un solo comando: jan config set --provider <id> --api-key <key> --base-url <url> --model <model> --api-type openai. L'ID del provider lo scegli tu, non è un nome tratto da un elenco fisso; --model può essere ripetuto e sostituisce l'elenco esistente; --api-type è compatibile con OpenAI per impostazione predefinita, quindi puoi ometterlo per un endpoint con formato OpenAI. La voce viene scritta in ~/.jan/config.toml, che puoi modificare anche da /settings > providers nella console. La pagina di Jan dedicata al contributo di un provider spiega che un endpoint semplice compatibile con OpenAI non richiede codice, ma solo questa configurazione.
L'URL di base di Jan Agent deve terminare con /v1?
Sì, anche per il tipo wire Anthropic. Jan aggiunge solo il percorso: la pagina dedicata al contributo di un provider dice che l'accesso convalida la chiave tramite GET {base_url}/models, mentre la pagina dei provider spiega che, quando apri /model per la prima volta in una sessione, viene eseguita una richiesta GET /models per la voce configurata. Poiché il percorso aggiunto è /models e non /v1/models, l'URL di base memorizzato deve già essere la radice /v1: per Kunavo, https://api.kunavo.com/v1. Tutti gli URL di base riportati nella documentazione di Jan terminano nello stesso modo, inclusa la voce Anthropic nel suo esempio di jan cli models list. È l'opposto di Claude Code e degli SDK ufficiali Anthropic, dove l'aggiunta di /v1 produce /v1/v1/messages e un errore 404.
Qual è la differenza tra jan login e jan config set --api-key?
Autenticano cose diverse. jan login accede a Tokamak, il backend self-hosted, e salva la chiave ricevuta in ~/.jan/config.toml: accede alla tua distribuzione. jan config set --api-key memorizza una credenziale che possiedi già per un endpoint, come quella che useresti con un provider di terze parti quale Kunavo. Jan Desktop non fornisce nessuna delle due, perché non ha un account da cui ricavarne una; la chiave richiesta dal suo server API locale è una stringa che inventi tu, un'altra accezione della parola chiave.
Perché jan config list non mostra nulla mentre jan cli models list mostra dei modelli?
Perché i due comandi leggono insiemi diversi. jan config list mostra solo ciò che è memorizzato in ~/.jan/config.toml, mentre jan cli models list include anche i provider ereditati da Jan Desktop, che non sono memorizzati lì. La documentazione di Jan lo segnala esplicitamente. La conseguenza pratica è che un provider ereditato non viene mai aggiornato: non c'è una voce da riscrivere. Per mantenere aggiornato l'elenco dei modelli di un provider, aggiungilo prima con jan config set.
Jan Agent può eseguire modelli Claude senza un account Anthropic?
Sì. Jan Agent non include un motore di inferenza, quindi un modello viene sempre eseguito sull'endpoint configurato; --api-type indica il protocollo wire, non il fornitore. Un ID Claude viene risolto all'URL di base che hai impostato, quindi le credenziali che possiedi sono quelle dell'endpoint. Kunavo offre ID Claude e GPT tramite un'unica chiave, usando un'interfaccia compatibile con OpenAI. Questa configurazione è stata pubblicata sulla base della documentazione di Jan, non di una prova eseguita sul client; inoltre, Jan Agent è ancora un'anteprima sul canale nightly, quindi considera i flag validi per la build verificata con jan --version.
Jan Agent restituisce 404 per ogni richiesta. Qual è il problema?
Quasi sempre è l'URL di base. Se manca /v1, Jan richiede /models e /chat/completions all'origine, che restituisce 404 anziché un errore di autenticazione; se nell'errore compare /v1/v1, il suffisso è stato aggiunto a un URL che lo conteneva già. Prima di intervenire sul client, verifica l'endpoint con una semplice richiesta curl a GET /v1/models usando la stessa chiave: se ricevi JSON, endpoint e chiave funzionano e il problema è nella voce configurata; 401 indica un problema con la chiave, 404 con l'URL. Poi controlla jan config path e leggi direttamente il base_url memorizzato.