CommunityProgramación y desarrollogithub.com

soerenmartius/claude-desktop-profiles

Úsalo cuando alguien quiera tener la aplicación de escritorio de Claude iniciada sesión en varias cuentas de Claude a la vez en un Mac, una instancia de la aplicación por cuenta y poder cambiar entre ellas desde el Dock, o pida perfiles separados de Claude Desktop, una configuración multi-cuenta de Claude o lanzadores del Dock para la aplicación de Claude.

¿Qué es claude-desktop-profiles?

Esta habilidad configura múltiples perfiles de cuenta de Claude Desktop en macOS sin modificar la aplicación original. Crea un lanzador separado en el Dock por cada cuenta, cada uno apuntando a su propia carpeta de perfil mediante `--user-data-dir`, permitiendo que el usuario tenga varias sesiones de Claude abiertas simultáneamente, cada una con su propia cuenta iniciada. Es útil para desarrolladores o usuarios avanzados que necesitan gestionar varias cuentas de Claude (por ejemplo, personal y del trabajo) sin cerrar sesión constantemente ni modificar el perfil predeterminado. Está diseñada exclusivamente para macOS y está basada en la guía de Chad Timblin. La habilidad incluye un script bash (`claude-profiles.sh`) que realiza el pre-vuelo, la comprobación del mecanismo, la construcción de los lanzadores, pruebas de humo y una verificación final del estado de los procesos. También genera un archivo README con instrucciones paso a paso para el usuario. Es importante seguir estrictamente las reglas: no modificar la aplicación original, no sobrescribir el perfil predeterminado, no lanzar un perfil que ya esté en ejecución y no intentar manejar contraseñas o inicios de sesión.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/soerenmartius/skills/tree/HEAD/skills/claude-desktop-profiles

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Perfiles de Claude Desktop

Un /Applications/Claude.app real, una carpeta de perfil por cuenta mediante --user-data-dir, un lanzador protegido en el Dock por cuenta. La aplicación existente, su inicio de sesión y el perfil predeterminado nunca se modifican. Para deshacer, basta con eliminar los lanzadores y las carpetas adicionales.

Derivado de la guía de Chad Timblin Ejecutar una aplicación de escritorio de Claude separada para cada cuenta de Claude. Solo macOS. Windows no está verificado; el apéndice de esa guía tiene las notas conocidas.

Reglas básicas

  1. Nunca modifiques, muevas, renombres, dupliques o vuelvas a firmar /Applications/Claude.app. Tampoco como solución alternativa. Si el paso 2 falla, detente e informa; no ofrezcas un clon.
  2. Nunca escribas en el perfil predeterminado ~/Library/Application Support/Claude.
  3. Nunca lances un perfil que ya se esté ejecutando. La aplicación no tiene un bloqueo de instancia única en macOS: dos lanzamientos de una misma carpeta generan dos procesos vivos que comparten la misma carpeta (verificado el 2026-11-04 en v4.16336.0, y el 2026-07-11 en v1.20186.1). La ruta de enfoque de un lanzador nunca debe recurrir a relanzar.
  4. Los inicios de sesión son responsabilidad del usuario, con exactamente una instancia ejecutándose. Los inicios de sesión con Google y SSO hacen un viaje de ida y vuelta a través del navegador y regresan mediante un enlace claude://, que macOS entrega a la instancia que ya se está ejecutando. Con dos abiertas, la que tiene la sesión iniciada lo recibe y registra Google sign-in code does not answer a sign-in this app started; ignoring, y la otra permanece en la pantalla de inicio de sesión. Nunca manejes contraseñas.
  5. Ten en cuenta tu entorno de ejecución. Si esta sesión se ejecuta dentro de la aplicación de escritorio de Claude, al cerrarla se elimina la sesión: entrega los pasos para cerrar al usuario como texto. Si ~/Library no es legible, dile al usuario que ejecute esto desde una terminal.
  6. Elimina solo los artefactos de prueba que hayas creado en esta sesión. La prueba de humo del script se niega a tocar una carpeta que existía antes de ejecutarse.

Alcance

Todo el trabajo son unos diez comandos más un README. Los datos sobre la versión instalada provienen de la prueba desechable del paso 2, nunca de leer app.asar, entitlements, fusibles o componentes internos de Electron. Iconos de lanzador personalizados solo si el usuario lo pide.

Pasos

S es scripts/claude-profiles.sh en el directorio de esta habilidad; bash $S imprime el uso. Las fuentes de AppleScript van a CLAUDE_LAUNCHER_SOURCES (por defecto ~/Documents/claude-multi-account/launcher-sources); apúntalo a la carpeta del README del paso 5 si el usuario elige otra. Si /Applications no es editable, establece CLAUDE_LAUNCHER_DIR=$HOME/Applications. verify-mechanism escribe y elimina /tmp/claude-profile-test-<pid>.

  1. Entradas. La cuenta principal es la que tiene la sesión iniciada actualmente. Esta conserva el perfil predeterminado y obtiene Claude (<Etiqueta>).app. Cada otra cuenta obtiene la carpeta Claude-<Etiqueta> y su propio Claude (<Etiqueta>).app. Pide las etiquetas y los correos electrónicos si no se proporcionaron. Para saber qué cuenta tiene la sesión iniciada, compara lastKnownAccountUuid en el config.json del perfil predeterminado con oauthAccount en ~/.claude.json; si difieren, pregunta al usuario qué correo electrónico muestra la aplicación. Ningún nombre de carpeta de perfil puede ser prefijo de otro; build rechaza un conflicto con carpetas existentes y con carpetas nombradas por otras fuentes de lanzadores. Las carpetas en Application Support que comiencen con Claude pero no contengan un archivo Cookies (como Claude-3p) no son perfiles; déjalas en paz.
  2. Pre-vuelo y mecanismo. bash $S preflight. Advierte al usuario de que aparecerá una ventana, luego bash $S verify-mechanism. FALLO significa detenerse e informar al usuario.
  3. Construcción y prueba de humo. Principal: bash $S build <Etiqueta> default. Cada otra cuenta: bash $S build <Etiqueta> Claude-<Etiqueta>, luego bash $S smoke <Etiqueta> Claude-<Etiqueta>. Nunca hagas la prueba de humo al lanzador principal: su ruta de enfoque activa el mensaje de Automatización en un momento que el usuario no espera. Si existen lanzadores o un README de una ejecución anterior, haz una copia de seguridad de la carpeta README, reconstruye en el lugar (build sobrescribe) y nunca elimines un lanzador que no hayas creado en esta sesión.
  4. Comprobación de migración. Las cosas del lado de claude.ai (conversaciones, proyectos, conectores) siguen al inicio de sesión. Las cosas del lado del escritorio no. Los servidores MCP viven en <perfil>/claude_desktop_config.json: copia las entradas de forma selectiva, ya que una copia completa duplica cada proceso de servidor local. Las tareas programadas viven en <perfil>/local-agent-mode-sessions/<uuid>/<uuid>/scheduled-tasks.json y <perfil>/claude-code-sessions/..., se ejecutan solo mientras su cuenta tiene la sesión iniciada dentro de una instancia en ejecución y migran con la instancia de destino cerrada: copia los campos exactamente, elimina notifySessionId, conserva lastRunAt, establece enabled: false en la copia antigua y consérvala. El bloque preferences de ese mismo archivo (configuración de Cowork, puerta de permisos de omisión, orígenes permitidos, concesiones de carpetas, emparejamiento con la extensión de Chrome) permanece con el perfil predeterminado; enumera en el README lo que el usuario puede querer volver a configurar y señala que solo una instancia debe emparejarse con la extensión de Chrome. ~/.claude es compartido por todas las instancias, por lo que el CLAUDE.md global se aplica a todas ellas.
  5. README. Rellena references/readme-template.md en una carpeta que nombre el usuario (por defecto ~/Documents/claude-multi-account).
  6. Entrega con el texto siguiente, luego detente. Antes de cada inicio de sesión que el usuario informe, ejecuta bash $S ps y confirma que no imprime nada; si lo hace, cierra las instancias tú mismo (kill sobre sus pids, SIGTERM es un cierre limpio para esta aplicación) y solo entonces dile al usuario que haga clic en el lanzador. Todas las ventanas en ejecución tienen el mismo aspecto, por lo que "cerrar la que tiene la sesión iniciada" es el paso que los usuarios suelen hacer mal.
  7. Cuando el usuario informe de vuelta: bash $S ps debe mostrar cada instancia en un perfil distinto con un UUID account= distinto.

Texto de entrega

Con solo una instancia abierta a la vez:

  1. Arrastra los lanzadores desde Aplicaciones al Dock y elimina el mosaico simple de Claude: una vez que se ejecuten varias instancias, ese mosaico se iluminará para todas ellas y enfocará la que macOS elija.
  2. Cierra todas las ventanas de Claude: presiona Cmd+Q en cada una hasta que no quede ninguna. Todas las ventanas son idénticas, así que no intentes conservar una. Un inicio de sesión solo se completa cuando se está ejecutando exactamente una instancia.
  3. Haz clic en Claude (<Etiqueta2>), inicia sesión con esa cuenta, luego ciérrala de la misma manera. Repite para cada cuenta adicional, siempre sin nada más ejecutándose.
  4. Haz clic en Claude (<Etiqueta1>). La cuenta principal todavía tiene la sesión iniciada.
  5. A partir de ahora, abre cualquier combinación. Para cerrar solo una instancia, haz clic primero en su ventana y luego presiona Cmd+Q.

La primera vez que un lanzador enfoca una instancia en ejecución, macOS pregunta si se le permite controlar Eventos del Sistema. Haz clic en Permitir; denegar solo desactiva el enfoque automático. Los mosaicos en ejecución comparten un solo icono y pueden fusionarse después de reiniciar el Dock. Ambos casos son inofensivos.

Problemas conocidos

SíntomaQué hacer
Dos instancias muestran el mismo icono en el Dock, o se fusionan en un solo mosaicoCosmético. Los lanzadores encuentran las instancias por proceso, no por mosaico.
El atajo de teclado de Entrada Rápida se activa en una sola instanciaAmbas lo registran. Cámbialo o desactívalo en la configuración de una instancia.
"Reiniciar para actualizar" en una instanciaCierra todas las instancias, luego vuelve a lanzarlas a través de los lanzadores. Un paquete de aplicación, una ruta de actualización.
Cowork utilizado en un segundo perfilDescarga su propio paquete de máquina virtual, unos 10 GB por perfil.
kill $pids falla con "illegal pid: 1\n2"zsh no divide palabras. Canaliza a través de xargs kill. El script ya lo hace.
Carpeta de prueba eliminada mientras su instancia aún se ejecutabaPrimero mata, confirma que desapareció, luego elimina. El script ya lo hace.
El inicio de sesión con Google o SSO abre el navegador, termina en "Finalizar inicio de sesión en la aplicación Claude" y "Abrir Claude" no hace nada; la nueva instancia permanece en la pantalla de inicio de sesiónOtra instancia se estaba ejecutando y tomó la devolución de llamada. Cierra todas las instancias (verifica con ps), abre solo ese lanzador, inicia sesión de nuevo. Todas las instancias comparten ~/Library/Logs/Claude/main.log; búscalo con [Auth] y sign-in code para ver cuál lo recibió. Pids sin cambios entre intentos significan que el usuario nunca cerró.
Apareció el mensaje de Automatización durante la configuraciónAlguien abrió un lanzador cuya instancia ya se estaba ejecutando. Haz clic en Permitir; no hay nada roto.

Banderas rojas

  • "La aplicación tiene un bloqueo de instancia única, por lo que relanzar al fallar el enfoque es seguro." No lo tiene. El paso 2 es la única fuente de verdad sobre esta versión.
  • "El inicio de sesión está dentro de la aplicación, por lo que ambas instancias pueden permanecer abiertas." Una instancia durante el inicio de sesión, siempre.
  • "Plan B: clonar y volver a firmar la aplicación." Prohibido. Detente e informa en su lugar.
  • "Déjame inspeccionar app.asar / entitlements / fusibles primero.\

Skills relacionados