Funciones
Comprobar y reparar
Esta página se tradujo automáticamente del inglés. Las correcciones son bienvenidas. Editar esta página en GitHub
ccam doctor comprueba tu instalación de ccam: el binario de Claude Code, la carpeta, el inicio de sesión y los enlaces compartidos de cada cuenta, los servidores MCP compartidos, el endpoint de uso y tus atajos. ccam doctor --fix repara lo que puede sin perder datos y antes mueve a una carpeta de copia de seguridad cualquier archivo que reemplace. Ejecútalo cuando ccam <name> se detenga por un problema con un enlace compartido, después de restaurar archivos a mano o después de una actualización de Claude Code.
Uso
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 repairCada resultado es una línea con una marca: ✓ correcto, · información, ! una advertencia, ✗ un error. Los resultados de una cuenta empiezan con el nombre de la cuenta.
$ 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, cada resultado que se reparó termina en → 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 → fixedOpciones
| Opción | Qué hace | Valor predeterminado |
|---|---|---|
--fix |
Repara lo que es seguro reparar (se hace una copia de seguridad de los archivos modificados) | desactivada |
--dry-run (global) |
Ejecuta todas las comprobaciones pero no repara nada, ni siquiera con --fix |
desactivada |
ccam doctor no acepta argumentos. Respeta --dry-run: ccam --dry-run doctor --fix imprime los mismos resultados que ccam doctor y no cambia nada.
El código de salida es 1 cuando queda al menos un resultado ✗ sin reparar, y 0 en caso contrario. Las advertencias y la información nunca hacen fallar la ejecución. Cuando la ejecución falla sin --fix, ccam termina con una línea en blanco y `ccam doctor --fix` repairs what it can.. Una configuración que no se puede cargar también termina con 1 y un error ccam:.
Cómo funciona
internal/cli/doctor.go carga ~/.config/ccam/config.toml y llama a doctor.Run en internal/doctor/doctor.go, que ejecuta las comprobaciones en un orden fijo y devuelve los resultados. --fix se pasa como Options.Fix, que vale false en una ejecución de prueba.
El bloque central se ejecuta una vez por cuenta. Las comprobaciones, y lo que hace --fix en cada una:
- Versión de Claude Code (
checkClaude). Resuelve el binarioclaudeigual que el iniciador y ejecutaclaude --version. Si la versión no empieza con2.1.302, la versión con la que se verificó la estructura de carpetas de ccam (doctor.LayoutVersion), agrega· ccam was verified against the folder layout of Claude Code 2.1.302. Any 'unknown entries' below may mean the layout changed. Un binario que falta o un--versionque falla es un error. Sin reparación. - Credenciales en el entorno (
checkAuthEnv). Advierte cuando está definidaCLAUDE_CODE_OAUTH_TOKEN,ANTHROPIC_API_KEYoANTHROPIC_AUTH_TOKEN: todas las cuentas que se inician desde esa shell la heredan, y Claude Code la prefiere al inicio de sesión propio de la cuenta. Sin reparación; quítala tú. - Carpeta (
checkProfile). Una carpeta de cuenta que falta es un error y termina las comprobaciones de esa cuenta. Los permisos con algún bit de grupo u otros activado son una advertencia;--fixejecutachmod 0700. - Archivo de inicio de sesión (
checkCredentials)..credentials.jsonse comprueba conlstat. Un enlace simbólico es un error, porque cada cuenta debe tener su propio token, y no se repara. Un modo distinto de0600es una advertencia;--fixejecutachmod 0600. Después se lee el inicio de sesión (en macOS, primero desde el Llavero). La falta de inicio de sesión es una advertencia que remite accam login <name>. Un token de actualización vencido es el errorlogin expired; un token de acceso vencido es solo información, ya que Claude Code lo renueva en el siguiente inicio. Nada de esto se repara. - Enlaces compartidos (
share.Check). Compara cada ruta deshare.Layoutcon la configuración de uso compartido de la cuenta, usando sololstatyreadlink. Informa de cuatro tipos: un enlace que falta, un enlace que apunta a otro sitio, un archivo normal donde debería haber un enlace y un enlace que sobra para un elemento que ahora es local. Un enlace que falta es una advertencia; los demás son errores. - Entradas desconocidas (
checkUnknownEntries). Lista los nombres de primer nivel de la carpeta de la cuenta que ccam no conoce (share.Known), como indicio de que la estructura de Claude Code cambió. Solo información. - Rutas de plugins (
checkPlugins). Los registros de plugins (installed_plugins.json,known_marketplaces.json) guardan rutas absolutas. En elplugins/de cada grupo, las rutas que pasan por la carpeta de una cuenta se rompen cuando esa cuenta se quita o cambia de nombre.--fixlas reescribe hacia la carpeta del grupo conprofile.RewritePluginPaths, una escritura atómica del archivo de registro. - Servidores MCP (
checkMCP). Carga una vez elmcp.jsonde cada grupo. Un archivo que no se puede leer es un error; un servidor que no pasamcp.Validatees una advertencia. Sin reparación. - Formato de la respuesta de uso (
checkUsageFormat). Consulta el endpoint de uso, sin la caché y con el límite habitual de 3 segundos, para una cuenta tras otra hasta que una responde. Si la respuesta ya no se puede analizar, advierte queccam usagerecurre a la caché de la línea de estado. Es la única comprobación que usa la red. - Atajos (
checkShims). Solo cuando una cuenta tiene un atajo. Los enlaces que faltan en~/.local/binson una advertencia;--fixllama ashim.Install, que solo crea los enlaces que faltan y nunca toca otros archivos. Una carpeta bin que no está enPATHes una advertencia y no se repara.
Reparar enlaces compartidos
La ruta de inicio crea en el momento un enlace que falta, pero se detiene ante cualquier cosa que podría perder datos y te remite aquí:
$ 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 againPara cualquier problema con un enlace compartido, --fix llama a share.Build con la configuración de uso compartido de la cuenta como estado actual y como estado de destino, y después a Plan.Apply. Build vuelve a derivar cada paso a partir de lo que hay en el disco, el mismo plan que usa ccam share, así que la reparación sigue las mismas reglas que activar el uso compartido.
Aquí settings.json es un archivo normal. Como el grupo ya tiene un settings.json distinto, el conflicto toma su opción predeterminada, KeepGroup, así que la copia del grupo se conserva. El archivo de la cuenta se mueve a .ccam-backup/<time>/settings.json dentro de la carpeta de la cuenta, y os.Symlink enlaza la ruta con el grupo. Otros casos:
- Si el grupo todavía no tiene una copia, el archivo de la cuenta se mueve al grupo y se convierte en su primer contenido.
- En una carpeta, los archivos que el grupo no tiene se mueven al grupo; el resto va a la copia de seguridad.
- En
history.jsonl, la opción predeterminada esmerge by line: las líneas del grupo y luego las tuyas nuevas. La copia anterior del grupo se guarda en.ccam-backup/<time>/group/. - Un enlace a otro grupo se reemplaza. Un enlace a una carpeta fuera de ccam va a la copia de seguridad, y su contenido sirve de base para el grupo si el grupo está vacío.
- Un enlace que sobra para un elemento que ahora es local se quita, y la cuenta recibe una copia del contenido del grupo.
Aparte de quitar enlaces, cada paso mueve datos al grupo o a la carpeta de copia de seguridad. No se elimina nada.
Seguridad y casos límite
ccam doctora secas nunca cambia nada. En scripts, usa--dry-runcon--fixpara estar seguro.doctor --fixno comprueba si una cuenta está en ejecución. Cierra Claude Code de una cuenta antes de reparar sus enlaces compartidos, porque la sesión sigue escribiendo en esos archivos.- Si falla la reparación de los enlaces compartidos, ccam informa
could not repair share links: <error>para esa cuenta y omite su comprobación de entradas desconocidas. Las demás cuentas se siguen comprobando. - Si
ccam sharefalla a medias, primero guarda la configuración de destino y te indica que termines conccam doctor --fix. - Un
.credentials.jsonenlazado simbólicamente, un inicio de sesión vencido y las credenciales del entorno se informan, pero nunca se cambian. - Las reescrituras del registro de plugins se escriben de forma atómica, pero no se copian a
.ccam-backup/.