Funzionalità
Controllo e riparazione
Questa pagina è stata tradotta automaticamente dall'inglese. Le correzioni sono benvenute. Modifica questa pagina su GitHub
ccam doctor controlla la tua installazione di ccam: il binario di Claude Code, la cartella, il login e i link di condivisione di ogni account, i server MCP condivisi, l'endpoint di utilizzo e i tuoi comandi scorciatoia. ccam doctor --fix ripara ciò che può riparare senza perdere dati e, prima di sostituire un file, lo sposta in una cartella di backup. Eseguilo quando ccam <name> si ferma per un problema con i link di condivisione, dopo aver ripristinato file a mano o dopo un aggiornamento di Claude Code.
Utilizzo
ccam doctor # check everything, change nothing
ccam doctor --fix # check, then repair what is safe to repair
ccam --dry-run doctor --fix # report only: what --fix would repairOgni risultato è una riga con un simbolo: ✓ OK, · informazione, ! un avviso, ✗ un errore. I risultati che riguardano un account iniziano con il nome dell'account.
$ ccam doctor
✓ Claude Code 2.1.302 (Claude Code) (/home/me/.local/bin/claude)
! personal: folder permissions are 755 (should be 0700)
! personal: .credentials.json permissions are 644 (should be 0600)
✓ personal: login valid (me@example.com)
✗ personal: /home/me/.local/share/ccam/profiles/personal/settings.json: set to shared but is a real file, not a link
· personal: unknown entries (Claude Code layout may have changed): newthing
! work: not logged in → `ccam login work`
✓ work: share links OK
! missing shortcuts in /home/me/.local/bin: ccp
`ccam doctor --fix` repairs what it can.Con --fix, ogni risultato che è stato riparato termina con → fixed:
$ ccam doctor --fix
✓ Claude Code 2.1.302 (Claude Code) (/home/me/.local/bin/claude)
! personal: folder permissions are 755 (should be 0700) → fixed
! personal: .credentials.json permissions are 644 (should be 0600) → fixed
✓ personal: login valid (me@example.com)
✗ personal: /home/me/.local/share/ccam/profiles/personal/settings.json: set to shared but is a real file, not a link → fixed
· personal: unknown entries (Claude Code layout may have changed): newthing
! work: not logged in → `ccam login work`
✓ work: share links OK
! missing shortcuts in /home/me/.local/bin: ccp → fixedOpzioni
| Opzione | Cosa fa | Predefinito |
|---|---|---|
--fix |
Ripara ciò che si può riparare in sicurezza (dei file modificati viene fatto un backup) | disattivata |
--dry-run (globale) |
Esegue ogni controllo ma non ripara nulla, anche con --fix |
disattivata |
ccam doctor non accetta argomenti. Rispetta --dry-run: ccam --dry-run doctor --fix stampa gli stessi risultati di ccam doctor e non modifica nulla.
Il codice di uscita è 1 quando resta almeno un risultato ✗ non riparato, altrimenti 0. Avvisi e informazioni non fanno mai fallire l'esecuzione. Quando l'esecuzione fallisce senza --fix, ccam termina con una riga vuota e `ccam doctor --fix` repairs what it can.. Anche una configurazione che non si riesce a caricare termina con 1 e un errore ccam:.
Come funziona
internal/cli/doctor.go carica ~/.config/ccam/config.toml e chiama doctor.Run in internal/doctor/doctor.go, che esegue i controlli in un ordine fisso e restituisce i risultati. --fix viene passato come Options.Fix, impostato a false in un dry run.
Il blocco centrale viene eseguito una volta per account. I controlli, e cosa fa --fix per ciascuno:
- Versione di Claude Code (
checkClaude). Individua il binarioclaudecome fa l'avvio ed esegueclaude --version. Se la versione non inizia con2.1.302, la versione su cui è stata verificata la struttura delle cartelle di ccam (doctor.LayoutVersion), aggiunge· ccam was verified against the folder layout of Claude Code 2.1.302. Any 'unknown entries' below may mean the layout changed. Un binario mancante o un--versionche fallisce è un errore. Nessuna riparazione. - Credenziali nell'ambiente (
checkAuthEnv). Avvisa quando è impostataCLAUDE_CODE_OAUTH_TOKEN,ANTHROPIC_API_KEYoANTHROPIC_AUTH_TOKEN: ogni account avviato da quella shell la eredita, e Claude Code la preferisce al login dell'account. Nessuna riparazione; rimuovila tu. - Cartella (
checkProfile). Una cartella dell'account mancante è un errore e termina i controlli di quell'account. Permessi con bit di gruppo o di altri utenti impostati sono un avviso;--fixeseguechmod 0700. - File di login (
checkCredentials)..credentials.jsonviene controllato conlstat. Un link simbolico è un errore, perché ogni account deve avere il proprio token, e non viene riparato. Una modalità diversa da0600è un avviso;--fixeseguechmod 0600. Poi viene letto il login (su macOS prima dal Portachiavi). L'assenza di login è un avviso che rimanda accam login <name>. Un refresh token scaduto è l'errorelogin expired; un token di accesso scaduto è solo un'informazione, perché Claude Code lo rinnova al prossimo avvio. Nessuno di questi viene riparato. - Link di condivisione (
share.Check). Confronta ogni percorso dishare.Layoutcon le impostazioni di condivisione dell'account, usando sololstatereadlink. Segnala quattro casi: un link mancante, un link che punta altrove, un file normale dove dovrebbe esserci un link e un link rimasto per un elemento che ora è locale. Un link mancante è un avviso, gli altri sono errori. - Voci sconosciute (
checkUnknownEntries). Elenca i nomi di primo livello nella cartella dell'account che ccam non conosce (share.Known), come indizio che la struttura di Claude Code è cambiata. Solo informazione. - Percorsi dei plugin (
checkPlugins). I registri dei plugin (installed_plugins.json,known_marketplaces.json) salvano percorsi assoluti. Nelplugins/di ogni gruppo, i percorsi che passano per la cartella di un account smettono di funzionare quando quell'account viene rimosso o rinominato.--fixli riscrive verso la cartella del gruppo conprofile.RewritePluginPaths, una scrittura atomica del file di registro. - Server MCP (
checkMCP). Carica una volta ilmcp.jsondi ogni gruppo. Un file che non si riesce a leggere è un errore; un server che non superamcp.Validateè un avviso. Nessuna riparazione. - Formato della risposta di utilizzo (
checkUsageFormat). Interroga l'endpoint di utilizzo, senza cache e con il consueto limite di 3 secondi, per un account dopo l'altro finché uno risponde. Se la risposta non si riesce più ad analizzare, avvisa checcam usageripiega sulla cache della riga di stato. È l'unico controllo che usa la rete. - Scorciatoie (
checkShims). Solo quando un account ha una scorciatoia. I link mancanti in~/.local/binsono un avviso;--fixchiamashim.Install, che crea solo i link mancanti e non tocca mai altri file. Una cartella bin che non è nelPATHè un avviso e non viene riparata.
Riparare i link di condivisione
Il percorso di avvio crea subito un link mancante, ma si ferma per qualsiasi cosa che potrebbe far perdere dati e rimanda qui:
$ ccam work
ccam: stopped because of share link problems:
/home/me/.local/share/ccam/profiles/work/CLAUDE.md: set to shared but is a real file, not a link
Repair them with `ccam doctor --fix`, then run againPer qualsiasi problema con i link di condivisione, --fix chiama share.Build con le impostazioni di condivisione dell'account sia come stato attuale sia come stato di destinazione, poi Plan.Apply. Build ricava di nuovo ogni passaggio da ciò che si trova su disco, lo stesso piano usato da ccam share, quindi la riparazione segue le stesse regole dell'attivazione della condivisione.
Qui settings.json è un file normale. Poiché il gruppo ha già un settings.json diverso, per il conflitto viene usata la scelta predefinita, KeepGroup, quindi la copia del gruppo resta. Il file dell'account viene spostato in .ccam-backup/<time>/settings.json dentro la cartella dell'account e os.Symlink collega il percorso al gruppo. Altri casi:
- Se il gruppo non ha ancora una copia, il file dell'account viene spostato nel gruppo e ne diventa il primo contenuto.
- Per una cartella, i file che il gruppo non ha vengono spostati nel gruppo; il resto va nel backup.
- Per
history.jsonl, il valore predefinito èmerge by line: le righe del gruppo, poi le tue nuove righe. La copia precedente del gruppo viene salvata in.ccam-backup/<time>/group/. - Un link a un altro gruppo viene sostituito. Un link a una cartella esterna a ccam va nel backup, e il suo contenuto diventa il contenuto iniziale del gruppo se il gruppo è vuoto.
- Un link rimasto per un elemento che ora è locale viene rimosso, e l'account riceve una copia del contenuto del gruppo.
A parte la rimozione dei link, ogni passaggio sposta i dati nel gruppo o nella cartella di backup. Non viene eliminato nulla.
Sicurezza e casi limite
- Un semplice
ccam doctornon modifica mai nulla. Negli script usa--dry-runinsieme a--fixper esserne certo. doctor --fixnon controlla se un account è in esecuzione. Chiudi Claude Code per un account prima di ripararne i link di condivisione, perché la sessione continua a scrivere in quei file.- Se una riparazione della condivisione fallisce, ccam segnala
could not repair share links: <error>per quell'account e salta il controllo delle voci sconosciute. Gli altri account vengono comunque controllati. - Se
ccam sharefallisce a metà, salva prima le impostazioni di destinazione e ti dice di completare conccam doctor --fix. - Un
.credentials.jsoncollegato con un link simbolico, un login scaduto e le credenziali nell'ambiente vengono segnalati ma mai modificati. - Le riscritture dei registri dei plugin sono atomiche ma non vengono copiate in
.ccam-backup/.