{"adoption": {"forks": 137, "observed_at": "2026-08-28T04:04:57.773854+00:00", "stars": 1521}, "canonical_url": "https://ross.abutalabs.com/products/happier", "card": {"archived": false, "artifact_type": "application", "description": "Web, Desktop & Mobile client for Codex, Claude Code, OpenCode, Kimi, Augment Code, Qwen, fully end-to-end encrypted", "domain": ["developer-tools", "large-language-models", "privacy", "cross-platform"], "enriched": true, "function": ["chat-interface", "cli", "developer-tools", "agent-framework", "security"], "health_score": 100, "homepage": "https://happier.dev", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "experimental", "member_repos": ["happier-dev/happier"], "name": "happier-dev/happier", "platform": ["cross-platform", "cli", "windows"], "pushed_at": "2026-08-26T18:57:31+00:00", "repo": "happier-dev/happier", "stars": 1521, "tags": ["ai-coding-agents", "claude-code", "codex", "opencode", "remote-sessions", "end-to-end-encryption", "session-resume", "self-hostable", "companion-app", "ai-agents", "mobile", "desktop", "web-server", "ios", "android", "macos", "linux"], "topics": ["ai-agents", "claude", "claude-code", "codex", "gemini", "kimi", "opencode", "qwen", "vibe-coding", "vibecoding"], "urls": [], "use_cases": ["continue claude code sessions from my phone", "control codex agent remotely from mobile", "resume ai coding sessions across devices", "pair program with ai agents from a web ui", "keep ai coding agent running while away from desk", "share ai coding sessions with teammates", "e2e encrypted remote access to coding agents", "queue and edit prompts for coding agents"], "what_it_is": "Happier is an open-source, end-to-end encrypted companion client for AI coding agents like Claude Code, Codex, Gemini, and OpenCode. It lets you run agent sessions locally on your computer and continue or control them remotely from mobile, web, or desktop apps without losing context.", "when_to_avoid": ["you only use AI agents directly in an IDE and never need remote access", "you need a fully stable, production-ready product (it is pre-release)", "you want a fully managed cloud service rather than running a CLI locally"], "when_to_choose": ["you use terminal AI coding agents and want to step away from your computer mid-task", "you need end-to-end encryption and self-hostability for agent sessions", "you want to switch between terminal, web, and mobile with full session context", "you want collaborative or shareable AI coding sessions"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/happier", "repo": "happier-dev/happier", "role": "main", "score": 75}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.370886+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9159102e728f3ec1a87ce4865bfcc379645d8c7bb5e95dfc7e8199736678c6c8", "fetched_at": "2026-08-28T04:04:57.773854+00:00", "kind": "readme", "missing": false, "url": "https://github.com/happier-dev/happier"}, {"content_hash": "786f6d58dcf2246c6f091a7683e049599dc06139755060736f4156c411db9fbc", "fetched_at": "2026-08-29T11:35:13.054637+00:00", "kind": "homepage", "missing": false, "url": "https://happier.dev"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.370886+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9159102e728f3ec1a87ce4865bfcc379645d8c7bb5e95dfc7e8199736678c6c8", "fetched_at": "2026-08-28T04:04:57.773854+00:00", "kind": "readme", "missing": false, "url": "https://github.com/happier-dev/happier"}, {"content_hash": "786f6d58dcf2246c6f091a7683e049599dc06139755060736f4156c411db9fbc", "fetched_at": "2026-08-29T11:35:13.054637+00:00", "kind": "homepage", "missing": false, "url": "https://happier.dev"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.370886+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9159102e728f3ec1a87ce4865bfcc379645d8c7bb5e95dfc7e8199736678c6c8", "fetched_at": "2026-08-28T04:04:57.773854+00:00", "kind": "readme", "missing": false, "url": "https://github.com/happier-dev/happier"}, {"content_hash": "786f6d58dcf2246c6f091a7683e049599dc06139755060736f4156c411db9fbc", "fetched_at": "2026-08-29T11:35:13.054637+00:00", "kind": "homepage", "missing": false, "url": "https://happier.dev"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.370886+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9159102e728f3ec1a87ce4865bfcc379645d8c7bb5e95dfc7e8199736678c6c8", "fetched_at": "2026-08-28T04:04:57.773854+00:00", "kind": "readme", "missing": false, "url": "https://github.com/happier-dev/happier"}, {"content_hash": "786f6d58dcf2246c6f091a7683e049599dc06139755060736f4156c411db9fbc", "fetched_at": "2026-08-29T11:35:13.054637+00:00", "kind": "homepage", "missing": false, "url": "https://happier.dev"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.370886+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9159102e728f3ec1a87ce4865bfcc379645d8c7bb5e95dfc7e8199736678c6c8", "fetched_at": "2026-08-28T04:04:57.773854+00:00", "kind": "readme", "missing": false, "url": "https://github.com/happier-dev/happier"}, {"content_hash": "786f6d58dcf2246c6f091a7683e049599dc06139755060736f4156c411db9fbc", "fetched_at": "2026-08-29T11:35:13.054637+00:00", "kind": "homepage", "missing": false, "url": "https://happier.dev"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.370886+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9159102e728f3ec1a87ce4865bfcc379645d8c7bb5e95dfc7e8199736678c6c8", "fetched_at": "2026-08-28T04:04:57.773854+00:00", "kind": "readme", "missing": false, "url": "https://github.com/happier-dev/happier"}, {"content_hash": "786f6d58dcf2246c6f091a7683e049599dc06139755060736f4156c411db9fbc", "fetched_at": "2026-08-29T11:35:13.054637+00:00", "kind": "homepage", "missing": false, "url": "https://happier.dev"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:57.773854+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.370886+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9159102e728f3ec1a87ce4865bfcc379645d8c7bb5e95dfc7e8199736678c6c8", "fetched_at": "2026-08-28T04:04:57.773854+00:00", "kind": "readme", "missing": false, "url": "https://github.com/happier-dev/happier"}, {"content_hash": "786f6d58dcf2246c6f091a7683e049599dc06139755060736f4156c411db9fbc", "fetched_at": "2026-08-29T11:35:13.054637+00:00", "kind": "homepage", "missing": false, "url": "https://happier.dev"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.370886+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9159102e728f3ec1a87ce4865bfcc379645d8c7bb5e95dfc7e8199736678c6c8", "fetched_at": "2026-08-28T04:04:57.773854+00:00", "kind": "readme", "missing": false, "url": "https://github.com/happier-dev/happier"}, {"content_hash": "786f6d58dcf2246c6f091a7683e049599dc06139755060736f4156c411db9fbc", "fetched_at": "2026-08-29T11:35:13.054637+00:00", "kind": "homepage", "missing": false, "url": "https://happier.dev"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.370886+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9159102e728f3ec1a87ce4865bfcc379645d8c7bb5e95dfc7e8199736678c6c8", "fetched_at": "2026-08-28T04:04:57.773854+00:00", "kind": "readme", "missing": false, "url": "https://github.com/happier-dev/happier"}, {"content_hash": "786f6d58dcf2246c6f091a7683e049599dc06139755060736f4156c411db9fbc", "fetched_at": "2026-08-29T11:35:13.054637+00:00", "kind": "homepage", "missing": false, "url": "https://happier.dev"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:31:52.370886+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9159102e728f3ec1a87ce4865bfcc379645d8c7bb5e95dfc7e8199736678c6c8", "fetched_at": "2026-08-28T04:04:57.773854+00:00", "kind": "readme", "missing": false, "url": "https://github.com/happier-dev/happier"}, {"content_hash": "786f6d58dcf2246c6f091a7683e049599dc06139755060736f4156c411db9fbc", "fetched_at": "2026-08-29T11:35:13.054637+00:00", "kind": "homepage", "missing": false, "url": "https://happier.dev"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 18, "rhythm": 78}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 260, "days_push": 7, "days_rel": 149, "gap_med": 0, "n_releases_24m": 12}, "score": 75, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}