# Happy Code on the go — control AI coding agents from your phone, browser, or terminal. Free. Open source. Code anywhere. ## Installation ```bash npm install -g happy ``` > Migrated from the `happy-coder` package. Thanks to [@franciscop](https://github.com/franciscop) for donating the `happy` package name! ## Usage ### Claude Code (default) ```bash happy # or happy claude ``` This will: 1. Start a Claude Code session 2. Display a QR code to connect from your mobile device or browser 3. Allow real-time session control — all communication is end-to-end encrypted 4. Start new sessions directly from your phone or web while your computer is online ### More agents ``` happy codex happy agy # Antigravity CLI (Gemini's successor) happy gemini # deprecated — use `happy agy` happy openclaw # or any ACP-compatible CLI happy acp opencode happy acp -- custom-agent --flag ``` ## Daemon The daemon is a background service that stays running on your machine. It lets you spawn and manage coding sessions remotely — from your phone or the web app — without needing an open terminal. ```bash happy daemon start happy daemon stop happy daemon status happy daemon list ``` The daemon starts automatically when you run `happy`, so you usually don't need to manage it manually. ### Keeping the daemon running across reboots If you want the daemon to come back automatically after a reboot — without opening a `happy` session first — start it from your shell profile so it inherits your normal user session context (PATH, keychain access, OAuth credentials): ```bash # ~/.zshrc or ~/.bashrc if [[ -o interactive ]] && [[ -z "$HAPPY_DAEMON_CHECKED" ]]; then export HAPPY_DAEMON_CHECKED=1 () { local state=$HOME/.happy/daemon.state.json local pid=$(grep -oE '"pid"[[:space:]]*:[[:space:]]*[0-9]+' "$state" 2>/dev/null | grep -oE '[0-9]+') if [[ -z "$pid" ]] || ! kill -0 "$pid" 2>/dev/null; then happy daemon start >/dev/null 2>&1 fi } &! fi ``` The first interactive shell after a reboot triggers the start; subsequent shells short-circuit because the daemon is already running. > **macOS users:** prefer this shell-init approach over a `launchd` LaunchAgent. A LaunchAgent runs in an agent domain that is **detached from your GUI/Aqua login session**, which means the bundled `claude-agent-sdk` cannot reach the macOS keychain and silently fails authentication ("Failed to authenticate. API Error: 401 terminated", `duration_api_ms: 0`). If you must use launchd, your wrapper has to read the OAuth access token from `~/.claude/.credentials.json` and export it as `CLAUDE_CODE_OAUTH_TOKEN` before exec'ing the daemon — and you'll need to handle token rotation yourself. ## Authentication ```bash happy auth login happy auth logout ``` Happy uses cryptographic key pairs for authentication — your private key stays on your machine. All session data is end-to-end encrypted before leaving your device. To connect third-party agent APIs: ```bash happy connect gemini happy connect claude happy connect codex happy connect status ``` ## Commands | Command | Description | |---------|-------------| | `happy` | Start Claude Code session (default) | | `happy codex` | Start Codex mode | | `happy agy` | Start agy (Antigravity CLI) session | | `happy gemini` | Start Gemini CLI session (**deprecated** — use `happy agy`) | | `happy openclaw` | Start OpenClaw session | | `happy acp` | Start any ACP-compatible agent | | `happy resume ` | Resume a previous session | | `happy notify` | Send push notification to your devices | | `happy doctor` | Diagnostics & troubleshooting | --- ## Advanced ### Environment Variables | Variable | Description | |----------|-------------| | `HAPPY_SERVER_URL` | Custom server URL (default: `https://api.cluster-fluster.com`) | | `HAPPY_WEBAPP_URL` | Custom web app URL (default: `https://app.happy.engineering`) | | `HAPPY_HOME_DIR` | Custom home directory for Happy data (default: `~/.happy`) | | `HAPPY_DISABLE_CAFFEINATE` | Disable macOS sleep prevention | | `HAPPY_EXPERIMENTAL` | Enable experimental features | ### Sandbox (experimental) Happy can run agents inside an OS-level sandbox to restrict file system and network access. ```bash happy sandbox configure happy sandbox status happy sandbox disable ``` ### Building from source ```bash git clone https://github.com/slopus/happy cd happy-cli yarn install yarn workspace happy cli --help ``` ## Requirements - Node.js >= 20.0.0 - For Claude: `claude` CLI installed & logged in - For Codex: `codex` CLI installed & logged in - For agy: install the Antigravity CLI (`agy`) and log in - For Gemini (**deprecated** — use agy): `npm install -g @google/gemini-cli` + `happy connect gemini` ## License MIT