Skip to content

How it Works

HAPI consists of three interconnected components that work together to provide remote AI agent control.

Architecture Overview

┌────────────────────────────────────────────────────────────────────────────┐
│                     Your Machine (Local or Hub Host)                       │
│                                                                            │
│   ┌──────────────┐         ┌──────────────┐         ┌──────────────┐       │
│   │              │         │              │         │              │       │
│   │   HAPI CLI   │◄───────►│  HAPI Hub    │◄───────►│   Web App    │       │
│   │              │ Socket  │              │   SSE   │  (embedded)  │       │
│   │  + AI Agent  │   .IO   │  + SQLite    │         │              │       │
│   │              │         │  + REST API  │         │              │       │
│   └──────────────┘         └──────┬───────┘         └──────────────┘       │
│                                   │                                        │
│                                   │ localhost:3006                         │
└───────────────────────────────────┼────────────────────────────────────────┘

                          ┌─────────▼─────────┐
                          │  Tunnel (Optional)│
                          │  Cloudflare/ngrok │
                          └─────────┬─────────┘

┌───────────────────────────────────┼────────────────────────────────────────┐
│                           Public Internet                                  │
│                                   │                                        │
│         ┌─────────────────────────┼─────────────────────────┐              │
│         │                         ▼                         │              │
│         │    ┌──────────────┐           ┌──────────────┐    │              │
│         │    │              │           │              │    │              │
│         │    │  Telegram    │           │    PWA /     │    │              │
│         │    │  Mini App    │           │   Browser    │    │              │
│         │    │              │           │              │    │              │
│         │    └──────────────┘           └──────────────┘    │              │
│         │                                                   │              │
│         └───────────────────────────────────────────────────┘              │
│                            Your Phone                                      │
└────────────────────────────────────────────────────────────────────────────┘

Note: The hub can run on your local desktop or a remote host (VPS, cloud, etc.). If deployed on a host with a public IP, tunneling is not required.

Components

HAPI CLI

The CLI is a wrapper around AI coding agents (Claude Code, Codex, Gemini, OpenCode). It:

  • Starts and manages coding sessions
  • Registers sessions with the HAPI hub
  • Relays messages and permission requests
  • Provides MCP (Model Context Protocol) tools

Key Commands:

bash
hapi              # Start Claude Code session
hapi codex        # Start OpenAI Codex session
hapi gemini       # Start Google Gemini session
hapi opencode     # Start OpenCode session
hapi runner start # Run background service for remote session spawning

HAPI Hub

The hub is the central service that connects everything:

  • HTTP API - RESTful endpoints for sessions, messages, permissions
  • Socket.IO - Real-time bidirectional communication with CLI
  • SSE (Server-Sent Events) - Live updates pushed to web clients
  • SQLite Database - Persistent storage for sessions and messages
  • Telegram Bot - Notifications and Mini App integration

Web App

A React-based PWA that provides the mobile interface:

  • Session List - View all active and past sessions
  • Chat Interface - Send messages and view agent responses
  • Permission Management - Approve or deny tool access
  • File Browser - Browse project files and view git diffs
  • Remote Spawn - Start new sessions on any connected machine

Data Flow

Starting a Session

1. User runs `hapi` in terminal


2. CLI starts Claude Code (or other agent)


3. CLI connects to hub via Socket.IO


4. Hub creates session in database


5. Web clients receive SSE update


6. Session appears in mobile app

Permission Request Flow

1. AI agent requests tool permission (e.g., file edit)


2. CLI sends permission request to hub


3. Hub stores request and notifies via SSE + Telegram


4. User receives notification on phone


5. User approves/denies in web app or Telegram


6. Hub relays decision to CLI via Socket.IO


7. CLI informs AI agent, execution continues

Message Flow

User (Phone)                 Hub                     CLI
     │                         │                       │
     │──── Send message ──────►│                       │
     │                         │─── Socket.IO emit ───►│
     │                         │                       │
     │                         │                       ├── AI processes
     │                         │                       │
     │                         │◄── Stream response ───│
     │◄─────── SSE ────────────│                       │
     │                         │                       │

Communication Protocols

CLI ↔ Hub: Socket.IO

Real-time bidirectional communication for:

  • Session registration and heartbeat
  • Message relay (user input → agent)
  • Permission requests and responses
  • Metadata and state updates
  • RPC method invocation

Hub ↔ Web: REST + SSE

  • REST API for actions (send message, approve permission)
  • SSE stream for real-time updates (new messages, status changes)

External Access: Tunnel

For remote access outside your local network:

  • Cloudflare Tunnel (recommended) - Free, secure, reliable
  • Tailscale - Mesh VPN for private networks
  • ngrok - Quick setup for testing

Seamless Handoff

HAPI's defining feature is the ability to seamlessly hand off control between local terminal and remote devices without losing session state.

Local Mode

When working in local mode, you have the full terminal experience — it is native Claude Code, Codex, or OpenCode:

  • Direct keyboard input with instant response
  • Full terminal UI with syntax highlighting
  • Best for focused, uninterrupted coding sessions
  • All AI processing happens locally on your machine

Remote Mode

Switch to remote mode when you need to step away:

  • Control via Web/PWA/Telegram from any device
  • Approve permissions on the go
  • Monitor progress while away from your desk
  • Session continues running on your local machine

How Switching Works

┌─────────────────┐                    ┌─────────────────┐
│   Local Mode    │◄──────────────────►│   Remote Mode   │
│   (Terminal)    │                    │   (Phone/Web)   │
└─────────────────┘                    └─────────────────┘
        │                                      │
        │  ┌────────────────────────────┐      │
        └─►│  Same Session, Same State  │◄─────┘
           └────────────────────────────┘

Local → Remote:

  • Receive a message from phone/web
  • Session automatically switches to remote mode
  • Terminal shows "Remote mode - waiting for input"

Remote → Local:

  • Press double-space in terminal
  • Instantly regain local control
  • Continue typing as if you never left

Use Cases

  1. Remote Control While Away - Start a session at your desk, continue from your phone during commute or coffee break

  2. Permission Approval - AI requests file access, you get notified on phone, approve with one tap, session continues

  3. Multi-Device Collaboration - View session progress on your phone while your desktop does the heavy lifting

Released under the LGPL-3.0 License.