Skip to content

Releases: JasonYeYuhe/cli-pulse

v1.18.1

11 May 13:11

Choose a tag to compare

What's new

  • Fixes a transcript rendering issue where bracketed text — such as array indices (arr[0]), markdown reference links ([42]), and numbered footnotes ([1]) — was missing from rendered conversations on iOS and macOS.
  • Stability improvements for managed Codex sessions (defensive guards against schema drift in codex exec --json events).
  • Internal: build pipeline + version-tooling hardening (see PROJECT_FIX archive on the private branch for details).

Downloads

  • macOS (Developer ID): CLI-Pulse-Bar-v1.18.1.dmg (notarized + stapled).
  • Mac App Store + iOS App Store: rolling out via Apple review (build 57 of v1.18.1).
  • Android: unchanged from v1.18.0 (this hotfix did not touch Android code).
  • Helper CLI .pkg: see https://github.com/JasonYeYuhe/cli-pulse-helper-releases (v1.17.2).

CLI Pulse v1.18.0 — Codex exec rewrite + Claude peak indicator

09 May 16:38

Choose a tag to compare

CLI Pulse v1.18.0 — Mac

What's new

Codex managed sessions rewritten on codex exec --json

v1.16.x ran Codex sessions through a persistent ratatui-based PTY. The TUI broke down at small terminal sizes (Chinese characters wrapped one-glyph-per-line on iPhone) and at sensible sizes (full TUI chrome buried the actual chat). Fixed by switching to subprocess-per-turn codex exec --json, which emits clean JSONL events. Multi-turn context is preserved via codex exec resume <thread_id>. Replies arrive whole on item.completed (no token streaming yet) — the iPhone shows • Working… immediately and the full reply 5–15 s later. CJK now renders naturally on a single line.

Anthropic peak / off-peak indicator

The Claude provider card now shows the current peak window (weekdays 08:00–14:00 US Eastern) and a countdown to the next change. Ports steipete/CodexBar's open-source ClaudePeakHours (MIT) into our shared CLIPulseCore. iOS gets the indicator in the next App Store cycle.

Codex transcript formatter recognises new markers

Helper v1.17 emits //// plain-text markers for user / agent / info / error / warning lines. The Mac formatter now matches all five explicitly, so short replies like • OK, • 是 (Chinese single character), • 2 no longer get silently dropped by the prose-shape fallback. Empty-body markers drop cleanly.

Helper-side ANSI sanitizer (v1.16.2 backstop, still in v1.18)

Cursor-move and OSC-title escape sequences are stripped server-side before upload. Used to fix the [0 q [0 q DECSCUSR garbage that leaked through to the iPhone transcript view.

Distribution

  • Mac (Developer ID notarized): CLI-Pulse-Bar-v1.18.0.dmg — drag into Applications.
  • Mac App Store: same version, queued for next ASC submission cycle (separate signing pipeline).
  • iOS / Android: separate release tags.
  • Companion CLI Helper: ships separately as a notarised .pkg from cli-pulse-helper-releases. Latest is v1.17.1.

Verified

  • 1081/1081 CLIPulseCore tests pass.
  • spctl: accepted, source=Notarized Developer ID.
  • stapler: validate action worked!

🤖 Generated with Claude Code

CLI Pulse v1.12.0 — runtime language switching + Sessions tab + PDF export

01 May 06:29

Choose a tag to compare

CLI Pulse v1.12.0 — runtime language switching + Sessions tab + PDF export

Localization

  • In-app language switcher on macOS — globe icon in the menu-bar footer, immediately left of the refresh button. Tap to switch between English / 简体中文 / 日本語 / System Default. Changes take effect instantly without a restart and cover every surface: tabs, Settings, Onboarding, Remote Approvals, Subscription, Yield Score, exported PDFs, even the rarely-touched Folder Access and Provider Config screens.
  • Apple .strings parity: 601/601/601 keys across en/ja/zh-Hans, zero diff.
  • Android strings.xml parity: 191/191/191 across en/ja/zh-rCN.

Sessions tab

  • Sessions tab now reliably shows fresh Codex / Claude activity in real time, even when you're signed in and paired across multiple devices. Stale "ended" rows from prior helper uploads no longer linger in the list — only what's actually been written to JSONL in the last 5 minutes shows up.
  • Cloud-route session merge: paired Mac users now see locally-detected JSONL sessions merged with cross-device cloud sessions in a single coherent list. Earlier draft missed fresh JSONL whose token cache hadn't caught up; now bypasses that race.
  • Codex sessions display the actual project name (extracted from the rollout JSONL's cwd) instead of a generic "Codex" placeholder.
  • Session row relative timestamp now anchors to last_active_at, so synthesized rows don't immediately render as "5m ago" because of an internally-backdated started_at.
  • Filter strips legacy helper-process artifacts (/Applications/Claude.app/..., node --no-warnings ...) so they never resurface in cloud cache.

PDF export

  • macOS Export → Export PDF Report now opens an NSSavePanel defaulting to ~/Downloads/cli-pulse-report-YYYY-MM-DD.pdf. Cancel = no file. Save = file lands where you can find it; Finder reveals it automatically. No more silent temp-directory dumps.
  • PDF content is fully localized in the active language, including all section headers, table headers, summary keys, and the footer (now uses Bundle.main short version, no longer hard-coded v1.9).

Provider quotas

  • Claude (Designs / Daily Routines): new quota tiers display correctly with their own remaining counts; Sonnet-only tier no longer collides with weekly tier in the breakdown.

Subscription tier resolution (backend)

  • Rank-safe get_user_tier(): a Pro promo grant can lift a free user up but never downgrades an existing Team admin grant. Active paid subscription always wins. Backend-only change — no client UI difference.
  • New promo_redemptions table (service-role only) for future XHS / Twitter campaign grants. No client redemption UI; tier delta picks up on next refresh.

Stability

  • iter21 hotfix included: CostForecastEngine no longer crashes on the last day of a month.
  • iter21 helper sync: gradle exit code is now checked, so a stale APK can never ship if the macOS helper build silently failed.
  • Sentry: auto-uploads dSYMs + Proguard mappings on every build. DSN keys rotated.

Tests

  • 628/628 Swift tests pass (added 14 new across LocaleOverrideStoreTests, SessionFreshnessFilterTests, CodexCandidateDetectionTests, PDFDestinationTests).
  • Helper Python: 33/33.
  • Android: testDebugUnitTest green.

Install

  • macOS: download CLI-Pulse-Bar-v1.12.0.dmg below; signed + notarized + stapled. App Store version (Mac App Store) is queued for review separately.
  • Android: download CLI-Pulse-Android-v1.12.0.apk below for sideload. Play Store closed-testing release is uploaded separately.
  • iOS: queued for App Store review.

CLI Pulse v1.11.0 — major sign-in & onboarding polish

29 Apr 15:07

Choose a tag to compare

CLI Pulse v1.11.0 — major sign-in, onboarding & reliability polish

Sign-in & accounts

  • Google / GitHub sign-in fix: resolved "OAuth state parameter is invalid" error that blocked sign-in on real devices. Root cause was a client-generated state query param colliding with Supabase's PKCE flow's server-side state management — code_verifier alone is the CSRF anchor.
  • Login screen modes: clearer Email Code vs Password modes — buttons no longer flip labels based on whether the password field is empty.
  • Delete Account: now reliably surfaces server errors (token expired, network failures) with a clear alert, instead of silently signing you out while leaving your account intact server-side. macOS uses an inline confirmation flow that doesn't fight the menu-bar popover.
  • Sign-out flow: now properly clears Remote Approvals and push-token state, so account-switching on the same device works cleanly without an app relaunch.
  • APNs push registration: gated on authenticated state — no more "Failed to register for push notifications: Session expired" message on the login screen.

Onboarding (Mac)

  • Top-right close (✕) button on every onboarding step + "Skip for now" on the Sign-In step. No more being trapped on the Welcome screen.
  • After delete-account or sign-out: lands on Settings (Sign-In form) instead of an empty Overview, with a bottom Quit button on every signed-out screen.
  • Welcome screen offers a clear pick: "Sign in to sync" vs "Use local mode".

Local mode (Mac, new)

  • New "Use local mode" option for users who want collector data without an account. Tracks AI tool usage on this Mac only; nothing is uploaded.
  • Local Mode guide card on Overview explains what's happening and how to switch to cloud sync later.

Cross-device sync (iPhone)

  • Fixed: iPhone Dashboard could show "Waiting for data" forever even when the Mac was actively collecting. Same-account users now see their Mac data automatically — no manual device pairing needed. Dropped the obsolete paired gate that was tied to the helper-daemon model.

Provider banner (free plan)

  • Fresh free-plan users no longer see "Disabled 23 providers" warnings on first launch. The plan-limit banner now only fires when actively-used providers genuinely exceed the limit (gated on canonical activeProviderCount, not raw enabled-toggle count).

Remote Approvals hardening

  • Concurrent decide on two devices no longer surfaces a raw database error — clean "Request already decided" message instead (ON CONFLICT (request_id) DO NOTHING idempotency, applied as migrate_v0.34).
  • Closed several push-token registration races during sign-in / sign-out.

Under the hood

  • 535+ swift tests across iOS / macOS / shared core; all passing.
  • Backend RPCs unchanged in signature; helper / edge function unchanged.
  • 14-commit hotfix series (iter8 → iter20) folded into this release.

Thanks for the bug reports!

CLI Pulse Android v1.18.1

12 May 00:27

Choose a tag to compare

Android release v1.18.1 — synced with iOS version.

CLI Pulse Android v1.18.0

09 May 16:38

Choose a tag to compare

CLI Pulse Android v1.18.0

This release brings Android into version parity with the Mac release. The shared backend / sync paths follow the same contract as macOS / iOS.

Distribution

  • Play Console (AAB): app-release.aab — uploaded via the Google Play console (separate flow).
  • Direct install (APK): app-release.apk — sideload via adb install.

Notes

  • versionCode 26, versionName 1.18.0.
  • No Android-specific UX changes vs. v1.15.0; this version exists primarily to keep the version triplet (Mac / iOS / Android) consistent for cross-device users.

🤖 Generated with Claude Code

CLI Pulse Android v1.15.0

09 May 00:28

Choose a tag to compare

Android release v1.15.0 — synced with iOS version.

CLI Pulse Android v1.13.0

08 May 00:27

Choose a tag to compare

Android release v1.13.0 — synced with iOS version.

CLI Pulse Android v1.11.1

30 Apr 00:26

Choose a tag to compare

Android release v1.11.1 — synced with iOS version.

CLI Pulse Android v1.11.0

29 Apr 15:07

Choose a tag to compare

Android v1.11.0 — synced with iOS / macOS v1.11.0 release. See v1.11.0 release for the full changelog.