TL;DR Settings → Desktop → Storage → Manage → pestaña Code sessions and worktrees: ahí ves lo que ocupan los worktrees de tus sesiones inactivas y los borras con Free up space. Para que no se repita, Settings → Claude Code → Auto-archive after PR merge.
Abrir una sesión nueva en Desktop es un clic, y ese clic crea un worktree aislado sin flags ni terminales. Es la mejor idea de la app: cada sesión trabaja en su propia rama sin pisar a las demás. Lo que no aparece en el mismo sitio es la factura: un worktree es un checkout completo de tu repositorio, y la sesión se queda en la barra lateral hasta que tú la archivas.
En el terminal esto se resuelve solo. Al salir de una sesión con worktree, Claude Code lo revisa: si está limpio y la sesión no tenía nombre, borra el worktree y su rama; si la sesión tenía nombre, te pregunta antes; si hay archivos cambiados, sin trackear o commits nuevos, te da a elegir entre conservarlo o borrarlo con todo lo que hay dentro. En Desktop no hay ese momento de salida. Cierras la pestaña y la sesión sigue viva en la barra lateral, con su carpeta puesta.
El panel que te dice cuánto ocupa
Está en los ajustes de la app, no en los de Claude Code: Settings → Desktop → Storage, botón Manage. Se abre un desglose del espacio que Claude usa en este ordenador, repartido por áreas, con una pestaña dedicada a Code sessions and worktrees.
Storage Manage
Space Claude uses on this computer
Code storage by kind
├─ Conversation history
├─ Worktrees in use or with changes
└─ Worktrees kept ready for new sessions
[ Free up space… ]
Inactive for at least [ N ] days
→ 7 worktrees from inactive sessions · 4.2 GB
(Vista previa ilustrativa: es una interfaz gráfica, no la puedo capturar desde aquí.)
Las tres filas no son lo mismo, y por eso el panel las separa. La conversación pesa poco. Los worktrees en uso o con cambios son los que están vivos. Y los worktrees kept ready for new sessions son los que la app deja preparados para la siguiente sesión, así que ese espacio no es basura acumulada.
Free up space trabaja sobre las sesiones inactivas y te deja fijar el corte, Inactive for at least N días. Lo que borra es la carpeta de cada worktree que ya no sostiene trabajo. Lo que tenga cambios sin commitear queda fuera por defecto, en una casilla aparte que te dice cuántos son y cuánto ocupan, y que avisa de que esos cambios se pierden. Es la única casilla del panel que conviene leer dos veces.
Que no vuelva a pasar
Vaciar el panel una vez sirve para hoy. Los dos interruptores que lo mantienen vacío están en Settings → Claude Code:
1. Auto-archive after PR merge
Archiva la sesión cuando su pull request se mergea o se cierra. Al archivarla se lleva por delante el worktree, y borra la rama si el PR llegó a mergearse. Lo que no habías pusheado se conserva. Solo aplica a sesiones locales que ya han terminado de trabajar.
2. Archive inactive sessions
Archiva las sesiones locales tras un periodo sin actividad. Nunca toca una sesión que está corriendo o que tiene trabajo en segundo plano, y si su worktree tiene cambios sin commitear lo deja en disco. Una sesión fijada tampoco se archiva sola.
Archivar no es borrar la conversación: la desarchivas y sigues donde estabas, solo que el worktree ya no está.
Y si el problema es dónde viven, no cuánto ocupan, en la misma sección tienes Worktree location (vacío significa dentro del proyecto, en .claude/worktrees; puedes apuntarlo a una carpeta de tu home y la app crea una subcarpeta por proyecto) y Branch prefix, que antepone lo que le digas a cada rama que crea Desktop, para distinguirlas de las tuyas de un vistazo.
Referencia
| Dónde | Qué controla |
|---|---|
| Settings → Desktop → Storage → Manage | El desglose de espacio y el botón Free up space |
| Settings → Claude Code → Auto-archive after PR merge | Archiva la sesión al mergear o cerrar su PR, y se lleva el worktree |
| Settings → Claude Code → Archive inactive sessions | Archiva sesiones locales sin actividad, respetando las que tienen cambios |
| Settings → Claude Code → Worktree location | Dónde se crean los worktrees (vacío = .claude/worktrees del proyecto) |
| Settings → Claude Code → Branch prefix | El prefijo de las ramas que crea Desktop |
En el terminal, lo mismo con otras piezas
Si vives en la CLI, el panel no existe y las herramientas son otras. La limpieza al salir es la principal, y encima hay un barrido periódico que retira los worktrees de subagentes y de sesiones en segundo plano cuando superan tu cleanupPeriodDays (el mismo ajuste que decide cuánto duran tus conversaciones en disco). Ese barrido respeta lo que tiene trabajo dentro y lo que creaste tú a mano con git worktree add. Para una sesión en segundo plano concreta, claude rm <id> la borra y se lleva su worktree cuando es seguro; para el resto, git worktree list y git worktree remove.
En mi máquina, que vive en el terminal, esas carpetas .claude/worktrees están vacías. Ese es justo el punto: la limpieza automática existe, pero en Desktop está atada a archivar la sesión, y archivar la sesión es un gesto que se te olvida.
Los worktrees dan para más de un susto. El clásico es el .env que no viaja, y si todavía no los usas para nada, empieza por tres tareas en paralelo con un solo comando.
Documentación oficial: Run parallel sessions with worktrees · Desktop: work in parallel with sessions
Requisitos
- Claude Code Desktop en macOS o Windows (los ajustes y el panel están leídos de la build 1.46388.4).
- Git instalado: sin él no hay aislamiento por sesión, y en Windows la pestaña Code no arranca.
- En el terminal,
claude rmy el barrido porcleanupPeriodDaysverificados en la CLI v2.1.263.