Una vez que has configurado Serena, ¿asumes que Claude Code, Codex CLI y Gemini CLI están usando Serena? En otras palabras, los usuarios que no están conscientes de esto podrían pensar que una vez configurado, Serena está funcionando mientras usan Codex o Claude. Luego, después de que ha pasado suficiente tiempo, piensan: “Espera, ¿la IA no está usando Serena, verdad?” Este artículo presenta una solución para evitar esta situación.
La suposición de que “lo configuré una vez = debería funcionar para siempre” es bastante común, y los casos en que Serena se desconecta sin que te des cuenta ocurren frecuentemente. Esto es especialmente probable durante actualizaciones de Codex/Claude, cambios de configuración o cambio de proyectos.
Síntomas Comunes
- La búsqueda cruzada de código y la resolución de referencias que funcionaban bien de repente se vuelven débiles/lentas
- No se comporta según las “instrucciones iniciales” de Serena
- Sin acceso al panel web de Serena (puerto predeterminado 24282) / Sin proceso en ejecución
- Codex/Claude completa tareas usando solo herramientas simples integradas (no llama a MCP externos)
Serena MCP (= serena start-mcp-server) no se actualiza automáticamente cada vez que se inicia. Este es un diseño intencional. Organicemos las razones y mejores prácticas operativas a continuación 👇
🧠 ¿Por Qué No Hay Actualizaciones Automáticas?
1. Priorizando la “Estabilidad del Entorno de Desarrollo”
Serena es un backend del que IDEs y agentes como Claude Code y Codex CLI dependen directamente. Si cambia automáticamente al último commit, existe el riesgo de que la integración de prompts se rompa debido a cambios menores en la sintaxis o especificaciones de la API, por lo que adopta el enfoque de “usar explícitamente una versión fija”.
🔄 Mejores Prácticas de Actualización
✅ Método 1: Actualizar Explícitamente Usando uvx
uvx te permite “volver a obtener explícitamente la última versión”, lo que lo convierte en el enfoque más seguro y recomendado.
# Ejecutar desde el último commit (también actualiza)
uvx --from git+https://github.com/oraios/serena serena start-mcp-server
uvx verifica el caché cada vez y reinstala si hay diferencias. En otras palabras, realiza “verificaciones de actualización en tiempo de ejecución” pero no realiza actualizaciones automáticas (pull forzado).
✅ Método 2: Para Clon Local
Si has clonado el repositorio directamente:
cd ~/serena
git pull
uv run serena start-mcp-server
Si estás siguiendo la rama main de GitHub, esto completa la actualización.
✅ Método 3: Operación con Versión Fija
Si tu objetivo es una operación estable, fija la versión:
uvx --from git+https://github.com/oraios/serena@v0.1.14 serena start-mcp-server
Al especificar una etiqueta como @v0.1.14, puedes prevenir cambios disruptivos de las actualizaciones.
🧩 Consejos Operativos
| Tipo de Operación | Método de Actualización | Notas |
|---|---|---|
| Experimentación Local | uvx --from git+https://github.com/... | Obtención automática de la última versión (para verificación ligera) |
| Servidor Siempre Activo | Etiqueta fija + git pull manual | Prioridad de estabilidad de versión |
| CI/Construcción Automática | uvx + --locked | Mantener entorno reproducible como Pipfile.lock |
🛠 Suplemento: Comando de Verificación de Actualización (Simple)
uvx --from git+https://github.com/oraios/serena serena version
Esto muestra la versión actual de Serena. La forma oficial es comparar manualmente mirando los releases en el repositorio de GitHub.
apt upgrade no se encarga de uv o Serena, por lo que tienden a quedar desactualizados antes de que te des cuenta (ambos se instalan “vía script o uv” = fuera de la gestión de APT).
Entonces, es más fácil configurar 2 sistemas de verificación + 1 integrado que “solo notifican” 👇 (Mientras se mantiene la política de actualizar en tu propio momento)
1) Verificar Última Versión de uv (Solo Notificación): uv-check.sh
#!/usr/bin/env bash
# Obtener la última versión de uv desde GitHub y comparar con la local (solo notificación)
set -e
REPO="astral-sh/uv"
TMP="/tmp/uv_latest.json"
have() { command -v "$1" >/dev/null 2>&1; }
if ! have uv; then
echo "⚠️ uv no encontrado. Primero instala con el instalador oficial:"
echo ' curl -LsSf https://astral.sh/uv/install.sh | sh'
exit 0
fi
if ! have curl || ! have jq; then
echo "❌ curl/jq requeridos: sudo apt update && sudo apt install -y curl jq"
exit 1
fi
LOCAL="$(uv --version 2>/dev/null | awk '{print $2}')"
curl -sL "https://api.github.com/repos/${REPO}/releases/latest" -o "$TMP"
REMOTE="$(jq -r '.tag_name' "$TMP" | sed 's/^v//')"
echo "💻 uv local : ${LOCAL:-unknown}"
echo "🌐 uv latest: ${REMOTE:-unknown}"
if [[ -z "$REMOTE" || "$REMOTE" == "null" ]]; then
echo "❌ Falló la consulta de última versión (verifica GitHub API o jq)"
exit 1
fi
if [[ "$LOCAL" != "$REMOTE" ]]; then
echo "🟡 ¡Actualización disponible!"
echo " Recomendado: uv self update"
echo " Si eso falla, reinstala:"
echo " curl -LsSf https://astral.sh/uv/install.sh | sh"
else
echo "✅ uv está actualizado."
fi
Instalación
sudo apt install -y jq
mkdir -p ~/bin
nano ~/bin/uv-check.sh # ← Pega lo anterior
chmod +x ~/bin/uv-check.sh
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
2) Verificar Última Versión de Serena (Solo Notificación): serena-auto.sh
(Puedes usar el que se proporcionó anteriormente tal cual. Solo recapitulando los puntos clave)
- Compara la última etiqueta de GitHub con
uvx … serena version - Si hay una diferencia, muestra solo el ejemplo de comando de actualización (sin actualización automática)
- Requiere
jq
Cuando quieras actualizar:
uvx --from git+https://github.com/oraios/serena@vX.Y.Z serena start-mcp-server
3) Versión Integrada Que Verifica Todo Junto: check-ai-stack.sh
#!/usr/bin/env bash
# Verificar uv / Serena / Codex / Claude juntos con "solo notificación"
set -e
echo "==== uv ===="
~/bin/uv-check.sh || true
echo
echo "==== Serena ===="
~/bin/serena-auto.sh || true
echo
echo "==== Codex CLI ===="
if command -v codex >/dev/null 2>&1; then
codex --version || true
npm outdated -g @openai/codex || true
else
echo "⚠️ codex no instalado (omitir)"
fi
echo
echo "==== Claude Code ===="
if command -v claude >/dev/null 2>&1; then
claude --version || true
npm outdated -g @anthropic-ai/claude-code || true
else
echo "⚠️ claude no instalado (omitir)"
fi
Instalación
nano ~/bin/check-ai-stack.sh # ← Pega lo anterior
chmod +x ~/bin/check-ai-stack.sh
Uso (Manual)
check-ai-stack.sh
Notificación por Email/Log Solo Semanal (Opcional)
crontab -e
Ejemplo:
# Ejecutar cada lunes a las 09:00 (JST) y notificación por email
0 9 * * 1 ~/bin/check-ai-stack.sh | mail -s "[AI stack] weekly check" you@example.com
※ Si el email es innecesario, puedes agregar a >> ~/.local/share/ai-stack/check.log.
Recordar “Ocasionalmente” en Inicio de Sesión SSH (One-liner Ligero)
Como es molesto cada vez, aquí hay un ejemplo que lo muestra solo una vez cada 7 días en .bashrc:
# Agregar al final de ~/.bashrc (notificación una vez cada 7 días)
if command -v date >/dev/null; then
STAMP="$HOME/.cache/ai-check.stamp"
mkdir -p "$(dirname "$STAMP")"
now=$(date +%s)
if [ -f "$STAMP" ]; then last=$(cat "$STAMP"); else last=0; fi
# 7 días = 604800 segundos
if [ $((now - last)) -ge 604800 ]; then
echo "[AI stack] Verificando después de un tiempo → check-ai-stack.sh"
~/bin/check-ai-stack.sh | sed 's/^/ /'
echo "$now" > "$STAMP"
fi
fi
¿Por Qué No Aparece en apt?
- uv: Instalado vía instalador oficial (curl) o auto-actualización (
uv self update). Separado de paquetes APT. - Serena: Capa de aplicación ejecutada desde el repositorio de GitHub vía
uvx. No está bajo gestión de APT. - Codex/Claude: Gestionado globalmente con npm (
npm -g). También fuera de APT.
Lo que se necesita para un entorno de desarrollo donde Codex / Claude usa Serena para “manejar trabajo pesado” es esencialmente este conjunto.
Esencial (Mínimo 3 Elementos + α para Hacerlo Funcionar)
- uv (Fundamento para ejecutar Serena)
- Rol: Runtime de Python + gestión de paquetes + ejecutar Serena al vuelo con
uvx - Instalación:
curl -LsSf https://astral.sh/uv/install.sh | sh
- Rol: Runtime de Python + gestión de paquetes + ejecutar Serena al vuelo con
- Serena MCP (Servidor MCP)
- Rol: Maneja análisis, búsqueda y edición de repositorios enormes
- Inicio:
uvx --from git+https://github.com/oraios/serena serena start-mcp-server
- Cliente MCP
- Cualquiera (o ambos)
- Codex CLI (
npm i -g @openai/codex) - Claude Code (
npm i -g @anthropic-ai/claude-codeetc.)
- Codex CLI (
- Cualquiera (o ambos)
✅ Conclusión: “uv + Serena + (Codex o Claude)” es el núcleo. Como pretendía, Serena maneja tareas de análisis cruzado pesadas y es llamado vía MCP desde Codex/Claude. Así que uv está involucrado (esencial para ejecutar Serena).
Prácticamente “Casi Esencial” (La Experiencia de Serena Es Significativamente Diferente)
ripgrep / fd-find / universal-ctags (Búsqueda rápida e indexación de símbolos)
sudo apt update && sudo apt install -y ripgrep fd-find universal-ctags
echo 'alias fd=fdfind' >> ~/.bashrc && source ~/.bashrc
- Git (por supuesto):
sudo apt install -y git - Servidor de Lenguaje (LSP): Según el lenguaje del proyecto
- Python:
pipx/uvx pyrightetc. - TS/JS:
npm i -g typescript-language-server typescript - Go:
sudo apt install -y golang→go install golang.org/x/tools/gopls@latest - Rust:
rustup→rust-analyzer - Java:
jdtlsetc. ※ Sin LSP, la precisión y velocidad de “salto a definición/resolución de referencias” disminuyen.
- Python:
Útil Tener (Dependiendo de la Escala y Caso de Uso)
- jq/curl (para scripts de verificación):
sudo apt install -y jq curl - build-essential pkg-config (para construir dependencias que requieren extensiones nativas)
- Docker (cuando quieres aislar de forma segura / para CI)
- watchman (para monitoreo de archivos a muy gran escala)
“Comando Completo” para Configuración Más Rápida
# 0) Base
sudo apt update && sudo apt install -y git ripgrep fd-find universal-ctags jq curl
echo 'alias fd=fdfind' >> ~/.bashrc && source ~/.bashrc
# 1) uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2) Serena (ejecutar bajo demanda, no se necesita instalación fija)
uvx --from git+https://github.com/oraios/serena serena start-mcp-server \
--context ide-assistant --project "$PWD" &
# 3) Cliente (cualquiera / ambos)
npm i -g @openai/codex
npm i -g @anthropic-ai/claude-code
Consejos Operativos (Prevenir Problemas de Desconexión)
- Orden de inicio fijo: Serena → (Codex/Claude). Un wrapper (el
dev-ide.shanterior) que no inicia el IDE si Serena no está ejecutándose funciona bien. - Fijación de versión: Solo actualiza explícitamente cuando quieras (Serena con
@vX.Y.Z, npm con especificación de versión). - Verificación “solo notificación” semanal: Cron
uv-check.sh+serena-auto.sh+check-ai-stack.sh.
Procedimiento de Instalación en Windows (Básico)
1) Instalando uv
Para Windows, según la documentación oficial, hay los siguientes métodos: Astral Docs+2Astral Docs+2
Abre PowerShell en modo administrador:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
O puedes instalar desde un gestor de paquetes de Windows (ej., WinGet):
winget install --id=astral-sh.uv -e
Después de la instalación, verifica con uv --version. Si PATH no está configurado, obtendrás un error tipo “uv: command not found”, por lo que necesitas verificar las variables de entorno.
2) Configuración de Inicio de Serena MCP
En Windows, el flujo básico es el mismo: “iniciar Serena usando uv con start-mcp-server” → registrarlo como un servidor MCP en el cliente (Claude Desktop / Claude Code, etc.). Por ejemplo:
uvx --from git+https://github.com/oraios/serena serena start-mcp-server --context ide-assistant --project <ruta del proyecto>etc. Para rutas de Windows, ten cuidado de escapar\como\\, o usa/.- Registra el comando de Serena como un servidor MCP en el archivo de configuración del cliente (ej.,
%APPDATA%\Claude\claude_desktop_config.jsonde Claude Desktop). Ten cuidado con el escape de rutas específico de Windows.
⚠️ “Trampas” Específicas de Windows y Notas
- Problemas de PATH: Errores como comando
uvouvxno encontrado, o archivo no encontrado, se reportan relativamente comúnmente en Windows. - Permisos/Política de Ejecución: Al ejecutar scripts en PowerShell, la configuración de
ExecutionPolicypuede ser una restricción. Necesitas especificarByPasscomo sugiere el instalador. - Ruta de proyecto/separador de directorio: Windows usa
\, pero en archivos de configuración es más seguro usar\\o/. Por ejemplo,"your\\project\\folder\\path"en configuración JSON. - Servidor de lenguaje / Node.js / dependencias npm: También hay problemas donde el comando
npmno se encuentra y falla al usar TypeScript Language Server etc. en Windows. → Necesitas verificar que Node.js + npm estén correctamente instalados/en PATH. - Operación de script de actualización/verificación: Los
uv-check.sh/serena-auto.shproporcionados para Ubuntu asumen un entorno Bash. En Windows, necesitas reescribirlos como versiones de script de PowerShell.
🔧 Propuesta de Script de Verificación/Notificación para Windows
Como usar los scripts de Ubuntu tal cual es difícil, es mejor preparar scripts de PowerShell para Windows. Por ejemplo:
uv-check.ps1serena-auto.ps1
Ejemplo simple (uv-check.ps1):
# uv-check.ps1
$remoteJson = Invoke-WebRequest -Uri "https://api.github.com/repos/astral-sh/uv/releases/latest" | ConvertFrom-Json
$remote = $remoteJson.tag_name.TrimStart("v")
$local = (& uv --version).Split()[1]
Write-Host "uv local : $local"
Write-Host "uv latest: $remote"
if ($local -ne $remote) {
Write-Host "⚠️ ¡Actualización disponible! Por favor ejecuta uv self update"
} else {
Write-Host "✅ uv está actualizado."
}
De manera similar, prepara serena-auto.ps1 para comparar “etiqueta de release de GitHub vs versión local” y notificar. Además, si configuras estos para ejecutarse “semanalmente” en el Programador de Tareas, puedes habilitar “verificaciones para no olvidar” en Windows también.
Error Al Ejecutar uv self update
uv self update error: Self-update is only available for uv binaries installed via the standalone installation scripts. The current executable is at C:\Users\minok\AppData\Local\Microsoft\WinGet\Packages\astral-sh.uv_Microsoft.Winget.Source_8wekyb3d8bbwe\uv.exe but the standalone installer was used to install uv to C:\Users\minok\.local\bin. Are multiple copies of uv installed?
Conclusión: uv tiene una instalación dual (versión WinGet + versión standalone), y uv self update está fallando porque está “mirando una ubicación diferente a la que instalaste tú mismo”.
¿Qué Está Pasando?
uv self updatesolo puede actualizar ejecutables instalados con la versión standalone.- El
uv.exeactualmente en ejecución está bajo WinGet:C:\Users\minok\AppData\Local\Microsoft\WinGet\Packages\astral-sh.uv_...\uv.exe - Pero la versión standalone también existe al mismo tiempo:
C:\Users\minok\.local\bin\uv.exe(uvx.exetambién está aquí)
En este estado de “existen dos copias”, dependiendo de la prioridad de PATH, uv self update intenta tocar la versión WinGet y es rechazado.
Estrategia de Resolución (Unificar a Uno)
✅ Estrategia A (Recomendada): Unificar a Versión Standalone
Razón: Puede usar uv self update / uvx está incluido de manera confiable.
- Desinstalar versión WinGet
winget list astral-sh.uv
winget uninstall --id astral-sh.uv -e
- Verificar prioridad de PATH (
%USERPROFILE%\.local\bindebería estar cerca del principio)
where uv
$Env:Path -split ';'
Idealmente, C:\Users\minok\.local\bin está antes de la ubicación de WinGet. Si es necesario, temporalmente:
$bin = "$Env:USERPROFILE\.local\bin"
$Env:Path = "$bin;" + ($Env:Path -replace [regex]::Escape("$bin;"), '')
(Para persistencia, editar vía GUI de “Variables de Entorno del Sistema” es recomendado. setx puede acortar PATH existente, así que ten cuidado)
- Verificar
where uv
uv --version
uvx --version
uv self update # ← Esto ahora debería funcionar
Estrategia B: Unificar a Versión WinGet (Dejar actualizaciones automáticas a WinGet)
- Eliminar versión standalone
- Elimina
C:\Users\minok\.local\bin\uv.exe,uvx.exe,uvw.exe - Remueve
C:\Users\minok\.local\binde PATH (si no se usa en otro lugar)
- Actualizar con WinGet
winget upgrade --id astral-sh.uv -e
Nota:
uv self updateno puede ser usado. Siuvxestá incluido en la versión de paquete de WinGet depende del paquete, así que verifica conwhere uvx. Si no, espera actualización de WinGet o ve a Estrategia A.
One-liner para Verificar Rápidamente la Situación
Write-Host "== which =="
where uv; where uvx
Write-Host "== actual =="
(Get-Command uv).Source
(Get-Command uvx -ErrorAction SilentlyContinue).Source
→ Queda inmediatamente claro qué ejecutable está siendo llamado.
Recomendado para Operación Real
Ve con Estrategia A (standalone) + prioridad de PATH, para que puedas usar uv self update / uvx … serena … de la manera más fluida.
Para scripts relacionados con Serena, puedes fijar el ejecutable al principio para prevención de errores:
$UVX = (Get-Command uvx).Source # ej., C:\Users\minok\.local\bin\uvx.exe
& $UVX --from git+https://github.com/oraios/serena serena start-mcp-server ...
Procedimiento de Recuperación Más Rápido para Este Caso (Estrategia A)
# 1) Remover versión WinGet
winget uninstall --id astral-sh.uv -e
# 2) Reinstalar standalone (omitir si ya está hecho)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# 3) Priorizar .local\bin en PATH
# → Editar variables de entorno vía GUI o sobrescribir temporalmente (snippet anterior)
# 4) Verificar
where uv; where uvx
uv --version
uv self update # ← Si esto funciona, unificación completa
Con esto, incluso en Windows, uv self update funciona correctamente, y puedes operar Serena de manera estable vía uvx.
Sin embargo, el método anterior puede no funcionar en algunos casos.
PS C:\Users\minok> winget list astral-sh.uv No se encontraron paquetes instalados que coincidan con los criterios de entrada. PS C:\Users\minok> winget uninstall --id astral-sh.uv -e No se encontraron paquetes instalados que coincidan con los criterios de entrada.
De hecho, esto es típico de una versión portable huérfana donde la versión WinGet “parece existir” pero no es visible en winget list. En otras palabras, solo quedan el “enlace (shim)” o remanentes de paquete creados por WinGet, y uv self update lo recoge.
Vamos a limpiar manualmente los remanentes de WinGet → unificar a versión standalone con el procedimiento a continuación.
Recuperación Rápida (PowerShell)
- Primero, verifica qué uv está siendo llamado
where uv
Get-Command uv | Select-Object Source
where uvx
Get-Command uvx | Select-Object Source
Si la salida es ...AppData\Local\Microsoft\WinGet\Packages\astral-sh.uv_...\uv.exe, el lado WinGet está priorizado. Si where uv no muestra nada, puedes mostrarlo en Símbolo del sistema.

- Eliminar el “enlace portable” de WinGet (Si esto permanece, tiende a ser priorizado)
# Ubicación de enlace de WinGet (ejecutable de acceso directo)
$links = "$env:LOCALAPPDATA\Microsoft\WinGet\Links"
Remove-Item "$links\uv.exe" -ErrorAction SilentlyContinue
Remove-Item "$links\uvx.exe" -ErrorAction SilentlyContinue
Remove-Item "$links\uvw.exe" -ErrorAction SilentlyContinue
Si Links está vacío (o no existe en absoluto), el lado WinGet probablemente está “poniendo el ejecutable directamente bajo Packages, no vía shim de Links” en PATH. La solución para ese caso se describe más adelante.
- Eliminar remanentes de paquete WinGet (si los hay)
$pkg = Get-ChildItem "$env:LOCALAPPDATA\Microsoft\WinGet\Packages" -Directory `
| Where-Object { $_.Name -like 'astral-sh.uv_*' }
if ($pkg) { Remove-Item $pkg.FullName -Recurse -Force }
- Priorizar la versión standalone ya instalada (Para que
C:\Users\minok\.local\binesté cerca del principio de PATH)
$bin = "$env:USERPROFILE\.local\bin"
# Temporalmente poner al principio (solo sesión)
$env:Path = "$bin;" + ($env:Path -replace [regex]::Escape("$bin;"), '')
# Para persistencia, mover al principio de PATH de usuario en GUI de "Variables de Entorno del Sistema" es seguro
- Verificar operación
where uv
Get-Command uv | Select-Object Source
uv --version
uv self update # ← Si esto funciona, OK
Último Recurso Si No Funciona
Reinstala el lado .local\bin (sobrescribir OK)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Si where uv todavía apunta al lado WinGet, el orden de Path todavía está invertido. También verifica nuevamente si uv.exe en Links ha sido recreado.
Puntos Clave
- Las aplicaciones portables de WinGet tienen shim en carpeta “Links” como el ejecutable. A veces no aparecen en
winget list, y para eliminación, limpiar manualmente tanto Links como Packages es confiable. - En adelante, mantener solo la versión standalone te permite usar
uv self updatey estabiliza la operación de Serena. - El lado de Serena puede ser usado tal cual:
uvx --from git+https://github.com/oraios/serena serena start-mcp-server
Links Está Vacío y el Comando No Muestra Nada
Actualmente siendo recogido está:
C:\Users\minok\AppData\Local\Microsoft\WinGet\Packages\astral-sh.uv_...\uv.exe
Entonces, vamos a expulsar qué uv.exe está priorizado y orden de PATH de una vez, remover el lado WinGet, y priorizar .local\bin.
1) Mostrar Todo “Qué uv Está Siendo Usado”
# ¿En qué orden se encuentran? (aparecerán múltiples)
where uv
where uvx
# Ejecutable real que PowerShell resuelve (-All para todos)
Get-Command uv -All | Select-Object Source
Get-Command uvx -All | Select-Object Source

Si
WinGet\Packages…\uv.exeaparece arriba de.local\bin\uv.exe, ese está priorizado.
2) Verificar Si la Ruta de Packages de WinGet Está Mezclada en PATH
$Env:Path -split ';' | ForEach-Object {
if ($_ -match 'WinGet\\Packages' -or $_ -match 'WindowsApps') { "→ $_" } else { $_ }
}

…\Microsoft\WinGet\Packages\astral-sh.uv_…aparece ⇒ Este es el objetivo a remover…\Microsoft\WindowsAppses para Microsoft Store/alias. Usualmente OK dejarlo tal cual (a menudo no relacionado con uv)
3) Limpiar “Ejecutable de WinGet” (Eliminar Packages Directamente Si Links No Existe)
# Eliminar carpeta de remanente de WinGet de uv si existe
Get-ChildItem "$env:LOCALAPPDATA\Microsoft\WinGet\Packages" -Directory `
| Where-Object { $_.Name -like 'astral-sh.uv_*' } `
| ForEach-Object {
Write-Host "Removing $($_.FullName)"
Remove-Item $_.FullName -Recurse -Force
}
# Por si acaso, Links una vez más (ignorar si no existe)
Remove-Item "$env:LOCALAPPDATA\Microsoft\WinGet\Links\uv*.exe" -ErrorAction SilentlyContinue

Nota: Si lo anterior falla, puedes eliminar manualmente abriendo la carpeta en el Explorador (si no está bloqueado, la eliminación es posible).
4) Priorizar .local\bin para Prueba (Solo Sesión)
$bin = "$env:USERPROFILE\.local\bin"
$env:Path = "$bin;" + ($env:Path -replace [regex]::Escape("$bin;"), '')
# Verificar
where uv
Get-Command uv | Select-Object Source
uv --version
uv self update # ← Si esto tiene éxito, cambio a prioridad standalone está completo
PS C:\Users\minok> Get-Command uv | Select-Object Source
Source —— C:\Users\minok\.local\bin\uv.exe
PS C:\Users\minok> uv –version uv 0.9.5 (d5f39331a 2025-10-21) PS C:\Users\minok> uv self update info: Checking for updates… success: You’re on the latest version of uv (v0.9.5)
PS C:\Users\minok> Get-Command uv | Select-Object Source
Source
——
C:\Users\minok\.local\bin\uv.exe
PS C:\Users\minok> uv –version
uv 0.9.5 (d5f39331a 2025-10-21)
PS C:\Users\minok> uv self update
info: Checking for updates…
success: You’re on the latest version of uv (v0.9.5)

5) Persistencia (Reordenar PATH de Usuario)
GUI (recomendado): Configuración → Sistema → Acerca de → “Configuración relacionada” → Configuración avanzada del sistema → Variables de entorno → Editar PATH de “Variables de entorno de usuario” → Mover %USERPROFILE%\.local\bin al principio → Guardar con OK → Reabrir un nuevo PowerShell y verificar.

Si realmente quieres hacerlo vía comando (mayor riesgo, así que GUI recomendado):
$bin = "$env:USERPROFILE\.local\bin"
$curr = [Environment]::GetEnvironmentVariable('Path', 'User')
if ($curr -notmatch [regex]::Escape($bin)) {
[Environment]::SetEnvironmentVariable('Path', "$bin;$curr", 'User')
} else {
# Mover al principio
$parts = ($curr -split ';') | Where-Object { $_ -ne $bin -and $_ -ne '' }
$new = "$bin;" + ($parts -join ';')
[Environment]::SetEnvironmentVariable('Path', $new, 'User')
}
6) Verificación Final
where uv; where uvx
Get-Command uv,uvx | Select-Object Name,Source
uv --version
uv self update
Con esto, el ejecutable del lado WinGet es removido, y uv/uvx de .local\bin es confiablemente priorizado. En adelante:
- Actualización:
uv self update - Inicio de Serena:
uvx --from git+https://github.com/oraios/serena serena start-mcp-server --context ide-assistant --project "C:/path/to/your/project"

