Adds a dedicated hook server infrastructure to receive Claude SessionStart notifications. This allows the CLI to track session ID changes (new sessions, resume, compact, fork, etc.) without relying on file watchers. Changes: - Add SessionFound callback system to AgentSessionBase for session tracking - Create hook server that listens for POST requests from Claude's hooks - Generate temporary settings files with hook command configuration - Implement session hook forwarder CLI command to relay hook data - Integrate hook server into runClaude with proper cleanup - Pass hookSettingsPath through local and remote execution paths - Update SDK query builder to support --settings flag
hapi
HAPI means "哈皮," a Chinese transliteration of happy, great credit to the original Happy project.
Run Claude Code / Codex / Coding Agent sessions locally and control them remotely through a Web / PWA / Telegram mini App.
Quickstart (single executable)
-
Download the prebuilt
hapibinary for your platform and put it on your PATH. -
Start the server on a machine you control:
export CLI_API_TOKEN="shared-secret"
export WEBAPP_URL="https://your-domain.example" # required for Telegram Mini App
export TELEGRAM_BOT_TOKEN="..."
export ALLOWED_CHAT_IDS="12345678"
hapi server
If you only want the web app + CLI, you can skip TELEGRAM_BOT_TOKEN and ALLOWED_CHAT_IDS.
To enable Telegram later, set TELEGRAM_BOT_TOKEN and WEBAPP_URL, start the server, send /start
to the bot to get your chat ID, set ALLOWED_CHAT_IDS, and restart the server.
- If the server has no public IP, expose it over HTTPS:
- Cloudflare Tunnel docs: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/
- Tailscale docs: https://tailscale.com/kb/
- Telegram Mini Apps require HTTPS.
- Run the CLI on the machine where you want sessions:
# If the server is not on localhost:3006
export HAPI_BOT_URL="https://your-domain.example"
hapi
The CLI will prompt for CLI_API_TOKEN and save it locally.
- Open the UI:
- In Telegram, run
/appin the bot chat. - In a browser, open
WEBAPP_URLand log in withCLI_API_TOKEN.
CLI config file
You can store the token in ~/.hapi/settings.json instead of an env var.
Environment variables take priority over the file.
Example:
{
"cliApiToken": "shared-secret"
}
Requirements
- Claude CLI installed and logged in (
claudeon PATH). - A Telegram bot token from @BotFather (for Mini App access).
- Bun if building from source.
Build from source
bun install
bun run build
Build a single binary with embedded web assets:
bun run build:single-exe
Build CLI-only binaries:
bun run build:cli:exe
bun run build:cli:exe:all
Docs
cli/README.md- CLI usage and configserver/README.md- server setup and architectureweb/README.md- web app behavior and dev workflow