# hapi **Repository Path**: Mr_zoupeng/hapi ## Basic Information - **Project Name**: hapi - **Description**: HAPI 是一个本地优先的工具,用于运行 AI 编程代理并通过 Web / PWA / Telegram Mini App 远程控制它们。它包装你的代理而不是替代它 —— 同样的终端、同样的体验、同样的操作习惯。 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2026-02-02 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: ai **Tags**: None ## README

HAPI

在本地运行 Claude Code / Codex / Gemini / OpenCode,随时随地远程控制。

npm version License GitHub Stars GitHub Forks

English | 中文 | 日本語 | 한국어

--- HAPI 是一个本地优先的工具,用于运行 AI 编程代理并通过 Web / PWA / Telegram Mini App 远程控制它们。它包装你的代理而不是替代它 —— 同样的终端、同样的体验、同样的操作习惯。 > **为什么选择 HAPI?** HAPI 是 [Happy](https://github.com/slopus/happy) 的本地优先替代方案,你的数据始终留在自己的机器上。详见 [Why HAPI?](docs/guide/why-hapi.md)。 ## 特性 - **无缝切换** — 本地工作,需要时切到远程,随时切回。不丢上下文,不重启会话。 - **原生优先** — HAPI 包装你的 AI 代理而非替代它。同样的终端、同样的体验、同样的肌肉记忆。 - **离开也不停** — 离开工位?在手机上一键审批 AI 请求。 - **自由选择 AI** — Claude Code、Codex、Gemini、OpenCode —— 不同模型,统一工作流。 - **随处终端** — 从手机或浏览器运行命令,直连你的工作机器。 - **语音控制** — 通过内置语音助手免提与 AI 代理对话。 ## 演示 https://github.com/user-attachments/assets/38230353-94c6-4dbe-9c29-b2a2cc457546 ## 架构 ``` ┌─────────────────────────────────────────────────────┐ │ 你的机器 │ │ │ │ ┌─────────┐ Socket.IO ┌─────────────┐ │ │ │ CLI │◄───────────────►│ Hub │ │ │ │+ Agent │ │ + SQLite │ │ │ └─────────┘ └──────┬──────┘ │ │ ▲ │ SSE │ │ │ spawn ▼ │ │ ┌────┴────┐ ┌─────────────┐ │ │ │ Runner │◄────RPC────────►│ Web App │ │ │ └─────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────┘ │ [隧道 / 中继] │ ┌─────▼─────┐ │ 手机/浏览器 │ └───────────┘ ``` | 组件 | 职责 | 是否必需 | |------|------|----------| | **CLI** | 包装 AI 代理(Claude/Codex/Gemini/OpenCode),运行会话 | 是 | | **Hub** | 中央协调器:持久化、实时同步、远程访问 | 是 | | **Runner** | 后台服务,用于远程创建会话 | 可选 | 更多细节请参阅 [How it Works](docs/guide/how-it-works.md)。 ## 快速开始 ### 前置要求 需要安装以下任一 AI 编程代理: - [Claude Code](https://docs.anthropic.com/en/docs/claude-code) — `claude --version` - [OpenAI Codex CLI](https://github.com/openai/codex) — `codex --version` - [Google Gemini CLI](https://github.com/google-gemini/gemini-cli) — `gemini --version` - [OpenCode CLI](https://github.com/opencode-ai/opencode) — `opencode --version` ### 安装 **npm(推荐):** ```bash npm install -g @zzp123/hapi ``` **Homebrew:** ```bash brew install tiann/tap/hapi ``` **npx(免安装):** ```bash npx @zzp123/hapi ```
预编译二进制 从 [GitHub Releases](https://github.com/tiann/hapi/releases) 下载最新版本。 ```bash chmod +x ./hapi sudo mv ./hapi /usr/local/bin/ ```
从源码构建 ```bash git clone https://github.com/tiann/hapi.git cd hapi bun install bun run build:single-exe ```
### 启动 ```bash hapi hub --relay # 启动 Hub 并开启端到端加密中继 hapi # 运行 Claude Code(默认) ``` 终端会显示一个 URL 和二维码。用手机扫描或在浏览器中打开即可访问。 > 中继使用 WireGuard + TLS 进行端到端加密。数据从你的设备到你的机器全程加密。 `hapi server` 仍然支持作为别名使用。 ## 配置 配置优先级:**环境变量 > settings.json > 默认值** ``` ~/.hapi/ ├── settings.json # 主配置文件 ├── hapi.db # SQLite 数据库(Hub) ├── runner.state.json # Runner 进程状态 └── logs/ # 日志文件 ``` ### 环境变量 | 变量 | 默认值 | settings.json | 说明 | |------|--------|---------------|------| | `CLI_API_TOKEN` | 自动生成 | `cliApiToken` | 认证共享密钥 | | `HAPI_API_URL` | `http://localhost:3006` | `apiUrl` | CLI 连接的 Hub URL | | `HAPI_LISTEN_HOST` | `127.0.0.1` | `listenHost` | Hub HTTP 绑定地址 | | `HAPI_LISTEN_PORT` | `3006` | `listenPort` | Hub HTTP 端口 | | `HAPI_PUBLIC_URL` | - | `publicUrl` | 外部访问的公网 URL | | `CORS_ORIGINS` | - | `corsOrigins` | 允许的 CORS 来源(逗号分隔) | | `TELEGRAM_BOT_TOKEN` | - | `telegramBotToken` | Telegram Bot API 令牌 | | `TELEGRAM_NOTIFICATION` | `true` | `telegramNotification` | 启用 Telegram 通知 | | `HAPI_RELAY_FORCE_TCP` | `false` | - | 强制中继使用 TCP 模式 | | `VAPID_SUBJECT` | `mailto:admin@hapi.run` | - | Web Push 联系信息 | | `HAPI_HOME` | `~/.hapi` | - | 配置目录路径 | | `DB_PATH` | `~/.hapi/hapi.db` | - | 数据库文件路径 | | `ELEVENLABS_API_KEY` | - | - | ElevenLabs 语音 API 密钥 | | `ELEVENLABS_AGENT_ID` | 自动创建 | - | 自定义 ElevenLabs 代理 ID |
settings.json 示例 ```json { "$schema": "https://hapi.run/docs/schemas/settings.schema.json", "listenHost": "0.0.0.0", "listenPort": 3006, "publicUrl": "https://your-domain.com" } ```
## 使用方式 ### 支持的代理 ```bash hapi # Claude Code(默认) hapi codex # OpenAI Codex CLI hapi gemini # Google Gemini CLI hapi opencode # OpenCode CLI ``` ### 核心命令 ```bash hapi hub # 启动 Hub(仅本地) hapi hub --relay # 启动 Hub 并开启公共中继 hapi runner start # 启动后台 Runner,支持远程创建会话 hapi runner status # 查看 Runner 状态 hapi runner stop # 停止 Runner hapi auth login # 交互式登录远程 Hub hapi auth status # 查看认证状态 hapi doctor # 诊断问题 ``` ### 远程访问方式 | 方式 | 配置方法 | 适用场景 | |------|----------|----------| | **公共中继**(默认) | `hapi hub --relay` | 零配置,穿透 NAT | | **Cloudflare Tunnel** | 需创建命名隧道 | 低延迟,自主管理 | | **Tailscale** | 安装 + `tailscale up` | 私有 Mesh VPN | | **公网 IP** | 直连或反向代理 | 完全控制 | 详细配置说明请参阅 [Installation](docs/guide/installation.md)。 ## 文档 - [安装指南](docs/guide/installation.md) — 完整安装和配置说明 - [工作原理](docs/guide/how-it-works.md) — 架构深度解析 - [为什么选择 HAPI?](docs/guide/why-hapi.md) — 与 Happy 的对比 - [PWA / App](docs/guide/pwa.md) — 渐进式 Web 应用指南 - [语音助手](docs/guide/voice-assistant.md) — 语音控制配置 - [多机器部署](DEPLOY.md) — 多机器部署指南 - [常见问题](docs/guide/faq.md) — 常见问题解答 ## HAPI vs Happy | 方面 | Happy | HAPI | |------|-------|------| | **架构** | 中心化云服务器 | 去中心化(每个用户运行自己的 Hub) | | **数据** | 加密存储在服务器 | 留在你自己的机器上 | | **部署** | PostgreSQL + Redis + 应用服务器 | 单一二进制文件 | | **加密** | 应用层端到端加密 | WireGuard + TLS(中继)或 HTTPS(自托管) | | **配置** | Docker + 配置文件 | 一条命令 | **选择 HAPI**:如果你追求数据主权、自托管和极简部署。 **选择 Happy**:如果你需要托管云服务和多用户协作。 完整对比请查看 [为什么选择 HAPI?](docs/guide/why-hapi.md)。 ## 参与贡献 欢迎贡献!以下是参与方式: 1. **Fork** 本仓库 2. **创建**功能分支:`git checkout -b feat/my-feature` 3. 使用 [约定式提交](https://www.conventionalcommits.org/) **提交**你的更改: - `feat:` 新功能 - `fix:` 修复 Bug - `docs:` 文档变更 - `refactor:` 代码重构 4. **推送**到你的分支:`git push origin feat/my-feature` 5. **提交** Pull Request ### 开发环境 ```bash git clone https://github.com/tiann/hapi.git cd hapi bun install # 启动开发服务器(Hub + Web) bun run dev # 运行测试 bun run test # 类型检查 bun run typecheck ``` ### 项目结构 ``` hapi/ ├── cli/ # AI 代理的 CLI 包装器 ├── hub/ # 中央 Hub 服务器(HTTP API + Socket.IO + SQLite) ├── web/ # 基于 React 的 PWA 前端 ├── shared/ # 共享类型和协议 ├── website/ # 项目网站 └── docs/ # VitePress 文档 ``` ## 开源协议 [AGPL-3.0](LICENSE) ## 致谢 HAPI 的名字来源于"哈皮",是 [Happy](https://github.com/slopus/happy) 的中文音译。感谢原项目的杰出贡献。