Amical Desktop v1.12.0
Features
- desktop: support silent startup and login launches (07aba9b)
- i18n: add Korean locale and refine translations (484b7b7)
- auth: add persistent session recovery dialog (20c3cf7)
- auth: sync pending changes and restart on logout (39696a2)
- notes: automatically adopt local notes on sign-in (1d6d645)
- desktop: schedule account stats refreshes in main (50320b3)
- desktop: unify local and account dictation stats cache (0067771)
- updates: block unsupported desktop versions (ba40163)
- notes: sync Markdown notes through the settings protocol (3fe36b4)
- sync: clear settings state and migrate IDs to CUID2 (dd03154)
- notes: migrate local note IDs to prefixed CUID2 (6094a1a)
- notes: persist desktop note bodies as Markdown (dee29f7)
- desktop: report dictation activity (5779f9a)
- desktop: add organization-scoped language assets (3989c33)
- telemetry: improve desktop error reporting (179b5c0)
- desktop: support multiple shortcut bindings (ce1e20e)
- desktop: rate-limit telemetry events and exceptions client-side (dc01ca9)
- desktop: emit dictation trace as transcription_completed_v2 (d76b832)
- desktop: validate remote config per surface and report contract breaks (cc946ae)
- desktop: trace dictation sessions into one telemetry event per session (9a06112)
- desktop: run lifecycle platform work in Effect session scopes (9e981d9)
- desktop: retire the transcription stream on starting seals (04f6d14)
- desktop: cut recording over to the lifecycle shell (482083d)
- desktop: add lifecycle backstops and startup recovery (2e4da16)
- desktop: add lifecycle runtime and grammar wiring (499622d)
- desktop: add lifecycle host delivery adapter (297ad5d)
- desktop: add lifecycle transcription resolve adapter (98069bc)
- desktop: add lifecycle recorder custody adapter (dfefa8c)
- desktop: add lifecycle storage custody and disposition stamp (0120b79)
- desktop: add recording lifecycle shell and ports (8712bef)
- desktop: add recording lifecycle contract reference core (7bfb228)
- desktop: use collection-scoped sync cursors (4ca92e7)
- desktop: sync vocabulary and snippets (5ed7e03)
- desktop: migrate service container to an Effect layer graph (AMIC-42) (8f217fc)
Bug Fixes
- desktop: hide organization vocabulary behind UI guard (968513b)
- shortcuts: accept bare Return as a macOS shortcut key (#183) (4c3ed33)
- ci: validate main pushes and repair desktop build checks (e6963af)
- i18n: complete translations and enforce locale coverage (787bd7a)
- notes: preserve title drafts across navigation (3153423)
- auth: prompt for account selection during sign-in (b82abde)
- recording: retain custody results and guard repeated finalization (0e9acc8)
- recording: preserve active capture and use monotonic duration (50ee99e)
- recording: handle early WAV stream failures (2e03247)
- recording: preserve recovery rows on file I/O failures (f3f3232)
- recording: report unexpected microphone capture loss (1b4afd8)
- recording: report readiness after capture graph setup (f8191cc)
- build: install PostHog CLI before parallel builds (cf13711)
- desktop: increase default native RPC timeout to seven seconds (4f13d7a)
- desktop: increase resolving timeout to two minutes (ae64d49)
- desktop: retain rejected activity batches (8b2d2b4)
- desktop: limit auth refresh retries to 401 (b9bc88a)
- desktop: coalesce concurrent sync restarts (d6ee4c3)
- desktop: apply snippet precedence before search (cecc88c)
- desktop: fence settings sync lifecycle restarts (33cb606)
- native: serialize recording ambiance playback (a5476ac)
- desktop: update bundled Node.js to 22.23.2 (#176) (573dd1f)
- windows: make helper timestamps culture invariant (5156d65)
- desktop: degrade VAD chunk errors to assumed speech (7127c6b)
- desktop: suppress saved-recording sub-line when nothing recorded (5a00c40)
- desktop: fast-fail degraded transcription sessions at open (aaaf4b9)
- desktop: keep custody outcomes truthful and available (f2e0866)
- desktop: order the disposition stamp behind custody settlement (2f252ed)
- desktop: gate the empty notice by duration and re-check retry after the admission await (269ea2b)
- desktop: anchor latch freshness to the session start (dad5ad1)
- desktop: route every start through the grammar and restore latch protections (d0371c2)
- desktop: clear draft-capture entries on idle (e6758c5)
- desktop: derive duration for recovered rows (c506e74)
- desktop: repair recovered WAV headers (dc10c34)
- desktop: start the draft copy-capture once per session (ac75bab)
- desktop: await enrichment before the terminal fact (17b0fcd)
- desktop: retire self-terminating transcription streams (fbfb39a)
- desktop: accept an initial contract artifact at its declared version (27b345b)
- desktop: close the residual custody gaps the re-audit found (18617ab)
- desktop: serialize every input and bound the admission gates (4009a60)
- desktop: hide provisional custody rows from user surfaces (b7f7612)
- desktop: surface every failure seal and cross stopKind to the widget (785c71f)
- desktop: conform ports to their reporting obligations (540a04c)
- desktop: accept drain frames and harden ambiance edges (adf7640)
- desktop: fence recording work by session (4a2a180)
- desktop: correct recording contract coverage (ba03a58)
- desktop: handle microphone capture start failures (271ce58)
- desktop: harden recording session boundaries (fbb37da)
- desktop: align terminal failure transition (a348d68)
- desktop: handle terminal transcription failures (308a7c1)
- desktop: fall back promptly when cloud gRPC fails (dd610a7)
- desktop: log native helper validation issues (09cdc0a)
- desktop: omit telemetry properties from flag requests (18f585b)
- desktop: refresh cloud auth after unauthorized responses (f60db6c)
- desktop: surface fatal startup failures (8574c30)
- ci: validate x64 dotnet runtime on Windows ARM (6a1660c)
- desktop: refresh settings after partial sync pull (8e9cf33)
- settings-sync: honor advertised operation limits (AMIC-49) (3fab168)
- desktop: enforce sync bounds and simplify replacements (4028be6)
- desktop: stop sync wake on window focus (186d3ff)
- desktop: keep widget visible for active content (4f33752)
Other Changes
- Capture the active microphone channel on multichannel interfaces (#184) (d0b5716)
- probe startup gate without installer dependency (6eabafc)
- assert empty widget after note deletion (2a51b6e)
- ignore dirty whisper submodule files (e4999ab)
- update bundled Node.js to 24.21.0 (5550dc9)
- upgrade workspace to TypeScript 7.0.2 (1bdbd66)
- migrate to Effect 4 rc.115 (4787ce5)
- ignore local worktrees directory (97abc90)
- upgrade Electron and packaging dependencies (45d4e1c)
- replace materialization cursor with pending flags (867b28d)
- track legacy recovery cleanup (12af614)
- clarify bounded custody settlement (b764e82)
- derive source-map release from package version (c68fcf8)
- upgrade checkout action to v7 (b26a12d)
- centralize authentication retry (b8f6c51)
- migrate auth service to effect (f393309)
- split and type settings sync (26c2208)
- remove promise sync test adapter (1bc26ba)
- run settings sync client with Effect (e7d1a5a)
- run settings sync with Effect (8bad241)
- normalize RPC dispatch handling (0cbb1c0)
- update bundled Node.js to 24.19.0 (b6116ab)
- Allow shortcuts to be unassigned (#172) (6baaec8)
- remove dead code left by the lifecycle and transcription refactors (8413f05)
- clean lifecycle review artifacts (fc88f4c)
- replace ad-hoc error classes with tagged error unions (3e279ff)
- bump posthog-node to 5.49.1 and posthog-js to 1.418.1 (aceafdb)
- run transcription streaming work as session fibers (52f3843)
- key recovery on captured audio, not audibility (c224242)
- remove orphaned dismissal control-flow code (14ca8a0)
- drop orphaned lifecycle references (bb73124)
- add ring 2 FSM conformance coverage (b10e140)
- cover missing final chunk recovery (13701b0)
- move recording state helpers (46e01af)
- remove unreachable start recovery (3b90644)
- enforce recording contract version bumps (58fc87c)
- add recording machine contract vectors (be987ec)
- simplify cloud transcription internals (5ed5979)
- clarify transcription engine contracts (c682eb0)
- extract transcription workflows (d4cba07)
- own live transcription lifecycle (22cc591)
- pin transcription provider sessions (c0655f2)
- split cloud transcription transports (87600ea)
- isolate cloud transcription sessions (d43d1eb)
- introduce isolated transcription sessions (a29cb71)
- add desktop development setup (42c8916)
- lazily mount history row actions (8f91bb6)
- bump PostHog SDKs (6befdb9)
- distinguish arm64 preview version (1823620)
- publish architecture-specific Windows feeds (a1a65d8)
- add Windows ARM64 release pipeline (19f1d32)
- replace libsql with better-sqlite3 (AMIC-52) (4a4a3de)
- simplify settings sync state lifecycle (1328a47)
- order sync outbox with durable sequence (8736e32)
- share sync schemas with zod 4 (90c18bc)
- index single settings sync mutations (d0b1188)
- remove stale settings mutex (3fbb6d7)
- honest window-closing name, scoped bridge listeners, event-bridge tests (88ff6d6)
- locator-free graph — services bundle + WM window events (d931691)
- tRPC context reads a frozen bundle, not lazy getters (9f8cce8)
- delete the ServiceManager singleton (37378a6)
- break the db/index <-> db/skills module cycle (e0d74bd)
- ServiceManager reduces to the boot handle (ef23285)
- honest nullability for transcription and native bridge (6ff2a24)
- cloud provider takes auth as a real dependency (73c5cc2)
- invert auth identity reach-backs into subscriptions (f799da7)
- RecordingManager takes real dependencies (37143fe)
- tRPC handler and WindowManager join the graph (e2d7f49)
- tRPC routers depend on services, not the locator (78f2b00)
- layers.ts is now composition + four central wrappers (67784c9)
- Settings + Telemetry own their Live layers (d8b0192)
- ShortcutManager owns its Live layer (0d10872)
- AutoUpdaterService owns its Live layer (b451ab4)
- TranscriptionService owns its Live layer (589271d)
- ModelService owns its Live layer (cbae2fc)
- RemoteConfigService owns its Live layer (ff07219)
- FeatureFlagService owns its Live layer (d21d9e7)
- PostHogClient owns its Live layer (2e9d7df)
- VADService owns its Live layer (ffdd599)
- HistoryCleanupService owns its Live layer (bb5b3d5)
- extract shared layer helpers from layers.ts (330bb5c)
New Contributors
- @alloutflo made their first contribution in #176
- @kanade2511 made their first contribution in #172
- @iibaranov-IG made their first contribution in #184
- @MaxFreedomPollard made their first contribution in #183
Full Changelog: v1.11.3...v1.12.0
Downloads
macOS
- Apple Silicon (M1/M2/M3): Download the DMG or ZIP file for arm64
- Intel: Download the DMG or ZIP file for x64
Windows
- Windows (x64): Download the .exe installer for 64-bit Windows
- Windows (ARM64): Download the ARM64 .exe installer for Windows on Arm
Installation
macOS:
- DMG: Download and open the DMG file, then drag Amical to your Applications folder
- ZIP: Download and extract the ZIP file, then drag Amical to your Applications folder
Windows:
- Download and run the .exe installer
- Follow the installation wizard
- The app will be installed to your user AppData folder and a shortcut will be created
The ZIP files are primarily for automatic updates. We recommend using the DMG files for initial installation on macOS.