Fonctionnalités
Vérifier et réparer
Cette page a été traduite automatiquement depuis l'anglais. Les corrections sont les bienvenues. Modifier cette page sur GitHub
ccam doctor vérifie votre installation de ccam : le binaire Claude Code, le dossier de chaque compte, sa connexion et ses liens de partage, les serveurs MCP partagés, le point de terminaison d'utilisation et vos commandes raccourcis. ccam doctor --fix répare ce qu'il peut sans perte de données et déplace d'abord dans un dossier de sauvegarde tout fichier qu'il remplace. Lancez-le quand ccam <name> s'arrête sur un problème de lien de partage, après avoir restauré des fichiers à la main ou après une mise à jour de Claude Code.
Utilisation
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 repairChaque constat tient sur une ligne avec un symbole : ✓ OK, · information, ! avertissement, ✗ erreur. Les constats propres à un compte commencent par le nom du compte.
$ 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.Avec --fix, chaque constat réparé se termine par → 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 → fixedOptions
| Option | Effet | Par défaut |
|---|---|---|
--fix |
Réparer ce qui peut l'être sans risque (les fichiers modifiés sont sauvegardés) | désactivé |
--dry-run (globale) |
Exécuter toutes les vérifications sans rien réparer, même avec --fix |
désactivé |
ccam doctor n'accepte aucun argument. Il respecte --dry-run : ccam --dry-run doctor --fix affiche les mêmes constats que ccam doctor et ne modifie rien.
Le code de sortie vaut 1 quand au moins un constat ✗ reste non réparé, et 0 sinon. Les avertissements et les informations ne font jamais échouer l'exécution. Quand l'exécution échoue sans --fix, ccam termine par une ligne vide et `ccam doctor --fix` repairs what it can.. Une configuration impossible à charger se termine aussi par 1 et une erreur ccam:.
Fonctionnement
internal/cli/doctor.go charge ~/.config/ccam/config.toml et appelle doctor.Run dans internal/doctor/doctor.go, qui exécute les vérifications dans un ordre fixe et renvoie les constats. --fix est transmis sous la forme Options.Fix, mis à false lors d'une simulation.
Le bloc central s'exécute une fois par compte. Les vérifications, et ce que fait --fix pour chacune :
- Version de Claude Code (
checkClaude). Résout le binaireclaudecomme le fait le lanceur et exécuteclaude --version. Si la version ne commence pas par2.1.302, la version sur laquelle la structure de dossiers de ccam a été vérifiée (doctor.LayoutVersion), il ajoute· ccam was verified against the folder layout of Claude Code 2.1.302. Any 'unknown entries' below may mean the layout changed. Un binaire absent ou un--versionqui échoue est une erreur. Pas de réparation. - Identifiants dans l'environnement (
checkAuthEnv). Avertit quandCLAUDE_CODE_OAUTH_TOKEN,ANTHROPIC_API_KEYouANTHROPIC_AUTH_TOKENest défini : chaque compte lancé depuis ce shell en hérite, et Claude Code le préfère à la connexion propre du compte. Pas de réparation ; supprimez la variable vous-même. - Dossier (
checkProfile). Un dossier de compte absent est une erreur et met fin aux vérifications de ce compte. Des permissions avec des bits de groupe ou d'autres utilisateurs donnent un avertissement ;--fixexécutechmod 0700. - Fichier de connexion (
checkCredentials)..credentials.jsonest vérifié aveclstat. Un lien symbolique est une erreur, car chaque compte doit avoir son propre jeton, et n'est pas réparé. Un mode autre que0600donne un avertissement ;--fixexécutechmod 0600. Ensuite la connexion est lue (sous macOS, d'abord depuis le trousseau). Une absence de connexion donne un avertissement qui renvoie versccam login <name>. Un jeton de renouvellement expiré donne l'erreurlogin expired; un jeton d'accès expiré n'est qu'une information, puisque Claude Code le renouvelle au lancement suivant. Aucun de ces cas n'est réparé. - Liens de partage (
share.Check). Compare chaque chemin deshare.Layoutavec les paramètres de partage du compte, en utilisant uniquementlstatetreadlink. Il signale quatre cas : un lien absent, un lien qui pointe ailleurs, un vrai fichier là où devrait se trouver un lien, et un lien restant pour un élément désormais local. Un lien absent est un avertissement, les autres cas sont des erreurs. - Entrées inconnues (
checkUnknownEntries). Liste les noms de premier niveau du dossier du compte que ccam ne connaît pas (share.Known), comme indice d'un changement de structure de Claude Code. Information uniquement. - Chemins des plugins (
checkPlugins). Les registres de plugins (installed_plugins.json,known_marketplaces.json) enregistrent des chemins absolus. Dans leplugins/de chaque groupe, les chemins qui passent par le dossier d'un compte cessent de fonctionner quand ce compte est supprimé ou renommé.--fixles réécrit vers le dossier du groupe avecprofile.RewritePluginPaths, une écriture atomique du fichier de registre. - Serveurs MCP (
checkMCP). Charge une fois lemcp.jsonde chaque groupe. Un fichier illisible est une erreur ; un serveur qui ne passe pasmcp.Validatedonne un avertissement. Pas de réparation. - Format de la réponse d'utilisation (
checkUsageFormat). Interroge le point de terminaison d'utilisation, sans le cache et avec la limite habituelle de 3 secondes, pour un compte après l'autre jusqu'à ce que l'un réponde. Si la réponse ne peut plus être analysée, il avertit queccam usagese rabat sur le cache de la ligne d'état. C'est la seule vérification qui utilise le réseau. - Raccourcis (
checkShims). Uniquement quand un compte a un raccourci. Des liens absents dans~/.local/bindonnent un avertissement ;--fixappelleshim.Install, qui ne crée que les liens manquants et ne touche jamais aux autres fichiers. Un dossier bin absent duPATHdonne un avertissement et n'est pas réparé.
Réparer les liens de partage
Le chemin de lancement crée sur-le-champ un lien manquant, mais s'arrête pour tout ce qui pourrait faire perdre des données et renvoie ici :
$ 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 againPour tout problème de lien de partage, --fix appelle share.Build avec les paramètres de partage du compte comme état actuel et comme état cible, puis Plan.Apply. Build redéduit chaque étape de ce qui se trouve sur le disque, le même plan que celui de ccam share, si bien que la réparation suit les mêmes règles que l'activation du partage.
Ici, settings.json est un vrai fichier. Comme le groupe a déjà un settings.json différent, le conflit prend son choix par défaut, KeepGroup, et la copie du groupe est conservée. Le fichier du compte est déplacé vers .ccam-backup/<time>/settings.json dans le dossier du compte, et os.Symlink relie le chemin au groupe. Autres cas :
- Si le groupe n'a pas encore de copie, le fichier du compte est déplacé dans le groupe et devient son premier contenu.
- Pour un dossier, les fichiers absents du groupe sont déplacés dans le groupe ; le reste va dans la sauvegarde.
- Pour
history.jsonl, le choix par défaut estmerge by line: les lignes du groupe, puis vos nouvelles lignes. La copie précédente du groupe est enregistrée dans.ccam-backup/<time>/group/. - Un lien vers un autre groupe est remplacé. Un lien vers un dossier extérieur à ccam va dans la sauvegarde, et son contenu alimente le groupe si celui-ci est vide.
- Un lien restant pour un élément désormais local est supprimé, et le compte reçoit une copie du contenu du groupe.
À part la suppression de liens, chaque étape déplace des données vers le groupe ou le dossier de sauvegarde. Rien n'est supprimé.
Sécurité et cas particuliers
- Un simple
ccam doctorne modifie jamais rien. Dans les scripts, utilisez--dry-runavec--fixpour en être sûr. doctor --fixne vérifie pas si un compte est en cours d'exécution. Quittez Claude Code pour un compte avant de réparer ses liens de partage, car la session continue d'écrire dans ces fichiers.- Si une réparation de partage échoue, ccam signale
could not repair share links: <error>pour ce compte et saute sa vérification des entrées inconnues. Les autres comptes sont tout de même vérifiés. - Si
ccam shareéchoue à mi-parcours, il enregistre d'abord les paramètres cibles et vous indique de terminer avecccam doctor --fix. - Un
.credentials.jsonen lien symbolique, une connexion expirée et des identifiants dans l'environnement sont signalés mais jamais modifiés. - Les réécritures des registres de plugins sont écrites de façon atomique mais ne sont pas copiées dans
.ccam-backup/.