week of june 18, 2026
new features
- PII removal on by default for new installs — new desktop installs now ship with on-device PII removal enabled by default. The lightweight inline redactor scrubs emails, phone numbers, SSNs, card numbers, API keys, and connection strings as text is captured — no large model download, no startup cost. Existing installs keep your current choice. See privacy filter.
- consistent pseudonym tokens for redacted PII — an opt-in redaction mode replaces
[PERSON]/[EMAIL]placeholders with stable per-install tokens like[PERSON_1a2b3c4d], so the same value always renders to the same token. Your timeline stays correlatable (“same person mentioned across these meetings”) without the raw value ever being recoverable. Toggle under settings → privacy → fields to redact. See privacy filter. - Slack: post as you, no bot installed — the Slack connection now uses a user-token OAuth flow, so messages send as you and no bot user is added to the workspace. Pick send only or send + read at connect time. Existing webhook-based connections keep working until you reconnect. See connections.
- browse and install MCP servers from the official registry — the custom MCP server card in settings → connections now has a browse registry button that searches the official MCP registry, shows remote / local / catalog badges, and one-click pre-fills the existing add / auth / test / save editor. See connections.
- browse and install Agent Skills from a curated registry — the Skills card now has a browse skills dialog backed by a curated catalog (Anthropic + OpenAI skills: pdf, xlsx, docx, pptx, transcribe, playwright, sentry, …). Picking a skill downloads it atomically into your skills folder. See connections.
- Obsidian as a memory-sync destination — alongside Claude Code (
CLAUDE.md) and Codex (AGENTS.md), screenpipe can now sync memories into an Obsidian vault as a single screenpipe-owned note with YAML frontmatter and tags, rewritten every 5 minutes so memories live inside your Obsidian graph. Enable on the Obsidian connection card. See connections. - clickable source citations in chat open a unified preview sidebar — clicking a source card under a chat answer (e.g. “Read: SKILL.md”) now opens that file in the right-hand markdown preview sidebar instead of being dead text. Code blocks across chat and the preview share one theme-aware highlighter (light + dark) with a copy button.
- token-efficient
format=outlinefor the element APIs —/elementsand/frames/:id/elementsnow accept?format=outline(aliastree), returning an indented, dedup’d view that keeps only text-bearing nodes, collapses repeats as×N, hoists frame context into a header, and flags off-screen elements inline. Roughly 75–80% fewer tokens than the default JSON when an agent pastes the response into context. Existing callers without the param get the exact same JSON. MCPsearch-elementsandget-frame-elementsuse this format by default. See API recipes. - deterministic browser snapshot +
/actendpoint — the browser snapshot now stamps every actionable element with a stable#eNref (Playwright-MCP style) and reports inline state (disabled/checked/expanded). A newPOST /connections/browsers/:id/act {ref, action, value?}endpoint runsclick/fill/clear/check/uncheck/select/hover/focusagainst that ref. Works against both the Chrome extension and the built-in browser; React/Vue controlled inputs register correctly. See API recipes. - meeting summarizer can read visual content via the cloud media model — after the transcript and OCR pass, the in-app summarize with AI flow and the background meeting-summary pipe can optionally send up to four keyframes to the cloud media model, so diagrams, charts, whiteboards, slide figures, UI demos, and screen-shared video make it into the summary. Falls back cleanly when cloud media analysis isn’t available. See meeting intelligence.
- remote in-app announcements — screenpipe can now show a one-time announcement (news, tip, or reminder) as a centered modal, a top / bottom banner, or a small corner card. Each announcement is dismissed per-id and never returns.
updates
- interactive chat auto-routes to a fast model; background to a smart one — the auto preset now picks a fast model (~1s first token) for interactive chat and a higher-reasoning model for background work (pipes, suggestions, daily summary). Vision turns are unaffected. Net result: chat feels faster, background quality goes up.
- redesigned pipe cards — every pipe in my pipes is now an obviously openable card with a clear primary action; the dead status square and bare-dash filler are gone. See pipes.
- built-in browser runs headless for background pipes — scheduled pipes that drive the built-in browser no longer fail when the browser sidebar isn’t open. The webview is lazily created off-screen, scrapes return real results, and revealing the sidebar adopts the same instance. Background scrapes never paint over your current view on Windows.
bug fixes
- don’t sign-out or stop recording on a transient cloud-token blip — a transient secret-store read failure used to read as “no account / no plan”, stop recording mid-meeting, and show the sign-in wall (flapping on every settings change). The entitlement gate now stays open for an account we have evidence was entitled, keeps recording, and self-heals once the token comes back. A real sign-out is unchanged.
- enterprise sign-in no longer gives up after one check — for enterprise members whose plan is still being provisioned at sign-in (eager invite, lazy upgrade, admin re-invite, Stripe webhook in flight), the entitlement gate now re-verifies in the background for up to ~7 minutes instead of stranding you behind the wall. The moment the backend entitles you, the app unlocks and capture resumes — no relaunch, no manual refresh.
- fewer “database disk image is malformed” / “database locked” cases — secret-store reads (cloud token, OAuth refresh, keychain toggles, ChatGPT pipe token) used to open and drop their own connection pool against the same database the engine writes to, racing engine writes. The secret store now shares one process-wide pool with matching settings and a warm persistent connection.
- meetings end correctly when they go quiet — a detected meeting that lost its call-control UI (call ended, window minimized, tab switched) could stay “ongoing” forever because the system-audio output tap writes silent chunks continuously. The keep-alive now requires real voice activity, so a quiet call ends after the normal grace and the note’s end time and auto-summary fire. Genuinely audible screen-shares stay alive as before. See meeting intelligence.
- chat tag autocomplete and
/memories?tags=…no longer 500 — a single memory row with empty, NULL, or non-JSON tags used to make the tag query throwmalformed JSONand kill every tag autocomplete call (observed firing ~14.8k times/day on a real install). Malformed rows now expand to nothing instead of erroring. See search screen history. - Microsoft 365 and Teams connect works again — Microsoft Entra had been rejecting the OAuth call with
AADSTS90023 Unsupported 'prompt' value. Microsoft endpoints now send a singleselect_accountvalue, which still shows the account picker and prompts for consent on first connect. See connections. - built-in browser eval results larger than ~1KB no longer get truncated — the agent’s “navigate and read the page” path used to silently truncate large results into invalid JSON, so reading basically any real page failed. Large results now stream back as base64 chunks and reassemble intact.
- built-in browser navigations show up in the right chat — when the in-app agent navigated the built-in browser for the on-screen chat, clicking to open the sidebar sometimes showed nothing because the navigation event was tagged with a session id that didn’t match the chat’s current state. The sidebar now also accepts the session id the chat’s own agent runs under. Other chats and background pipes stay isolated.
- DRM detection covers the native Apple TV app — the macOS Apple TV app reports its name as just “TV”, which didn’t match the old “apple tv” pattern, so screenpipe kept recording DRM video from it. “TV” is now matched exactly (no false-positives on names like “Plex TV” or “3ds Max”).
- Windows installer no longer aborts with “unable to uninstall” — the pre-uninstall hook’s process-kill scan was killing the live uninstaller process itself. It now skips the running uninstaller while still terminating every other app process.
- meeting-summary pipe note updates save again — the meeting-summary pipe and the in-app summarize fallback were calling the notes endpoint with the wrong HTTP verb, so saves were 404’ing. They now use the correct verb, and an idempotent migration fixes already-installed copies of the pipe without touching your other edits. See pipes.
- meeting “copy” uses the native clipboard API — copying a meeting transcript / summary now uses the standard clipboard API path and works reliably across the app. See meeting intelligence.
- Windows desktop build restored — a transitive dependency had broken the Windows DirectML build chain; the desktop app and release builds compile and ship again on Windows.
/stream/framesand remote-frame payloads expose a neutraltextfield — both wire surfaces still labelled the captured screen text asocr_text, even though most captures are accessibility-derived, not OCR. They now carry a neutraltextfield;ocr_textis kept as a deprecated alias so existing stream consumers don’t break. See API recipes.
week of june 17, 2026
new features
- screenpipe-cloud transcription for every paid plan, plus a meetings-only capture mode — screenpipe-cloud transcription now defaults on for Basic, Business, Enterprise, and Lifetime users on macOS, Windows, and Linux (not just macOS / cloud-subscribed). New desktop installs also default to a new meetings-only audio capture mode that only persists and transcribes audio while a meeting is active — quiet hours don’t fill your timeline. Existing installs keep their current “always capture” setting; switch in settings → recording. See meeting transcription.
- MCP can create and run pipes — the screenpipe MCP server (used by Claude Desktop and other MCP clients) now exposes
create-pipe,list-pipes,run-pipe, andpipe-logstools, plus ascreenpipe://guide/pipesresource with the canonical pipe-creation guide (frontmatter, schedule syntax, presets, lifecycle). Agents can author scheduled automations end-to-end over MCP. See MCP server and pipes. - native Zendesk OAuth — the Zendesk tile in settings → connections now supports a one-click “Connect with Zendesk” OAuth flow per subdomain. Manual email + API token entry stays as a fallback. See connections.
- one-click “open note + HD” on the meeting notification — the meeting-detected notification’s two adjacent buttons collapse into a single open note + HD action that opens the live note and starts HD capture together. The standalone open note button stays for users who only want the note. Gated by the existing HD default = “Ask me” setting. See meeting intelligence.
- redesigned pipes list with run / edit / remix — each pipe is now a brand-aligned card with an always-visible action bar (run, edit, remix, more, enable). Edit opens a chat to tweak the pipe in plain English (was hidden in a hover-only menu); remix creates a new pipe based on this one without mutating the original. See pipes.
- discoverable pipe creation from the empty state — the “no pipes installed” state now leads with one-click example chips that build a pipe through the generation flow, and the bottom create input is a titled, explained “create your own pipe” box with a clear submit arrow. See pipes.
- resizable live transcript panel in meeting notes — drag the grip on the top of the live meeting transcript drawer to shrink it (down to 120px) or grow it (up to 70vh). Double-click resets to the default; arrow keys nudge it; chosen height persists across sessions. See meeting intelligence.
- richer pipe alert notifications — pipe-emitted notifications now include a copy button and source links so you can grab the alert text or jump straight to its source from the toast.
updates
- meeting summarizer also reads the screen (OCR) — the in-app meeting summary and the background summary pipe now query OCR alongside transcripts, so slide content, on-screen documents, demos, and on-screen name tags (handy for naming attendees who never spoke) make it into the summary. See meeting intelligence.
- chat tag and speaker filters scale and search — the tag and speaker pickers in chat now stay snappy with large lists and support inline search, including in the standalone chat window.
- enterprise build registers its own deep-link scheme — the enterprise desktop app now registers
screenpipe-enterprise://instead of sharingscreenpipe://with the consumer build. On machines with both installed, login and calendar deep links route to the build that initiated them instead of whichever Launch Services picked. Consumer scheme is unchanged.
bug fixes
- fewer transcription crashes during long meetings — fixed the recurring
compute_fbankpanic that dropped speaker diarization for a segment when speech was shorter than one 25 ms analysis window, and chunked the macOS Metal (Parakeet MLX) transcription path to 30 s so a single bad chunk no longer kills an entire batch’s transcript. Both were top transcription errors in the field. See meeting transcription. - screen capture during meetings no longer gets deduped away — when a meeting is detected, visual-change triggers (slide advances, screen-share, demos) now bypass the accessibility-tree dedup that was silently dropping them, so shared screens are actually captured at the visual-change cadence instead of falling back to one frame every 30 s. Normal-desktop capture is unchanged.
- transcripts appear in the timeline during static-screen meetings — when a video call’s screen barely changes and screenshots get deduped for minutes, transcripts now appear at the audio’s own moment in the timeline (as an audio-only entry) instead of being attached to a distant frame or, with screen capture off, dropped entirely. The stretch becomes a scrubbable, transcript-bearing segment. See search screen history.
- orphaned audio chunks are recovered automatically — when the database write pool was saturated, audio files could land on disk with no matching audio-chunks row, never appearing on the timeline and never being transcribed. A reconciliation sweep now durably re-inserts dropped chunks once the write pool recovers, so they show up and get transcribed. See meeting transcription.
- timeline jumps from chat sources and deep links land on the right moment — clicking an “open in timeline” citation, an inline chat timestamp link, a
screenpipe://timeline/frame deep link, or a meeting-notes replay strip now jumps to the captured moment whether it’s same-day or cross-day, instead of no-op’ing same-day or landing at the start of the target day. See search screen history. - recording auto-restarts when the database write queue wedges — sustained disk-I/O write wedges (which used to leave the recorder silently stuck for 10–15 minutes while the tray still showed “healthy”) now auto-restart the recording engine, with a circuit breaker so a genuinely malformed database can’t restart-storm. The write-ahead log also gets periodic checkpoint maintenance in the desktop app, which previously only ran in the standalone CLI — preventing the unbounded WAL growth that drove much of this corruption class.
- sidebar and recording buttons clickable on a collapsed timeline — fixed an overlay bug where the sidebar and recording controls became unclickable when the timeline was collapsed.
week of june 16, 2026
new features
- reasoning effort control in chat — the chat composer now has a Brain-icon selector to pick low / medium / high reasoning effort, and it works across every preset provider (screenpipe-cloud, ChatGPT, Anthropic, OpenAI BYOK gpt-5 / o-series, native Ollama thinking models, and custom OpenAI-compatible endpoints). The control self-disables on models that don’t support thinking, and the saved level is reapplied on every cold start so Pi reasons at your chosen level from the first turn.
- token-efficient API responses for agents —
/search,/elements, and/frames/:id/elementsnow accept opt-in?format=csv/?format=tsvand?fields=...parameters, returning a columnar table with just the columns you ask for. Cuts roughly 70% of tokens on list-shaped results when an agent (Pi, Claude Code, Copilot CLI, …) pastes the response into context. Fully backward compatible: no params returns the exact same typed JSON. See API recipes.
updates
- flatter PII worker CPU curve — the on-device PII redaction worker used to drain its backlog in back-to-back bursts that could spike screenpipe to 200%+ CPU for a few seconds at a time. The worker now runs on a duty-cycle cooldown that holds it to at most ~40% of wall-clock and caps each text-model burst near 2 cores, so the same backlog drains as a low flat band instead of a visible spike. No behavior change to what gets redacted. See privacy filter.
- lower idle CPU and allocations across capture, scheduling, and monitoring — a sweep of small steady-state wins for 24/7 capture: cached accessibility app-exclusion filters, reused UI-event window filtering, reused audio RMS computation, throttled audio-gap warnings, gated analytics timers, relaxed events-websocket ping cadence, backed-off missing-input recovery probes, and removed per-tick allocations in the pipe scheduler, schedule monitor, permission monitor, resource monitor, and workflow classifier. No behavior change — just less work per second on the hot path.
- owned-browser sidebar now shows navigations from the pipe you’re watching — pipe runs now tag their owned browser sessions with a stable
pipe:<name>:<execId>id that matches the frontend’s session id, so when you open a running pipe its sidebar correctly streams that run’s browser navigations. Unrelated chats still don’t see background pipe traffic.
bug fixes
- Windows audio engine no longer hangs at boot — on both Windows x86_64 and Windows ARM64, the ONNX Runtime upgrade in the previous release could deadlock inside the audio engine’s runtime load, freezing the
building_audioboot phase forever — the UI came up but recording, VAD, and diarization never started and port 3030 never bound. The audio engine now links ONNX Runtime at build time on Windows instead of loading it dynamically, and a 30-second watchdog around session init means any future runtime hang degrades gracefully (diarization off, fallback VAD) instead of bricking startup. See meeting transcription. - chat keeps streaming when you open Settings — opening Settings mid-response no longer pauses or drops the in-flight chat stream; it continues in the background and the tokens are all there when you switch back.
- actionable Ollama errors before the Pi install prompt — when chat is pointed at a local Ollama endpoint that isn’t reachable (Ollama not running, wrong port, model not pulled), the composer now surfaces the specific Ollama error first instead of jumping straight to “install Pi?”, so the fix is obvious.
- Account page no longer shows “active” plan under a “not logged in” header — if the encrypted cloud token failed to hydrate (keychain denied, secret store cleared), the Account settings page could simultaneously render “not logged in” and a “Screenpipe Business · active” card because the card was keyed off a plaintext subscription flag. The active-plan card now requires a live session token to match the header, and the inconsistent state can no longer be persisted to disk.
- Vertex Gemini tool calls stop 400-ing for affected users — assistant tool calls coming back from Vertex MaaS without ids are now backfilled and re-paired with their matching tool results, fixing a recurring 400 from the AI gateway (SCREENPIPE-AI-PROXY-C) for ~164 users. No-op for healthy traffic.
- no more PostHog event storm after the machine wakes from sleep — the analytics loop was firing ~100× too often (every ~216 s instead of every 6 h) and replayed every missed tick back-to-back when the machine resumed from a long sleep, producing roughly a thousand failing requests in a burst. The interval is correct again and missed ticks now coalesce into a single tick on resume.
- bare-CLI usage no longer overcounts users — running
screenpipefrom the terminal minted a fresh random analytics id on every process start, inflating CLI / Linux / Windows user counts ~1.6–2× versus distinct IPs. Bare-CLI runs now use the same persistent per-machine id the sync layer already uses, so a restart is the same user. Desktop app counts were unaffected. Forward-only: historical counts will compress toward true values as the new CLI rolls out. See the CLI reference.
week of june 15, 2026
new features
- bring-your-own MCP servers in pipes — pipes can now call the same custom HTTP MCP servers you’ve wired up in settings → connections (Brave Search, Linear, Notion, internal company MCPs, …), not just chat. Tools resolve through the existing connection so credentials stay in the secret store. See pipes and connections.
- dismiss chat suggestions, calmer composer layout — a single inline X on the chat composer hides both the follow-up questions and the connection-suggested prompts in one click, with a new settings → display → show chat suggestions toggle to bring them back. The
+attachments / filters control and the model dropdown have also moved into their own row under the input box, so the text box itself only holds your prompt (Claude-style). - CLI-specific feedback survey —
screenpipe surveyand the periodic in-CLI nudge now open a CLI-dedicated survey (tagged with your CLI version and OS) instead of the generic one, so terminal-only feedback is no longer lumped in with the desktop app. See the CLI reference.
updates
- lighter audio dedup and memory sync on the hot path — the “is this transcription a near-duplicate of the last 50?” check used to re-tokenize the incoming chunk on every comparison (24/7 while recording), and the memory sync was cloning every memory UUID into an owned set just to read it. Both paths now normalize once and reuse, cutting steady-state CPU and allocations during long recording sessions with no behavior change. See meeting transcription.
bug fixes
- PII redactor no longer false-flags strings like
x@y.c|mas emails — the on-device email pattern had[A-Z|a-z]in the TLD class, which (inside a character class) treats|as a literal character — so any “almost-email” with a pipe in the TLD was detected as an email and redacted. Pattern is now[A-Za-z]; real email detection is unchanged. See privacy filter. - Windows installer no longer fails on locked files during upgrade — the NSIS pre-install / pre-uninstall hooks now share a hardened process-kill macro (UTF-16+BOM PS1 for non-ASCII install paths, WOW64 redirection disabled so
System32resolves to the real 64-bit PowerShell, 30 s timeout so the installer can’t hang, longer post-kill settle). Upgrades on systems where the oldscreenpipe.exeis still alive now succeed instead of aborting mid-install. - Windows ARM64 build restored — a Rust dependency bump silently broke the Windows DirectML compile path, so the previous release (v2.5.38) shipped without a Windows ARM64 binary. The build is back; Windows ARM64 users get auto-updates again.
week of june 14, 2026
new features
- background AI traffic routes through Gemini flex tier (~50% cheaper) — latency-tolerant traffic (pipes, daily summary, suggestions, background chat) can now opt in to Gemini’s flex tier for roughly half the input/output price at comparable quality. Interactive chat is unaffected, and the gateway transparently falls back to standard-tier models if flex is throttled. Cost is attributed to the flex variant in your usage view so the discount shows up in dashboards.
- separate notification toggle for power-mode changes — settings → notifications now has its own Power mode changes switch so you can silence the “battery saver kicked in” toast without also muting capture-stall alerts. Critical low-battery capture-paused alerts still fire either way.
updates
- extra cloud AI preset copies can be deleted — Pro users with duplicated or imported screenpipe-cloud presets can now delete the extras. Only the last remaining cloud preset is still protected from deletion, so you can’t accidentally lock yourself out of cloud models.
- GPT-5.5 models added to the OpenAI preset fallback list —
gpt-5.5andgpt-5.5-codexare now selectable in the OpenAI preset when model discovery falls back to the built-in list. Also cleans up a duplicate ChatGPT preset that could appear on first launch.
bug fixes
- PII redaction now covers the main search index — the async PII reconciliation worker was rewriting redacted text in OCR, transcripts, accessibility text, UI events, and per-element text, but missed the consolidated full-text column that backs screenpipe’s primary search index. Raw PII was gone from component columns but still searchable. That column is now redacted on the same pass and the search index re-indexes automatically. See privacy filter.
- clearer errors when the bundled pi coding agent fails to install — if the embedded pi agent failed to install (for example, when
buncrashed on an unsupported CPU or was killed by the OS), the resulting error message was sometimes completely empty, leaving chat silently broken. Install failures now report the exit code or signal, tails of both output streams, and the bun version and command line, so failures are diagnosable from the log alone. - no more per-minute 500 errors when calendar providers aren’t connected — when no calendar provider was connected (no Google account linked, or no OS calendar permission), the home window’s 60-second calendar poll was logging two HTTP 500s every minute, forever. Not-connected is now a normal empty response instead of a server error, and missing OS permission returns a structured auth-required response. See connections.
- macOS standalone chat window no longer overlaps the traffic-light buttons — added left padding to the chat header in macOS standalone mode so the title and controls clear the red/yellow/green window buttons.
new features
- keep computer awake while recording — a new toggle in settings → recording keeps the machine awake so capture and pipes keep running when you’d normally see the screen sleep. Lives in the power settings group with copy that spells out exactly what it holds open.
- apply & restart bar in settings — recording, privacy, and storage settings now show a full-width floating bar at the bottom of the page when there are unsaved changes that need a restart, so it’s obvious when you’ve changed something and what to do next. Changing the data directory now also actually restarts the capture engine.
- tag filters in chat — the chat composer now has a tag picker that unions screen, audio, and memory tags into one suggestion list. Typing
#opens tag-only suggestions, sections collapse when empty, and each suggestion shows where it came from (frames, audio clips, memories). See search screen history. - device connection suggestions in chat composer — the composer now surfaces connection chips for the integrations you have wired up, so kicking off “ask Notion…” or “ask Linear…” is a single click. See connections.
- notification bell moved into the Pipes view — notifications are pipe output, so the bell now lives in the Pipes view tab bar (next to My Pipes / Discover) instead of the global top-left chrome strip. The chrome strip is reduced to sidebar toggle, search, and recording status. See pipes.
updates
- default AI preset is now “auto” instead of
claude-opus-4-8— new installs and first-time pro sign-ins get the default chat preset on auto (the gateway picks the best allowed model per turn) instead of pinning Claude Opus 4.8. Existing installs are unchanged. - AI gateway caches conversation history (~80% cheaper agentic turns) — long agentic conversations now cache the entire conversation prefix per turn, not just the system prompt, so each follow-up re-reads prior history at roughly 0.1× input price on Claude, GPT-5, and Gemini 2.5. Usage telemetry attributes cache reads and writes correctly, so dashboards reflect the real cost.
- cost log attributes the served model, not “auto” —
autoand fallback requests now log the model that actually served the turn (read from the gateway’s response header) instead of the literal stringauto. Per-model spend in your usage view is now accurate and previously-flat$0.01unknown-model estimates are gone. - lower Windows background CPU — cached focus-monitor rectangles, fewer idle hook timer wakeups, no first-frame polling on Windows Graphics Capture, and a cached audio-input STT device name cut quiet-time CPU on Windows without changing capture behavior.
- lighter meeting detector on hot paths — the meeting/browser detector no longer re-lowercases the same app names on every check, trimming a small but constant background cost during long sessions.
- artifacts API converged under
/artifacts— local pipe outputs and cloud artifacts now share one API surface and one renderer, so a pipe-authored SOP and a cloud SOP look the same in the Brain section. Legacy/outputsand/pipes/artifactsroutes are gone; pipes built against them should switch to/artifacts. See API recipes and pipes.
bug fixes
- Linux auto-update works again — Linux clients had been failing auto-update with “signature verification failed” since March because the AppImage was repacked after the updater signature was generated. The post-repack re-sign step is back, so Linux users stuck on older builds will pick up updates again on next check.
- OCR works on Linux without a system tesseract install — the Linux AppImage now bundles
eng.traineddataand resolves it from inside the bundle. On hosts withouttesseract-ocrinstalled, screen text is indexed again instead of being silently dropped. - capture restarts when it silently wedges — if disk I/O stalled long enough that the database write queue saturated, capture could appear “Running” in the tray while persisting nothing for an hour or more. A new watchdog now restarts the capture engine when the loop is still attempting frames but nothing has been written for over two minutes (with a 5-minute cooldown so it can’t loop).
- no more rare macOS audio crashes during long sessions — fixed a use-after-free in the macOS Process Tap audio path where a CoreAudio callback could fire on freed memory during teardown, and closed a remaining grace-window race in the same path. Long live-meeting sessions are stable again on macOS.
- embedded
piagent no longer touches your global~/.pi/agent— screenpipe’s bundled pi coding agent now stores its config, credentials, sessions, and extensions under the screenpipe data directory instead of your standalone pi install. It also prefixes bundled tool names so a globally-installed extension likepi-web-accessno longer collides with the bundledweb_searchtool and kills the pipe at startup. See pipes. - PII redaction now covers per-element accessibility text — the async PII redactor was rewriting OCR, transcripts, accessibility text on frames, and UI events, but skipped the per-element accessibility/OCR table, so raw element text kept PII verbatim and stayed queryable. That column is now redacted with the same destructive overwrite pattern. See privacy filter.
- multiple chat state fixes — rapid clicks on New chat no longer create duplicate empty rows; switching between chats restores the correct model/preset for each; “ghost” chats and a stuck loading state after sending a message are gone; and owned-browser navigation events no longer leak into the wrong chat when you switch quickly.
- broken replay frames are hidden in meeting notes — replay frames with missing image data no longer show up as broken placeholders in meeting notes. See meeting intelligence.
- meeting notes no longer get clipped in narrow windows — fixed a layout bug where long meeting titles or attendee lists could overflow the home content pane and get clipped at the window edge (most visible in macOS split screen with the sidebar open). The pane now shrinks correctly and rows truncate as intended. See meeting intelligence.
- sidebar no longer overlaps the icon strip in macOS fullscreen — fixed a regression where sidebar content could overlap the top-left icon strip when the app was in macOS fullscreen, plus alignment fixes between sidebar nav items and top bar icons.
- scheduled pipes pick the right weekday again — fixed a weekday-to-number mapping bug in the human-readable schedule parser so days like “Mon” map to the correct cron weekday and scheduled pipes fire on the days you actually picked. See pipes.
- Brain artifacts list scrolls smoothly with many artifacts — the Brain section now uses a full-height layout so virtual scrolling engages, and the redundant outer scrollbar and excessive bottom padding are gone.
- pipe artifacts list hides implementation files — when a pipe doesn’t explicitly declare its artifacts, the fallback scanner now only surfaces user-facing files (Markdown documents and common image formats) instead of
.DS_Store,.json,.ts, and log files. See pipes. - custom vocabulary bulk-import button uses the right icon — the bulk-import button in custom vocabulary now uses a download icon (data coming into the app) instead of an upload icon, matching standard import conventions. See meeting transcription.
- daily cost cap no longer trips D1 CPU limits — the cloud AI gateway’s per-device daily-cost cap is now an O(1) lookup against a running daily total, instead of summing the full cost log on every request. Heavy users no longer see request failures attributable to “D1 DB exceeded its CPU time limit” during high-volume agent loops.
week of june 12, 2026
new features
- native macOS login sheet — signing in now uses Apple’s
ASWebAuthenticationSession, a sandboxed Safari sheet anchored inside the screenpipe window, instead of bouncing you out to the system browser and back through a deep link. Faster, no window jumping, and the app re-focuses cleanly after auth. - HubSpot connection — one-click OAuth — the HubSpot tile in settings → connections now uses a one-click OAuth flow (contacts, companies, deals — read + write) instead of a manual Private App token. Existing token-based connections keep working, and the manual token is still available behind an advanced disclosure. See connections.
- meeting note editor — slash commands, format toolbar, task lists, and a live waveform — the meeting note editor picks up a
/slash command menu, a selection-based format toolbar, GitHub-flavored task lists (markdown round-trip), per-segment transcript timestamps with inline search highlighting + match counter (cmd+F), and a monochrome “dancing sticks” waveform replacing the static mic icon on every live surface. See meeting intelligence. - decluttered sidebar chrome — the sidebar corner collapses from 13 elements across three rows into a single 4-element strip: collapse, search, a recording-status dot (with a popover for per-device pause/resume and meeting start/stop), and the notification bell. Collapsing the sidebar now hides it entirely instead of leaving a 72px icon rail, so content gets the full window.
- team-shared pipes show up in the Cloud tab — pipes shared to your team from the desktop app now appear in the cloud-pipes list alongside dashboard-published pipes, each tagged with a source badge so you can tell them apart. See pipes.
updates
- cheaper, faster auto-routing for agentic work — the AI gateway’s auto waterfall now picks
glm-5as the primary model for non-vision turns (roughly 3× cheaper on output than the previous default at comparable quality). Vision requests still route through the prior vision-capable head, so screen-aware turns are unaffected. - model-aware transcription language list — the language picker in settings → recording now only offers languages your selected transcription model actually supports, instead of showing every language and silently falling back at runtime. See meeting transcription.
- lower CPU during live meetings — the live-meeting audio path now reuses a single resampler per stream instead of rebuilding the filter bank every ~20 ms, cutting a large chunk of background CPU during long calls with no change to transcript quality. See meeting transcription.
- redesigned pipe connection picker — the per-pipe connection picker has a cleaner layout that makes it easier to see which integrations a pipe will use and to wire up the right ones in one pass. See pipes.
- smoother desktop feedback follow-up — the in-app feedback flow has a tighter follow-up UX so replies from the team land in a clearer thread instead of a flat list.
bug fixes
- a second Gmail / Google account no longer wipes the first — connecting a second Gmail, Google Calendar, Docs, or Sheets account used to silently overwrite the token for the first account because both lived in a shared default slot. Each account is now stored under its own named slot, and a startup sweep promotes any account still parked in the legacy slot so existing installs heal on next launch. See connections.
- all Google Calendar accounts appear everywhere — after connecting a second Google account, the 60-second calendar poller, live meeting notes, pipes, and chat tools would 401 with “multiple accounts connected, pick one” and calendar looked disconnected. Calendar reads now merge events across every connected Google account (deduped by event id) and the connection-status check counts any healthy account. See connections.
- HubSpot, Notion, and other connections survive a transient keychain hiccup on Windows — a one-off failure to read the encrypted settings file (
store.bin) at startup used to be silently swallowed and treated as a fresh install, which then saved defaults over your real settings (reported on Discord as “Windows update deleted all my AI models”). Transient keychain reads are now retried, unreadable encrypted blobs are restored from the newest healthy snapshot (with the ciphertext preserved as a backup), and an encrypted blob is never overwritten by a fresh-install save. - enterprise sign-in gate and pi token cleanup — fixed two enterprise login edge cases that could leave the account in an inconsistent state after sign-out: the login gate now blocks the right paths, and stale
pitokens are cleared on sign-out so the next sign-in starts from a clean slate. - Todoist connection validates again — the connection test was parsing the Todoist v1 projects endpoint as a bare array, but v1 returns a cursor-paginated object, so valid tokens were rejected with “error decoding response body”. Validation works again. See connections.
/v1/web-searchworks again — Google withdrewgemini-2.0-flashfrom Vertex, and the pinned web-search head started returning 404 on every call. Web search now routes through the GAgemini-flashalias.- no more black browser tabs titled “screenpipe/screenpipe” — the bundled “screenpipe” ignore pattern matched both app names and window titles, so any browser tab with “screenpipe” in its title was treated as self-capture and rendered black in your history. The pattern is now scoped to the app name only, and existing installs are migrated automatically.
- no more false “audio stalled” warning during live meetings — fixed a case where the live meeting capture would surface a spurious “audio stalled” warning while audio was actually flowing. See meeting transcription.
- meeting note drafts save reliably — fixed a race where typing into a meeting note draft could lose the most recent edit if you navigated away quickly. Drafts now flush cleanly on navigation. See meeting intelligence.
- “recents” in chat sort by your last message, not the chat’s creation time — the recents list now derives each conversation’s age from the latest user message timestamp, so chats you’ve recently revisited bubble back to the top instead of sinking by creation date.
week of june 11, 2026
new features
- Excalidraw connection — a new tile in settings → connections lets the agent read and create Excalidraw+ workspaces via an API key. Validated on save, stored in the secret store, and removed cleanly on disconnect. See connections.
- Plaud connection — a one-click OAuth tile in settings → connections lets the agent pull meetings and recordings from Plaud. See connections.
- Mochi flashcards connection — a new connection for the Mochi spaced-repetition service. The agent can read and create cards through the credential proxy, so your API key never reaches pipes or the model. See connections.
- redesigned connections page — settings → connections is grouped into clear categories with an updated layout, so finding (or discovering) an integration is a lot faster. See connections.
- team pipe sharing — team admins can share a pipe with their team from the desktop app. Recipients get the pipe with auto-update on new versions while keeping their own on/off choice; new installs arrive off and read-only, and “fork to edit” detaches a copy from auto-updates. Unshare propagates and disables (never deletes) marked copies. See pipes.
- artifacts library for chat and pipes — a unified Brain section that lists every output your pipes and chats have generated, with in-app markdown and text previews, batch select, and a viewer window for inspecting individual files. See pipes.
- filter screen, audio, and memories by tag —
/searchand the MCPsearch-contenttool now accept a comma-separatedtagsfilter that matches across screen, audio, and memories with exact-AND semantics. Namespaced tags likeperson:,project:,topic:link captures to facts so you can pull every moment tied to a person or project in one query. Index-driven (≈7 ms at 200k frames). See search screen history and API recipes. - searchable settings — a fuzzy search bar at the top of settings jumps you straight to the matching field (and scrolls to it), with deep matching against sub-settings.
- smooth HD playback in the timeline — when scrubbing through an HD chunk, the timeline now plays it at native framerate (10/30 fps) instead of stepping one frame per second. Motion looks smooth while audio and the slider stay in sync. See search screen history.
- clickable source citations in chat — Ask answers now make screen, activity, and meeting citations clickable: tapping one jumps into the timeline at the captured moment instead of leaving you with inert text.
- “Try in Chat” connection chips — clicking a connection prefills the chat composer with a connection chip that scopes the message to that integration, so kicking off “ask Notion…” or “ask Linear…” is a single click. See connections.
- HD recording confirmation toast — clicking + HD on a meeting notification now posts an in-app confirmation that HD capture actually started, instead of being silent. See meeting intelligence.
- Claude Fable 5 in model pickers — the new Anthropic Claude Fable 5 model is available across the screenpipe-cloud picker, the BYO-key Anthropic picker, and the static AI-preset selector.
- native drag-to-grant permissions flow on macOS — onboarding now uses a native drag-to-grant panel for macOS permissions instead of a click-through. The panel auto-dismisses once a permission is granted (including manual toggles), recovers from stale TCC entries, and surfaces a clear “permission needed” cue if capture is blocked at startup. See permissions.
- Getting started tutorial card in Help — the Help section now leads with a Getting started tutorial card that opens the full screenpipe walkthrough video, giving new users an obvious entry point.
- smaller, faster local PII redaction model — the on-device text redactor drops from 266 MB to 149 MB (vocab-pruned v45_phase5) with identical detections on names, emails, phones, SSNs, and persons. Lower memory footprint for the redact worker; the deterministic detector backstops structured PII regardless. See privacy filter.
- PII redaction runs on the Apple Neural Engine — the on-device PII model now runs on ANE/NPU instead of CPU on supported Macs (~3.4× faster, much lower power). See privacy filter.
- API + CLI skill packs in agent cards — the Hermes and OpenClaw skill tabs now offer both
screenpipe-apiandscreenpipe-cliskills behind an API/CLI switcher, so agents can pick the surface that fits the task. See connections.
updates
- scheduled pipes show readable day labels — the schedule picker now parses human-readable schedules and renders the selected days and tooltips in plain English, instead of raw cron fragments. See pipes.
- automatic fallback model when the main preset fails — if a pipe’s main model times out or errors, the run is retried against the configured fallback preset instead of failing the whole pipe. See pipes.
- clearer AI gateway errors — model routing now returns a clear, actionable error when a model is broken or missing (instead of a bare 404), and missing-
model/ missing-messagescases return readable messages instead of crashing. - actionable audio model-download errors on corporate networks — when the audio model download is blocked by a proxy or corporate firewall, screenpipe now surfaces the actual cause and what to allowlist, instead of failing silently.
- lighter background CPU on macOS and Windows — quieter idle polling for the activity, UI recorder, and event-capture pipelines, plus cached window filters and skipped restart checks on the active audio device. Real captures are unchanged.
- Apple Calendar tile is hidden on Windows — the settings → connections Apple Calendar tile no longer appears on Windows machines where it cannot connect. See connections.
- macOS Calendar status no longer goes stale — the calendar connection now uses a single shared EventKit store and refreshes correctly on macOS 26, so a “not yet authorized” state doesn’t persist after you grant access.
bug fixes
- macOS auto-update can finish installing again — “restart to apply update” was a no-op on a recent macOS build because the restart command wasn’t wired up. Restarting from the update prompt now applies the pending update.
- tray shows “Stop HD recording” while HD is active — the macOS tray used to show the regular “Stop recording” label during an HD session. It now reflects HD state so it’s clear which capture you’re stopping.
- tray reads “outside work hours” instead of stuck on “Starting…” — when the work-hours schedule pauses capture, the tray now labels the state correctly instead of leaving it on “Starting capture session…”.
- ghost keystrokes on macOS are gone — removed the accessibility probe event tap and added a graceful shutdown path so the focused app no longer receives stray phantom key events on macOS.
- dark-themed scrollbars and native controls on Windows — native scrollbars and OS-rendered controls now respect dark mode on Windows, instead of staying light against a dark UI.
- cursor and selection mid-sentence in the editor — fixed a regression where placing the cursor or selecting text in the middle of a sentence (chat / meeting notes) could land on the wrong character or break selection entirely.
- timeline arrow-right keeps working while recording — the right-arrow key no longer stops navigating the timeline when recording is active. See search screen history.
- no cross-device mic echo in live transcripts — live meeting transcripts no longer pick up the same audio twice when multiple capture devices are active. See meeting transcription.
- live transcripts no longer drop segments on a coverage-window miss — fixed a case where a single coverage-window miss could silently drop a live transcript segment. See meeting transcription.
- all Google accounts appear in “Coming up” — the Coming up calendar fetch now merges events from every Google account you’ve connected, not just the primary one. See meeting intelligence.
- LAN device discovery is opt-in — mDNS-based LAN discovery is now off by default and only runs when you explicitly turn it on, so corporate networks no longer see chatty discovery traffic from screenpipe.
--ignored-urlsactually filters captures now — the CLI flag was parsed but never applied to the capture path. Ignored URLs are now skipped end-to-end. See the CLI reference.- pipes can use OAuth GitHub connections — pipes were unable to reach GitHub through the OAuth credential proxy. The proxy now exchanges the OAuth token correctly so pipes can authenticate to GitHub without a manual PAT. See connections.
- owned browser keeps the title set with
eval—pi.browser.evalwas clobbering title changes set from inside the page. The owned-browser tab now keeps the latest title fromeval. See pipes. - chat sidebar no longer reopens after switching chats — switching chats sometimes caused the sidebar to pop back open. It now stays in whatever state you left it.
- write queue recovers from persistent disk-I/O wedges — if the database write queue wedged on a flaky disk, screenpipe could stop persisting captures until restart. It now detects sustained I/O failures and rebuilds the queue automatically.
- clearer data-deletion settings — the data-deletion section in settings is now split into two cards, separating “clear local data” from “delete cloud data” so it’s obvious which action wipes what.
- “Pro” copy renamed to “Business” — the few remaining user-facing “Pro” labels in settings → account now match the actual plan name, “Business”.
- account plan label uses your subscription plan, not cloud status — the Account screen now reads the plan name from your subscription record instead of inferring it from cloud-subscribed state, so paused or special-cased accounts show the correct tier.
- Book-a-call row removed from feedback settings — the redundant “Book a call” row is gone from settings → feedback.
week of june 8, 2026
new features
- Odoo connection — a new integration in settings → connections lets the agent query and update your Odoo ERP, CRM, sales, and project records alongside your other connected apps. See connections.
- drag-and-drop images into meeting notes — drop image files anywhere on a meeting note to embed them inline at the drop point. A black drop overlay confirms the target, and images are auto-resized on the way in. The dedicated insert-image toolbar button is gone. See meeting intelligence.
- annual upgrade option in the in-app Account page — the Pro upgrade in settings → account now defaults to annual (200) with an inline toggle back to monthly ($50/mo).
- work-hours schedule flags on
screenpipe record— two new CLI args,--schedule-enabledand--schedule-rule "day,start,end,mode"(repeatable; mode isall,audio_only, orscreen_only), let you drive the work-hours schedule without editing config. Passing any rule auto-enables the schedule. Capture pauses and resumes in-process — no restart. See the CLI reference.
updates
- cleaner Claude / Cursor / Codex onboarding cards — once a card says “connected”, the redundant “MCP installed, restart X” line is gone. Notion / Obsidian / ChatGPT cards keep their useful follow-up copy.
bug fixes
- Apple Calendar connection works again on signed builds — the production bundle was missing the macOS calendar entitlement, so EventKit was denied before the system prompt could fire and screenpipe never appeared under Privacy & Security → Calendars. The entitlement is back and the permission flow is restored end-to-end. See connections.
- Pro access lasts through the period you paid for — canceling a subscription used to revoke cloud-AI access immediately because the gate only checked status. It now also entitles you while the subscription is canceled but the paid period hasn’t ended yet. Dunning states (past_due, unpaid, incomplete) stay excluded.
- logout works on the first click — an in-flight user refresh could write your user back into settings a beat after you signed out, resurrecting the session and forcing a second click. Sign-out now bumps a monotonic auth generation that any in-flight refresh checks before writing, so a stale response can’t bring the session back.
- recording resumes on macOS after sign in — after sign out → sign in, the entitlement-flip never restarted capture on macOS because the owner-window check was looking for a window name that only exists on Windows. The check is now platform-aware, and the restart is also serialized so a reconnect can’t race teardown and wedge the recorder at “starting capture session”.
- pipe notifications toggle is honored on the
/notifyroute — pipes posting to/notifyused to display and persist notifications even when you’d turned Pipe notifications off. The route now reads the toggle and skips display + history fortype=pipewhen it’s disabled. The auto-update “what’s new” toast is exempt — it’s now tagged as an app update so the App updates toggle controls it instead. See pipe debugging. - timeline memory markers land on the correct frame — the memory diamonds on the timeline were positioned with left-to-right math while the frame row renders right-to-left, so the layer rendered mirrored (and multi-day views drifted further). Markers are now snapped to each frame’s real on-screen center, correct under right-to-left, virtualization, day boundaries, and margins. See search screen history.
- media file paths in chat preserve their full absolute path — fixed a chat rendering bug where absolute paths to attached media files could be mangled before they were turned into a link, so the resulting link pointed at the wrong file (or nowhere). Windows paths, paths with spaces or parentheses, and paths embedded inside an existing markdown link all round-trip cleanly now.
- long chats no longer fail with a context-window error — pi’s chat layer always injects recent history into every prompt with no size budget, so a very long conversation, a huge pasted message, or a big tool result could push the prompt past the model’s context window and hard-fail with
413 prompt is too long. The injected history is now budgeted against the preset’s existing context limit, dropping the oldest turns first and clamping any single oversized turn. - annual Pro upgrade savings copy — the in-app annual card said “save 100 cheaper than monthly. Both Account upgrade cards now show the correct savings.
- deny block cleanup after disabling notifications — turning notifications off used to leave an empty
deny:block behind in the permissions YAML. The cleanup now also removes the block when it has nothing left in it, including for compact YAML.
week of june 6, 2026
new features
- import device skills into the agent — a new Skills card in settings → connections scans your machine for
SKILL.mdfolders (e.g.~/.claude/skills) or any folder you pick, and imports the ones you choose. Imported skills are mirrored into every pipe and chat session automatically, so the agent picks them up everywhere without per-pipe wiring. See connections. - rotation-safe connection sync across devices — an opt-in toggle in account settings now syncs your manual and OAuth connection credentials to your other signed-in devices via an end-to-end encrypted manifest. OAuth tokens merge by a monotonic refresh generation (not wall-clock), so a stale token can never overwrite a freshly rotated one and brick a connection. Off by default. See connections.
- steer queued prompts with Cmd+Enter — pressing Cmd+Enter while the agent is running now steers any queued prompts in addition to the in-flight turn, and native steers preempt the queue, so course-corrections land immediately instead of waiting for the next idle moment.
- add images to meeting notes — meeting notes now accept image attachments inline, with focus-on-click in the editor. See meeting intelligence.
- filter apps that haven’t been recorded yet — the Ignored/Included app pickers under settings → privacy now also list installed apps that have no captures yet, each with its real icon and an “installed · not captured yet” hint. You can pre-block or pre-allow an app before it ever shows up in your history. See privacy filter.
- minimize-to-tray toggle on Windows — Windows users can now choose whether closing the app window minimizes to the tray or quits, matching the macOS behavior.
- agent-facing ICS calendar connection — the ICS calendar integration now exposes a clean agent-facing API so chats and pipes can read your calendar through the same connection surface as everything else. See connections.
updates
- scheduled pipes honor your local timezone — raw cron schedules (and the “every day at Nam” UI) now evaluate against your local clock instead of UTC, so
0 7 * * *fires at 7am local. Existing schedules pick up the fix on next run; DST is handled correctly. See pipes. - pipe installs pick a tier-safe model — installing a pipe now uses the
pipespreset (auto-selected for your subscription tier) instead of the Opus chat default, and the cloud-model picker validates your choice against the gateway tier list with a graceful fallback. A premium model you’ve deliberately chosen is no longer silently downgraded when the gateway is unreachable. - shortcut labels stay in sync everywhere — keyboard-shortcut hints in the reminder overlay, tray menu, timeline controls, sidebar search, and chat now reflect your current settings live, and disappear when a shortcut is disabled or unset. The tray refreshes the moment you change a binding.
- pinned and hidden chats survive a save — saving a conversation now preserves its pinned and hidden state instead of resetting it.
bug fixes
- browser meetings detect again on Windows — Meet, Slack web, Teams web, and other browser-tab meetings were undetectable on Windows because the window-title enumerator was silently returning an empty list. Detection now works again across browsers. See meeting intelligence.
- Windows CLI runs as a signed binary — the
screenpipeCLI shipped via npm is now signed with the EV cert (only the desktop bundle was signed before), so corporate Windows no longer flags it as “unknown publisher” and Defender/EDR stop quarantining it on launch. See the CLI reference. - CLI no longer self-destructs inside non-Tauri hosts on Windows — embedding the CLI in your own Electron (or other) wrapper used to trigger a clean exit within seconds because the auto-destruct watcher required a
screenpipe-app.exeprocess to also be alive. The watcher now tracks only the PID you passed it. - clearer Windows install failures — the installer now hard-fails if the bundled VC++ runtime DLLs (
vcruntime140,vcruntime140_1,msvcp140) are missing, instead of silently shipping a package that dies on launch withSTATUS_DLL_INIT_FAILED. - panic log for embedded CLI/engine — the engine binary now writes a
last-panic.log(with backtrace) next toscreenpipe.logand flushes Sentry on panic, so integrators embedding the CLI as a child process can see why it exited instead of just that it did. Written even with telemetry off. See the CLI reference. - large pasted context in chat works again — fixed a regression where pasting a very large blob of text into the chat composer could fail to send or truncate the prompt.
- AI gateway no longer crashes on malformed requests — two Sentry crash classes are fixed: a request missing a model name now returns a clear error instead of a TypeError, and a request missing a
messageslist is treated as empty. - “clear cache” button is labeled “clear” — the button under the Clear Cache card in settings said “scan” — it now says “clear”, which is what it actually does.
- billing button no longer duplicates “manage” — removed the redundant Billing button in settings → account; the Manage button already covers subscription management.
pi repairinstall works on Windows — fixed the repair flow for thepiagent runtime on Windows so it can recover a broken install instead of failing partway through.- quieter macOS audio logs — silenced a noisy ScreenCaptureKit audio-drop warning on macOS so real errors are easier to spot in feedback bundles.
week of june 5, 2026
new features
- clear owned browser data — a new “clear data” action on the owned browser wipes cookies, storage, and cache for the in-app webview in one click. signs you out of anything the browser was logged into, so you can hand a clean session to the next pipe or chat. see pipes.
- MCP connections live in settings → connections — every MCP server you’ve connected (Krisp, Linear, Notion, Atlassian, custom HTTP, …) now shows up alongside your other integrations in settings → connections, with cross-platform detection and one-click management instead of being hidden behind the MCP server panel. see MCP server and connections.
- “get Cursor” prompt when Cursor isn’t installed — opening the Cursor tile in settings → connections on a machine without Cursor now shows a clear install prompt with a download link instead of a dead tile. see connections.
updates
- macOS multi-monitor capture uses noticeably less CPU — the event-driven capture pipeline now coalesces work across monitors and skips redundant accessibility walks, cutting capture CPU on multi-display Macs without changing what gets recorded. see search screen history.
- no more phantom or doubled text in Chromium / Electron apps — the macOS accessibility walker used to re-enable enhanced accessibility on the focused app every 60s (and every frame after a recent regression), which forced Chrome, Cursor, VS Code, Slack, and other Electron apps to rebuild their AX tree mid-typing and could commit pending IME or autocomplete buffers as duplicate characters into the focused field. enhanced mode is now set exactly once per app while it stays focused, eliminating the phantom-text class of bugs and a recurring source of focused-app input lag.
bug fixes
- macOS tray menu no longer crashes the app on click — fixed a use-after-free in the macOS tray where clicking the menu right after screenpipe rebuilt it in the background could dereference freed memory and abort the process. the tray now swaps menus only at safe moments, so rapid menu interaction during recording state changes is safe.
- Google Sheets OAuth uses a non-restricted scope — the Sheets connection now requests
drive.file(access to only the files you explicitly open with screenpipe) instead ofdrive.metadata.readonly(access to every file’s metadata in your Drive). same functionality, far less data exposure, and unblocks the Google OAuth verification. see connections. - background pipes no longer hijack the on-screen chat’s browser — the in-app owned browser is shared across every chat and pipe, and a background pipe navigating its page would pop the browser open inside whatever chat you were looking at and stick there on reopen. navigations are now tagged with the owning chat (or pipe), and the browser sidebar ignores navigations that don’t belong to the chat you have open. see pipes.
- owned browser hides itself when the sidebar unmounts — closing the chat sidebar (or switching to a view without it) now also dismisses the floating owned browser instead of leaving it hovering over unrelated UI.
- no more duplicate stub rows in the chat sidebar — fixed a race that could leave two placeholder rows for the same brand-new chat in the sidebar before the first message landed.
- event-driven UI capture wires up reliably across platforms — fixed the input-event capture pipeline so workflow triggers, privacy filtering, and per-platform recorders stay in sync on macOS, Windows, and Linux; UI events are no longer occasionally dropped on app startup or after a recording-config change.
week of june 1, 2026
new features
- copy button on chat code blocks — every fenced code block in a chat reply now has its own copy-to-clipboard button (keyboard accessible), so you can grab a single snippet without selecting it by hand.
- paste documents straight into chat — the chat composer accepts pasted document files (pdf, docx, xlsx, md, txt, csv, json, log, rtf, …) in addition to drag-drop, shows an inline extraction spinner while the text is pulled out, and surfaces a clear error if a file can’t be read instead of failing silently.
updates
- stronger, smaller text PII redactor — the on-device redactor that scrubs secrets (API keys, tokens, credentials) before AI sees your screen data shipped a new model: secret recall jumped from 0.83 to 0.96 on held-out providers, oversmash (false redactions) dropped from 34.5% to 6.8%, and the model is ~4× smaller (1110MB → 278MB INT8) at ~3ms p50. existing installs keep running the previous model until they update. see privacy filter.
- vocabulary badge reflects the real limit — the custom-vocab header used to show
n/1000while the detail view showedn/100. the badge, import flow, and toasts now all use the actual upstream cap, so you won’t think you have headroom you don’t.
bug fixes
- GitHub connection works again — every call through the GitHub integration was 403ing because the proxy sent no
User-Agentheader. GitHub now sees a proper UA + accept headers, so issues, PRs, and repo data load through the connection again. see connections. - mic capture starts the moment you grant permission, even during boot — if you clicked “Allow” on the microphone prompt before the recording backend had finished wiring up, capture stayed dead until you toggled it manually. the app now retries automatically while the backend is still coming up. see permissions.
- cleaner logs after unplugging a display — stale display IDs no longer flood the log with hundreds of
xcaperrors on macOS, so real errors are easier to spot in your feedback bundle. - starred pipes empty state — the pipe store now shows the right empty-state message when your “starred” filter has no matches instead of looking like everything was uninstalled. see pipe store.
- no more crash when ffmpeg is missing — audio recording and post-processing now return a clean error instead of panicking if a bundled or system ffmpeg can’t be found.
- “open team on the web” button works — the button in settings → team now opens screenpi.pe/team in your default browser instead of doing nothing. see teams.
- CoreAudio per-app capture crash fixed — fixed a use-after-free in the macOS Process Tap path that could SIGSEGV the audio engine during per-app system-audio capture. see meeting transcription.
screenpipe vault lockno longer races the running app — locking the vault from the CLI while the desktop app is open now delegates to the daemon (or refuses cleanly) instead of racing it and leaving the keystore half-locked.
week of may 31, 2026
new features
- OpenClaw connection — a new integration in settings → connections lets you wire OpenClaw into screenpipe alongside the rest of your AI agent gateways. see connections and the connection reference.
- per-field PII redaction toggles — a new “fields to redact” selector under settings → privacy → AI PII removal lets you choose exactly which categories get scrubbed before AI sees your screen data. Secrets (API keys, tokens) are always on; names, emails, phones, addresses, and other sensitive info are opt-in. default is unchanged (secrets only). see privacy filter.
- document attachments in chat — the in-app chat file picker and drag-drop now accept documents (pdf, docx, xlsx/xls, md, txt, csv, tsv, json, log, rtf) in addition to images. text is extracted client-side and folded into the outgoing turn so the model can read them, with the clean prompt shown in the bubble and the attached text expandable. works on every preset, with multi-file support.
- display labels for auto-sent chat prompts — pipe creation, pipe store fork/publish, speaker organize, and notification follow-up chats now show a clean source label on the prefilled prompt so it’s obvious where the conversation came from.
updates
- HD recording plays back at true constant frame rate — the HD recorder now produces a smooth ~10fps chunk regardless of how much is changing on screen or how fast your machine encodes, so playback no longer comes out sparse or sped-up on low-motion screens. timeline offsets and exports stay accurate to wall-clock time. see search screen history.
- team management moves to the web — the in-app Team settings section is now a thin card with an “open team on the web” button pointing at screenpi.pe/team for consumer accounts. enterprise builds hide the Team sidebar entry entirely — admins manage members, devices, workflows, search, and policies on the enterprise web console. see teams.
- content filter and pipe sharing UI cleanup — removed the “push to team” buttons, the all/personal/shared-with-team tabs, and the team-only filter views from settings → privacy and settings → pipes.
bug fixes
- Windows microphone no longer goes silent with echo cancellation on USB mics — fixed a regression where enabling echo cancellation on Logitech C922 and other USB mics on Windows would silence the input. mic capture stays live with echo cancellation on.
- no more duplicate chats from auto-sent prefills — fixed a cross-window race where the home window and the floating chat overlay would both run the same auto-sent prompt, producing two near-identical conversations. each intent now mints exactly one chat, and existing duplicates collapse to one row in the sidebar.
- vision capture recovers after an auto-update restart on a locked screen — if the app restarted while your screen was locked, macOS reported zero monitors and screen capture stayed dead until a manual restart. capture now retries automatically the moment you unlock.
- auto-update no longer crashes the speaker engine on restart — gated the auto-update restart on a boot-ready check so the speaker session can’t be torn down mid-init, fixing a SIGSEGV some users saw right after an update installed.
- fewer background crashes across app, engine, and AI gateway — retired five top Sentry issues, including a Gemini tool-schema enum coercion bug, a cost-tracker null-model crash, a keychain-decrypt failure that could overwrite the encrypted API key blob, recovery from a corrupted pi-agent package file, and noisy port-conflict reports from the engine.
week of may 30, 2026
new features
- per-app exclusions for system audio — on macOS 14.4+, you can now exclude specific apps (Stremio, password managers, anything sensitive) from the CoreAudio process tap without turning system-audio capture off entirely. manage the list from settings → recording. changes apply within a few hundred milliseconds — no restart needed. see meeting transcription.
- general meeting / time-range MP4 export — a new export pipeline renders a real-time MP4 with synced microphone audio for any meeting or arbitrary time window. available from the meeting note’s export button, the
screenpipe exportCLI (--meeting-idor--start/--end [--open]), andPOST /export(also wired into the MCPexport-videotool). see the CLI reference and the API docs. - AI-generated chat titles — new chats now get a concise, task-specific title from the first message, with safe fallbacks and live streaming across windows. renamed titles still win.
updates
- HD recording captures every change — turning on HD (high-FPS) mode now bypasses content deduplication for the duration of the session, so video, slide flips, and demo replays are captured densely instead of skipped when the accessibility tree doesn’t change. a static screen still won’t record duplicate frames. see search screen history.
- timelapse export retired in favor of real-time export — the legacy
/frames/exportroute (fixed-fps timelapse) is gone. every “export my last N minutes” path — chat agent, MCPexport-videotool, and the video-export pipe — now usesPOST /export, which produces a real-time clip with synced audio instead of a sped-up sequence of frames. see the API docs. - provider-aware error messages, with one-click report — connection and pipe-install failures now show a clear, provider-specific reason and a “report issue” action right at the error site, so you can flag a broken integration without digging through logs. see connections.
- simpler HD recording tray label — the menubar entry for HD is now just “Record HD” in the idle state; the active state still shows fps in parens.
- display labels in meeting and pipe chat prefills — when a meeting or pipe seeds a chat, the prefilled prompt now includes a clean display label for the source so the conversation starts with the right context.
bug fixes
- chat keeps full conversation context on every send — fixed a regression where chat could silently drop prior turns after the agent compacted, crashed, or auto-restarted, so the model occasionally replied as if the conversation just started. recent history is now re-injected on every prompt.
- meetings stay alive when the process scan briefly misses — a transient miss in the meeting-app process scan (browser-extension websocket drop, app relaunch, accessibility reflow) no longer ends an in-progress meeting if output audio is still playing; an already-ending meeting is revived in the same case. see meeting intelligence.
- microphone capture starts as soon as you grant permission — granting mic access (either in the in-app prompt or in System Settings) now reinitializes the audio pipeline automatically, instead of leaving you with zero devices until the next app restart.
- cron pipes run a missed slot when the app restarts late — if the app was closed across a scheduled cron tick, the pipe now runs once on next launch instead of silently skipping that slot. see pipes.
- queued chat follow-ups stay readable — queued messages now show their original text in the sidebar instead of the injected-history blob.
- MCP
update-meetingworks again — the MCP tool was sending PATCH where the server expects PUT; meeting updates from MCP clients now succeed. see MCP server. - clearer MP4 export errors — failed exports now show the full underlying reason (e.g. “no screen frames indexed for this range”) instead of a misleading top-layer message.
- preset name duplicate validation trims whitespace — leading/trailing spaces no longer let you save two presets with effectively the same name.
- chat sidebar polish — fixed a cyan stripe artifact when collapsing a section and the
⋯menu overlapping the hover time label. - transcription model downloads work on corporate networks — the model downloader now uses the system TLS store, so corporate root CAs (Zscaler, Netskope, etc.) are trusted and first-run model downloads no longer fail with cert errors.
week of may 29, 2026
new features
- Workflowy and Readwise connections — two new integrations in settings → connections let screenpipe pull your Workflowy outlines and Readwise highlights into chat and pipes alongside the rest of your context. see connections and the connection reference.
- OAuth login for MCP servers — bring-your-own MCP servers now support OAuth, so you can connect Linear, Notion, Atlassian, and other OAuth-gated MCPs from settings → connections without hand-pasting bearer tokens. see connections and MCP server.
- VS Code terminal capture — screenpipe now captures terminal output inside VS Code (xterm.js) and labels each terminal window with its session name, so commands and shell output are searchable just like editor text. see search screen history.
- bounded HD recording for meetings — meetings now record at higher resolution for the duration of the call and revert to your normal capture quality automatically when the meeting ends, so meeting screenshots stay legible without burning disk between meetings. see meeting intelligence.
- meeting search by title, attendees, and notes — the meetings list now supports a search box that matches titles, attendees, and notes, plus an explicit “show more” instead of infinite scroll. see meeting intelligence.
- automatic meeting detection toggle — a new switch in settings → meetings lets you turn auto-detection off entirely if you’d rather start meetings manually. see meeting intelligence.
- Claude Opus 4.8 in the model picker — the new Anthropic flagship is selectable in chat and the AI gateway auto waterfall.
- chat keyboard shortcuts — Cmd+N / Ctrl+N opens a new chat from anywhere, and Ctrl+Tab cycles through recently opened chats.
- multi-account Google Docs and Sheets — connect more than one Google account for Docs and Sheets; the account picker is now forced on every Google and Microsoft sign-in so you always land in the right workspace. see connections.
updates
- shorter onboarding — the encrypt-data step is gone (the local store is now encrypted by default) and the pipe step is a single default-checked bundle (digital-clone + personal-crm) instead of a 3-path picker. see getting started.
- pipes page toolbar — the pipes page chrome is collapsed into a single toolbar, with search, filters, and install all in one row. see pipes.
- gemini-3.5-flash at the top of the auto waterfall — the AI gateway now prefers gemini-3.5-flash for the default
automodel when latency and cost both matter. - SDK 0.4.2 with native bindings —
@screenpipe/sdknow ships native bindings across all supported platforms and the Swift mirror tags automatically on each npm publish. see pipes. App::Titlewindow scope documented in the SDK —RecorderOptionsandFilterPatchtooltips now describe theApp::Titlesyntax inline. see the CLI reference and privacy filter.
bug fixes
- automatic language detection works for non-English audio again — the transcription engine now respects the detected language instead of falling back to English for every recording.
- auto-merge no longer reopens meetings you stopped on purpose — if you explicitly end a meeting, a follow-up calendar block won’t silently re-attach to it. see meeting intelligence.
- recording no longer stuck on “Starting” after monitors change — stale monitor IDs (e.g. after unplugging an external display) no longer leave the engine in a perpetual starting state.
- system audio captured reliably when following system defaults — desktop app no longer drops system audio after the default output device changes.
- process-tap audio uses the aggregate device’s nominal sample rate — fixes silent or garbled per-app audio on macOS Core Audio aggregate devices.
- Windows: excluded apps are actually filtered from capture — apps in your exclude list were leaking into screenshots in some configurations; the filter now applies consistently. see privacy filter.
- screen-capture permission probe — on macOS, screenpipe now verifies real screen-capture access instead of trusting
CGPreflightScreenCaptureAccess, which lies after permission revokes. see permissions. - Intel-Mac Pi install — the “Bad CPU type in executable” error when installing Pi on Intel Macs is fixed.
- HTTP MCP sessions register after initialize — third-party HTTP MCP clients that send the initialize handshake before the first tool call now connect reliably. see MCP server.
- low-battery power transitions — a crash on very low battery (missing pause profile fields) and a bogus full-pause when only macOS Low Power Mode was on are both fixed.
- low-battery notification copy — the low-battery toast no longer mentions “whisper” specifically; it now matches whichever transcription engine you’re using.
- chat fixes — local file links and local media attachments render reliably, mid-tool-call assistant replies stay in one bubble when you switch windows, chat sidebar stays in sync across windows, switching chats no longer overwrites the new one with the old one, mermaid diagrams are readable in both light and dark modes, and pipe-run assistant turns are coalesced with the real work duration shown.
- timeline “open settings” button works again — the gear icon on the timeline overlay opens settings instead of doing nothing.
- first-launch crash fix — a React #185 boot crash on first launch is gone.
- chat preset stays where you put it — switching chat models no longer snaps the preset selector back to the default, and the same fix applies on send.
- newly-installed pipes don’t fire instantly — cron pipes no longer run a stale or just-installed schedule immediately on install; the next run waits for the real cron tick. see pipes.
- misleading “join and take notes” button removed — the in-progress meeting toast no longer shows a join button for meetings already in progress.
- search API accepts more bool formats — query params now accept
1/0/yes/no/empty in addition totrue/false. see API recipes. - clearer “not connected” vs multi-account errors — connections now distinguish a missing account from an ambiguous one (multiple accounts connected, no default), with an explicit account picker. see connections.
- Windows installer — bundled sidecars are stopped before NSIS updates so installs no longer fail with “file in use”, and SSL.com signing fails fast on quota errors instead of burning five retries.
week of may 25, 2026
new features
screenpipe searchCLI — query your local history straight from the terminal without the daemon running. Same flags and JSON shape asGET /search, so existingjqfilters work unchanged and AI scripts can read your data even when the desktop app is closed. see the CLI reference.screenpipe teamCLI for enterprise admins — three new subcommands (screenpipe team devices,screenpipe team search,screenpipe team records) let team admins query teammates’ history from any machine they’ve signed into, with no local daemon required. uses yourteam_api_tokenfrom~/.screenpipe/enterprise.json. see the CLI reference and teams.- Discord community link in the Help menu — jump straight into the screenpipe Discord from the in-app Help section.
updates
- macOS capture is much lighter on WindowServer and battery — screen capture width is now coupled to your
video_qualitysetting (low1280,balanced1920,high3840,maxnative) and the GPU does the downscale at source instead of reading back native-resolution frames. Biggest wins on external 4K/6K displays; default users on built-in laptop screens see no change. Text extraction quality is unchanged because screenpipe reads accessibility trees first. - pause states actually stop the OS from producing frames — when capture pauses (screen locked, critical battery, DRM-protected window, outside your schedule) screenpipe now releases the underlying capture stream instead of just sleeping the reader. WindowServer / replayd no longer keep composing frames for a sleeping consumer. Recovery on the next capture trigger adds ~200 ms one-time. see privacy data flow.
- smaller, faster on-device PII redactor — the text redaction worker now runs the v45 phase 3 ONNX INT8 model (~278 MB, 90.2% HIPAA, sub-10 ms p50) with CoreML / DirectML / CPU execution providers, replacing the previous 2.8 GB Candle model. First-run auto-downloads with SHA verification. see privacy filter.
- clearer memory sync status in connections — the “sync now” button in connections now pops a toast on click, shows the real outcome (wrote, unchanged, skipped) instead of a generic “synced”, and folds the file path + relative “Xs ago” timestamp into a single status card. see connections.
- canonical domain switch to screenpipe.com — desktop app and CLI website links now point to
screenpipe.com. Existingscreenpi.pe/join/...team invites still work, and API endpoints are unchanged. see teams.
bug fixes
- API auth key visible in Settings before the server finishes spawning — opening Settings → Privacy during the brief window between app launch and server start no longer leaves the API key field blank; it now falls back to the cached value and updates in place. see for developers.
npx screenpipe-mcp --httpnow works as documented — the README one-liner used to 404 because noscreenpipe-mcp-httppackage existed on npm. The--httpflag on the main package now routes to the HTTP server directly. see MCP server.- auto-restart toggle shortcut fixed — the keyboard shortcut for toggling auto-restart now fires reliably.
screenpipe://viewlinks open in the in-app viewer everywhere — deep links inside notifications, notification history, chat, and the viewer itself now all route through the same handler, so a link copied from a notification into chat opens the in-app viewer instead of falling through to the browser.
week of may 24, 2026
new features
- bring-your-own MCP servers — register custom HTTP MCP servers (Brave Search, Linear, Notion, internal company MCPs) from settings → connections and call their tools from pipes and chat. add a name, URL, and optional headers, test the connection, and toggle on. see connections and MCP server.
- SDK event stream —
@screenpipe/sdk(now 0.4.1) emits a stable set of events —start/stop,recording_started/recording_stopped,paused/resumed,app_switched,frames_progress,permissions_changed, anderror— across the Node, Electron, Tauri, and Swift bridges, so host apps can react to recording state and progress without polling. see pipes. - scoped window filters with
App::Title—ignored_windowsandincluded_windowsnow accept anApp::Titlesyntax:Slack::#hrmatches only the#hrwindow inside Slack,::Confidentialmatches that title in any app, and bare entries likeSlackkeep their original meaning. scoped includes whitelist one window without affecting other apps. see the CLI reference and privacy filter. - macOS VoiceProcessingIO microphone — opt in to Apple’s VoiceProcessingIO audio unit on your default mic for echo cancellation and noise suppression on meeting calls; falls back to the standard HAL path automatically if VPIO can’t start. see meeting transcription.
- aggressive low-battery tiers — auto power mode now pauses microphone capture at ≤20% battery and pauses all capture at ≤10%, then resumes when you’re back on AC — so a long unplugged session won’t drain you to empty. you’ll get a desktop notification on each downgrade.
updates
- Electron apps capture the full content tree — VS Code, Slack, Discord, Obsidian, and Notion previously lost deeply-nested content (terminal output, editor text, chat scrollback) because the macOS accessibility shell consumed most of the walk budget. the walker now resets its depth at each web-area boundary, so the full budget is available inside the app.
- macOS sample-rate handling for VPIO and USB mics — fixed sample-rate mismatches that could silently drop input from VoiceProcessingIO and some USB audio devices; the engine now retries on the standard HAL path when VPIO can’t open the stream.
bug fixes
- ChatGPT reconnect when the session expires — the ChatGPT connection now shows a clear “session expired” warning with a one-click reconnect, instead of failing requests in the background. see ChatGPT.
- no more shortcut-reminder error loop on Windows — a missing first-run settings file no longer triggers a flood of webview → Rust errors; the reminder check now confirms the file exists and coalesces rapid setting changes.
- clearer S3 upload errors — when an upload to cloud storage fails, the desktop app now surfaces the server’s reason (signed URL expired, content-type mismatch, etc.) instead of just the HTTP status code.
week of may 23, 2026
new features
- multi-monitor paired capture in the SDK —
@screenpipe/sdk(now 0.3.0) records all your monitors by default and can opt into the same event-driven capture pipeline the CLI uses, so an SDK-recorded session lands in the same database your pipes already query. see pipes. - deepgram live diarization in meeting notes — the live meeting transcript now labels each turn with a speaker (you on your input device, “speaker 2/3/…” for others) instead of one undifferentiated stream, and adjacent turns from the same person collapse into one line. see meeting transcription.
- Codex CLI + Obsidian in onboarding — the onboarding integration grid now offers one-click setup for Codex CLI (as an MCP client) and Obsidian (auto-discovers your first vault). see connections and Obsidian.
- CLI flags for keystroke, clipboard, and scroll capture —
--capture-on-keystroke,--capture-on-clipboard, and--capture-scrolllet you link non-printable key events, clipboard rows, and scroll-stop triggers to the screen frame they fired on. see the CLI reference. - kebab menu on scheduled pipe rows — scheduled runs in the chat sidebar now have the same hover menu as conversations: stop the run, or pin/rename/archive/delete its session record.
- “check for updates” card in settings — Settings → General now has a visible “check now” button so you can pull a new version on demand instead of waiting for the next periodic check.
updates
- DRM-aware pause is now on by default — screenpipe pauses recording on Netflix, Disney+, Hulu, HBO Max, and other DRM streams out of the box, with reliable detection in Safari (including subdomains like
apps.disneyplus.com). no more black frames in your timeline from protected content. - Auto power mode by default — new installs start in Auto, which throttles capture on battery and restores full quality on AC. existing power-mode preferences are preserved.
- onboarding tells you why the engine didn’t start — if recording permissions are missing (or another spawn error fires), onboarding now shows the real reason and the bundle id it’s asking for, with one-click “open system settings” and “reset & re-request” actions. see permissions.
- clearer error when the in-app chat can’t load — the Settings chat panel now shows an actionable message and a support email when the connection fails, instead of a raw “Load failed”.
- OpenAI Realtime removed as a meeting transcription provider — the unused OpenAI Realtime path has been retired; selected-engine, screenpipe-cloud, and deepgram-live remain. see meeting transcription.
bug fixes
- OAuth connections no longer brick themselves overnight — fixed a refresh bug that silently dropped your
refresh_tokenand identity metadata (email, workspace, team id) on every refresh, causing connections to flip to “needs attention” after about an hour. multi-account setups and providers that don’t echoexpires_inon refresh are also covered. see connections. - failed updates are retryable — if a download fails (network drop, disk full, 5xx), the tray item now says “Update failed — click to retry” and the next periodic check picks it back up; transient failures also auto-retry with backoff. a desktop notification surfaces the failure instead of failing silently.
- disabling auto-update is respected on Windows — when auto-update is off, Windows no longer force-installs the new version during a periodic check. you’ll see the banner and choose when to restart.
- dismissing the update banner now sticks — clicking the X on the update banner keeps it hidden across periodic re-checks and tab switches, until a new version actually arrives or you click “update now” in the tray.
- meeting transcripts no longer show duplicate lines — fixed a case where chunks pulled from
/searchand from the meeting transcript endpoint were deduped under different keys, so every segment appeared twice. - background transcription stops fighting live meeting notes — when a live meeting note is running, the background transcriber no longer re-processes the same audio, eliminating duplicate text in the transcript.
- Google Calendar connect button works for free users — clicking connect on Google Calendar without a Pro plan now shows the “pro required” upgrade prompt instead of silently doing nothing, and surfaces “needs attention” when a token exists but can’t be decrypted. see connections.
- Zoom and other long-lived OAuth tokens refresh cleanly — fixed a follow-up edge case where a stale
expires_atcould cause an infinite refresh loop for providers that don’t returnexpires_inon refresh (Slack long-lived tokens and similar). - Pi assistant starts reliably on Windows — migrated the bundled pi-agent to its new package namespace and pinned a transitive dependency that was failing to hoist on Windows; install errors are now surfaced in the toast instead of a generic “exited with code 1”.
week of may 22, 2026
new features
- GitHub Copilot CLI as an MCP client — connect Copilot CLI from settings → connections and use it alongside Claude Code, Codex, and the other supported agents. see Copilot CLI.
- redesigned connections panel — Input Monitoring is now a first-class tile, a new Featured row highlights the integrations most people set up first, and Apple Calendar has been removed in favor of the macOS calendar permissions used elsewhere. see connections.
- clipboard capture without Input Monitoring permission — clipboard text is now captured through the UI recorder, so you no longer need to grant macOS Input Monitoring just to search what you copied. toggle from settings → recording or via the CLI. see the CLI reference.
- calendar-aware meeting prewarm — 2–3 minutes before a calendar event starts, screenpipe surfaces a toast to start the live meeting note, so you’re never caught flat-footed when a call begins. see meeting transcription.
- silent background updates with a restart banner — app updates now download quietly in the background; you only see a banner when the new version is ready to apply, and the restart is one click. auto-update is off by default — you stay in control of when to switch versions.
- enterprise update policy — IT admins can pin specific app versions per organization, control whether the consumer update banner shows for employees, and roll updates to fleets on their own schedule. see teams.
- MCP team telemetry tools — when authenticated with an enterprise key, the screenpipe MCP server exposes new tools for querying team telemetry from any MCP-compatible agent. see MCP server and teams.
- frame ID on
/searchresults —/searchinput results now include theframe_idthey were captured from, so pipes can join search hits back to the exact screen frame for screenshots or replay. see the API docs. - richer SDK runtime controls — the
@screenpipe/sdk(now 0.2.0) addssetFilters/filterStatusat runtime, emitspausedandresumedevents, and honors ignored/included windows plus ignored URL filters from your pipe code. see pipes. - CLI version-check nudge — the CLI tip rotation now periodically reminds you when a newer CLI is available so you don’t miss fixes. see the CLI reference.
ui_recorderstatus in/health— the health endpoint now reports whether the UI recorder (and clipboard capture) is running, so monitoring tools can answer “is clipboard capture on?” without scraping logs. see the API docs.
updates
- more accurate daily summary time breakdown — the daily summary now derives per-app time from accessibility events instead of OCR, so the breakdown matches what you actually used rather than what happened to be on screen.
- OAuth tokens refresh in the background — a new refresh scheduler renews OAuth tokens proactively, fixing the Zoom 15-hour rotation bug and similar drop-outs for other connections. see connections.
- UI events linked to the frames that triggered them — clicks, scrolls, and key presses are now paired with the screen frame they fired on (including on Windows and when the frame was deduplicated), so the timeline popover lights up more reliably and is easier to click.
- share-logs no longer creates a public link — the “share diagnostic logs” flow now just uploads to support and acknowledges receipt; the old shareable URL has been removed to prevent accidental log exposure.
- lower idle CPU on Windows — background workers wake less often when the app is idle, cutting battery drain on laptops.
- chat sidebar polish — streaming and activity signals are unified into one indicator, scheduled rows show a live signal with status and elapsed time on hover, and recents rows align their age label with the live signal.
bug fixes
- frontend crashes now show up in reports — top-level WebView errors are captured and shipped with source maps so support can diagnose UI crashes instead of seeing a blank stack.
- audio falls back when a pinned mic disconnects — unplugging your pinned input device no longer kills capture; screenpipe falls back to the system default input automatically.
- timeline day-picker restored, no more device spam — fixed a regression that broke the timeline day-picker and flooded logs with
device_monitor 'default'warnings. - phantom “new content” pill in chat — fixed a case where the “new messages” pill stuck around after you’d already scrolled to the bottom.
- chat preserves pipe-run titles — switching tabs or syncing history no longer overwrites the title of a pipe-driven chat.
- clipboard events carry app + window context — copied text is now tagged with the app and window title it came from, so clipboard search results are filterable.
- clipboard capture auto-recovers — after a crash, clipboard capture restarts automatically instead of requiring you to delete a marker file.
- organize-with-AI opens the right view — the speakers “organize with AI” action now opens the home chat instead of an empty settings pane.
- pipes load presets from encrypted store — pipes whose configuration lives in the encrypted
store.binnow resolve presets correctly at start. - MCP
keyword-searchquality — fixed argument mapping, time-range normalization, error messages, and OCR truncation in the screenpipe MCPkeyword-searchtool. see MCP server. - audio reconciliation zombie loop — fixed a case where the audio chunk processor could spin forever after a transient failure; chunks now move through an explicit state machine.
/healthcan’t deadlock the CLI — bounded the health response time so external watchdogs no longer kill a healthy CLI that was momentarily slow to answer. see the CLI reference.- admin team API token field is editable — first-time admins can now paste their team API token in settings → teams instead of seeing a read-only field.
screenpipe statusreads the right database — the CLI now resolvesdb.sqlitefrombase_dir, matching where the daemon actually writes. see the CLI reference.npx screenpipeand global install work again — the npm wrapper bin is wired correctly so bothnpx screenpipe …andnpm i -g @screenpipe/clirun the right binary. see the CLI reference.- enterprise macOS pkg notarization — the enterprise macOS installer is notarized correctly so admins no longer see Gatekeeper warnings on first install. see teams.
- enterprise sync auth — the enterprise sync worker re-reads the local API auth key on every request, so rotating the key no longer requires a restart.
- Windows timeline popover clickability — expanded the popover hit area so it’s easier to open from the timeline.
week of may 18, 2026
new features
- chat source citations — answers in chat now show a citation footer linking back to the screen, audio, or memory sources used to generate them, so you can verify what the agent saw before trusting an answer.
- Windows microphone echo cancellation — Windows mic capture now wires through AEC, cutting room echo and speaker bleed during meetings. toggle it from settings → recording or via the CLI. see the CLI reference.
- speaker search uses diarization turns — searching by speaker now matches against per-turn diarized segments instead of whole chunks, so results land on the exact moment a person spoke. see meeting transcription.
updates
- faster app launch — heavy chat and rewind renderers (code blocks, mermaid diagrams, message list) now defer until needed, so the desktop app opens noticeably quicker.
- snappier chat history — chat conversation list refreshes are debounced and cached, removing the stutter when switching between long chats.
- polished meeting notes live transcript — the live transcript panel inside meeting notes has a cleaner layout, better speaker grouping, and steadier scroll behavior while a meeting is in progress. see meeting transcription.
- tighter chat composer and suggestions — the AI preset picker, suggestion rows, and source cards in chat have been re-spaced and simplified for quicker scanning.
bug fixes
- Screenpipe Cloud transcription applies without a restart — switching to Screenpipe Cloud (Deepgram) transcription now takes effect on the next capture cycle instead of requiring a full server restart.
- no more lost meeting transcript when live STT fails — if the live speech-to-text stream drops mid-meeting, the transcript now backfills from buffered audio instead of leaving a gap in the meeting note.
- pipe-watch tool output renders correctly — return values from pipe-watch tool calls now display in the chat tool rail instead of showing as empty.
week of may 14, 2026
new features
- per-site consent before importing browser cookies — when an agent needs to act on a signed-in site (Gmail, GitHub, your bank), the embedded browser now asks you to approve session access for that specific host before copying any cookies from Arc/Chrome/Brave/Edge. saved passwords are never read.
- CLI flag to skip the meeting detector —
--disable-meeting-detectorskips the v2 meeting watcher entirely (no process / accessibility scan every 5 s). useful for headless or task-mining setups that only consumeaccessibility_textandui_events. see the CLI reference. - CLI flag to skip snapshot compaction —
--disable-snapshot-compactionskips the background JPEG→MP4 worker for users who don’t open the MP4 timeline UI. disk usage falls back to your--retention-dayssetting. see the CLI reference. - codex-style chat queue steering — queue follow-up messages while the agent is still working and reorder or cancel them before they run.
updates
- transcription fallback notice — when your requested transcription engine isn’t available (signed out, no subscription, missing Deepgram key), the audio panel now tells you which engine is actually running and why, instead of failing silently. see meeting transcription.
- multiple OAuth accounts per connection, restored — connections that support more than one account (e.g. multiple Google or GitHub instances) again list each one separately in settings → connections instead of collapsing into a comma-separated label.
- faster, smoother UI — overlay data, health checks, meetings, and timeline hooks have been reworked to cut re-renders and main-thread work on macOS. the timeline streamer now caps batches and stops retrying forever on a broken connection, so a stalled stream recovers cleanly.
- clearer doctor output —
screenpipe doctornow verifies the API port is actually listening and gives a step-by-step macOS fix when ScreenCaptureKit can’t open system audio (including the exact terminal app to grant in System Settings → Privacy & Security → Screen & System Audio Recording). see the CLI reference. - CLI tips use
npx— startup tips for installing bundles and signing in now shownpx screenpipe …so the commands work without a global install. - chat search and switching feel snappier — additional optimization passes on the chat sidebar and search modal.
- Windows timeline hardening — WebView2 startup and the timeline frame stream are more resilient to transient failures, with bounded retries and per-frame limits.
bug fixes
- Windows: no more flashing shell windows — background shell commands triggered by the app no longer pop a console window into focus.
- meeting notifications now open the right live note — clicking a meeting notification deep-links into the correct in-progress note instead of a stale one.
- live transcript order and AI summaries — fixed out-of-order segments and missing summaries in the live meeting transcript and meeting notes panels. see meeting transcription.
- capture exclusions search — the search and “exclude this app” actions in capture exclusions now update reliably and stay in sync with the current query.
- AI gateway error reporting — fixed Sentry regressions in the AI gateway for Anthropic, Gemini, and Vertex providers so failed requests are reported with the right context instead of being swallowed.
week of may 10, 2026
new features
- local AI PII removal — the on-device PII redactor is back, now powered by OPF v3 for text and rfdetr_v9 for images. Defaults to a credentials-only policy that catches Anthropic, OpenAI, Google, Hugging Face, GitHub, and Cloudflare API keys without touching the rest of your timeline. Apple Silicon gets a ~6× faster MLX path on macOS 26+. enable in settings → privacy → AI PII removal. see privacy filter.
- toggle for cloud audio, video, and image analysis — single switch in settings → privacy controls whether agents can call the cloud media analysis enclave. on by default; flip it off to keep media analysis fully local.
- Codex MCP connection — connect Codex from settings → connections to use it as an MCP client alongside Claude Desktop, Claude Code, and the other supported agents.
- Bee wearable integration now works — the connection was registered but TLS-failed against Bee’s private root CA. it now ships a real, logged-in client.
- chat search across past conversations — the existing memory search now finds chats too. press the search shortcut and start typing.
- chat picker in the collapsed sidebar — switch between chats without expanding the sidebar.
- monitor topology toasts — get a notification when a display is plugged in, unplugged, or swapped (e.g. clamshell to external). turn it off in settings → notifications → display changes if it’s noisy on a rotating dock setup.
- hide thinking blocks — collapsible chain-of-thought blocks in chat are hidden by default. toggle from settings → display → hide thinking blocks.
- pipe activity indicators — running pipes now surface a live status indicator in the pipe list.
- rename speakers in the meeting transcript sidebar — click any speaker name in the transcript panel to rename, search similar speakers, and propagate the rename across the meeting.
- copy meeting transcript — new copy button in the meeting view copies the full transcript (not just the filtered view) as plain text.
- pick which pipe summarizes meetings — new picker next to “summarize with AI” lets you choose any installed or store pipe to drive meeting summaries.
- split and merge meetings — new
POST /meetings/:id/splitendpoint and a smarter merge that preserves titles, attendees, and notes from both sides. see the API docs. - back up your real-browser login state into the agent browser (macOS) — the agent’s embedded browser now inherits cookies from Arc, Chrome, Brave, and Edge, so authenticated sites (Twitter/X, Gmail, GitHub, your bank) work without a manual sign-in. each browser is opt-in via a one-time Keychain prompt.
- one-click browser extension pairing — pair the screenpipe browser extension in a single click from the desktop app.
- enterprise managed AI presets — admins can publish managed presets, lock the default, and gate custom presets per employee. see teams.
- Intune deployment guide — IT admins deploying screenpipe to Windows fleets via Microsoft Intune now have a canonical reference. see Intune deployment.
updates
- friendlier “sync now” error — the pipes-sync and memories-sync buttons in the account panel now disable while the engine is still starting, and surface a readable message instead of
Load failed (localhost:3030). - chat tool rail readability — agent actions like
curl -H "Authorization: Bearer ..."are now rendered as plain English (“Searched ChatGPT ‘q’”, “Saved memory”, “Navigated agent browser → calendar.google.com”) with the matching app icon. web tool calls also show the destination site’s favicon. - connection icons in chat tool rail — see at a glance which integration a tool call hit.
- secure team sharing setup from the desktop app — initialize encrypted team sharing without leaving the app. see teams.
- chat works while logged out — suggestion cards and a login button show up in unauthenticated chat sessions instead of an empty screen.
- chat shows suggestions when unauthenticated + the AI preset selector now surfaces a login button so there’s always a clear way in.
- mic capture is faster to recover on USB and Bluetooth devices — phantom audio interfaces (controller adapters, dock stubs, headset descriptors with nothing plugged in) are filtered out, so the device picker only shows mics that actually record. on Windows, format mismatches fall back to the system default format automatically.
- audio reliability under load — increased the write connection pool and improved reconciled-transcript playback so merged audio chunks stay in sync with the timeline.
- embedded browser stays inside the app — the agent browser no longer floats above unrelated apps and now follows the parent window for minimize, hide, and app switch.
- embedded browser performance — kills a 60 Hz polling loop that was driving WindowServer and the SCK audio daemon to 100 % CPU when the browser panel was open.
- embedded browser remembers where you left off — saved browser URLs now reliably restore on app launch.
- monitor recovery after disconnect — vision capture now retries automatically when a display is unplugged and reconnected.
- system audio toggle copy — clearer, shorter description of what “CoreAudio system audio” does and the Zoom/Meet/Teams trade-off.
- changelog is live — the in-app changelog dialog pulls the latest entries from screenpi.pe instead of a stale bundled file.
- AI gateway credits extend daily cost cap 1:1 — the 50 more headroom on Opus / Sonnet instead of getting blocked by the daily cost limit.
- lower idle RAM — local text-PII (~2.8 GB) and image-PII (~150–200 MB) models lazy-load and unload after 60 s idle, freeing several GB when the worker isn’t busy.
- explicit logs when AI PII removal is off — log lines now confirm the model isn’t loaded so you can verify the toggle worked.
- AirPods + Bluetooth health status —
/audio/device/statusnow reportsactive_no_datawhile a hijacked or silent device recovers, instead of misleadingly reportingok. - clamshell mode no longer captures the sleeping built-in display — the lid-closed laptop panel is filtered out of the capture list, saving cycles and black frames.
- meeting detection robustness — added re-entry hysteresis so single-frame UI blips (e.g. Google Meet’s auto-hiding toolbar in Arc) no longer flap the meeting state machine.
- clearer team invite error — server-emailed invite links don’t carry the team encryption key; the error now tells you to grab the full link from the admin’s desktop app.
bug fixes
- Windows audio capture — fully reverted the upstream cpal regression that caused Windows 11 24H2 users to record near-silent audio (-85 dB) on Jabra, Logi, and Communications-class USB mics. capture levels and transcription are restored.
- Windows owned browser — fixed WebView2 startup and loading failures on Windows.
- Windows ONNX runtime — corrected the bundled runtime version so the app launches cleanly.
- Windows ARM64 — release builds and signing pipeline restored.
- connection permission prompts — fixed permission prompts that previously failed to appear when connecting new integrations.
- connection details open in a dialog — selecting a connection no longer scrolls the settings page unexpectedly; details open in a modal instead.
- connection tooltip clipping — tooltips no longer get cut off inside the connection modal.
- Claude Desktop MSIX (Microsoft Store) support on Windows — MCP key injection now finds and patches the MSIX-installed Claude Desktop config.
- Apple Intelligence tile is now hidden on non-macOS platforms.
- Obsidian connection — vault auto-discovery and a cleaner connect/disconnect flow.
- connections cleanup — fixed disconnect reliability, missing icons, and stale state across the connections panel.
- chat preset switching in existing conversations — switching presets mid-conversation no longer drops your selection.
- chat editing preserves what’s on screen — editing a previous message no longer collapses the surrounding context.
- AI model picker — search clears when re-opening, and cancel/close behavior is fixed.
- pipes UX — fixed dropdown lag, the stuck loading skeleton, offline state copy, and missing feedback in pipe discover.
- discover-tab “new” badge on home page is hidden where it didn’t apply.
- speaker email alias deduplication — speakers with multiple aliases are no longer counted as duplicates.
- speaker merge from settings — the “yes, merge” button now actually merges instead of returning a 422.
- macOS clipboard crashes — NSPasteboard reads are now dispatched to the main thread, eliminating a class of EXC_BAD_ACCESS crashes during heavy clipboard activity.
- macOS cursor lag — disabled SCK’s cursor and click-ripple compositing, which was causing visible cursor lag during heavy interaction (Chrome tabs, dropdowns).
- macOS callback panics — wrapped ObjC→Rust callbacks (scroll, magnify, notification action, dock menu) in panic guards so transient errors no longer SIGABRT the app.
- pipe orphan PID cleanup no longer SIGTERMs the app itself — fixed a regression where saving settings could gracefully exit the app via the orphan-pipe cleanup path.
- settings loss on update is now impossible — four-layer defense (snapshot, auto-restore, refuse-overwrite, stop empty-writes) protects your AI presets and settings across updates.
- audio worker shutdown — clean shutdown signals stop the tokio teardown panics that were filling
last-panic.logon every quit. - audio stream stop use-after-free — fixed a macOS crash when stopping or switching audio devices.
- recording start race + health probe — concurrent capture-start invocations can no longer clobber each other, and a dead HTTP serve task after sleep/wake now triggers a real restart instead of an indefinite “connection error”.
- speaker model loading — resilient downloads with retries so flaky networks don’t leave you without speaker recognition.
- ORT initialization panics in the rfdetr image model and speaker init are now caught and surfaced as proper errors instead of crashing the worker.
new features
- Zoom integration — connect Zoom via OAuth so meetings show up alongside other connected apps. configure in settings → connections.
- Hermes Agent connection — drop screenpipe’s MCP server into your
~/.hermes/config.yamlfrom the connections panel. see MCP server. - Bee wearable — pair your Bee device as a connection so its captures join your screenpipe timeline. see connections.
- clipboard capture privacy toggle — turn off clipboard capture from settings or via a new CLI flag when you don’t want copied text recorded. see the CLI reference.
- focused document file paths — screenpipe now records the absolute path of the document you’re editing in TextEdit, Obsidian, Cursor, VS Code, Windsurf, VSCodium, and Trae, so you can search by filename.
- meeting notes timeline scrubber — meeting transcripts now have a scrubber with full transcript playback, speaker rename popover, and an “open in timeline” button. see meeting transcription.
- browser API:
/navigateand/snapshot— drive the embedded browser from your pipes and grab DOM snapshots. see the API docs. - MCP
update-meetingtool — let your AI write summaries back to a meeting note via a typed MCP tool. see MCP server. - manage AI presets from the CLI — create, update, delete, and set the default preset, plus pin a preset to a specific pipe. see the CLI reference.
updates
- meeting summarize button is now front-and-center in the meeting view, and the AI writes its summary back into the note for you.
- chat works without login — the b/w login banner is gone; you can chat on free models without an account.
- browser panel state persists per conversation — width and collapsed state are remembered when you switch chats.
- chat polish — queued messages are visually de-emphasised, the first thought block is collapsed by default, and a live dot pulses in the sidebar while the current chat is streaming.
- pipes list is faster — large stdout/stderr payloads no longer ship with every list request.
- “delete last N minutes” now actually removes the underlying mp4/wav files and drops cached frames.
bug fixes
- clipboard crash protection on macOS — added a watchdog around NSPasteboard reads so a hanging clipboard owner can no longer take down screenpipe.
- Claude Desktop MCP 403s — MCP API key discovery now uses the bundled bun, so auth works without a system bun on
PATH. - privacy scrubs — API keys and tokens are stripped from the feedback console-log bundle, the cloud JWT is hidden from bash subshells, and auth tokens + emails are no longer logged on the server.
- audio reliability — undecodable audio chunks are quarantined instead of retrying forever, and the audio reconciliation retry loop has been killed.
- chat fixes — removing
@inputworks again, new chats appear in the sidebar immediately, duplicate filters from dropdown buttons are deduped, the “writing…” indicator self-heals on session return, and chat history loss on Windows (sanitized filenames + atomic saves) is fixed. - settings — API key regenerate now respects cancel, apply, and manual edits.
- shortcuts — pressing esc or clicking outside cancels a recording capture.
- timeline — applied tag chips have a remove button, and empty-state arrow buttons navigate the right direction.
- meeting notes — sidebar can be expanded again during a focused meeting, broken frame images are fixed, and the scrubber no longer ends early.
- embedded browser — x.com loads again (Safari UA spoof).
- skill install — added the download permission and surfaces loading / saved / error states.
- offline mode actually blocks pipe network calls now (the half-baked toggle has been removed).
- Windows — fixed an a11y crash from the
GetWindowRectimport. - pi config —
pi confignow does a real merge instead of overwriting~/.pi/agent/models.json.
week of april 26, 2026
new features
- new integrations — connect Microsoft 365 and Teams, Google Docs, Google Sheets, QuickBooks Online, Bitrix24, Loops, Resend, Supabase, and the Pocket AI voice recorder. configure in settings → connections.
- PII privacy filter — opt-in filter (powered by a Tinfoil enclave) that redacts personal info from
/searchresults and chat messages before they leave your machine. toggle from the chat composer. learn more. - parallel chats with background streaming — start multiple chats and switch between them; responses keep streaming in the background. a new chat sidebar shows pinned chats, recents, and pipes scheduled to run.
- focus-aware capture — when enabled, screenpipe only records the focused monitor instead of all of them, halving capture cost on multi-display setups. toggle from settings.
- per-machine pipe favorites — star pipes you use most. starred pipes sort to the top of the pipe list and get their own filter chip.
- LAN-access toggle for the API — bind the local API to
0.0.0.0so other devices on your network can reach it. API auth is force-enabled when LAN access is on. see the API docs. screenpipe sync remote— back up your screenpipe data over SSH/SFTP to a server you control. see the CLI reference.screenpipe db {check, recover, cleanup, unlock}— new CLI commands to repair database corruption and reclaim disk space. see the CLI reference.screenpipe logout— sign out of your screenpipe cloud account from the CLI.- connected apps as @mentions in chat — type
@in the chat filter popover to scope a question to a specific connected integration. - AI quota warnings — heads-up notice when you’re close to your daily limit on weighted models, so you don’t get cut off mid-task.
- browser extension v0.2 — new popup with connection status, an options page, and token-based auth.
updates
- CoreAudio Process Tap is now the default for system audio on macOS 14.4 and later — better quality and no virtual driver required.
- API keys are now readable and regeneratable in the UI. user-set custom keys have been removed in favor of a single managed key.
- Cursor-style inline edit — click any of your past chat messages to edit and re-run it.
- redesigned sidebar — collapse button next to the macOS traffic lights, search opens a focused overlay window with a real keyboard shortcut, and starred pipes outrank running pipes in sort order.
- timeline calendar — empty days are now disabled in the day picker and skipped when navigating with arrow keys.
- chat models hot-swap — switching a preset’s model no longer restarts the chat subprocess.
bug fixes
- mic stays connected on sleep/wake — fixed false-positive disconnects.
- Microsoft 365 / Teams OAuth now uses the correct Azure client ID; personal Microsoft accounts are rejected up-front (Teams scope isn’t supported there).
- database reliability — multibyte string truncation no longer panics, and connection starvation under heavy writes has been resolved.
- diarization timeouts — added a
speaker_idindex that fixes 60s+ stalls on long meetings. - memories pipeline silently stopped updating — now back online.
- macOS memory leaks — wrapped clipboard capture, monitor enumeration, and focus-tracker callbacks in autorelease pools.
- search results — keyword flat mode no longer drops entries that lack text positions.
- OAuth flows — auto-refresh of expired tokens in the generic proxy, query params now forwarded through the connection proxy, broader Google Sheets scope, and a fix for tokens being dropped when reconnecting an instance.
- notifications — clicking “Open” on a native macOS notification now reliably brings the screenpipe window forward.
- onboarding — MCP install uses the bundled bun, so it works without a system bun on
PATH. WhatsApp connection now resolves bun the same way. - calendar permission — recovers when the macOS Privacy pane reports denied-but-empty.
- chat polish — drag-select restored in user messages, ”+ new chat” reuses an empty chat instead of spawning duplicates, “Try again” appears when a model returns an empty response, and free models are always allowed regardless of quota.
- Windows — restored ARM64 release builds, switched consumer release to SSL.com EV signing, and propagated system root CAs to bundled bun/node via
NODE_EXTRA_CA_CERTS.