Joyful#

A fork of Happy Coder — a mobile and web client for Claude Code. Use Claude Code or Codex from your phone, tablet, or browser with end-to-end encryption, push notifications, and instant device switching.

GitHub

Joyful


Joyful keeps everything that makes Happy work — E2E encryption, push notifications when Claude needs permission, instant handoff between devices — and layers on a focused set of improvements for running Claude Code at scale, from worktrees to quota monitoring to OpenSpec tooling.

Key Changes#

🌿 Worktrees — isolated branch sessions with AI-assisted merge
FeatureWhat it does
Git worktree sessionsNew session type that creates an isolated git worktree branch; agent works there while other sessions continue on main
Worktree session groupingWorktree sessions appear under their base repo group in the session list, not as separate isolated groups
Branch name as titleWorktree sessions show the branch name (e.g. bold-aurora) as subtitle; slightly smaller title keeps them visually distinct
Merge button in headerGit-merge icon in the chat header navigates directly to the merge screen for any worktree session
Agent-delegated merge“Merge with AI” dispatches a single prompt; agent handles spec checks, conflict resolution, conventional commit message, and squash merge
Return-to-merge bannerBlue pill in session view when navigated from the merge screen; tap to return once the agent signals completion
🤖 Claude Code — OpenSpec toolbar, model controls, and session defaults
FeatureWhat it does
OpenSpec inline toolbarMode buttons (Explore, Patch, Apply, FF) shown inline on wide layouts (≥640px) with a vertical divider before model controls; submenu preserved on narrow screens
Emoji from contentChat title emoji reflects actual subject matter, not the OpenSpec command prefix used to trigger it
OpenSpec submenuExplore, Patch, Open Panel in one toolbar menu; active mode shown as icon + label
Yolo permission defaultNew sessions default to bypassPermissions/yolo; green/red indicator
Inline model & effort toggles[Snt|Ops] and [Std|1M] pickers replace gear icon; effort shown as chevrons
Bedrock model supportbedrock-claude-* variants in model pickers for Bedrock gateways
Model & effort from settingsCLI reads ~/.claude/settings.json and surfaces defaults to the app
Slash command autocompleteTyping / surfaces recently-seen commands from past sessions
OpenSpec panelIn-app panel with active changes, task progress bars, and toolbar badge
Explore & Patch modeOne-shot prefix toggles for /opsx:explore and /opsx:patch
📋 Sessions — resume, browse, archive, and persist state
FeatureWhat it does
Model & effort persistenceSelected model/effort saved per session, survives restarts
Interactive filesystem browserNavigate remote directory tree in path picker, with hidden-dir toggle
Native session browserDiscover and resume existing Claude sessions from ~/.claude/projects/
Split FAB for session resumeDedicated Resume entry alongside New Session; pick machine, dir, and session
Archived sessionsInactive sessions in a collapsible “Archived (N)” header, collapsed by default
🎨 UI & UX — session list, density, avatars, and layout
FeatureWhat it does
Project group session listSessions grouped by project with collapsible headers; state persisted per device
Stable session orderActive sessions within a project group stay in creation-date order rather than jumping on each activity update
Stable group orderingGroup order persisted; reorder modal (≡) to move groups up/down
+ button per groupTap + on a group header to open new-session screen pre-filled for that project
Archive in chat headerArchive icon in the chat header to archive active session in place
Compact session rowsNo per-row avatar/path; reduced heights; single avatar in group header
Emoji session titlesClaude prefixes auto-generated session titles with a relevant emoji
Status dot on rightStatus indicator moved to row right; text label removed
Git history & branchesTappable branch pill shows all branches (ahead/behind) and last 30 commits
Plasma avatar styleGaussian-blurred triadic blobs with screen blending; CSS fallback for web
Condensed density & dark modeTighter rows/items; dark surfaces aligned to iOS palette
Mobile layout fixesCode block wrapping, keyboard-anchored overlays, PWA safe-area
Machines panel collapsedCollapse state persisted; defaults to collapsed
📊 Monitoring — quota, memory, and polling
FeatureWhat it does
Claude quota widget5h/7d rolling-window utilization bars, reset countdown, manual refresh
Machine memory statsDaemon reports total/free RAM + RSS; shown in collapsible sidebar panel
Quota polling fixesSkips API-key-only machines; fixed re-entrant loop causing daemon OOM
🎙️ Voice — self-hosted ElevenLabs
FeatureWhat it does
Self-hosted ElevenLabsAgent ID configurable in Settings → Voice; clear errors when unconfigured
⚡ Performance & Infrastructure — reconnect, streaming, and daemon co-existence
FeatureWhat it does
Reconnect batchingSingle batch request on reconnect instead of one per session (~92% fewer)
Streaming seq fixBatched seq allocation eliminates gaps that caused slow REST fallback
Socket.IO polling fallback['polling', 'websocket'] fixes connections behind restrictive networks
Happy daemon co-existenceRuns independently alongside existing happy/happier daemons
Full renameAll identifiers, env vars, home dirs updated from happy/handy to joyful