@namsangboy/happy-cli
v1.1.8-aplus.25
Published
A+ Dev Studio fork of slopus/happy. Mobile and Web client for Claude Code and Codex.
Readme
Happy
Code on the go — control AI coding agents from your phone, browser, or terminal.
Free. Open source. Code anywhere.
Installation
npm install -g happyMigrated from the
happy-coderpackage. Thanks to @franciscop for donating thehappypackage name!
Usage
Claude Code (default)
happy
# or
happy claudeThis will:
- Start a Claude Code session
- Display a QR code to connect from your mobile device or browser
- Allow real-time session control — all communication is end-to-end encrypted
- Start new sessions directly from your phone or web while your computer is online
More agents
happy codex
happy gemini
happy openclaw
# or any ACP-compatible CLI
happy acp opencode
happy acp -- custom-agent --flagDaemon
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.
happy daemon start
happy daemon stop
happy daemon status
happy daemon listThe 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):
# ~/.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
} &!
fiThe 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
launchdLaunchAgent. A LaunchAgent runs in an agent domain that is detached from your GUI/Aqua login session, which means the bundledclaude-agent-sdkcannot 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.jsonand export it asCLAUDE_CODE_OAUTH_TOKENbefore exec'ing the daemon — and you'll need to handle token rotation yourself.
Authentication
happy auth login
happy auth logoutHappy 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:
happy connect gemini
happy connect claude
happy connect codex
happy connect statusCommands
| Command | Description |
|---------|-------------|
| happy | Start Claude Code session (default) |
| happy codex | Start Codex mode |
| happy gemini | Start Gemini CLI session |
| happy openclaw | Start OpenClaw session |
| happy acp | Start any ACP-compatible agent |
| happy resume <id> | 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.
happy sandbox configure
happy sandbox status
happy sandbox disableBuilding from source
git clone https://github.com/slopus/happy
cd happy-cli
yarn install
yarn workspace happy cli --helpRequirements
- Node.js >= 20.0.0
- For Claude:
claudeCLI installed & logged in - For Codex:
codexCLI installed & logged in - For Gemini:
npm install -g @google/gemini-cli+happy connect gemini
Troubleshooting
Remote terminal — posix_spawnp failed. on macOS
Symptom (web-ui "터미널" tab 또는 daemon log):
[REMOTE-TERMINAL] terminal-open-fwd spawn failed: posix_spawnp failed.Cause: npm extracts node-pty/prebuilds/darwin-{arm64,x64}/spawn-helper
without the executable bit (0o644), so macOS posix_spawnp refuses
to execve() it. Linux uses forkpty + execvp and is unaffected.
Auto-fix: shipped in @namsangboy/[email protected]+ —
postinstall flips the bit on macOS. Just upgrade:
npm i -g @namsangboy/happy-cli@latest
happy daemon stop && happy daemon startManual fix (older versions):
chmod +x $(npm root -g)/@namsangboy/happy-cli/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper
chmod +x $(npm root -g)/@namsangboy/happy-cli/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper
happy daemon stop && happy daemon startOr rebuild from source (also works, but requires Xcode CLT):
xcode-select --install # if not already
npm i -g @namsangboy/happy-cli@latest --build-from-sourceOther
happy doctorruns platform diagnostics and is the first thing to try before opening an issue.- daemon logs live in
~/.happy/logs/*-daemon.log. Grep for[REMOTE-TERMINAL]to inspect terminal-relay traffic without leaking payload bodies (only metadata is logged —bytesIn,bytesOut,exitCode,signal,durationMs).
License
MIT
