HAPI 使用指南 随时随地移动开发

hapi是个很好的项目 我开发的 HAPI 开源了:随时随地访问 Claude Code / Codex / Gemini
就是文档比较复杂,刚开始不好看明白,这导致hapi上手配置对很多人来说成为了一个门槛。我把最重要的内容总结一下,方便大家理解和使用。也请作者 @weishu 纠错

一 下载和安装

二 中继模式运行

使用作者提供的域名和隧道,建立中继服务器

如果你希望集中管理所有的编程机器和编程客户端会话,需要有一台机器作为中继,这台机器可以配置很低,只做中继而不安装编程工具。在中继机上运行:
hapi hub --relay
第一次运行会生成一个api token,这个token是后续所有客户端连接的密码,必须记下来。这个token也会存到.hapi/setting.json文件的cliApiToken字段,忘记了可以在这里看
默认情况下,hapi的web服务绑定在本机 127.0.0.1的3006端口,除了自己,是无法被其他人连接的。此时他会连接 relay.hapi.run ,使用hapi作者提供的中转服务器,建立隧道(使用 WireGuard + TLS 进行端到端加密),分配一个https://XXXXX.relay.hapi.run 这样子域名用来后续访问。

HAPI Hub starting…
[Hub] CLI_API_TOKEN: loaded from settings.json
[Hub] HAPI_LISTEN_HOST: 127.0.0.1 (default)
[Hub] HAPI_LISTEN_PORT: 3006 (default)
[Hub] HAPI_PUBLIC_URL: http://localhost:3006 (default)
[Hub] Telegram: disabled (no TELEGRAM_BOT_TOKEN)
[Hub] Tunnel: enabled (–relay), API: relay.hapi.run
[Web] hub listening on 127.0.0.1:3006
[Web] public URL: http://localhost:3006

[Web] Hub listening on :3006
[Web] Local: http://localhost:3006
[Tunnel] Starting tunnel to http://localhost:3006
[Tunnel] 2026/02/26 08:41:16 tunwg: initiating handshake to server
[Tunnel] 2026/02/26 08:41:17 tunwg: http://localhost:3006 <= https://xxxxx.relay.hapi.run

如果你的这台服务器在境外vps上或者可以连接WireGuard服务的网络上,下面可能会看到:
HAPI Hub is ready!
[Web] Public: https://xxxxxx.relay.hapi.run

Open in browser:
https ://app.hapi.run/?hub=https%3A%2F%2Fxxxxxx.relay.hapi.run&token=XXXXXXXi5fpNIDuvtnN5_J23bAoeA5Z9Mw9IXXXXXXX
然后还会显示一个二维码

看到这些内容,说明隧道成功建立,可以用手机或电脑浏览器去访问这个地址:
https ://app.hapi.run/?hub=https%3A%2F%2Fxxxxxx.relay.hapi.run&token=XXXXXXXi5fpNIDuvtnN5_J23bAoeA5Z9Mw9IXXXXXXX
出现的界面就是中继服务器的控制界面。生成的二维码用手机扫码之后实际也是打开这个地址,主要是避免你自己去输入这么长的url。
如果你直接访问 http://xxxxxx.relay.hapi.run 会提示你输入之前这个服务器生成的api token,输入以后看到的也是上面的界面
但这个时候,访问你的中继服务器界面上是没有任何编程客户端的显示的,也无法添加新的编程会话(你会在新增界面上看到“无可用机器”的提示)。因为现在这个服务器只是以中继模式运行,还没有任何客户端或者主机连接上来。

运行客户端和连接中继服务器

  • 在中继服务器上进行编程
    如果你在中继服务器另开一个termial会话,运行
    hapi或 hapi codex/gemini/opencode
    那么你会马上进入hapi封装的对应开发客户端,连接到本机的 hapi hub 服务上。这个时候你去看中继服务器刚才那个链接,你会发现这个会话已经出现了。新增会话的页面上,也会出现这台机器。

  • 在其他机器上进行编程
    如果你这台服务器只是一台不用来开发的vps,只是用来作为中转站,或者你不想在中继服务器上运行编程客户端。那么你就需要在你的开发用机上做额外配置,让你的开发用机能连上这台中继服务器,再被访问和控制。首先要配置环境变量:
    export HAPI_API_URL=“https://xxxxxx.relay.hapi.run” <—这个是前面正常工作做中继服务器的域名。由于目前hapi hub固定绑定在localhost上,因此实际你用https://ip:3006是访问不了的,需要用前面映射的https://xxxxxx.relay.hapi.run 是没问题的。
    export CLI_API_TOKEN=“your-token-here” <—这个token,就是是建立中继服务器时生成api token。

设置好以后,启动hapi,那么这个claude的会话就会连接到中继服务器,在中继服务器域名的网页上就可以看到了。

  • 如何在web界面上新增会话
    如果是在中继服务器之外的主机上,希望实现web界面新增编程会话,需要把这台编程主机注册到中继服务器上。配置好HAPI_API_URL 和 CLI_API_TOKEN环境变量后,用下面的指令
    hapi runner start
    如果一切正常,你会在web页面上新增会话页面中,看到这台机器。在新增会话上指定了工作目录后,就可以新开一个编程客户端会话并行开发了。

如果你无法连接作者提供的隧道运行中继服务器,或者希望完全自建中继服务器。

最常见的情况是你在国内,或者在被封禁了WireGaurd的网络运行hapi hub --relay,你只会一直看到
HAPI Hub is ready!
[Tunnel] Waiting for trusted TLS certificate…
[Tunnel] Waiting for trusted TLS certificate…
[Tunnel] 2026/02/26 08:43:05 tunwg: initiating handshake to server
[Tunnel] Waiting for trusted TLS certificate…
[Tunnel] Waiting for trusted TLS certificate…
说明连接不上作者提供的relay.hapi.run这个api服务器网络。

简单方式,需要你的中继服务器具有互联网公开ip

配置环境变量
export HAPI_LISTEN_HOST=1.1.1.1 (你这个服务器的公开ip地址)
然后运行 hapi hub
[Hub] CLI_API_TOKEN: loaded from settings.json
[Hub] HAPI_LISTEN_HOST: 1.1.1.1 (environment)
[Hub] HAPI_LISTEN_PORT: 3006 (default)
[Hub] HAPI_PUBLIC_URL: http://localhost:3006 (default)
[Hub] Telegram: disabled (no TELEGRAM_BOT_TOKEN)
[Hub] Tunnel: disabled (default)
[Web] hub listening on 1.1.1.1:3006
[Web] public URL: http://localhost:3006

[Web] Hub listening on :3006
[Web] Local: http://localhost:3006

在你开发机器上设置把这台机器的ip作为环境变量

export HAPI_API_URL=“http://1.1.1.1:3006
export CLI_API_TOKEN=“your-token-here”
然后运行hapi
好了,现在你这个会话连接到自己的中继服务器上了,当然也可用runner把这个机器也注册到这台中继服务器上。

复杂方式,但是可以适用开发机在内网没有公开ip的情况

用cloudflared来开一条反向隧道。通过loudflared的隧道,映射外部域名和链路到本地的 localhost:3006。从而实现外部能穿透访问到内网主讲上的claude。这种情况无需开–relay,运行hapi hub即可。cloudflared的下载和隧道开启说明都在这里:

等配置好了隧道,你这台中继机器也会有一个自己的域名,后面用这个域名当作HAPI_API_URL,其他用法都是一样的了。

hapi hub和hapi hub --relay的不同

如果用hapi hub启动,那么hapi不会连接作者提供的有隧道中继服务器relay.hapi.run,需要自己修改环境变量对外提供服务,或者开反向隧道才能从远程访问外,否则你只能用本机浏览器去访问3006端口。注意,因为hapi这个项目是c/s模式的,即便是你只有一台机器想用手机远程访问控制,也必须先使用hapi hub或者hapi hub relay。

其他功能

比如团队合作时可以用命名空间来区分验证和会话,使用ElevenLabs api语言输入 hapi/docs/guide/voice-assistant.md at main · tiann/hapi · GitHub ,接入Telegram通知hapi/docs/guide/installation.md at main · tiann/hapi · GitHub
如何让中继服务器和客户端runner成为系统服务自动启动,如何把浏览器页面存为pwa应用 hapi/docs/guide/pwa.md at main · tiann/hapi · GitHub 都是基操,也不赘述。

47 个赞

大佬很强,之前研究过国内确实麻烦一些 后续按照你的我再试试

2 个赞


感谢大佬

1 个赞

大佬 无可用机器是什么意思呀
只能手动执行hapi codex --dangerously-bypass-approvals-and-sandbox 才会显示

前面 hapi hub 只是启动了服务器模式,你必须再启动另外一个hapi 作为客户端连接到这个服务器上,才能看到。如果你想在新增会话里看到机器,就必须用hapi runner模式启动。

1 个赞

好的 谢谢佬 使用上了 炒鸡好用~

想折腾下,但是好复杂,又想放弃了

这对么 :bili_002:

发布了arch包,arch可以yay -S hapi-git 啦!,

网络的问题开梯子能解决吗

大佬 我用 Cloudflare Tunnels 弄好啦,

hapi runner start
Runner started successfully

这个也启动好了 有个问题,chrome浏览器选择图片的时候上传一直失败,这个怎么处理呢,然后上传失败,哪怕有问题,发送按钮还是语音。有这两个问题

感谢佬友分享

不是还有个runner模式吗,然后再反代一下,为啥还需要中转呀?

有佬和我一样用windows开的hapi+cloudflare tunnel吗? 终端打不开提示Terminal ID is already in use. npm形式的claude运行不了改用claude.exe了

大佬好
请问为啥本地和远程切换不了
双space切换->本地会崩溃->远程提示

这个对Windows的支持好像不太好

佬,这个如果已经和自己的一台公网服务器内网穿透了的话,可以直接用吗?:thinking:

hapi claude报错:
[local]: Local Claude process failed: Claude Code CLI not found on PATH. Install Claude Code or set HAPI_CLAUDE_PATH.
但是hapi codex是好的 :face_with_raised_eyebrow:

hapi codex打开之后一会报错:
No Codex session found within 120000ms for cwd xxxxxx; refusing fallback.

路径内没找到claude 不行就自己按提示设置一下环境变量