一度Serenaの設定を済ませば、Claude Code、Codex CLI、Gemini CLIがSerenaを使っていると思っていませんか?つまりこれに気が付いていないユーザーは一度セットアップしてしまえば、Serenaが使えると思ってCodexやClaudeを使用している可能性があります。 そして、十分時間が経ったときに「あれ、AIがSerena使ってなくね?」 と思うのです。今回はそれを回避する案を記事にしてみました。
一度セットアップした=ずっと使えているはず」と思い込み、いつの間にかSerenaが外れてるケースはかなり起きがちです。特に Codex/Claude 側のアップデートや設定変更・プロジェクト切替のタイミングで発生しやすいです。
- 起きがちな“あるある”症状
- 🧠 なぜ自動アップデートしないのか
- 🔄 更新のベストプラクティス
- 🧩 運用Tips
- 🛠 補足:アップデート確認コマンド(簡易)
- 1) uv の最新版チェック(通知のみ): uv-check.sh
- 2) Serena の最新版チェック(通知のみ): serena-auto.sh
- 3) まとめて点検してくれる統合版: check-ai-stack.sh
- 必須(これだけで回る“最小3点+α”)
- 実用上“ほぼ必須”(Serenaの体感が段違いに)
- あると便利(規模・用途次第)
- 最短セットアップの“完成コマンド”
- 運用のコツ(外れてた問題を防ぐ)
- Windows でのインストール手順(基本)
- ⚠️ Windows特有の「ハマりどころ」&注意点
- 🔧 Windows用チェック/通知スクリプト案
- uv self updateでエラーが発生
- 実運用のおすすめ
- Links が空でコマンドで何も表示されない
起きがちな“あるある”症状
- 以前できていたコード横断検索・参照解決が急に弱い/遅い
- 「Serenaの初期説明」(initial instructions)に沿った振る舞いをしない
- SerenaのWebダッシュボード(既定 24282)にアクセスが無い/プロセスが無い
- Codex/Claude が内蔵の簡易ツールだけで完結している(外部MCPを呼ばない)
Serena MCP(=serena start-mcp-server)は、起動のたびに自動アップデートは行いません。これは意図的な設計です。理由と運用上のベストプラクティスを整理します👇
🧠 なぜ自動アップデートしないのか
1. 「開発環境の安定性」を最優先
SerenaはClaude CodeやCodex CLIなどIDEやエージェントが直接依存するバックエンドです。
自動で最新コミットに切り替わると、構文やAPI仕様の微変更で
プロンプト連携が壊れるリスクがあるため、「固定版を明示的に使う」方式を採っています。
🔄 更新のベストプラクティス
✅ 方法1:uvxを使って明示的に更新
uvxは「最新版を明示的に再取得」できるので、これが最も安全&推奨です。
# 最新コミットから実行(更新も兼ねる)
uvx --from git+https://github.com/oraios/serena serena start-mcp-server
uvxは毎回キャッシュを確認し、差分があれば再インストールする仕組みです。
つまり、「実行時の更新確認」はしますが、自動アップデート(強制pull)は行いません。
✅ 方法2:ローカルCloneの場合
もしリポを直接cloneしているなら:
cd ~/serena
git pull
uv run serena start-mcp-server
GitHubの main ブランチを追従している場合はこれで更新完了です。
✅ 方法3:固定バージョン運用
安定稼働が目的ならバージョンを固定します:
uvx --from git+https://github.com/oraios/serena@v0.1.14 serena start-mcp-server
@v0.1.14 のようにタグ指定しておけば、更新による破壊的変更を防げます。
🧩 運用Tips
| 運用形態 | 更新方法 | 備考 |
|---|---|---|
| ローカル実験 | uvx --from git+https://github.com/... | 最新を自動取得(軽い検証向け) |
| 常時稼働サーバ | 固定タグ+手動git pull | バージョン安定性優先 |
| CI/自動構築 | uvx+--locked | Pipfile.lock的に再現可能な環境を保持 |
🛠 補足:アップデート確認コマンド(簡易)
uvx --from git+https://github.com/oraios/serena serena version
これで現在のSerenaバージョンが出力されます。
GitHubリポジトリの releases を見て手動で比較するのが公式流です。
apt upgrade ではuv も Serena も面倒見てくれないので、気づいたら古いままになりがちなんですよね(どちらも “スクリプト or uv 経由” で入れている=APT管理外)。
そこで、「通知だけ出す」チェック系を2つ+統合1つ置いておくのがラクです👇
(更新は自分のタイミングでやる方針のまま)
1) uv の最新版チェック(通知のみ): uv-check.sh
#!/usr/bin/env bash
# uv の最新版を GitHub から取得して、ローカルと比較(通知のみ)
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 が見つかりません。まずは公式インストーラで導入してください:"
echo ' curl -LsSf https://astral.sh/uv/install.sh | sh'
exit 0
fi
if ! have curl || ! have jq; then
echo "❌ curl/jq が必要です: 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 "❌ 最新版照会に失敗(GitHub API or jq を確認)"
exit 1
fi
if [[ "$LOCAL" != "$REMOTE" ]]; then
echo "🟡 アップデートあり!"
echo " 推奨: uv self update"
echo " もし失敗する場合は再インストール:"
echo " curl -LsSf https://astral.sh/uv/install.sh | sh"
else
echo "✅ uv は最新です。"
fi
設置
sudo apt install -y jq
mkdir -p ~/bin
nano ~/bin/uv-check.sh # ←上を貼付
chmod +x ~/bin/uv-check.sh
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
2) Serena の最新版チェック(通知のみ): serena-auto.sh
(前に出したものをそのまま使えばOK。要点だけ再掲)
- GitHubの最新タグと
uvx … serena versionを比較 - 差があれば「更新コマンド例だけ」を表示(自動更新はしない)
jq必須
更新したいときだけ:
uvx --from git+https://github.com/oraios/serena@vX.Y.Z serena start-mcp-server
3) まとめて点検してくれる統合版: check-ai-stack.sh
#!/usr/bin/env bash
# uv / Serena / Codex / Claude をまとめて “通知だけ” 点検
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 が未導入(スキップ)"
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 が未導入(スキップ)"
fi
設置
nano ~/bin/check-ai-stack.sh # ←上を貼付
chmod +x ~/bin/check-ai-stack.sh
使い方(手動)
check-ai-stack.sh
週1だけメール/ログに通知(任意)
crontab -e
例:
# 毎週月曜 09:00(JST)に実行してメール通知
0 9 * * 1 ~/bin/check-ai-stack.sh | mail -s "[AI stack] weekly check" you@example.com
※ メール不要なら >> ~/.local/share/ai-stack/check.log に追記でも。
SSHログイン時に“たまに”思い出させる(軽量ワンライナー)
毎回は鬱陶しいので、7日おきに一度だけ .bashrc で出す例:
# ~/.bashrc の末尾に追記(通知は7日に1回)
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日 = 604800秒
if [ $((now - last)) -ge 604800 ]; then
echo "[AI stack] 久しぶりにチェックします → check-ai-stack.sh"
~/bin/check-ai-stack.sh | sed 's/^/ /'
echo "$now" > "$STAMP"
fi
fi
なぜ apt に出てこないの?
- uv:公式インストーラ(curl)で導入 or 自己更新(
uv self update)。APTパッケージと別系統。 - Serena:
uvxでGitHubリポから実行するアプリ層。APT管理対象ではない。 - Codex/Claude:npm のグローバル(
npm -g)で管理。これもAPT外。
Codex / Claude が Serena を使って“重い作業を肩代わりする”開発環境」に必要なのは、実質このセットです。
必須(これだけで回る“最小3点+α”)
- uv(Serena実行の土台)
- 役割:Pythonランタイム+パッケージ管理+
uvxでSerenaをその場実行 - 入れ方:
curl -LsSf https://astral.sh/uv/install.sh | sh
- 役割:Pythonランタイム+パッケージ管理+
- Serena MCP(MCPサーバ)
- 役割:巨大Repoの解析・検索・編集を肩代わり
- 起動:
uvx --from git+https://github.com/oraios/serena serena start-mcp-server
- MCPクライアント
- どちらか(両方でもOK)
- Codex CLI(
npm i -g @openai/codex) - Claude Code(
npm i -g @anthropic-ai/claude-codeなど)
- Codex CLI(
- どちらか(両方でもOK)
✅ 結論:“uv+Serena+(Codex or Claude)”が中核。
私の意図どおり、Serenaが重い横断解析などを担当し、Codex/ClaudeからMCP経由で呼び出す流れです。なのでuvは絡みます(Serenaの実行に必須)。
実用上“ほぼ必須”(Serenaの体感が段違いに)
ripgrep / fd-find / universal-ctags(高速検索&シンボル索引)
sudo apt update && sudo apt install -y ripgrep fd-find universal-ctags
echo 'alias fd=fdfind' >> ~/.bashrc && source ~/.bashrc
- Git(当然):
sudo apt install -y git - 言語サーバ(LSP):プロジェクト言語に合わせて
- Python:
pipx/uvx pyrightなど - 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:
jdtlsなど
※ LSPが無いと“定義ジャンプ/参照解決”の精度と速度が落ちます。
- Python:
あると便利(規模・用途次第)
- jq/curl(チェック系スクリプト用):
sudo apt install -y jq curl - build-essential pkg-config(ネイティブ拡張が要る依存のビルド用)
- Docker(安全に隔離したいとき/CI対策)
- watchman(超大規模のファイル監視が多い場合)
最短セットアップの“完成コマンド”
# 0) ベース
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(都度実行・固定インストール不要)
uvx --from git+https://github.com/oraios/serena serena start-mcp-server \
--context ide-assistant --project "$PWD" &
# 3) クライアント(どちらか/両方)
npm i -g @openai/codex
npm i -g @anthropic-ai/claude-code
運用のコツ(外れてた問題を防ぐ)
- 固定起動順:Serena→(Codex/Claude)。Serena未起動ならIDEを起動しないラッパー(前回の
dev-ide.sh)が効きます。 - バージョン固定:上げるときだけ明示的に上げる(Serenaは
@vX.Y.Z、npmはバージョン指定)。 - 週1の“通知だけ”点検:
uv-check.sh+serena-auto.sh+check-ai-stack.shをcron化。
Windows でのインストール手順(基本)
1) uv のインストール
Windows版の場合、公式ドキュメントによると以下の方法があります。 Astral Docs+2Astral Docs+2
PowerShell を管理者モードで開き:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
または、Windows パッケージマネージャー(例:WinGet)からもインストール可能:
winget install --id=astral-sh.uv -e
インストール後は、uv --version などで確認。PATHが通っていないと “uv: command not found” 的なエラーになるので、環境変数の確認が必要。
2) Serena MCP の起動設定
Windows でも、基本的には同じ “uv を使って Serena を start-mcp-server” で起動 → クライアント(Claude Desktop/Claude Codeなど)に MCP サーバとして登録、という流れになります。例えば:
uvx --from git+https://github.com/oraios/serena serena start-mcp-server --context ide-assistant --project <プロジェクトパス>など。Windowsのパスでは\を\\にエスケープする、または/を使うなど注意。- クライアントの設定ファイル(例えば Claude Desktop の
%APPDATA%\Claude\claude_desktop_config.json)に MCP サーバとして Serena のコマンドを登録。Windows特有のパス・エスケープに注意。
⚠️ Windows特有の「ハマりどころ」&注意点
- PATHの問題:
uvやuvxコマンドが通っていない、ファイルが見つからない、というエラーが Windows で比較的多く報告されています。 - 権限・実行ポリシー:PowerShellでスクリプトを実行する際、
ExecutionPolicyの設定が制約になることがあります。インストーラが提示する通りByPassを指定する必要あり。 - プロジェクトパス・ディレクトリ区切り:Windows では
\を使いますが、設定ファイルでは\\や/を使った方が無難。例えば JSON設定中の"your\\project\\folder\\path"のように。 - 言語サーバ/Node.js/npmの依存:Windows上で TypeScript Language Server 等を使う際に
npmコマンドが見つからず失敗するというissueもあります。
→ Node.js + npm がちゃんとインストール/PATHにあるか確認が必要。 - 更新・チェックスクリプトの動作:Ubuntu向けに出した
uv-check.sh/serena-auto.shは Bash環境を想定しています。Windowsでは PowerShell スクリプト版に書き換える必要があります。
🔧 Windows用チェック/通知スクリプト案
Ubuntuで出したスクリプトをそのまま使うのは難しいため、Windows用に PowerShell スクリプトを用意するのがベストです。例えば:
uv-check.ps1serena-auto.ps1
簡易例(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 "⚠️ アップデートあり! uv self update してください"
} else {
Write-Host "✅ uv は最新です。"
}
同様に serena-auto.ps1 を用意して、「GitHubのリリースタグ vs ローカルバージョン」を比較して通知するように。さらに、これらをタスクスケジューラで “週1” 実行するようにしておくと、Windowsでも「忘れないチェック」が可能になります。
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?
結論:uv が二重インストール(WinGet版+スタンドアロン版)になっていて、uv self update が「自分で入れた実体と違う場所を見てる」せいで失敗しています。
何が起きてる?
uv self updateはスタンドアロン版で入れた実体だけ更新できます。- いま実行中の
uv.exeは WinGet 配下:C:\Users\minok\AppData\Local\Microsoft\WinGet\Packages\astral-sh.uv_...\uv.exe - でも、スタンドアロン版も同時に存在:
C:\Users\minok\.local\bin\uv.exe(uvx.exeもここ)
この「2つある」状態で PATH の優先順位によって、uv self update が WinGet 版を触ろうとして怒られています。
解決の方針(どちらか1つに統一)
✅ 方針A(おすすめ): スタンドアロン版に統一
理由:uv self update が使える/uvx も確実に入る。
- WinGet版をアンインストール
winget list astral-sh.uv
winget uninstall --id astral-sh.uv -e
- PATHの優先順位を確認(
%USERPROFILE%\.local\binが先頭付近に来るように)
where uv
$Env:Path -split ';'
C:\Users\minok\.local\bin が WinGet配下より前にあるのが理想。
必要なら一時的に:
$bin = "$Env:USERPROFILE\.local\bin"
$Env:Path = "$bin;" + ($Env:Path -replace [regex]::Escape("$bin;"), '')
(永続は「システム環境変数」GUIで編集がおすすめ。setx は既存PATHを縮めることがあるので注意)
- 確認
where uv
uv --version
uvx --version
uv self update # ← これで通るようになる
方針B:WinGet版に統一(自動更新は WinGet に任せる)
- スタンドアロン版を削除
C:\Users\minok\.local\bin\uv.exe,uvx.exe,uvw.exeを削除- PATH から
C:\Users\minok\.local\binを外す(他で使ってないなら)
- 更新は WinGet で
winget upgrade --id astral-sh.uv -e
注:
uv self updateは使えません。uvxが WinGet でも入るかはパッケージ版次第なので、where uvxで確認してください。無ければ WinGet の更新を待つか、方針Aへ。
速攻で状況確認するワンライナー
Write-Host "== which =="
where uv; where uvx
Write-Host "== actual =="
(Get-Command uv).Source
(Get-Command uvx -ErrorAction SilentlyContinue).Source
→ どっちの実体が呼ばれているか一目瞭然。
実運用のおすすめ
A案(スタンドアロン)+PATH優先にして、uv self update / uvx … serena … を使えるようにするのが一番スムーズ。
Serena 関連スクリプトは、誤爆防止のため先頭で実体を固定してもOK:
$UVX = (Get-Command uvx).Source # 例: C:\Users\minok\.local\bin\uvx.exe
& $UVX --from git+https://github.com/oraios/serena serena start-mcp-server ...
今回のケースの最短復旧手順(A案)
# 1) WinGet版を外す
winget uninstall --id astral-sh.uv -e
# 2) スタンドアロンを再インストール(済なら不要)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# 3) PATH 優先で .local\bin を先に
# → GUIで環境変数編集 or 一時的に上書き(上記スニペット)
# 4) 動作確認
where uv; where uvx
uv --version
uv self update # ← これがOKなら統一完了
これで、Windows でも uv self update が正常に動き、uvx 経由で Serena を安定運用できます。
しかし上記の方法でもうまくいかない場合があります。
PS C:\Users\minok> winget list astral-sh.uv 入力条件に一致するインストール済みのパッケージが見つかりませんでした。 PS C:\Users\minok> winget uninstall --id astral-sh.uv -e 入力条件に一致するインストール済みのパッケージが見つかりませんでした。
確かにこれは「WinGet 版が“存在する風”なのに、winget list で見えない」=孤児化したポータブル版の典型です。つまり WinGet が作った「リンク(shim)」やパッケージ残骸だけが残っていて、uv self update はそっちを拾ってしまう状態。
下の手順でWinGet残骸を手動掃除 → スタンドアロン版に統一しましょう。
手早い復旧(PowerShell)
- まず、どの uv が呼ばれてるか確認
where uv
Get-Command uv | Select-Object Source
where uvx
Get-Command uvx | Select-Object Source
出力が ...AppData\Local\Microsoft\WinGet\Packages\astral-sh.uv_...\uv.exe なら、WinGet 側が優先されています。 where uvで何も出ない場合はコマンドプロンプトで表示できます。

- WinGet の「ポータブル用リンク」を削除
(ここが残ってると優先されがち)
# WinGetのリンク置き場(ショートカット実体)
$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
Links が空(or そもそも無い)なら、WinGet 側は 「Links 経由の shim ではなく、Packages 直下の実体」 を PATH に載せている可能性が高いです。
その場合の対処法は後で記述しておきます。
- WinGet のパッケージ残骸を削除(ある場合)
$pkg = Get-ChildItem "$env:LOCALAPPDATA\Microsoft\WinGet\Packages" -Directory `
| Where-Object { $_.Name -like 'astral-sh.uv_*' }
if ($pkg) { Remove-Item $pkg.FullName -Recurse -Force }
- すでに入っているスタンドアロン版を優先させる
(C:\Users\minok\.local\binが PATH の先頭付近に来るように)
$bin = "$env:USERPROFILE\.local\bin"
# 一時的に先頭に(セッション限定)
$env:Path = "$bin;" + ($env:Path -replace [regex]::Escape("$bin;"), '')
# 永続は「システムの環境変数」GUIで、ユーザーPATHの先頭へ移動させるのが安全です
- 動作確認
where uv
Get-Command uv | Select-Object Source
uv --version
uv self update # ← これで通るようになればOK
うまくいかない場合の最終手段
.local\bin 側を再インストール(上書きOK)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
それでも where uv が WinGet 側を指すなら、Pathの順序がまだ逆転しています。
Links の uv.exe が復活していないかも再確認してください。
ポイント
- WinGet のポータブルアプリは「Links」フォルダの shim が実体です。
winget listに出ないことがあり、削除は手動で Links と Packages の両方を掃除するのが確実。 - 以降は スタンドアロン版のみにしておくと、
uv self updateが使えて Serena 運用が安定します。 - Serena 側はこれでそのまま利用OK:
uvx --from git+https://github.com/oraios/serena serena start-mcp-server
Links が空でコマンドで何も表示されない
いま拾われているのは:
C:\Users\minok\AppData\Local\Microsoft\WinGet\Packages\astral-sh.uv_...\uv.exe
なので、どの uv.exe が優先されているかとPATH の順序を一気に洗い出して、WinGet 側を外し、.local\bin を優先にします。
1) いま“どの uv が使われているか”を全表示
# どの順で見つかっているか(複数出ます)
where uv
where uvx
# 実際に PowerShell が解決している実体(-All で全部)
Get-Command uv -All | Select-Object Source
Get-Command uvx -All | Select-Object Source

.local\bin\uv.exeよりもWinGet\Packages…\uv.exeが上に出ていれば、そちらが優先されています。
2) PATH に WinGet の Packages パスが混ざっていないか確認
$Env:Path -split ';' | ForEach-Object {
if ($_ -match 'WinGet\\Packages' -or $_ -match 'WindowsApps') { "→ $_" } else { $_ }
}

…\Microsoft\WinGet\Packages\astral-sh.uv_…が出る ⇒ これを外す対象…\Microsoft\WindowsAppsは Microsoft Store/エイリアス用。通常そのままでOK(uv は関係ないことが多い)
3) “WinGet 実体”の掃除(Linksが無い場合は Packages を直接消す)
# uv の WinGet 残骸フォルダがあれば削除
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
}
# 念のため Links ももう一度(存在しないなら無視)
Remove-Item "$env:LOCALAPPDATA\Microsoft\WinGet\Links\uv*.exe" -ErrorAction SilentlyContinue

注: 上が失敗する場合は、エクスプローラで該当フォルダを開いて手動削除でもOKです(ロック中でなければ削除可)。
4) .local\bin を優先にしてテスト(セッション限定)
$bin = "$env:USERPROFILE\.local\bin"
$env:Path = "$bin;" + ($env:Path -replace [regex]::Escape("$bin;"), '')
# 確認
where uv
Get-Command uv | Select-Object Source
uv --version
uv self update # ← ここが成功すれば、スタンドアロン優先に切替完了
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) 永続化(ユーザー PATH の並び替え)
GUI(推奨): 設定 → システム → バージョン情報 → 「関連設定」→ システムの詳細設定 → 環境変数 → 「ユーザー環境変数」PATH を編集 → %USERPROFILE%\.local\bin を最上段に移動 → OKで保存 → 新しい PowerShell を開き直して確認。

どうしてもコマンドでやる場合(リスク高めなので GUI 推奨):
$bin = "$env:USERPROFILE\.local\bin"
$curr = [Environment]::GetEnvironmentVariable('Path', 'User')
if ($curr -notmatch [regex]::Escape($bin)) {
[Environment]::SetEnvironmentVariable('Path', "$bin;$curr", 'User')
} else {
# 先頭へ移動
$parts = ($curr -split ';') | Where-Object { $_ -ne $bin -and $_ -ne '' }
$new = "$bin;" + ($parts -join ';')
[Environment]::SetEnvironmentVariable('Path', $new, 'User')
}
6) 仕上げチェック
where uv; where uvx
Get-Command uv,uvx | Select-Object Name,Source
uv --version
uv self update
これで WinGet 側の実体が消え、.local\bin の uv/uvx が確実に優先されます。
以後は:
- 更新:
uv self update - Serena 起動:
uvx --from git+https://github.com/oraios/serena serena start-mcp-server --context ide-assistant --project "C:/path/to/your/project"


