Mac 从 0 开始
给从没装过 KernelHub 的 Mac。照着做,每一步都能复制、都知道成功长什么样:先装 Node,再一行装 KernelHub,登录 Runtime,配对手机,发一条真任务,看它交付。全程不需要 sudo。
从上往下,一步一步做。每一步都写了:打开哪里、复制哪一行、看到什么算成功、没看到怎么办。命令块右边有「复制」按钮,点一下粘进「终端」回车即可。能上网只看第 1、2 节;想用拖进「应用程序」的 App 看第 4 节;网络被堵看第 6 节。
1 · 开始之前:这台 Mac 缺什么
一台从没装过 KernelHub 的 Mac(Apple 芯片或 Intel 都行),要走到「手机上派活、这台 Mac 上干活」。先搞清楚它自带什么、缺什么:
| 东西 | 全新 Mac 有没有 | 说明 |
|---|---|---|
| 「终端」App 与 zsh | 有 | 本页命令都按系统默认的 zsh 写。 |
| curl / shasum / tar | 有 | 系统自带,本页的下载与校验会用到。 |
| Node.js / npm | 没有 | 本页最要紧的一条。安装脚本不会替你装 Node。没有 npm,它就装不上 AI 编码工具(Runtime),结果是「KernelHub 装好了,一个任务都跑不了」。 |
~/.local/bin 在 PATH 里 | 不在 | KernelHub 和本页装的 Node 都放在这里。不加进 PATH,终端就找不到 icloser、node。第 2 节第 3 步用一行解决。 |
| git(命令行开发者工具) | 没装 | 第一次有程序用到 git 时,系统会弹窗问要不要装,点「安装」即可(见第 9 步)。 |
| 一个登录过的 Runtime | 没有 | KernelHub 不带模型,它驱动的是你自己装好、自己登录过的 CLI 编码 Agent(默认装 Claude Code)。装上 ≠ 能用,没登录照样跑不了任务。 |
| 一部手机 | — | 装好 KernelHub App,用来扫码配对、发任务、批准。 |
- 先装 Node,再装 KernelHub。顺序反了,装完开不了工(反了也能救:装好 Node 后把安装命令再跑一遍)。
- 装完让 Runtime 登录一次(敲
claude,按提示登录)。不登录,任务一律回「本机一家都跑不了」。 - 配对之后要让
icloser run一直开着(或者装成常驻)。配对只是把手机和这台 Mac 认识一下,真正去接活的是icloser run。
下面灰框里的原句取自真跑:在一台 macOS 27.0(Apple 芯片)上,用空的家目录 + 只含系统目录的 PATH 模拟一台全新 Mac。和真正的新 Mac 有三处不同,对应步骤都注明了:这台机器装过 Xcode,所以 git 不弹窗;常驻会和这台机器已有的常驻撞同一个标识,所以没跑;claude 登录会碰钥匙串,所以没在这台上登录。输出里的用户名、机器名、路径已换成示例。
怎么打开「终端」
按 Command + 空格,输入 终端(英文系统输入 Terminal),回车。出现一个能打字的窗口就对了。本页没有任何一步需要 sudo。
2 · 能上网:最短主路径(共 15 步)
一步一行,复制即用。
第 1 步 · 看看这台 Mac 有没有 Node
已经装过 Node:打出一个版本号(比如 v24.21.0)—— 直接跳到第 3 步,第 4、5 步可以不做。
全新 Mac 上会看到(说明没装,照做下去):
zsh:1: command not found: node
第 2 步 · 看看是 Apple 芯片还是 Intel(只是看一眼)
打出 arm64 是 Apple 芯片,x86_64 是 Intel。后面的命令会自己选对,不用改。
第 3 步 · 把 ~/.local/bin 放进 PATH
这一行做三件事:如果 ~/.zshrc 里还没有,就追加一行;当前窗口立刻生效;最后打印 PATH 的第一段给你看。重复跑不会重复追加。
成功:打出来的是 /Users/你的用户名/.local/bin:
/Users/你/.local/bin
第 4 步 · 下载 Node.js,并用官方校验和核对
当前 LTS 是 Node v24.21.0。这一行按你的芯片下载 nodejs.org 官方的 .tar.gz,再拿 nodejs.org 官方的 SHASUMS256.txt 核对(大约 50 MB,要等一会儿):
成功:最后一行是文件名后面跟着 OK:
node-v24.21.0-darwin-arm64.tar.gz: OK
最后是 FAILED 或 did NOT match:下载坏了,把这一行再跑一次。报 curl: (35)、(28) 之类:网络问题,重跑;还不行看第 6 节设代理。
node-v24.21.0-darwin-arm64.tar.gz: FAILED shasum: WARNING: 1 computed checksum did NOT match
第 5 步 · 把 Node 解到 ~/.local(不要 sudo)
成功:打出两行版本号,一行 node、一行 npm:
v24.21.0 11.19.0
这样装的好处:node、npm 和之后的 icloser、claude 都在 ~/.local/bin 里,npm 的全局安装也落在 ~/.local,全程不需要 sudo,不会报 EACCES。报 command not found: node:第 3 步没做,回去做完再跑这一行。
第 6 步 · 一行装 KernelHub
它按顺序做这些事,你不用管,看着就行:
| 它做什么 | 说明 |
|---|---|
| 认机器 | 认出 macOS 和芯片(arm64 / amd64)。 |
| 读发布清单 | 从 kernelhub.icloser.xyz 读 stable.json;清单不是 READY 就拒装,没有强制开关。 |
| 下载并核对 | 下 icloser,核 SHA-256 与字节数,对不上就丢掉并停下。 |
| 装到哪 | ~/.local/bin/icloser,另建三个旧名 icli / kernelhub-cli / devnexus-cli,并摘掉 macOS 给下载文件打的隔离标记。 |
| 本机管理台 | 顺带装 ~/.local/bin/kernelhub-desktop;下失败只打一行警告,不影响 CLI。 |
| 自证 | 当场跑 icloser version,和清单里的版本、构建号比对。 |
| 装一家 Runtime | 有 npm 就 npm install -g @anthropic-ai/claude-code(默认只装 claude);已经装过就不动它。 |
成功时屏幕上会出现(安装脚本的输出是中文的):
清单:stable 频道 · v1.0.2 · build 202609161352 · commit a4099c062543
下载 icloser_darwin_arm64 …
✓ SHA-256 核对通过
✓ 装到 /Users/你/.local/bin/icloser
✓ 装到 /Users/你/.local/bin/kernelhub-desktop(本机管理台)
✓ icloser 1.0.2 (build 202609161352, commit a4099c062543)
装 Runtime:claude(npm install -g @anthropic-ai/claude-code)…
✓ 装好 Runtime:claude(@anthropic-ai/claude-code)
下一步:
① 登录 Runtime(只用一次)。装上但没登录,任务照样跑不了:
claude
按提示登录完,退出它即可。
② cd 到你的项目目录,跑:
icloser pair如果里面有「这台机器上没有 npm,Runtime 没装」,说明第 4、5 步没做或没生效 —— KernelHub 本体已经装好,回去装好 Node,再把这一行跑一遍:
清单:stable 频道 · v1.0.2 · build 202609161352 · commit a4099c062543
下载 icloser_darwin_arm64 …
✓ SHA-256 核对通过
✓ 装到 /Users/你/.local/bin/icloser
✓ 装到 /Users/你/.local/bin/kernelhub-desktop(本机管理台)
✓ icloser 1.0.2 (build 202609161352, commit a4099c062543)
⚠️ 这台机器上没有 npm,Runtime 没装(KernelHub 本体已经装好)
装好 Node.js(自带 npm)之后重跑一次这个安装器即可。如果有「管理台没下下来 —— 只装了 CLI」:多半是网络抖了一下,把这一行再跑一遍即可。
第 7 步 · 核一下装到的是哪一版
成功:一行里同时有 1.0.2 和 202609161352:
icloser 1.0.2 (build 202609161352, commit a4099c062543)
报 command not found: icloser:第 3 步没做;做完再试,或者新开一个终端窗口再试。
第 8 步 · 让 Runtime 登录一次
先看看登录前是什么样。这条命令第一次输出很长(一张矩阵加几十行说明),只看最上面 Claude Code 那一行:登录前是「状态不明」(STARTABLE_AUTH_UNKNOWN),登录后是「✅ 可用」(AUTHENTICATED)。
这台机器上的 Runtime(14 家已注册 · 1 家装着 · 0 家可直接用 · 0 家卡在登录/凭据)
Runtime 版本 状态 登录态 / 位置
⚠️ Claude Code 问不出 状态不明 声明了探测手段但一条都没命中,状态问不出来(不猜)
Claude Code STARTABLE_AUTH_UNKNOWN 起得来,但登录态问不出来:声明了探测手段但一条都没命中,状态问不出来(不猜)然后登录(第一次运行会带你登录,通常会打开浏览器;登录完、看到能对话的界面后输入 /exit 或按两次 Control + C 退出):
再跑一次 icloser runtimes。成功:Claude Code 那一行变成「✅ 可用」,六态里是 AUTHENTICATED。
这一步本页没有在全新 Mac 上实跑(登录会用到那台机器的钥匙串);同一版 claude 2.1.272 的登录几屏和登录后的样子,见 Linux 从 0 开始 第 8 步。
还卡在登录上(状态写着 STARTABLE_NOT_AUTHED 或「状态不明」(STARTABLE_AUTH_UNKNOWN)):再敲一次 claude 登录。
第 9 步 · 建一个项目目录并进去
建议把项目放在 ~/Projects 这类地方,不要放在「文稿」「桌面」「下载」里(原因见第 15 步那个坑)。已经有项目的,把路径换成你自己的:
第一次有程序用到 git(常见是下一步的 icloser pair,或者 AI 员工开始干活时),macOS 可能弹窗说需要「命令行开发者工具」。点「安装」,等它装完(几分钟),再把刚才那条命令重跑一遍。
这一步本页没有在全新 Mac 上实跑(那台机器装过 Xcode,没有弹这个窗口)。
第 10 步 · 配对手机
它会依次做三件事:
- 在当前目录建工作区。
- 问你这台机器上 Agent 可以自己做到哪一步 —— 直接回车就是第 3 档「读 + 写 + 执行」,能改文件、能跑构建和测试,多数人选它。
- 在窗口里画一个二维码,下面还有一条「扫不了就手工粘这条」的链接。
这台机器上,Agent 可以自己做到哪一步?(现在 6 档全是关的)
1 只读 能看能想,不改文件
2 读 + 写 多数人要的
3 读 + 写 + 执行 开发 ← 能 build/test/装依赖/生成产物
4 开发 + 联网 3 + 能上网查当前信息(只取不发)
5 完整开发 4 + 还能推到远端(git push)
6 完整开发 + 运维 5 + 能管这台机器的服务与部署(起停服务、docker/kubectl/helm/terraform 的写侧)
选一个 [1/2/3/4/5/6],回车=3:设备 cli-你的Mac名.local 在工作区 7a9e5014-a076-40c7-a16b-a4b7e61ee88e 的自治边界:
✓ 这台机器:读文件 + 写入文件 + 执行脚本 / 命令(要改:icloser grant read write exec web push sysops)
下一步只有一件事——让手机说的话有人接:
icloser run打开手机上的 KernelHub App 扫这个码。
第 11 步 · 在手机 App 里输入邀请码
全新账户第一次 pair 时,窗口里会有这么一句(Mac 实录原句):
账户 7a9e5014 还没有使用权 —— 在 iPhone 或 Android 上输入一次邀请码即可, 这台机器会自动继承(CLI 上没有激活入口)
意思是:这个账户还没有使用权,激活只能在手机上做,电脑这边没有入口。打开手机上的 KernelHub App,照提示输入邀请码;兑换成功后,这台电脑自动继承,不用再敲任何命令。
- 一个码 30 天。
- 多个码天数累计:实测剩 29 天时再兑一个码,变成 59 天。
- 同一个码不能兑两次:第二次会被拒(
invite_exhausted)。
没有码怎么要,见使用权限与激活。已经激活过的账户,pair 时会说「使用权已继承」,这一步跳过。
第 12 步 · 开始接活
这个窗口别关。它会一直开着,每隔几秒去看有没有新任务 —— 手机上发的任务就是它接的。开头几行会说它加入了哪个工作区、选了哪家 Runtime:
icloser · 设备 cli-你的Mac名.local · 工作区 7a9e5014-a076-40c7-a16b-a4b7e61ee88e Selected Runtime: claude · 适配器 claude-code(支持会话接续、只读可强制) 选择原因: eligible pool 里最佳可用:claude 工作目录 /Users/你/Projects/my-app · 轮询 3s 等待命令中(Ctrl-C 退出)…
第 13 步 · 发一条真任务,看它交付
第 12 步那个窗口开着的时候,拿起手机:
- 在 KernelHub App 里选中刚配对的工作区,在输入框里打一句话发出去。知道文件名就写上,比如「在 README.md 末尾加一行今天的日期,不要提交」。
- 电脑上跑
icloser run的窗口会滚出新的几行 —— 说明任务被接住了。手机上的任务卡会变成实时视图:读了哪些文件、跑了哪些命令、改了哪些文件。 - 任务缺一档权限时,它会在动手之前停下来挂一张卡,点批准只对这一条任务生效。
- 跑完之后,点卡片上的「改动」逐行看它改了什么,再读结果:做了什么、改了什么、有什么没做成。结果不满意就点「要求修改」,让同一条任务接着做。
成功:任务状态是完成,「改动」里能看到 README.md 多出的那一行,打开电脑上的文件也确实多了一行。
KernelHub 会顺手检查机器级的基础工具(Go、Python)。缺了、而这台机器又没批「访问互联网」时,任务照常往下跑,不挂卡;
icloser run 那个窗口里只多一行记账(CLI 源码里的原句):ⓘ go:KernelHub Base(机器级,与这条任务无关)没装上 —— 不挂卡、不阻塞,这条任务照常往下跑。要补齐:在这台机器上跑 icloser env bootstrap go,或在设备权限里批 exec + web 后它会自动补上。只有任务真要用它 —— 原话里点了名(比如写了
go build),或者干活途中真去跑它 —— 而安装又被拒时,才会在那一刻挂一张卡;批准只对这一条任务生效。已经批过「执行」和「访问互联网」的机器上,它会自己装好接着做,一张卡都不挂(Windows 真机上见过)。发出去一直没人接:回去看第 12 步那个窗口还在不在;还卡着就做下一步体检。
第 14 步 · 体检(另开一个终端窗口)
第 12 步那个窗口在跑,所以按 Command + N 另开一个窗口,再跑:
这一步本页没有在全新 Mac 上实跑(体检的样子见 Linux 页)。
服务、网关、队列、权限、Runtime 一次查完。哪一项不对,它会直接说下一步该敲什么。
第 15 步 · 关掉窗口也要接活:装成常驻
第 12 步那个窗口一关,手机上再发任务就没人接了。想让它登录 Mac 就自己起来、挂了自己拉起,跑这一行(不需要 sudo;它读的是配对时记下的项目目录,在哪个目录敲都一样):
这一步本页没有在全新 Mac 上实跑(会和那台机器已有的常驻撞同一个标识)。
之后随时用这一行看它在不在:
装了常驻之后,第 12 步那个手动开的 icloser run 就可以关掉了。icloser service install 在 Mac 上做的是同一件事,二选一即可。
这三个文件夹受 macOS 隐私保护。从终端里跑
icloser run 时,权限跟着「终端」走(第一次可能弹窗问你,点允许即可);可常驻是登录后由系统在后台拉起来的,没有窗口可以弹 —— 于是它会卡在「进到项目目录」这一步,一直不开工,而 icloser daemon status 仍然显示它在跑。手机上发的任务就一直没人接。最省事的办法:项目别放在这三个文件夹里(第 9 步建议的
~/Projects 就没有这个问题)。已经在里面、又不想挪的:不装常驻,在终端里开着 icloser run 用。想确认自己中没中:在项目目录里敲
pwd,打出来的路径里有 /Documents/、/Desktop/ 或 /Downloads/ 就是中了。3 · 本机管理台
管理台是单独的程序,icloser run 不会带起它。起它(这个窗口也会一直占着):
然后在浏览器打开 http://127.0.0.1:18092。它只绑在本机回环地址,这台 Mac 之外够不着。看它现在在不在跑、地址是什么:
已经在跑的话,这一行帮你在默认浏览器里打开它:
4 · 另一条路:拖进「应用程序」的 KernelHub Desktop
下载页上有 KernelHub-Desktop-1.0.2-macos-universal.dmg(Apple 芯片与 Intel 同一个包,已签名并经 Apple 公证)。打开它,把 KernelHub Desktop 拖进「应用程序」。
我们把这个 DMG 挂上来逐项看过,事实是这样的:
- App 里面自带一份
icloser(在 App 包的Contents/Resources/icloser,版本 1.0.2 · build 202609161352),App 自己点按钮时用的就是它 —— 所以装 KernelHub 本身确实不用再开终端。 - 但它不会把
icloser放进终端的 PATH。本页里那些 icloser 命令,在终端里照样会报command not found。想在终端里敲命令,还是要做第 2 节第 3、6 步。 - 它不带 Node,也不替你登录 Runtime。App 里「安装 Runtime」的按钮是把
npm install -g …送进终端去跑 —— 没有 Node 一样装不上。所以第 2 节第 1~5 步(Node)和第 8 步(登录)走 App 这条路也要做。
结论:只想点按钮的人,DMG 能省掉「装 KernelHub」那一行;Node 和登录这两件事,终端还是要开一次。
5 · Node 的另一种装法:官方 .pkg 安装器
不想敲第 4、5 步的命令,也可以去 nodejs.org 下 macOS 安装器(.pkg),双击一路「继续」。它装到系统目录,之后 npm install -g 常会报 EACCES(权限不够) —— 包括 KernelHub 安装脚本替你装 claude 那一步。
别用 sudo 硬装,把 npm 的全局目录改到 ~/.local 就好(先做第 2 节第 3 步):
成功:打出 /Users/你的用户名/.local。然后把第 6 步的安装命令再跑一遍。
6 · 再装别的 Runtime、网络被堵
再装别的 Runtime(不用重跑整个安装)
默认只装了 claude。能用 npm 装的有:claude、codex、qwen、codebuddy、opencode、kimi、mimo、pi。下面这一行装的是 codex,换成其中任意一个即可:
或者用安装命令指定(同样把 codex 换成你要的):
装完同样要登录一次(敲它的名字,比如 codex)。Google 这一家是 agy(Antigravity),不走 npm,要从 Google 官方渠道装。
设代理(只对当前这个窗口生效)
把 端口 换成你自己的代理地址和端口,最后那段是自证:
成功:打出 install -> HTTP 200。打不出就是代理不对,先别往下走。通了之后,第 2 节的命令照常在这个窗口里跑。
npm 换镜像
会回显镜像地址。registry.npmmirror.com 是常见的公共镜像,换别的就把地址替换掉。
换 KernelHub 自己的下载源 / 不装 Runtime
公司内网有镜像时(镜像要照原样镜像官方目录,SHA-256 仍然会核;安装脚本本身仍从 icloser.xyz 取):
一个 Runtime 都不装(只要 CLI):
7 · 自己核一遍文件对不对
打出来的串和下表比,按你的芯片看对应的两行:
| 文件 | 字节 | SHA-256 |
|---|---|---|
| icloser_darwin_arm64(Apple 芯片) | 12,052,560 | 5c65a239094a8d039cc880aff65093ecfdaadd48d63278362b89e87313a9b11e |
| kernelhub-desktop_darwin_arm64 | 7,940,400 | 816c5b267d726bb646fdea8ebc61ce6b769fec164b607f07722b785e245ce95a |
| icloser_darwin_amd64(Intel) | 12,994,176 | a393a4223d0c80ddd758a66eb34cc6b0ac957330c9654d85a895849db5de70c4 |
| kernelhub-desktop_darwin_amd64 | 8,507,120 | 7c0be4da9458db85100dc64d3791fabd53f8c73b60b186f9d0f0135087ae528c |
| node-v24.21.0-darwin-arm64.tar.gz | — | bed7eea5325e1108f32ce5228ddd6a5f0f08a499ee42aa7442aea583702f6057 |
| node-v24.21.0-darwin-x64.tar.gz | — | 1462cb3b3046b815cf8ea436d3da450ec1a9f11dac7e5a46b0ada5305d7e8097 |
| KernelHub-Desktop-1.0.2-macos-universal.dmg | 17,841,735 | 582554f659d44c37051b664416b0de423448607907c6d835486a1b3f1954c5e3 |
KernelHub 那几行是构建本页时从这一版的发布清单 stable.json 读进来的,与它逐字一致;Node 那两行来自 nodejs.org 的 SHASUMS256.txt。安装脚本本身已经替你核过一遍,这里是给想亲眼看的人。
8 · 常见报错:症状 → 原因 → 那一行命令
| 你看到的 | 原因 | 怎么办 |
|---|---|---|
command not found: node | 没装 Node,或第 3 步没做 | 做第 2 节第 3~5 步 |
command not found: icloser | ~/.local/bin 不在 PATH 里 | 做第 2 节第 3 步,或新开一个终端窗口 |
| 安装时「这台机器上没有 npm,Runtime 没装」 | 先装了 KernelHub 后装 Node | 装好 Node,再跑 curl -fsSL https://icloser.xyz/install | sh |
npm install -g 报 EACCES | 用 .pkg 装的 Node,全局目录在系统目录 | 第 5 节:npm config set prefix ~/.local |
| 安装时「管理台没下下来 —— 只装了 CLI」 | 网络抖动 | 把安装命令再跑一遍 |
Node 校验 FAILED | 下载坏了 | 重跑第 4 步那一行 |
curl: (35) / (28) / (7) | 网络被挡或抖动 | 重跑;不行看第 6 节设代理 |
| 弹窗要装「命令行开发者工具」 | 第一次用到 git | 点「安装」,装完重跑刚才的命令 |
| 任务回「本机一家都跑不了」 | Runtime 没装或没登录 | 敲 claude 登录,再 icloser runtimes 看状态 |
| 手机扫了码,发的任务一直没人接 | icloser run 没开着,也没装常驻 | 在项目目录跑 icloser run,或第 15 步 icloser daemon install |
| 装了常驻、status 说在跑,任务还是没人接 | 项目在「文稿 / 桌面 / 下载」里,常驻卡住了 | 见第 15 步那个坑;先在终端里开着 icloser run |
| 二维码被冲掉了 | 窗口滚屏 | 敲 icloser qr,别再 pair |
curl: (18) / (35) / (56),或「清单和服务器上的产物对不上了」,或只打一行 curl: (35) … 就结束 | 网络中途断了(实测多次,都是下载到一半断掉,不是产物真的不对) | 原命令再跑一遍 |
icloser runtimes 里 Claude Code 的版本栏是「问不出」 | 第一次探测还没问出版本(实测第二次就是 2.1.272) | 隔几秒再跑一次 icloser runtimes |
9 · 卸载 / 清干净
① 装过常驻的,先卸常驻:
② 先看清楚要删什么(只列,不删):
③ 删数据目录。三个目录分别是配置与任务台账、身份凭据、受保护的根目录,三个都删掉才算清干净。删了就要重新配对:
④ 删程序本体:
装过 DMG 的,把「应用程序」里的 KernelHub Desktop 拖进废纸篓。~/.zshrc 里那行 PATH 可以留着(Node 也在那个目录里)。Node 和各家 Runtime 是你自己装的:按本页装的 Node 在 ~/.local 下,不要了就删掉 ~/.local/bin/node、~/.local/bin/npm、~/.local/bin/npx 和 ~/.local/lib/node_modules。