Windows 從 0 開始

給從沒裝過 KernelHub 的 Windows 電腦。照著做,每一步都能複製、都知道成功長什麼樣:先裝 Node,再一行裝 KernelHub,登入 Runtime,配對手機,發一條真任務,看它交付。

這一頁怎麼用
從上往下,一步一步做。每一步都寫了:開啟哪裡、複製哪一行、看到什麼算成功、沒看到怎麼辦。指令塊右邊有「複製」按鈕,點一下粘進 PowerShell 回車即可。網路正常就走第 1、2 節的線上安裝(推薦);網路被堵看第 5 節;完全斷網才用第 4 節的離線整包。

1 · 開始之前:這台電腦缺什麼

一台從沒裝過 KernelHub 的 Windows 10 / 11,要走到「手機上派活、這台電腦上幹活」。先搞清楚它自帶什麼、缺什麼:

東西全新 Windows 有沒有說明
Windows 10 / 11x64 與 ARM64 都有正式包,安裝指令碼自己認架構。
PowerShell系統自帶 Windows PowerShell 5.1,本頁指令都按它寫。
curl.exe / tar / certutilWindows 10 1803 起自帶,本頁的下載與校驗會用到。
Node.js / npm沒有本頁最要緊的一條。安裝指令碼不會替你裝 Node。沒有 npm,它就裝不上 AI 編碼工具(Runtime),結果是「KernelHub 裝好了,一個任務都跑不了」。
一個登入過的 Runtime沒有KernelHub 不帶模型,它驅動的是你自己裝好、自己登入過的 CLI 編碼 Agent(預設裝 Claude Code)。裝上 ≠ 能用,沒登入照樣跑不了任務。
一部手機裝好 KernelHub App,用來掃碼配對、發任務、核准。
三條鐵律(照這個順序做,能省掉大部分返工)
  1. 先裝 Node,再裝 KernelHub。順序反了,裝完開不了工(反了也能救:裝好 Node 後把安裝指令再跑一遍)。
  2. 裝完讓 Runtime 登入一次(敲 claude,按提示登入)。不登入,任務一律回「本机一家都跑不了」。
  3. 配對之後要讓 icloser run 一直開著(或者裝成常駐)。配對只是把手機和這台電腦認識一下,真正去接活的是 icloser run

怎麼開啟 PowerShell

按鍵盤上的 Win + R,輸入 powershell,回車。彈出藍色(或黑色)視窗就對了。本頁只有兩處要「以管理員身份執行」,到了會單獨說。

2 · 能上網:最短主路徑(推薦,共 13 步)

網路正常就走這一節。線上安裝拿到的永遠是正式清單裡的那一版,步驟少、校驗自動、後面升級也是同一條指令。第 4 節的離線整包是兜底:給完全斷網、內網只准用本地包的機器用,步驟多出十幾條,而且它只解決「裝」,配對與派任務仍然要有一條能到控制面的通路。

一步一行,複製即用。遇到被堵、沒網,跳到對應小節。

你的情況症狀看哪裡
能上網就是本節,從第 1 步做到第 13 步
icloser.xyz 連不上第 5 步 irm 卡住、超時第 5 節 · 代理 / 換下載源;或第 4 節離線包
registry.npmjs.org 連不上npm install -g 卡住 / ECONNRESET第 5 節 · npm 換映象
nodejs.org / github.com 連不上下不來 Node 或工具第 5 節 · 代理;或第 4 節離線包
完全斷網什麼都下不來第 4 節離線包,並一定讀完那一節的三條限制

第 1 步 · 看看這台電腦有沒有 Node

PS> node -v; npm -v

成功長這樣:打出兩行版本號(比如 v24.21.0 和一串 npm 版本)—— 說明已經裝過 Node,直接跳到第 4 步

全新電腦上會看到:一段紅字,裡面有「无法将“node”项识别为 cmdlet」(英文系統是 “is not recognized as the name of a cmdlet”)—— 說明沒裝,做第 2 步。

第 2 步 · 裝 Node.js(它自帶 npm)

兩條路選一條。當前 LTS 版本是 Node v24.21.0(取自 nodejs.org 官方版本清單)。

路 A:一條指令(需要 winget,Windows 11 和較新的 Windows 10 都有)

PS> winget install --id OpenJS.NodeJS.LTS --accept-source-agreements --accept-package-agreements

中途可能彈「是否允許此應用對你的裝置進行更改」,點。winget 源裡的版本號可能比 nodejs.org 慢幾個小版本,不影響使用。

路 B:不依賴 winget —— 指定版本,下載後先核官方 SHA-256,對不上就停

PS> $v='v24.21.0'; $h='bb0eaee134f9357f22aea915ee793343e627aefc1e66488164bac6915bce2cac'; $f="$env:TEMP\node-$v-x64.msi"; curl.exe -L -o $f "https://nodejs.org/dist/$v/node-$v-x64.msi"; if(((certutil -hashfile $f SHA256 | Select-Object -Index 1).Trim() -replace ' ','').ToLower() -ne $h){ throw 'SHA-256 不一致,已中止,未安裝' } else { msiexec /i $f }

核對透過才會彈出 Node 安裝嚮導,一路「下一步」即可(同樣可能彈管理員確認,點)。想靜默安裝,把結尾的 msiexec /i $f 換成 msiexec /i $f /qn

那串 bb0eaee1… 是 nodejs.org 官方 SHASUMS256.txtnode-v24.21.0-x64.msi 那一行的值,本站寫頁面時逐字核過。看到紅字 “SHA-256 不一致,已中止,未安裝”:說明下載壞了或被換了,重跑一次;還不行就換路 A 或走第 5 節的代理。

第 3 步 · 關掉 PowerShell,重新開啟一個

Node 裝完之後,老視窗不認識新裝的 node。關掉,按第 1 節的辦法重開一個,再跑一次:

PS> node -v; npm -v

成功:兩行版本號。還是紅字:登出或重啟一次電腦再試。

第 4 步 · 一行裝 KernelHub

PS> irm https://icloser.xyz/install.ps1 | iex

它按順序做這些事,你不用管,看著就行:

它做什麼說明
讀發佈清單從 kernelhub.icloser.xyz 讀 stable.json;清單不是 READY 就拒裝,沒有強制開關。(指令碼本身掛在 icloser.xyz,是兩台主機。)
下載並核對icloser.exe,核 SHA-256 與位元組數,對不上就刪掉並停下。
裝到哪%LOCALAPPDATA%\Programs\icloser\icloser.exe,另建三個舊名 icli / kernelhub-cli / devnexus-cli
寫 PATH寫進使用者級 PATH 和當前視窗,不碰系統級 PATH,不需要管理員。
核入口新開終端會有的 PATH 與 PATHEXT,核你敲 icloser / icli 實際會拿到哪一個檔案。不是剛裝的這一份,就把按順序命中的全部路徑、「你敲它會拿到誰」和三條辦法印出來;不改你的 PATH,不刪別的工具,也不拒裝
自證當場跑 icloser version,和清單裡的版本、構建號比對。
本機管理台順帶下 kernelhub-desktop.exe;下失敗不影響 CLI。
裝一家 Runtimenpm install -g @anthropic-ai/claude-code(預設只裝 claude 這一家)。

成功時螢幕上會出現這幾行(install.ps1 原始碼裡寫死的原句,不是 Windows 真機實錄;v 開頭是綠色):

v SHA-256 verified
v Installed to C:\Users\<you>\AppData\Local\Programs\icloser\icloser.exe
v Aliases: icli (short name), kernelhub-cli / devnexus-cli (legacy, still work)
v Added C:\Users\<you>\AppData\Local\Programs\icloser to your user PATH
v Typing icloser / icli gets you this install (checked against a new terminal's PATH and PATHEXT)
v icloser 1.0.2 (build 202609161352, commit a4099c062543)
Installing runtime claude (npm install -g @anthropic-ai/claude-code) ...
v Installed runtime: claude (@anthropic-ai/claude-code)

如果看到下面這兩行,說明第 2 步沒做或沒生效 —— KernelHub 本體已經裝好,只是沒裝上 Runtime。回到第 2、3 步裝好 Node,再把這一步的指令跑一遍(install.ps1 原始碼裡的原句,不是 Windows 真機實錄):

  ! No npm on this machine, so no runtime was installed (KernelHub itself is installed)
     Install Node.js (it ships npm), then run this installer again.

第 5 步 · 核一下裝到的是哪一版

PS> icloser version

成功:一行裡同時有 1.0.2202609161352(這一行的樣子在 Windows 真機上核過):

icloser 1.0.2 (build 202609161352, commit a4099c062543)

報「无法将“icloser”项识别为 cmdlet」:關掉視窗重開一個再試;還不行,把第 4 步再跑一遍。

印出來的不是這一版,或者乾脆是別的工具的說明選單
說明你敲的 icloser 被 PATH 上排在前面的同名東西搶走了。真機上遇到過兩種:
  • npm 全域裝過一個也叫 iCloser 的工具…\npm\iCloser.ps1 / .cmd)。
  • 裝過舊的 MSIC:\Program Files\KernelHub\bin)。Windows 先查系統級 PATH 再查使用者級 PATH,所以它總是排在剛裝的這一份前面。
PowerShell 按 PATH 的目錄順序一個目錄一個目錄找;同一個目錄裡 .ps1 先於 .exe / .cmd,與 PATHEXT 裡寫沒寫 .PS1 無關(2026-09-16 Windows 真機坐實)。
最省事:改用 icli,它是安裝指令碼同時建的短名,指向剛裝的這一份:
PS> icli version
想看清是誰搶了名字(按 PowerShell 實際的先後順序列出全部):
PS> Get-Command -All icloser
想讓 icloser 這個名字也回到這一份:舊 MSI 在「設定 → 應用程式 → KernelHub → 解除安裝」裡卸掉;npm 裝的那個用 npm ls -g 找到套件名再 npm rm -g。第 4 步安裝指令碼在螢幕上印的那段黃字,寫的就是這台機器上的具體路徑和這幾條辦法。

第 6 步 · 讓 Runtime 登入一次

PS> claude

第一次執行會帶你登入(通常會開啟瀏覽器)。按螢幕提示登入完,看到能對話的介面後,輸入 /exit 或按 Ctrl + C 兩次退出。

然後看看這台電腦認出了哪幾家、登沒登入:

PS> icloser runtimes

成功:Claude Code 那一行不再是「未安裝」,狀態裡沒有 NOT_INSTALLED。還卡在登入態上時,狀態會寫成 STARTABLE_NOT_AUTHED 或「状态不明」(STARTABLE_AUTH_UNKNOWN)—— 回去再登入一次。

第 7 步 · 進到你的專案目錄

把下面的 D:\你的專案 改成你真實的專案資料夾(放你要讓 AI 員工改的程式碼的地方):

PS> cd D:\你的專案

別在「下載」資料夾、解壓安裝包的資料夾裡做這一步:那個資料夾會整個變成 AI 員工的工作區。KernelHub 會拒絕看起來像安裝包解壓目錄的地方。

第 8 步 · 配對手機

PS> icloser pair

它會依次做三件事:

  1. 在當前目錄建工作區。
  2. 問你「這台機器上,Agent 可以自己做到哪一步?」—— 直接回車就是第 3 檔「讀 + 寫 + 執行」,能改檔案、能跑構建和測試,多數人選它。
  3. 在視窗裡畫一個二維碼,下面還有一條「掃不了就手工粘這條」的連結。

開啟手機上的 KernelHub App 掃這個碼。最後它會說「下一步只有一件事——讓手機說的話有人接:icloser run」。

二維碼被滾屏沖掉了?千萬別再敲一次 pair。再 pair 一次會新建一個空工作區,原來的任務一個都不在裡面。敲這一行把碼重新調出來:
PS> icloser qr

也可以用圖形介面:開啟 KernelHub Desktop,點「連線手機」,用手機掃碼。兩種都行。

第 9 步 · 在手機 App 裡輸入邀請碼

全新帳戶第一次 pair 時,視窗裡會有這麼一句(Mac / Linux 實測如此,Windows 是同一套 CLI):

  账户 7a9e5014 还没有使用权 —— 在 iPhone 或 Android 上输入一次邀请码即可,
  这台机器会自动继承(CLI 上没有激活入口)

意思是:這個帳戶還沒有使用權,啟用只能在手機上做,電腦這邊沒有入口。開啟手機上的 KernelHub App,照提示輸入邀請碼;兌換成功後,這台電腦自動繼承,不用再敲任何指令。

沒有碼怎麼要,見使用權限與啟用。已經啟用過的帳戶,pair 時會說「使用權已繼承」,這一步跳過。

第 10 步 · 開始接活

PS> icloser run

這個視窗別關。它會一直開著,每隔幾秒去看有沒有新任務 —— 手機上發的任務就是它接的。開頭幾行會說它加入了哪個工作區、選了哪家 Runtime。

第 11 步 · 發一條真任務,看它交付

第 10 步那個視窗開著的時候,拿起手機:

  1. 在 KernelHub App 裡選中剛配對的工作區,在輸入框裡打一句話發出去。知道檔名就寫上,比如「在 README.md 末尾加一行今天的日期,不要提交」。
  2. 電腦上跑 icloser run 的視窗會滾出新的幾行 —— 說明任務被接住了。手機上的任務卡會變成即時檢視:讀了哪些檔案、跑了哪些指令、改了哪些檔案。
  3. 任務缺一檔權限時,它會在動手之前停下來掛一張卡,點核准只對這一條任務生效。
  4. 跑完之後,點卡片上的「改動」逐行看它改了什麼,再讀結果:做了什麼、改了什麼、有什麼沒做成。結果不滿意就點「要求修改」,讓同一條任務接著做。

成功:任務狀態是完成,「改動」裡能看到 README.md 多出的那一行,開啟電腦上的檔案也確實多了一行。

新機器上沒有 Go / Python,第一條任務不會為它停下
KernelHub 會順手檢查機器級的基礎工具(Go、Python)。缺了、而這台機器又沒允許「訪問網際網路」時,任務照常往下跑,不掛卡icloser run 那個視窗裡只多一行記帳(CLI 原始碼裡的原句):
  ⓘ go:KernelHub Base(机器级,与这条任务无关)没装上 —— 不挂卡、不阻塞,这条任务照常往下跑。要补齐:在这台机器上跑 icloser env bootstrap go,或在设备权限里批 exec + web 后它会自动补上。
只有任務真要用它 —— 原話裡點了名(比如寫了 go build),或者幹活途中真去跑它 —— 而安裝又被拒時,才會在那一刻掛一張卡;核准只對這一條任務生效。已經允許過「執行」和「訪問網際網路」的機器上,它會自己裝好接著做,一張卡都不掛(Windows 真機上見過)。

發出去一直沒人接:回去看第 10 步那個視窗還在不在;還卡著就做下一步體檢。

第 12 步 · 體檢(另開一個 PowerShell)

第 10 步那個視窗在跑,所以另開一個 PowerShell,先 cd 到同一個專案目錄,再跑:

PS> icloser doctor

服務、閘道器、佇列、權限、Runtime 一次查完。哪一項不對,它會直接說下一步該敲什麼。

第 13 步 · 關掉視窗也要接活:裝成常駐

第 10 步那個視窗一關,手機上再發任務就沒人接了。想讓它登入 Windows 就自己起來,在專案目錄下跑(不需要管理員,以你自己的帳戶執行):

PS> icloser daemon install

成功(CLI 原始碼裡的原句)。2026-09-16 在 Windows 真機上裝過:icloser daemon status 顯示在跑,icloser doctor 報「✓ 常驻服务 已安装且正在运行」,一條任務由它接走並交付:

✓ 常驻已装好(计划任务:iCloser Agent)

之後隨時用這一行看它在不在:

PS> icloser daemon status

裝了常駐之後,第 10 步那個手動開的 icloser run 就可以關掉了,兩個同時開是多餘的。

進階:開機不登入也要跑(Windows 服務)—— 先讀完再決定
只有「這台機器沒人登入也要接活」才需要它。普通使用者用上面的 icloser daemon install 就夠了,它不要密碼;兩個不要同時裝。
  • 要「以管理員身份執行」的 PowerShell。
  • 必須是你自己的帳戶,寫成 機器名\使用者名稱(比如 JIMPC\Jim)。只寫使用者名稱,Windows 服務管理員不認(2026-09-16 真機實測)。不能是 LocalSystem:它看不到你的 Runtime 登入狀態,指令會直接拒絕。
  • ⚠️ 密碼目前只能寫在命令列上。它會留在 PowerShell 的歷史紀錄裡,執行期間也能從處理程序的命令列看到。這是已知缺陷,還沒修。不要把敲過密碼的那一行複製給任何人,也不要貼進聊天或工單 —— 真機上發生過密碼因此進了會話紀錄。
  • 怎麼敲:在管理員 PowerShell 裡先只敲 icloser service install。它會拒絕,並把該填的完整指令印出來,帳戶那一段已經替你填成 機器名\使用者名稱;把你自己的密碼填進去再跑。
  • 裝上之後起服務可能報 logon failure真機上遇到過,原因還沒查清;用 Microsoft 帳戶或 PIN 登入的電腦,可能是因為服務要的密碼和你平時解鎖用的不是同一個 —— 這只是一種可能。遇到就用 icloser service uninstall 卸掉,改回 icloser daemon install

3 · 裝完之後常用的

再裝別的 Runtime(不用重跑整個安裝)

預設只裝了 claude。能用 npm 裝的有:claudecodexqwencodebuddyopencodekimimimopi。下面這一行裝的是 codex,換成其中任意一個即可:

PS> icloser env bootstrap codex

或者用安裝指令指定(同樣把 codex 換成你要的):

PS> $env:KERNELHUB_RUNTIME='codex'; irm https://icloser.xyz/install.ps1 | iex

裝完同樣要登入一次(敲它的名字,比如 codex)。Google 這一家是 agy(Antigravity),不走 npm,要從 Google 官方渠道裝。

本機管理台

管理台是單獨的程式icloser run 不會帶起它。起它(這個視窗也會一直佔著):

PS> kernelhub-desktop

然後在瀏覽器開啟 http://127.0.0.1:18092。它只綁在本機迴環地址,這台電腦之外夠不著。看它現在在不在跑、地址是什麼:

PS> icloser console

已經在跑的話,這一行幫你在預設瀏覽器裡開啟它:

PS> icloser open

4 · 完全離線:用離線整包(兜底,能上網就別用)

先確認真的走不了線上。網路只是慢或偶爾斷,第 2 節那幾條原樣重跑就行;被代理或防火牆擋住,先看第 5 節。只有完全斷網、或者規定只准用本地包時,才用這一節。
這一節的包資訊來自 Windows 真機那邊的打包記錄,本站沒有另外下載複核。檔名、網盤連結、體積與 SHA-256 照錄如下;拿到包先核 SHA-256 再用

離線整包帶齊了 Node、7-Zip、Python、Git、文件工具、各家 Runtime 的安裝包和 KernelHub 三件套,裝的過程不需要外網。

檔名kernelhub-from-zero-windows-x64-20260913.zip
網盤連結https://pan.baidu.com/s/16hoTpt3MoPlqjtgw5w6DyA
提取碼2b3w
體積970,619,689 位元組(約 925.6 MiB)
整包校驗用和整包放在一起的旁掛檔案 kernelhub-from-zero-windows-x64-20260913.zip.sha256 核。本頁不印固定雜湊 —— 這個包重打過一次,位元組數一樣而雜湊變了,印死的數字會讓人誤以為檔案被動過。
包內條目50 個;解壓後根目錄是 kernelhub-from-zero-windows-x64\,安裝檔案都在 winx64\

4.1 先核整包,再解壓

下面預設包在「下載」資料夾裡;不在就把指令裡的路徑改掉。

下載時把整包和它旁邊那個 .sha256 檔案一起下下來,放同一個資料夾。下面這一行自己讀旁掛檔案、自己算、自己比,不用你肉眼對:

PS> $zip="$env:USERPROFILE\Downloads\kernelhub-from-zero-windows-x64-20260913.zip"; if(-not (Test-Path -LiteralPath $zip)){'找不到整包,請把 $zip 改成實際路徑'}elseif(-not (Test-Path -LiteralPath "$zip.sha256")){'旁邊缺 .sha256 檔案 —— 它和整包放在一起,一起下下來再跑這一行'}else{$want=[regex]::Match((Get-Content -Raw -LiteralPath "$zip.sha256"),'[0-9a-fA-F]{64}').Value.ToLower(); $got=((certutil -hashfile $zip SHA256 | Select-Object -Index 1) -replace ' ','').ToLower(); if($want -eq ''){'旁掛檔案裡沒有 64 位雜湊,先確認它下全了'}elseif($got -eq $want){"OK $got"}else{"MISMATCH 期望 $want 實際 $got"}}

成功:打出 OK 加那串雜湊:

OK  <旁掛檔案裡的那串雜湊>

對不上就別用 —— 傳輸壞了或被人動過,重新下一遍(兩個檔案都要重下):

MISMATCH  期望 <旁掛檔案裡的那串>  實際 <這台機器上算出來的那串>

解壓到 D:\kh-apps(後面的指令都預設在這裡):

PS> $zip="$env:USERPROFILE\Downloads\kernelhub-from-zero-windows-x64-20260913.zip"; New-Item -ItemType Directory -Force -Path D:\kh-apps | Out-Null; Expand-Archive -LiteralPath $zip -DestinationPath D:\kh-apps -Force; '解壓完成:'; Test-Path 'D:\kh-apps\kernelhub-from-zero-windows-x64\winx64\stable.json'

成功:最後一行是 True

解壓完成:
True

下面每條指令都以 $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; 開頭,是為了每一行都能單獨複製、單獨跑。解壓到別處的話,把每行開頭這一小段路徑改掉。

4.2 裝機順序(照這個順序,別跳)

① 裝 7-Zip(後面的 .7z 都靠它解開,會彈圖形安裝器):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; & "$P\winx64\missing\7z2603-x64.exe"

確認裝好了(打出一個 7z 的路徑即可):

PS> where.exe 7z

② 解開 Node.js 26.8.2(整條離線路線的前提,沒有 npm 後面一個 Runtime 都裝不上):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; & "C:\Program Files\7-Zip\7z.exe" x "$P\winx64\missing\node-26.8.2-win32-x64.7z" -o"D:\tools\node" -y

找到 node.exe、臨時加進當前視窗的 PATH 並自證(打出兩行版本號即成功):

PS> $ndir=(Get-ChildItem -Path D:\tools\node -Recurse -Filter node.exe | Select-Object -First 1).DirectoryName; $env:Path="$ndir;$env:Path"; node -v; npm -v

寫進使用者級 PATH,以後每個新視窗都認得:

PS> $ndir=(Get-ChildItem -Path D:\tools\node -Recurse -Filter node.exe | Select-Object -First 1).DirectoryName; $u=[Environment]::GetEnvironmentVariable('Path','User'); if(-not $u){$u=''}; if(($u -split ';') -notcontains $ndir){ [Environment]::SetEnvironmentVariable('Path',($u.TrimEnd(';') + ';' + $ndir),'User'); '已加入 PATH' } else { '本來就在 PATH 裡' }

③ 裝 KernelHub 三件套(不需要管理員)—— 這一行照安裝指令碼的做法:拷 CLI 與管理台到 %LOCALAPPDATA%\Programs\icloser、建三個舊名、寫使用者級 PATH、最後自證:

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; $D="$env:LOCALAPPDATA\Programs\icloser"; New-Item -ItemType Directory -Force -Path $D | Out-Null; Copy-Item "$P\winx64\icloser_windows_amd64.exe" "$D\icloser.exe" -Force; Copy-Item "$P\winx64\kernelhub-desktop_windows_amd64.exe" "$D\kernelhub-desktop.exe" -Force; foreach($a in 'icli','kernelhub-cli','devnexus-cli'){ Set-Content -Path "$D\$a.cmd" -Encoding ASCII -Value ("@echo off`r`n`"%~dp0icloser.exe`" %*`r`nexit /b %ERRORLEVEL%") }; $u=[Environment]::GetEnvironmentVariable('Path','User'); if(-not $u){$u=''}; if(($u -split ';') -notcontains $D){ [Environment]::SetEnvironmentVariable('Path',($u.TrimEnd(';') + ';' + $D),'User') }; $env:Path="$env:Path;$D"; icloser version

成功:最後一行印出 icloser 的版本行,版本號與構建號和整包裡 winx64\stable.json 寫的一致(整包是 2026-09-13 打的,裡面是那時的版本,不是本頁頂上的這一版)。另一條路(需要管理員)是裝 MSI:

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; $j=Get-Content "$P\winx64\stable.json" -Raw -Encoding UTF8 | ConvertFrom-Json; msiexec /i "$P\winx64\$($j.apps.windows_desktop_x64.file)"

④ 裝 Runtime —— 順序很重要:先裝「真身」,再裝「殼包」

為什麼順序不能反
頂層 tgz 裡有 4 個是空殼:claude 27,741 位元組、codex 4,902、opencode 3,051、mimo 5,310 —— 這個體積放不下一個 CLI。它們的真身在 platform-win-x64\ 裡的另一個包。只裝殼包,npm 還會去網上取真身;斷網時你得到一個起不來的空殼,而且報錯看不出是「包不全」。
Runtime頂層殼包位元組Windows 真身在不在包裡
claude27,741在:platform-win-x64\anthropic-ai-claude-code-win32-x64-2.1.270.tgz
codex4,902在:platform-win-x64\openai-codex-0.154.0-win32-x64.tgz
opencode3,051在:platform-win-x64\opencode-windows-x64-1.18.30.tgz
mimo5,310在:platform-win-x64\mimo-ai-mimocode-windows-x64-0.1.14.tgz
qwen28,929,854自帶 dist/vendor,但全部依賴沒有打進來
codebuddy54,680,912自帶 dist/vendor,同上
kimi19,646,415自帶 dist/native,同上
pi6,986,356宣告瞭 18 個常規依賴,沒有打進來

先裝 4 個真身:

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\platform-win-x64\anthropic-ai-claude-code-win32-x64-2.1.270.tgz"
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\platform-win-x64\openai-codex-0.154.0-win32-x64.tgz"
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\platform-win-x64\opencode-windows-x64-1.18.30.tgz"
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\platform-win-x64\mimo-ai-mimocode-windows-x64-0.1.14.tgz"

再裝 8 個殼包(頂層 tgz):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\anthropic-ai-claude-code-2.1.270.tgz"
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\openai-codex-0.154.0.tgz"
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\qwen-code-qwen-code-0.23.3.tgz"
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\tencent-ai-codebuddy-code-2.150.0.tgz"
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\opencode-ai-1.18.30.tgz"
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\moonshot-ai-kimi-code-0.42.0.tgz"
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\mimo-ai-cli-0.1.14.tgz"
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; npm install -g "$P\winx64\earendil-works-pi-coding-agent-0.85.1.tgz"

第 9 家 agy(Antigravity)不走 npm,跑包裡的 Google 官方安裝程式,再自證:

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; & "$P\winx64\missing\antigravity-cli-1.2.2-windows-x64.exe"
PS> agy --version

⑤ 逐個登入:每家都要在 PowerShell 裡敲一次它的名字(claudecodexqwencodebuddyopencodekimimimopiagy),按提示登入,否則不能跑任務。

⑥ 接上手機並開始接活:回到第 2 節,從第 7 步(進專案目錄)做到第 13 步。專案目錄不要D:\kh-apps 下面。

4.3 包裡的基礎工具(按需,不必都裝)

落地目錄 D:\tools\… 只是示例,換哪裡都行,記得把它的 bin 加進 PATH。

Python 3.12.10(免安裝、不寫登錄檔、不需要管理員):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; New-Item -ItemType Directory -Force -Path D:\tools\python312 | Out-Null; tar -xzf "$P\winx64\missing\cpython-3.12.10+20250409-x86_64-pc-windows-msvc-install_only.tar.gz" -C D:\tools\python312 --strip-components=1; D:\tools\python312\python.exe -V

Python 3.14.7(同目錄另有,按專案選):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; New-Item -ItemType Directory -Force -Path D:\tools\python314 | Out-Null; tar -xzf "$P\winx64\missing\cpython-3.14.7+20260901-x86_64-pc-windows-msvc-install_only.tar.gz" -C D:\tools\python314 --strip-components=1; D:\tools\python314\python.exe -V

Git 便攜版(自解壓;-o / -y 是 7z 自解壓包的通用開關,底稿裡標註未實測):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; & "$P\winx64\missing\PortableGit-2.55.0.5-64-bit.7z.exe" -o"D:\tools\git" -y; & "D:\tools\git\cmd\git.exe" --version

uv(Python 包管理器):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; Expand-Archive -Path "$P\winx64\missing\uv-x86_64-pc-windows-msvc.zip" -DestinationPath D:\tools\uv -Force

ripgrep(rg.exe):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; Expand-Archive -Path "$P\winx64\missing\ripgrep-15.2.0-x86_64-pc-windows-msvc.zip" -DestinationPath D:\tools\rg -Force

jq(單檔案 exe):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; New-Item -ItemType Directory -Force -Path D:\tools\rg | Out-Null; Copy-Item "$P\winx64\missing\jq-windows-amd64.exe" D:\tools\rg\jq.exe -Force

pandoc 3.11(文件轉換):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; Expand-Archive -Path "$P\winx64\missing\pandoc-3.11-windows-x86_64.zip" -DestinationPath D:\tools\pandoc -Force

poppler(含 pdftotext.exe):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; Expand-Archive -Path "$P\winx64\missing\Release-26.07.0-0.zip" -DestinationPath D:\tools\poppler -Force

Python 文件處理外掛(這一條要聯網;用哪個 Python 就換成哪個 exe):

PS> D:\tools\python312\python.exe -m pip install python-docx openpyxl xlrd python-pptx pypdf pdfplumber PyMuPDF pandas odfpy markdownify markitdown beautifulsoup4 lxml reportlab Jinja2 tabulate Pillow pytesseract pdf2image

注意:pytesseract 還要另裝 Tesseract 本體;pdf2image 依賴上面的 poppler。文件處理用到的 imagemagick 包裡沒有,需要時從 imagemagick.org 取 Windows 版並自己核雜湊。

4.4 離線路線的三條限制(一定要知道)

限制 1 · 裝得上 ≠ 派得了任務。Agent 在本地跑,但把任務從手機送到這台電腦的是控制面,那條鏈路要網路。離線包解決的是「裝」;被堵的環境裡你仍然需要一條能到控制面的通路(第 5 節的代理 / 隧道),否則會卡在配對那一步。
限制 2 · 4 家的真身不在頂層 tgz 裡。claude / codex / opencode / mimo 必須按 4.2 的順序「先真身後殼包」。qwen / codebuddy / kimi / pi 的全部依賴沒有打進來 —— 要徹底離線,得在一台能上網的機器上 npm install -g 裝好,再把全域性 node_modules 整個打包帶走。
限制 3 · npm install -g 本地 tgz 仍會去找網上的 registry 解析依賴。有代理就先把第 5 節的代理和 npm 設定做好再裝;徹底斷網就按限制 2 的辦法。

5 · 網路被堵:把指令通到外面

先對照第 2 節開頭那張表,搞清楚被堵的是哪一段。下面每條都能單獨複製。

5.1 設代理(只對當前這個視窗生效)

換成你自己的代理地址和埠(代理軟體的設定裡能看到,常見叫 mixed-port / HTTP 埠)。curl.exehttp_proxy / https_proxy,PowerShell 的 irm 走 .NET 的預設代理 —— 這一行兩套一起設,最後自證:

PS> $proxy='http://127.0.0.1:埠'; $env:http_proxy=$proxy; $env:https_proxy=$proxy; [Net.WebRequest]::DefaultWebProxy=New-Object Net.WebProxy($proxy); curl.exe -sS -o NUL -w "install.ps1 -> HTTP %{http_code}`n" https://icloser.xyz/install.ps1

成功:

install.ps1 -> HTTP 200

打不出 HTTP 200:代理地址或代理本身不對,先別往下走。通了之後,第 2 節的原指令不用改,照常在這個視窗裡跑。

5.2 npm 換映象

換成映象並自證(會回顯映象地址):

PS> npm config set registry https://registry.npmmirror.com; npm config get registry

只這一次用映象,不動全域性設定:

PS> npm install -g @anthropic-ai/claude-code --registry=https://registry.npmmirror.com

有代理時把代理也寫進 npm:

PS> if($env:http_proxy){ npm config set proxy $env:http_proxy; npm config set https-proxy $env:http_proxy; npm config get proxy } else { '請先設 $env:http_proxy(見上一條),再跑這一行' }

registry.npmmirror.com 是常見的公共映象,換別的映象把地址替換掉即可。

5.3 pip 換映象

寫進配置,以後都走清華映象,並自證:

PS> D:\tools\python312\python.exe -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple; D:\tools\python312\python.exe -m pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn; D:\tools\python312\python.exe -m pip config list

只這一次:

PS> D:\tools\python312\python.exe -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx openpyxl pandas

5.4 換 KernelHub 自己的下載源

公司內網有映象時用(映象要照原樣映象官方目錄,清單裡的 SHA-256 仍然會核):

PS> $env:KERNELHUB_INSTALL_BASE='https://你的映象.example.com/kernelhub'; irm https://icloser.xyz/install.ps1 | iex

注意:這隻換「清單與安裝包」從哪下,安裝指令碼本身仍然從 icloser.xyz 取

5.5 另外三個安裝開關

換安裝目錄(預設 %LOCALAPPDATA%\Programs\icloser):

PS> $env:KERNELHUB_BIN_DIR='D:\tools\icloser'; irm https://icloser.xyz/install.ps1 | iex

一個 Runtime 都不裝(只要 CLI):

PS> $env:KERNELHUB_SKIP_RUNTIME=1; irm https://icloser.xyz/install.ps1 | iex

裝指定的那一家(見第 3 節的 codex 那一行,把 codex 換掉即可)。

6 · 自己核一遍檔案對不對

「檔案放上去了」不等於「裝好了」。下面這些校驗不需要聯網,用 Windows 自帶的 certutil

核已經裝好的 icloser.exe(第 4 步線上裝的:x64 和下表第一行比,ARM64 和第二行比):

PS> certutil -hashfile "$env:LOCALAPPDATA\Programs\icloser\icloser.exe" SHA256

離線包裡的三件套,一行自動和包內清單比對(打出 OK 開頭即對):

PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; $j=Get-Content "$P\winx64\stable.json" -Raw -Encoding UTF8 | ConvertFrom-Json; $g=((certutil -hashfile "$P\winx64\icloser_windows_amd64.exe" SHA256)[1] -replace ' ','').ToLower(); if($g -eq $j.platforms.'windows-amd64'.sha256.ToLower()){"OK icloser $g"}else{"MISMATCH expected $($j.platforms.'windows-amd64'.sha256) got $g"}
OK  icloser  <整包 winx64\stable.json 裡記的那串雜湊>
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; $j=Get-Content "$P\winx64\stable.json" -Raw -Encoding UTF8 | ConvertFrom-Json; $g=((certutil -hashfile "$P\winx64\kernelhub-desktop_windows_amd64.exe" SHA256)[1] -replace ' ','').ToLower(); if($g -eq $j.desktop.'windows-amd64'.sha256.ToLower()){"OK desktop $g"}else{"MISMATCH expected $($j.desktop.'windows-amd64'.sha256) got $g"}
PS> $P='D:\kh-apps\kernelhub-from-zero-windows-x64'; $j=Get-Content "$P\winx64\stable.json" -Raw -Encoding UTF8 | ConvertFrom-Json; $g=((certutil -hashfile "$P\winx64\$($j.apps.windows_desktop_x64.file)" SHA256)[1] -replace ' ','').ToLower(); if($g -eq $j.apps.windows_desktop_x64.sha256.ToLower()){"OK msi $g"}else{"MISMATCH expected $($j.apps.windows_desktop_x64.sha256) got $g"}
檔案位元組SHA-256
icloser_windows_amd64.exe(線上安裝,v1.0.2)13,111,296eafd5e4749736b039ee5ade97137f10aa864b4a09c92b5d5b25bd36dd0050ce6
icloser_windows_arm64.exe(線上安裝,v1.0.2)12,070,400d652cb0275e5a23bcbf6c3bc682f99a09e6419fff11bd2f3673f6e92adafe067
KernelHub-Setup-1.0.2-windows-x64.msi(下載頁 · Windows x64 安裝包,v1.0.2)9,154,560fa7a9af8b657dce72ebc2a4f9b29c4aaf4ddaf59b1c759f900296b7688d595e6
KernelHub-1.0.2-windows-arm64-portable.zip(下載頁 · Windows ARM64 可攜包,v1.0.2)7,961,700e4de254b316cd6d18ca14d2b894aca568606284180c067efdf0bc74394d347fe
離線整包裡的 CLI、管理台與 MSI以整包裡自帶的 winx64\stable.json 為準,本頁不印(上面三行指令會自動比)
node-v24.21.0-x64.msi(第 2 步路 B)bb0eaee134f9357f22aea915ee793343e627aefc1e66488164bac6915bce2cac
離線整包 zip(第 4 節)970,619,689以包外旁掛的 .zip.sha256 為準,本頁不印(第 4.1 節那一行會自動比)

前四行是建置本頁時從這一版的發佈清單 stable.json 讀進來的;離線整包裡的檔案不在這裡印數字 —— 整包打於 2026-09-13,和這一版不是同一批,它們的雜湊以整包自帶的 stable.json 為準;Node 那一行來自 nodejs.org 的 SHASUMS256.txt;離線整包不在這裡印雜湊,理由見上面一行。

整包逐檔案核對(可選,近 1 GB 會跑一會兒;全對逐行列印 ok):

PS> $ws='D:\kh-apps\kernelhub-from-zero-windows-x64'; (([IO.File]::ReadAllText("$ws\SHA256SUMS-安装包.txt",[Text.Encoding]::UTF8)) -split "`r?`n") | ForEach-Object { if($_ -match '^([0-9a-f]{64}) (.+)$'){ $f=Join-Path $ws ($Matches[2] -replace '/','\'); if(-not (Test-Path -LiteralPath $f)){ "MISSING : $($Matches[2])"; return }; $got=((certutil -hashfile "$f" SHA256) | Select-Object -Index 1).Trim() -replace ' ',''; if($got.ToLower() -ne $Matches[1]){ "MISMATCH: $($Matches[2])" } else { "ok : $($Matches[2])" } } }

7 · 常見報錯:症狀 → 原因 → 那一行指令

你看到的原因怎麼辦
node / npm 無法識別為 cmdlet沒裝 Node,或裝完沒開新視窗做第 2 步;裝完關掉視窗重開
安裝時 ! No npm on this machine, so no runtime was installed先裝了 KernelHub 後裝 Node裝好 Node、開新視窗,再跑 irm https://icloser.xyz/install.ps1 | iex
icloser 無法識別為 cmdlet老視窗沒拿到新 PATH關掉視窗重開;還不行重跑第 4 步
irm 卡住、超時、連線被關閉icloser.xyz 被擋第 5.1 節設代理;或第 4 節離線包
npm install -g 卡住 / ECONNRESETnpm 官方源被擋第 5.2 節換 npm 映象
任務回「本机一家都跑不了」Runtime 沒裝或沒登入claude 登入,再 icloser runtimes 看狀態
手機掃了碼,發的任務一直沒人接icloser run 沒開著,也沒裝常駐在專案目錄跑 icloser run,或第 13 步 icloser daemon install
icloser version 印出的不是這一版,或者是別的工具的說明選單PATH 上排在前面的同名東西搶了名字(npm 全域的 iCloser、舊 MSI)改用 icli;詳見第 5 步
icloser doctor 說「常驻服务 已安装但没在跑」排程工作被結束了照它印的做:icloser run 就地起,或 icloser daemon install 重裝一次
二維碼被沖掉了視窗滾屏icloser qr別再 pair
service install 報「缺 --password」或「必须指定以哪个账户运行」Windows 服務要帳戶和密碼用第 13 步的 icloser daemon install,不要密碼;真要服務先讀第 13 步的「進階」那一段(密碼會留在命令列歷史裡)
服務裝上了,起的時候報 logon failure原因沒查清;Microsoft 帳戶 / PIN 登入的電腦上可能是密碼對不上icloser service uninstall,改用 icloser daemon install
服務顯示正在執行,任務卻全失敗服務跑在 LocalSystem 下,看不到你的登入狀態卸掉,改用你自己的帳戶,或用 icloser daemon install
Windows 彈「未知發佈者」/ SmartScreen 攔截Windows 產物目前沒有 Authenticode 簽名先按第 6 節核 SHA-256,對上了再點「仍要執行」
SHA-256 對不上下載壞了或被換了刪掉重下;不要裝
下載中途報錯,或 Download failed … the manifest and the server disagree多半是網路中途斷了(Mac / Linux 實測,同一類安裝器報的就是這句的中文版;Windows 是同一套判斷)原指令再跑一遍

8 · 解除安裝 / 清乾淨

① 裝過常駐的,先卸常駐(在任意目錄跑):

PS> icloser daemon uninstall

② 先看清楚要刪什麼(只列,不刪):

PS> Get-ChildItem -Force -Directory "$env:USERPROFILE" | Where-Object { $_.Name -in @('.kernelhub','.kernelhub-gate','.kernelhub-protected') } | Select-Object FullName

③ 刪資料目錄。三個目錄分別是配置與任務台帳、身份憑據、受保護的根目錄,三個都刪掉才算清乾淨。刪了就要重新配對:

PS> Remove-Item -Recurse -Force "$env:USERPROFILE\.kernelhub","$env:USERPROFILE\.kernelhub-gate","$env:USERPROFILE\.kernelhub-protected" -ErrorAction SilentlyContinue

④ 刪程式本體:

PS> Remove-Item -Recurse -Force "$env:LOCALAPPDATA\Programs\icloser"

最後可以在「設定 → 系統 → 關於 → 高階系統設定 → 環境變數」裡,把使用者 Path 裡那條 …\Programs\icloser 刪掉。Node 與各家 Runtime 是你自己裝的,要刪請用各自的解除安裝方式。

接著看:快速上手 · 配對 · 故障排查