> ## Documentation Index
> Fetch the complete documentation index at: https://docs.screenpipe.com/llms.txt
> Use this file to discover all available pages before exploring further.

# screenpipe changelog: releases, features, and fixes

> Track every screenpipe release: new features, performance improvements, bug fixes, and breaking changes across desktop and CLI versions.

{/* https://screenpi.pe */}

## week of july 28, 2026

### new features

* **Canvas mode for Live Views** — Brain dashboards now have a durable **Canvas** view alongside the grid Dashboard. Arrange live, source-backed cards on a whiteboard, connect them into a process map, add editable notes, connectors, and freehand strokes, then pan, zoom, fit, or auto-arrange. Canvas layout is saved per Live View, survives clones, and is cleaned up when a Live View is deleted. On macOS, trackpad pinch now zooms around the pointer. See [second brain](/second-brain).
* **Daily summaries in Timeline** — the Timeline day view can now generate a source-backed summary of the selected day on demand, using your configured AI provider and the existing Enhanced AI consent. Generation only runs when you click, results are cached locally, and the summary stays scoped to the selected local calendar day. See [meeting intelligence](/meeting-intelligence) and [ai memory](/ai-memory).
* **Thumbs up / thumbs down on chat responses** — completed assistant replies now show quick thumbs-up and thumbs-down actions in the message row. Ratings are keyboard- and screen-reader-accessible, and the feedback signal is content-free — no prompts, replies, titles, IDs, or filenames are sent. See [ai memory](/ai-memory).
* **Enterprise write-only archive with a customer-run query gateway** — enterprise devices can now stream telemetry directly to a customer-owned S3 / MinIO / R2 bucket using write-only credentials, with an optional MDM-pinned destination allow-list that blocks uploads to anywhere else before the first byte leaves the device. A new self-hosted gateway container ingests those objects into a local SQLite + FTS5 store and serves the v1-compatible REST and MCP APIs on the customer's own network, protected by offline-verifiable `sk_ent_` tokens. The `screenpipe-mcp` `team-*` tools accept a base-URL override so agents can point at the customer gateway instead of the hosted service. See [teams](/teams) and [cloud archive](/cloud-archive).

### updates

* **Enhanced incognito detection is now opt-in** — **Ignore Incognito Windows** stays on by default but now uses a lightweight focused-window check instead of walking the full accessibility tree every second. Browser-native detection (which requires macOS Automation permission per browser) is now a separate **Enhance** action inside the same setting, and only prompts for browsers that are installed and currently open. New CLI flags: `screenpipe record --ignore-incognito-windows=false` to record incognito windows, and `screenpipe record --enhanced-incognito-detection` to opt into browser-native detection. See [privacy filter](/privacy-filter) and [permissions](/permissions).
* **Fixed-period dashboards drop the misleading time picker** — Live View dashboards that own a fixed period (like "yesterday's memory" or a 24-hour standup) no longer show a disabled time selector. The active period is described in plain text instead, and screenpipe infers fixed vs. selectable automatically for AI-created dashboards so you never have to configure it. Switching between dashboards also stays responsive while a refresh is running. See [second brain](/second-brain).
* **"Remember and resume my work" is the default focus for existing users** — users who never picked a focus during onboarding now default to **remember and resume my work** the next time General Settings loads. Any explicit saved choice, including **No specific goal**, is left alone. See [getting started](/getting-started).

### bug fixes

* **Meeting summaries no longer export full meeting videos** — a routine "summarize this meeting" request could silently ignore your selected summary pipe and fall through to a prompt that exported the full meeting MP4 before using just a couple of frames. Screenpipe now reads the canonical pipe body, the built-in and bundled meeting-summary prompts stay on the transcript plus a bounded number of existing frame IDs, and full video export is explicitly blocked unless you ask for it. See [meeting intelligence](/meeting-intelligence) and [pipes](/pipes).
* **Telegram credentials stay server-side** — sending a message to Telegram through the AI agent now goes through a local `POST /connections/telegram/send` endpoint, so the bot token and chat ID never appear in rendered agent context. See [connections](/connections) and [privacy data flow](/privacy-data-flow).
* **Automatic recovery from stuck database shutdowns** — if screenpipe hit a rare SQLite hard-fault while compacting and the safe-shutdown step then stalled, recording and the local API could stay down until you manually relaunched the app. Screenpipe now closes its read and write pools together, caps confirmed hard-fault shutdown at 15 seconds, and automatically relaunches the app if it can't prove all old database connections were released. See [troubleshooting](/troubleshooting).
* **Windows: no more crashes during frame comparison** — on some Windows machines, screenpipe could hit an allocation fault while comparing frames and exit the recording worker. The frame-comparison path now uses a much smaller working buffer, safely skips a single comparison under memory pressure instead of aborting, and preserves the existing color-sensitive early-exit behavior. See [troubleshooting](/troubleshooting).

## week of july 27, 2026

### new features

* **Brain dashboards with pipe-powered Live Views** — the Home window now opens into **Brain**, a personal dashboard built from source-backed cards. Pick an outcome during onboarding (resume your work, follow through after meetings, understand how you work, or turn repeated work into a process) and screenpipe installs one or two matching pipes and creates a named dashboard for you. Nothing shows up until a real, source-backed result exists — no fake sample cards — and once it does, you can drag, resize, refresh, regenerate, or rate any card, or spin up a new dashboard from natural language. Existing users get a new **My dashboard** the first time Brain opens with no saved views. See [second brain](/second-brain), [pipes](/pipes), and [getting started](/getting-started).
* **Google Calendar and Gmail in onboarding** — the optional connections step now offers **Google Calendar** (read-only, via screenpipe's own OAuth) and **Gmail** (managed authorization via Composio) in place of Notion and ChatGPT, so calendar and email context are wired up before you finish setup. Obsidian and detected local AI tools remain in the same step. See [connections](/connections) and [getting started](/getting-started).

### updates

* **HTML artifacts open rendered by default** — HTML artifacts now open as rendered pages instead of raw source, so a snippet like `<h1>report</h1>` shows the heading immediately in both the artifact viewer and Brain rows. Raw HTML is still one click away behind **view source**, and the same sandboxed iframe and CSP apply — empty or truncated files never render. See [pipes](/pipes).
* **consistent Live View time range on every macOS version** — the Live View time-range picker now uses screenpipe's own selector instead of the native `<select>` control, so it looks and behaves the same on macOS 15 and macOS 26. Time-range persistence and the exact window sent to connected pipes are unchanged. See [second brain](/second-brain).

### bug fixes

* **Brain opens to a real dashboard on first run** — opening Brain with no saved Live Views used to leave you on an empty AI prompt with no dashboard shell. Screenpipe now creates and persists a usable **My dashboard** on first open, and the first row of Brain content on Windows no longer slides under the 32 px draggable title bar. Narrow windows also get tighter horizontal padding without changing the desktop layout. See [second brain](/second-brain).
* **Artifacts tab no longer shows internal Live View state** — Live View records that were stored as JSON for card refresh, revision history, and ratings used to leak into the **Artifacts** tab next to your real files. That internal state is now hidden from the default artifacts list (search, filters, pagination, and totals all skip it) while remaining available to the CLI and API for anything that explicitly opts in. See [pipes](/pipes).

## week of july 20, 2026

### new features

* **simpler onboarding with one-click app connections** — the setup flow has a redesigned Connect apps step that scans your machine for installed AI tools — Claude Desktop, Cursor, Codex, Windsurf, ChatGPT, Obsidian, Openclaw, Hermes, and more — and lets you wire each one to screenpipe with a single click. Detected tools are surfaced first so you're not scrolling past apps you don't use, a "connect all" button turns on every detected tool at once, and Obsidian auto-picks your first discovered vault (you can change it later in Settings → Connections). If a connection fails, the card now shows a clear, human-readable error instead of a raw stack trace. See [connections](/connections) and [getting started](/getting-started).\n- **exclude apps from system-audio capture (macOS 14.4+)** — you can now keep specific apps out of screenpipe's system-audio recording. Open Settings → Recording → "Exclude apps from system audio," pick any `.app` with the Finder picker, and the app appears as a chip in the exclusion list with its icon. Apply & Restart wires the exclusions into the audio engine, and the underlying `~/.screenpipe/audio-exclusions.json` file hot-reloads so edits take effect without a manual restart. macOS will prompt once for the new `NSAudioCaptureUsageDescription` permission the first time an exclusion is applied. See [meeting transcription](/meeting-transcription) and [permissions](/permissions).
* **exclude apps from system-audio capture (Windows)** — the per-app audio exclusion feature now works on Windows too. Add apps to your exclusion list and screenpipe will drop their audio from system-audio recordings, matching the macOS behavior. Edits to the exclusion file take effect live without restarting capture, and hand-edits saved from Notepad (which adds a UTF-8 BOM) are handled correctly. The Windows capture path was also tuned to keep exclusion checks off the time-critical audio thread, eliminating the receive gaps and audio discontinuities that could otherwise show up while an exclusion was active. See [meeting transcription](/meeting-transcription).
* **bring your own MCP servers** — you can now register custom MCP servers in your screenpipe config and route them through the built-in AI agent alongside screenpipe's own MCP tools. Existing setups (including Hermes) are picked up automatically, so tools you've already wired up keep working without reconfiguration. See [MCP server](/mcp-server) and [connections](/connections).
* **cleaner microphone capture with VoiceProcessingIO (Apple silicon)** — microphone recording can now opt into macOS VoiceProcessingIO for hardware-assisted echo cancellation and noise suppression on Apple silicon Macs, producing noticeably cleaner input for meetings and dictation. Off by default; enable it in audio settings when you want the extra processing. See [meeting transcription](/meeting-transcription).

### updates

* **CLI auto-connects every detected AI tool on startup** — when the screenpipe CLI starts, it now scans for every supported AI coding tool installed on your machine (Claude Code, Cursor, Cline, Continue, Copilot CLI, Gemini CLI, opencode, and more) and wires them up to screenpipe over MCP in one shot, instead of asking you to connect each one by hand. Existing custom MCP servers you've already configured (including Hermes) are preserved untouched, so previously wired-up tools keep their settings. See [MCP server](/mcp-server) and [connections](/connections).
* **hosted AI catalog cleaned up and modernized** — the hosted chat gateway and desktop model picker no longer list retired options (Google Open MaaS, Gemini 3, selectable Gemma 4, GPT‑OSS/OpenRouter‑era choices, Claude Haiku, and older Sonnet families). Saved presets that pointed at any of those IDs are now transparently upgraded: hosted Claude legacy IDs move to GPT‑5.6 Luna, and direct Anthropic BYOK legacy IDs move to Claude Sonnet 5. Paid Auto and outage fallback now flow through Luna → Sonnet 5 → GPT‑5.4 mini (the free preview stays bounded to Luna → GPT‑5.4 mini). Existing chats and pipes keep working — you'll just be routed to a current model instead of a decommissioned one. See [connections](/connections).

### bug fixes

* **Electron apps get the full accessibility walk** — VS Code, Discord, Slack, and other Electron apps sometimes had their content indexing cut off partway through the accessibility tree, so screen text from those apps could be missing from search results. The depth counter now resets at `AXWebArea` boundaries, giving Electron apps the full walk budget and restoring complete text capture. See [search screen history](/search-screen-history).
* **USB audio devices no longer drop into silence on macOS** — USB microphones and interfaces whose native sample rate did not match the system's could silently stop delivering audio mid-session on macOS. Sample-rate mismatches are now handled correctly, so USB capture keeps flowing throughout the recording. See [troubleshooting](/troubleshooting).
* **free hosted chat accepts one verbose tool** — the free hosted chat gateway previously rejected requests containing a single tool with a long description or a large parameter schema. The size cap now applies to the combined byte size of all tool definitions in a request instead of each tool individually, so one verbose tool goes through as long as the aggregate stays under the limit. Pi and pipes that ship a rich schema for a single tool no longer see spurious `free_chat_tools_too_large` errors. See [pipes](/pipes).

## week of july 17, 2026

### bug fixes

* **cleaner pipe sidebar after onboarding** — pipes you added manually (not from the pipe store) no longer clutter the sidebar list, and the pipes section now auto-expands the first time you finish onboarding so your newly installed pipes are visible instead of hidden behind a collapsed group. See [pipe store](/pipe-store).
* **streaming capture keeps running over RDP** — the SDK's streaming capture path could stop delivering frames when the desktop app was accessed over a Remote Desktop (RDP) session, because RDP swaps the active session's graphics stack out from under the capture stream. Streaming now survives the session transition and keeps producing frames while you're connected over RDP. See [for developers](/for-developers).

## week of july 13, 2026

### updates

* **faster, broader browser URL detection** — capturing the URL of the active browser tab no longer shells out to AppleScript on every walk of the accessibility tree. screenpipe now reads the URL directly from the browser's web area, dropping per-check cost from \~150–200 ms to \~2 ms and cutting background CPU during recording. The new path also covers every Chromium-family browser (Chrome, Edge, Brave, Vivaldi, Opera, Arc) and Electron apps, not just Arc. Non-web schemes like `chrome://` and `arc://` are filtered out so they no longer pollute your browsing history. See [search screen history](/search-screen-history).

### bug fixes

* **auto-update no longer gets stuck in a restart loop** — applying an update from the tray or the in-app banner used to be able to fire twice, so the app would tear down and relaunch in parallel and the health watchdog would respawn the server mid-restart. Restart-to-update now runs exactly once regardless of how it's triggered, so updates finish cleanly on the first try. See [getting started](/getting-started).
* **pipe sidebar now shows exact run counts** — the run count next to each pipe in the sidebar now reflects the true number of executions stored locally, not just the recent chat sessions loaded in memory. Older runs load 10 at a time as you scroll, so opening a long-running pipe like `digital-clone` now shows its real history instead of an undercount. See [pipe store](/pipe-store).

## week of july 6, 2026

### new features

* **meeting piggyback: capture the app's audio and the right mic (experimental)** — turn on **meeting piggyback (experimental)** in **settings → recording** and, when screenpipe detects a meeting, capture follows the meeting: the app's own audio via a per-process tap (no music or notification bleed from the rest of your system) plus the mic the meeting app actually opened (right device even when it isn't your OS default). Any failure — unsupported OS, mic loss, tap death — falls back to your normal capture with no gap. Off by default; macOS 14.4+ only for now (Windows toggle is visible but currently defers to the stable path until the loopback supervisor ships). See [meeting transcription](/meeting-transcription).
* **mic capture-health notifications** — screenpipe now watches for the case where the meeting app is clearly recording but your mic is delivering pure silence, silently restarts the stream first, and only notifies you if the problem persists (≥2 min of app-active silence, at most one alert every 30 min, never for muted mics). See [meeting transcription](/meeting-transcription).
* **batch select and delete for pipes** — each pipe's three-dot menu now has a **select** option that swaps the search bar for a selection toolbar (select all, count, delete, close). Confirm once to clean up several pipes at a time instead of deleting them one by one. See [pipe store](/pipe-store).
* **pill-based attendee editor for meeting notes** — attendees on a meeting note are now editable pills — add, remove, or edit each participant inline instead of retyping the whole list. See [meeting intelligence](/meeting-intelligence).
* **macOS quit confirmation** — quitting the app on macOS (⌘Q or menu **Quit**) now asks to confirm so recording sessions and unsynced work aren't ended by accident.

### updates

* **cleaner pipe cards** — install, run, and configure actions on each pipe card now appear on hover, so the store and installed lists stay tidy while everything is one hover away. See [pipe store](/pipe-store).
* **screen recording permission is now requested last** — on macOS, onboarding and permission recovery ask for microphone and accessibility first and screen recording last, so an early screen-recording prompt no longer relaunches the app before the rest of setup completes. See [permissions](/permissions).
* **faster searches over redacted history** — search and privacy-filter queries over long histories run noticeably quicker thanks to new database indexes and periodic optimization on the local store. No settings to change. See [privacy filter](/privacy-filter).
* **Windows: recording yields to your foreground app** — background capture and indexing on Windows now run at a lower priority than whatever app you're using, so screenpipe stays out of the way during heavy work while still recording continuously.

### bug fixes

* **fixed multi-GB memory leak in audio recording** — long recording sessions no longer balloon in memory usage. Speaker diarization now reuses a cached segmentation model instead of reloading it per chunk, and the speaker cluster store is bounded so it can't grow without limit. Expect noticeably lower RAM after extended meetings and all-day capture. See [meeting transcription](/meeting-transcription).
* **capture writes preserved during database contention** — the recorder no longer drops frames or transcript rows when the local database is briefly busy; writes are retried instead of silently discarded, so long sessions end up with complete history.
* **no more duplicate Automate My Work pipes** — installing or triggering an Automate My Work pipe twice no longer creates a second copy in your library. See [pipe store](/pipe-store).
* **no more duplicate or mis-titled chats across windows** — opening chat in multiple windows no longer creates duplicate sessions or shows the wrong title on either side; each window stays in sync with the correct conversation.
* **shortcut settings no longer crash the app** — a missing shortcut list on older installs is now backfilled on launch instead of throwing and breaking the whole window.
* **audio recovery on slow boot** — after granting microphone permission on a slow-booting Mac, screenpipe now waits for capture to finish coming up instead of giving up and staying silent until the next restart.
* **fewer false "audio stalled" errors after meetings** — the health check no longer flags a stall or returns a 503 while screenpipe is catching up on transcription right after a long meeting.
* **shared mic sample rate no longer forced** — devices that don't support screenpipe's preferred sample rate now negotiate their own, which fixes silent or distorted mic capture on some external interfaces, especially with meeting piggyback enabled. See [meeting transcription](/meeting-transcription).

## week of june 29, 2026

### new features

* **↑ / ↓ to recall recent chat messages** — pressing the up arrow in an empty chat input now cycles back through your recent messages (down to move forward), so you can re-send or tweak a previous prompt without retyping. Works across pipe chats and the main chat surface.
* **opt-in secret scrubbing for pi agent logs** — pi agent session logs can now be scrubbed of secrets by a background worker before they're shared or stored. Off by default; toggle it on in **settings → privacy** or via the CLI. See [privacy filter](/privacy-filter).
* **actionable notification inbox** — the bell in the top bar is now a persistent inbox: notifications stick around after you close the popover, and each one can carry actions you run inline (including a new `chat` action that runs a prompt without needing a pipe). See [home](/home).
* **pause recording per display from the dot popover** — click the recording dot in the menu bar to pause or resume screen capture for a specific monitor without stopping the others. Handy when you want to keep recording a work display while muting a personal one. See [permissions](/permissions).
* **feedback shares settings + PII-redacted logs** — the in-app **Send feedback** flow now bundles your current settings and runs shared logs through the cloud PII model before upload, so support gets enough context to reproduce issues without you scrubbing files by hand. See [troubleshooting](/troubleshooting).
* **enterprise: remote-trigger device log collection** — admins can now request logs from an enrolled device on demand; the always-on background loop picks up the request and uploads without user action. See [intune deployment](/intune-deployment).
* **opt-in software echo cancellation for the mic** — turn on software AEC (WebRTC AEC3) to strip speaker echo from your microphone during meetings and recordings, so transcripts and voice input stay clean even without a headset. Off by default; enable it in **settings → audio** or via the CLI. See [meeting transcription](/meeting-transcription).
* **smarter meeting-start detection (macOS + Windows)** — screenpipe now notices a meeting the moment your mic goes live and attributes it to the app or website holding it (Zoom, Meet, Teams, browser calls, and more), so meeting capture starts on time without relying on calendar entries or window titles. See [meeting intelligence](/meeting-intelligence).
* **Zendesk connector: OAuth fallback guidance** — the Zendesk connect flow now walks you through the manual OAuth fallback when the standard flow can't complete, so tenants with stricter admin policies can still finish setup. See [connections](/connections).
* **browse and manage Pi agent extensions from settings** — a new **Pi extensions** card in **settings → connections** lists every available extension with a description and one-click install / update / uninstall — no manual CLI needed to add capabilities to the bundled Pi agent. See [connections](/connections).
* **full agent trajectory saved for every pipe run** — each pipe run's complete event stream (assistant turns, tool calls, tool results) is now persisted to disk as JSONL, so you can export runs for evals, fine-tuning, or postmortems. Retention keeps the newest 50 runs per pipe by default. See [pipes](/pipes).
* **higher-fidelity action capture for search and agents** — coalesced scroll capture is now on by default (one row per gesture instead of \~60-120 rows per second), captured clicks include the ancestor path of the element you interacted with, and screen captures now snapshot the full display layout. Cleaner data for search, memory, and pipe agents with no user-visible overhead. See [search screen history](/search-screen-history).
* **retention defaults tightened** — new desktop installs enable local retention out of the box (14 days for media), so first-run disk usage stays bounded without needing to open settings. The CLI keeps data forever by default (retention off) unless you pass `--retention-days`, so headless deployments never delete data by accident. Existing installs are unaffected. See the [CLI reference](/cli-reference) and [privacy data flow](/privacy-data-flow).
* **enterprise: managed screenshot capture controls** — admins can now lock screenshot capture behavior (frequency, per-monitor selection, disabled state) through managed settings, so recording policy is enforced consistently across a fleet. See [intune deployment](/intune-deployment).
* **enterprise: telemetry tagged by org and device** — telemetry events from enrolled devices now carry the organization ID and a stable device identifier, so admins can slice usage and health by team or device. See [intune deployment](/intune-deployment).
* **`SCREENPIPE_SKIP_ONBOARDING` env-var escape hatch** — set `SCREENPIPE_SKIP_ONBOARDING=1` to boot straight into the main view. Useful for corp VDI, headless containers, MDM-preseeded deploys, and any environment where interactive onboarding can't complete. Off by default; onboarding can still be reopened from settings. See [getting started](/getting-started).
* **pipe sessions collapse into a single group in the sidebar** — the chat sidebar now folds every session for the same pipe under one **Pipes** group instead of scattering them across recents, so the list stays short even after a busy week. See [pipes](/pipes).

### updates

* **trigger setup opens the exact connection dialog you need** — when a pipe trigger requires a connection that isn't set up yet, the **Connect** CTA now opens the specific connection dialog (Slack, Notion, Obsidian, …) directly instead of dropping you on the connections list. See [pipes](/pipes) and [connections](/connections).
* **friendlier onboarding errors when a connect step fails** — the connect-step failure copy on first run has been rewritten for non-technical users, with clearer language about what went wrong and what to try next. See [getting started](/getting-started).
* **OpenRouter removed from the AI gateway** — the last bit of background traffic that ran through OpenRouter (Qwen3.5) is now routed to GLM-5 directly. No action needed; behavior is unchanged for end users.
* **storage tabs and backend sync removed from settings** — the storage archive and backend sync tabs are gone, along with their duplicative controls. Retention and cloud archive continue to live in **settings → storage**, and cloud archive is unchanged. See [cloud archive](/cloud-archive).
* **snapshot compaction setting hidden** — the low-level snapshot compaction toggle has been removed from **settings → recording** now that compaction runs reliably in the background. Disk usage still follows your retention settings; nothing to configure. See [search screen history](/search-screen-history).
* **timeline hides audio-only markers while browsing** — when you're navigating the visual timeline, markers for audio-only segments no longer clutter the strip, so the frame view stays focused on the screenshot ranges you're scrubbing through. See [search screen history](/search-screen-history).
* **search input no longer autocorrects your query** — the search box no longer runs OS-level autocorrect or autocapitalize, so exact-match terms (usernames, code, paths) go through untouched.
* **feedback attachment window is now bounded** — the **Send feedback** flow now attaches a bounded recent-recording window instead of the last unbounded slice, so submissions upload faster and don't include unrelated older data. See [troubleshooting](/troubleshooting).
* **lower background CPU from the resource monitor** — the app-health / resource-monitor loop now wakes far less often and coalesces its samples, cutting idle background CPU on all platforms.
* **no more surprise app relaunch after a DB blip** — a transient database error no longer triggers an automatic full-app relaunch. The engine now recovers in place; a manual restart is only prompted when something genuinely wedged.
* **chat hides "thinking" blocks and merges work into one rail** — reasoning-model thinking blocks are now always hidden (the toggle is gone), and per-tool "work" groups collapse into a single rail with a time-to-thought duration instead of a wall of intermediate narration. Groups stay open while the model is working and auto-collapse when the turn ends.
* **settings back button returns to the previous page** — the back button in **settings** used to always jump home; it now walks you back through the pages you actually visited.

### bug fixes

* **search filters no longer get stuck on stale state** — the filter chips at the top of the search page could keep showing a previous filter's UI state after you cleared or switched filters, so the visible chips and the actual query disagreed. Filter UI state is now reset cleanly on every change. See [search screen history](/search-screen-history).
* **untitled calendar events stay untitled** — events with no title used to default to a literal "(no title)" string, which leaked into summaries, prompts, and notifications. Untitled events now render as empty. The recording-prewarm toast that could fire twice on the same event is also deduped. See [meeting intelligence](/meeting-intelligence).
* **timeline scrolls smoothly with a trackpad** — two-finger trackpad scrolling on the timeline used to jump or skip frames instead of navigating continuously. Trackpad scroll now navigates the timeline cleanly. See [search screen history](/search-screen-history).
* **permission monitor doesn't false-alarm on screen unlock or display change** — unlocking your Mac or plugging/unplugging a display could briefly read system permissions as "revoked" and pop a misleading permission-lost warning. The monitor now graces these transitions, so transient OS state never trips a false alert. See [permissions](/permissions).
* **menu-bar menu opens on the first click (macOS)** — the macOS tray menu used to flash open then immediately close on the first click after launch, requiring a second click to actually use it. First-click open now works.
* **audio reconciliation no longer loops on dedup collisions** — a rare race in audio dedup could leave the reconciliation loop retrying forever on a UNIQUE-constraint collision, spiking CPU. The loop now exits cleanly on the collision. See [meeting transcription](/meeting-transcription).
* **app refocuses correctly after the macOS permission grant** — granting screen-recording permission during onboarding used to leave the app behind other windows with no way to bring it forward. The app now reliably shows, unminimizes, and refocuses after the system grant, so onboarding continues without a manual switch. See [getting started](/getting-started).
* **opening the bell no longer marks every notification read** — clicking the notification bell used to instantly mark the entire inbox as read, so unread counts vanished the moment you peeked. Notifications now stay unread until you actually open or act on them. See [home](/home).
* **search results grid reflows to fit the window** — resizing the app used to leave gaps or clip the last column on the search page. The results grid now auto-fills the container and reflows cleanly at every width. See [search screen history](/search-screen-history).
* **Arch Linux AppImage launches again** — bundled `libavif` / `libsharpyuv` conflicted with system libraries on Arch, preventing the AppImage from starting. The conflicting bundled copies are now stripped and Arch is covered by a launch smoke test.
* **enterprise: Windows updater falls back cleanly** — a failed update on Windows in the enterprise build could leave the app stuck instead of retrying through the fallback path. The fallback now runs as designed and the app updates on the next attempt.
* **redacted OCR words no longer leak through per-word text** — after PII redaction, the per-word OCR data served by the text-overlay endpoints still held the raw recognized words, making redacted text reconstructible. Words are now scrubbed alongside the main OCR text while bounding-box geometry stays intact. See [privacy filter](/privacy-filter).
* **pipes stop retrying quota errors as rate limits** — pipes that hit a real quota or billing cap used to be retried as if they were transient rate limits, wasting time and sometimes masking the actual failure. Terminal quota errors now surface immediately, while genuine rate limits still retry and fall back as before. See [pipes](/pipes).
* **timeline uses less memory on dense days** — long recording days could push the timeline into heavy memory pressure and drop parts of the visible range. The timeline now downsamples dense ranges while preserving what you're looking at, so scrolling stays smooth. See [search screen history](/search-screen-history).
* **search keeps returning frames when one frame fails** — a single bad frame in a search result batch used to drop every other frame in that batch. Failures are now isolated per frame so the rest of the results still come through, with OCR and frame alignment preserved. See [search screen history](/search-screen-history).
* **macOS: no more SIGABRT crash on quit** — quitting the app on macOS (Cmd+Q, tray quit, or window close) could crash during shutdown teardown. Quit now runs through a single, unified teardown path and exits cleanly.
* **Linux AppImage: Pi installer runs from AppImage builds** — installing pi from inside the Linux AppImage could fail because a bundled library path was leaking into bun's environment. The path is now scrubbed on Linux and the install completes.
* **enterprise: activation handles more edge cases cleanly** — enterprise license activation is more resilient across stale subscription state, license prompt races, and offline retries, so devices don't get stuck in a half-activated state. See [intune deployment](/intune-deployment).
* **pi-agent self-heals when its install is corrupted** — a Pi agent install left half-copied by an app quit, antivirus lock, or file-system error used to crash-loop forever with a "cannot find module" error, forcing users to manually wipe the install directory. Corrupt installs are now detected, repaired, and rebuilt automatically on next launch.
* **tray no longer stuck on "Starting…" when recording is fine** — the menu bar could sit on "Starting…" forever while capture was actually running (`/health` reporting recording), typically after an audio toggle or a background engine respawn. The tray now follows recording intent, so status matches reality.
* **duplicate transcript lines after a meeting ends** — post-meeting reconciliation could double every line in a stopped meeting's transcript because the same utterance came back from two endpoints with slightly different speaker labels. Duplicates are now collapsed. See [meeting transcription](/meeting-transcription).
* **Windows: recording no longer freezes foreground apps** — the Windows accessibility worker was making synchronous cross-process calls on the target app's UI thread every 2 seconds, producing 100ms+ message-pump stalls in complex apps (Chrome, Slack). The worker no longer runs while its output is unused, so foreground apps stay responsive during recording.
* **retention loop no longer rescans your entire history every 5 minutes** — in Media / Lean retention modes the background cleanup task was restarting its walk from the oldest timestamp on every 5-minute cycle, hammering the DB. The loop now resumes from where it left off, and NULL-poisoned `NOT IN` queries that could skip cleanup are fixed too. See [privacy data flow](/privacy-data-flow).
* **update restart works even when boot phase is "error"** — a boot error used to permanently block the update banner's "restart to apply" button, trapping users on the old build until they quit and relaunched manually. Restart-on-update now proceeds through a failed boot.
* **new installs don't pre-download the 800 MB whisper model** — on first launch the app was fetching the whisper-large-v3-turbo model even when your selected transcription engine was Deepgram, screenpipe cloud, parakeet, or qwen3. The pre-download is now skipped for non-whisper engines and only fires if you switch to whisper. See [meeting transcription](/meeting-transcription).
* **macOS Process Tap no longer churns on quiet machines** — the audio silence watchdog was tearing down and rebuilding the CoreAudio Process Tap every 2-8 minutes when nothing was playing (\~150 rebuilds/day). Silence is now recognized as expected on a quiet machine and the tap is left alone. See [meeting transcription](/meeting-transcription).
* **pipes can continue after a step completes** — pipes that tried to keep running after a "completed" step could stall or return an error instead of moving on. Post-completion continue calls now work as intended. See [pipes](/pipes).
* **owned-browser session fallback + ChatGPT model picker** — LinkedIn and other owned-browser logins now fall back cleanly when the primary session path can't complete, and the ChatGPT connector correctly restores your selected model instead of silently reverting to the default. See [connections](/connections).
* **LinkedIn owned-browser login handles auth cookies correctly** — LinkedIn's cookie-block prompt used to trap the owned-browser login flow. The login page now completes and returns you to screenpipe. See [connections](/connections).
* **CLI retention actually enables when auto-enable runs** — the CLI's automatic retention configuration used to POST to itself without the local auth token, silently 403'ing and never turning retention on — leading to unbounded DB growth. The self-call now authenticates properly. See the [CLI reference](/cli-reference).
* **retention default hardening across store recovery** — a settings store recovered after corruption used to look like a fresh install and would flip the retention default on over an existing archive. The default is now gated on the presence of the actual data directory, so recovered installs never delete media unexpectedly. See [privacy data flow](/privacy-data-flow).
* **chat summary cards don't apply stale preset settings** — clicking a chat summary card could send the new message with the previous chat's preset (model, tools, system prompt) because the click captured a stale closure. The correct preset now applies on every card click.
* **macOS restart no longer aborts teardown** — restarting the app on macOS could abort mid-teardown, leaving background workers running under the old process. Restart now completes teardown cleanly before relaunching.
* **activity summary weekly context is correct again** — the weekly `activity-summary` output on MCP and the Home page was pulling context from the wrong window on the boundary between weeks. The window is now aligned to your local week. See [mcp server](/mcp-server).
* **timeline frame hook order fixed** — a hook-order regression could throw a React error and blank the frame preview on the timeline in some navigation paths. The preview now renders reliably. See [search screen history](/search-screen-history).
* **Pi picks the right reasoning mode for GPT reasoning models** — GPT reasoning models (o-series) weren't being flagged as reasoning models in Pi's generated config, so responses came back without reasoning enabled. They're now marked correctly.
* **search frame previews load the right frame** — the search results page could show a fallback frame that didn't match the actual hit when the primary frame URL failed to resolve. The fallback now matches the search hit. See [search screen history](/search-screen-history).
* **enriched click context is preserved end-to-end** — the accessibility recorder was dropping the enriched click context (ancestor path, roles) when merging events. Downstream search and pipes now see the full click payload.
* **typing and clipboard no longer fire a capture pipeline per keystroke** — key-press, typing-pause, and clipboard triggers used to bypass the capture debounce, chaining a screenshot + tree walk + OCR + DB write on every keystroke during continuous typing. They now share a 1.5s debounce floor and dedup with other triggers, cutting redundant captures by \~90% during typing bursts while still capturing the end of every burst.
* **heavy DBs no longer corrupt with "file is not a database"** — an inline WAL auto-checkpoint on the committing connection could copy a WAL frame to the wrong main-DB page under heavy concurrent load, clobbering the SQLite header. Checkpointing now runs exclusively from a single background maintainer with a bounded WAL cap, closing the corruption path that only reproduced on the largest (multi-GB, high-concurrency) installs.
* **macOS RSS leak from the audio meeting watcher** — the audio meeting-detection loop was leaking one `NSRunningApplication` (plus an `NSLock` and a LaunchServices record) every second, contributing hundreds of MB of steady RSS growth on long-running macOS sessions. Lookups now run inside an autorelease pool and the leak is gone.
* **Windows accessibility walk budgets are enforced again** — the Windows a11y walk didn't honor mid-walk deadlines or the fragile-provider skip on the paired path, and lacked lightweight focused-window metadata — so per-app walk budgets, the terminal / Obsidian OCR throttle, and lock-screen skip were effectively inoperative. All three are back in force, and Chromium / Electron windows now go straight to the fallback walker instead of re-discovering the need every cycle. See [permissions](/permissions).

## week of june 24, 2026

### new features

* **Outlook email connector** — connect just your Outlook mailbox without granting the full Microsoft 365 surface. The new `outlook-email` connection in **settings → connections** authorizes mail-only scopes (read / read-write / send) against Microsoft Graph and stores its token separately from the Teams / Microsoft 365 integration, so the two coexist on the same account. See [connections](/connections).
* **connection-aware trigger picker for pipes** — building a triggered pipe now shows real channel / database / folder selectors instead of free-text. When you pick a Slack, Notion, or Obsidian trigger you see the connected accounts and their resources directly; if the app isn't connected yet the picker surfaces a one-click **Connect** CTA. Multi-account is first-class — pick which workspace fires the trigger. See [pipes](/pipes) and [connections](/connections).
* **per-app connection triggers (Obsidian, Slack, Notion)** — pipes can now fire when a connected app produces a new item (a new Obsidian note, Slack message, or Notion page in a watched database). Each subscription tracks its own cursor and starts from "now" on install, so you don't get backfilled with a year of history the first time you wire a trigger. See [pipes](/pipes).
* **self-improving memory layer for store pipes** — every pipe in the store now opens with a small "continuous improvement" block: it reads a `memory.md` sidecar at the start of a run and can append up to a few dated, one-line lessons at the end. Append-only, capped at \~150 lines / 8 KB, and the pipe never edits its own prompt — so updates from the store still apply cleanly. Pipes carry forward what they learned about your projects, people, and preferences without you maintaining anything. Existing installs are left untouched; new installs ship with the block. See [pipes](/pipes).
* **scriptable notification settings: DND, per-pipe mutes, presets** — the notifications page is now grouped, searchable, and has a global **master switch** that mutes everything except the recording-stopped alert. Per-pipe mute toggles are now actually enforced server-side (they used to be cosmetic), so muting a chatty pipe really silences it. See [home](/home).
* **graceful background model downgrade + in-app advisories** — a Free / Basic pipe pinned to a now-gated model (e.g. Sonnet) used to silently 403 on every background run. Background traffic now downgrades to `auto` and keeps running on a free model instead of failing in the dark; interactive requests still show the visible upgrade prompt. Silent pipe failures that *can't* auto-recover surface as a calm, dismissible in-app advisory (bottom-right) so you actually find out. See [pipes](/pipes).
* **right-click context menu in the chat sidebar** — right-clicking a chat row opens a context menu at the cursor with Pin, Rename, Move to group, Archive, Delete — same actions as the hover ⋮ kebab, just faster. Single-letter shortcut hints (P / R / A / D) act on the highlighted row.
* **summarize button on the meeting note dock** — the summarize action used to live only in the top toolbar. It's now also in the bottom dock next to **stop**, reachable from both ends of a long note without scrolling. See [meeting intelligence](/meeting-intelligence).
* **chat side inspector for outputs and sources** — a new right-side panel in chat surfaces the artifacts a run produced (files written, edits made, pipe outputs) and the sources it pulled from, alongside the conversation. Toggles for the inspector, browser webview, and file preview now sit in the chat header so you can flip between them without losing context; the panel floats on narrow windows so it doesn't crowd the message column.
* **"Move to group" submenu now lists every group you see in the sidebar** — moving a chat used to only show manual groups, so the submenu looked empty for most people. It now lists manual groups *and* the auto pipe-groups in your sidebar, deduped. Moving a chat into a pipe-group name folds it into that same row instead of creating a duplicate section.
* **inline preview for the "AI audio & video analysis" setting** — the cloud media-analysis toggle now sits in **settings → General** next to the other cloud-AI toggles (it used to live under Privacy) and ships with a small animated illustration showing how audio and video/image streams converge into an attested enclave, so it's clear what the switch covers. Behavior is unchanged; respects reduced-motion. See [privacy data flow](/privacy-data-flow).
* **artifacts are searchable by full content** — saved artifacts (files, pipe outputs, chat exports) are now indexed for full-text search, so you can find them by anything in the body — not just by title or filename. See [second brain](/second-brain).
* **one-click OAuth for 10 more connectors** — Linear, Stripe, Sentry, Intercom, Asana, monday.com, ClickUp, Airtable, Confluence, and Jira now connect with a single **Connect** click — no API key to paste, no app to register. The same OAuth panel used by Krisp and Plaud now powers these tiles, and the token is stored in your secret store. Already-connected users keep working as-is; the legacy key / token form is still available under an **advanced** disclosure if you need to view or rotate credentials. See [connections](/connections).
* **Company Brain bundled pipe** — a new guided pipe sets up a shared "company brain" in one pass: it reads the last 7 days of your work (read-only, on-device), picks a shared destination from your existing connections, and installs a workday digest pipe that summarizes decisions, SOPs, open loops, and who-knows-what to a local file. Pushing the digest to the shared destination is opt-in — ask-never-push by default. Install from the pipe store. See [pipes](/pipes).
* **mobile control page** — a new `/mobile` page in the app lets you drive screenpipe from a phone browser: connect to your local or a remote instance, see live online/offline status, list and run pipes, and fire a chat prompt — useful for checking in or kicking off a run from another room without opening the desktop app. See [for developers](/for-developers).
* **friendlier onboarding for non-technical users** — the final onboarding step no longer shows raw store slugs ("digital-clone", "personal-crm") or "install 2 pipes →". Default cards now use plain names ("Your AI twin", "People memory") and the button reads "turn it/them on →", so first-time users who aren't developers can finish setup without learning the word "pipe". Install behavior is unchanged. See [getting started](/getting-started).
* **pi coding agent scrubs secrets from session logs at rest** — the embedded pi agent persists every bash output and tool result to disk for `--continue` history, which used to keep credentials it touched (AWS keys, GitHub PATs, JWTs, bearer tokens, Postgres passwords) in plaintext. A secrets-only scrub now runs best-effort after each pi run over recently-touched session files: only credential spans are rewritten; ordinary text (names, emails, code) is left intact so history stays readable.

### updates

* **upgraded image PII redaction model (rfdetr\_v13)** — the on-device image privacy filter now uses a new detection model trained on real labeled frames. Real-secret recall jumped from effectively 0% to 92–100% on frames that contain a leaked credential, while false-redactions on ordinary frames dropped sharply. The model is also lighter (\~44% less compute, 60 MB fp16) and downloads with a checksum verify. See [privacy filter](/privacy-filter).

* **pipe execution chat display polish** — several rough edges in how pipe runs render in chat are cleaned up: the system prompt now collapses into a labeled summary instead of a wall of text, pipe titles stay consistent (no AI-generated rename), "open in chat" reuses the existing conversation instead of reloading the page, copy-output shows a check-icon confirmation, and navigating to a chat inside a pipe group auto-expands that group. Incomplete pipe runs no longer get saved to history mid-execution. See [pipes](/pipes).

* **"automated" replaces "scheduled" and "triggered" in the pipes filter** — the pipes list used to split self-running pipes across two filter tabs. They're now merged into one **Automated** tab, with **Manual** kept separate for run-on-demand. Running, sorting, favorites, and cloud are unaffected.

* **store "update" UX is in-place** — the **UPDATE** badge on a store pipe card now calls the proper update path (preserves your schedule, model, and enabled state, keeps a `.bak`) instead of re-installing. The badge clears on the card itself with no whole-page refresh and no forced jump to **My Pipes**. Locally-edited pipes get an explicit overwrite-confirm dialog. The badge is also now grayscale instead of off-brand amber. See [pipes](/pipes).

* **premium models gated to the Business plan** — Sonnet 4.5, Gemini 3 / 3.1 Pro, and Qwen3.5-397b joined Opus / GPT-5.x as Business-only. Free / Basic plans keep `auto` and the free / fast models (the free experience is effectively unlimited). Locked models stay visible in the picker as a greyed upsell with a one-click upgrade path, and an at-the-cap banner appears when you hit the daily paid-message limit.

* **DeepSeek removed from the AI gateway** — DeepSeek is no longer offered as a model option in the cloud AI gateway.

* **free models get their own, much higher per-minute rate limit** — free models (`auto`, GLM, Kimi, Gemini Flash, …) used to share the same low per-minute bucket as paid models, so the "switch to a free model to avoid rate limits" advice didn't actually help. Free traffic now meters in a separate, much larger bucket (60 / 120 / 240 per minute for anonymous / signed-in / subscribed) and never blocks paid requests. The per-user daily cost cap is unchanged.

* **clicked-element labels in captured actions** — recorded clicks used to read "click AXGroup" most of the time on the web, because macOS hit-testing lands on a generic container. The capture now descends into the labeled control under the cursor and records something specific like "click AXButton: Continue" or "click AXTextField: Email", so captured action streams are usable for automation and SOP generation.

* **enterprise: device logs auto-submit when enrollment can't reach upload** — enrolled devices that weren't uploading logs (network, misconfig, paused agent) now auto-submit on a watchdog so support can see them without a manual back-and-forth. Cooldown survives restarts, so a healthy device doesn't spam uploads.

* **enterprise license prompt moved to the top of settings** — the enterprise license entry point now sits at the top of the settings list instead of being buried near the bottom, so enrolling a managed install is easier to find.

* **enterprise: managed device settings are now actually enforced** — several **Managed settings** policies were silent no-ops on devices: **Screen recording: Always off**, **Audio recording: Always off**, **Meeting detector**, **Listen on LAN**, **Transcription engine**, and **Analytics**. They now apply on the device (engine restarts once when a value changes; analytics applies live with no restart), so admin policy actually takes effect. See [Intune deployment](/intune-deployment).

* **enterprise: hidden-mode auto-update respects MDM/Intune** — devices running in hidden mode used to force the in-app auto-updater on, which would fight an org that manages updates through MDM or Intune. The hidden-mode force is now skipped when updates are externally managed, so MDM-driven rollouts stay in control. See [Intune deployment](/intune-deployment).

* **enterprise: clearer "centralized data not enabled" message** — when an org hasn't toggled on centralized data in the dashboard, enrolled devices used to log a misleading "license rejected by ingest endpoint" even with a valid, active license. The device log now says plainly that centralized data is not enabled for the org and that an admin needs to turn it on in the dashboard. The upload-mode line in support feedback also now names the mode (`hosted_ingest` / `direct_readable` / `direct_encrypted`) instead of a bare discriminant.

* **desktop app v2.5.79** — rolls up this week's fixes: floating search first-open freeze, MCP-OAuth connections visible to the chat agent and shown as connected, OAuth callback / result page polish, and the Linux AppImage runtime-deps bundle.

* **CLI v0.4.25** — ships the engine fixes that already landed in the desktop app to CLI users: the SQLite write-queue wedge recovery, the tesseract pre-flight that prevented missing-binary panics, the macOS mic-permission Sentry noise filter, the macOS ffmpeg install loop, and the AppImage runtime-deps bundle. See [CLI reference](/cli-reference).

* **OAuth callback and result pages refreshed** — the success / failure pages you land on after connecting a one-click OAuth connector are cleaner, on-brand, and default to light mode for legibility. Behavior is unchanged. See [connections](/connections).

### bug fixes

* **embedded engine auto-respawns when it crashes mid-recording** — if the in-app engine died while recording was supposed to be on (tray icon gone, local API on `:3030` unreachable), nothing brought it back up — recording just sat stopped until you noticed. The desktop app now supervises the engine the same way `launchd` / `systemd` supervises the standalone CLI: on a real crash with recording still wanted, the watchdog respawns it.
* **capture auto-restarts when it silently freezes** — on macOS, ScreenCaptureKit can stop delivering frames while the capture loop and HTTP server stay alive — the classic "screenpipe says it's recording but I have no screenshots for days" symptom, usually only unwedged by a screen lock/unlock. The health watchdog now detects sustained staleness and restarts the capture session in place automatically, instead of only showing a manual-restart notification gated behind a default-off preference. Applies to the CLI and the desktop app. See [troubleshooting](/troubleshooting).
* **clear notification when DB-wedge recovery can't restart recording** — when the SQLite "disk image is malformed" auto-recovery can't bring the engine back up (or gives up after retries on genuine on-disk corruption), you used to be left with recording silently stopped. Both failure modes now fire a notification so you know to take action. See [troubleshooting](/troubleshooting).
* **deleting a speaker with local audio chunks no longer 500s** — the trash icon on the speakers page failed for essentially every identified speaker that had any local (non-cloud) audio chunk. Fixed. Cloud-only and empty-speaker deletes were already working and are unaffected.
* **meetings no longer flap `Active ⇌ Ending` on minimized / tab-switched calls** — a call with output audio still flowing but no visible controls used to bounce between **Active** and **Ending** once per scan interval (24+ flaps on a multi-minute call), spamming logs and telemetry. Audio-sustained meetings now stay Active. Total flap count across the meeting-eval suite dropped 86%. See [meeting intelligence](/meeting-intelligence).
* **Webex used for chat no longer starts phantom meetings** — Webex runs messaging and meetings under one process, and its messaging window's "Leave space / Leave team" button matched the call-detection `leave` signal — so leaving Webex open for chat created phantom meetings and unwanted audio transcription. The detector now ignores the bare `Webex` window title (always a chat window — real meetings are titled with the meeting / space name). See [meeting intelligence](/meeting-intelligence).
* **listening-wave indicator stays animated at audio level 0** — the bottom-left "listening" indicator in the meeting note dock looked frozen at \~35% height during silence (or whenever the audio-level reading came back as 0, the common case). The resting wave now sits as lively as the other listening indicators across the app while still rising on loud audio. See [meeting transcription](/meeting-transcription).
* **long meeting titles no longer break the "Coming up" card layout** — a long, non-wrapping meeting title pushed the right-arrow outside the card border. Titles now truncate with an ellipsis and the row stays inside the card.
* **persistent sidebar scrollbars on Windows / Linux are hidden** — expanding a pipe section in the chat sidebar used to make a persistent classic scrollbar pop in on Windows / Linux (Chromium auto-hides nothing) while macOS rendered the same scrollbar as an overlay. The sidebar now hides its scrollbars off macOS, matching the rest of the shell.
* **Gemini / Vertex no longer 400 on replayed chat history with nameless tool calls** — replaying a chat that included an assistant tool call with an empty function name caused Vertex MaaS and Gemini to reject the entire request. The AI proxy now strips unexecutable nameless tool calls (and their orphaned tool results) before forwarding, so the rest of the conversation goes through cleanly. Ships independently of an app release — reaches you on the next gateway deploy.
* **macOS ffmpeg auto-install loop / false "not found" on first launch** — on macOS, a prior ffmpeg install to `~/.local/bin` wasn't visible to the running app, so every launch re-attempted the install and reported a misleading "No such file or directory" — which broke first-run capture for some users on 0.4.23. The resolver now finds the existing binary and validates installs by the file on disk instead of a path probe. Windows / Linux are unchanged. See [troubleshooting](/troubleshooting).
* **AI gateway retries transient Cloudflare / network blips during sign-in token minting** — an occasional 522 or 5xx from the upstream token chain used to fail the whole request with "WIF SA impersonation failed". Token minting is idempotent, so the gateway now retries up to 3× with backoff on 522 / 5xx / network errors and surfaces real 4xx errors immediately. Ships on the next gateway deploy — no app update needed.
* **manually started meetings can be stopped from any client** — a frontend / backend state desync left manually-started meetings stuck "active" — every stop click returned 400 and the UI never recovered. The stop endpoint now tolerates an empty body (so MCP and other body-less clients work), stopping an already-ended meeting is idempotent, and the UI resyncs against the server on a stop failure instead of hammering a stale id. See [meeting intelligence](/meeting-intelligence).
* **a false-positive meeting can no longer wedge audio capture** — a misidentified meeting plus a stalled write pool could leave audio deferred forever, with hundreds of transcription segments stranded and only an app restart clearing it. The stop handler now releases the in-meeting flag and detector state before any database write, so a wedged pool can't deadlock stop and the queue drains on its own. See [meeting transcription](/meeting-transcription).
* **search bar opens instantly after the first time** — the floating search bar used to be destroyed on close and rebuilt from scratch on every open, freezing the input for several seconds before you could type. The bar now stays warm in the background and just resets on open, so every open after the first is instant. See [search screen history](/search-screen-history).
* **`/health` clears `active_no_data` once audio recovers** — a single transient stream timeout pinned audio status to `active_no_data` for the lifetime of the process, so a fully recovered mic still reported broken and `/health` stayed degraded. The check now keys on recency, not lifetime count, and silent-but-healthy rooms also report `ok`. See [for developers](/for-developers).
* **settings and AI model config survive an unexpected shutdown** — a power loss mid-save could leave `store.bin` truncated and on next boot the desktop app would treat the install as fresh, overwriting it with defaults — wiping all settings, including configured AI models. Every settings write (and its recovery snapshot) now uses a durable temp-file + fsync + rename, so a write either fully lands or fully doesn't. See [troubleshooting](/troubleshooting).
* **pipe notification mute is enforced at the `/notify` boundary, and `/notify` no longer hangs** — a muted pipe could still emit notifications if its code called the notify endpoint directly, and a stalled notification panel could hang `/notify` requests forever. The mute toggle is now enforced at the API boundary (so muting always silences a pipe), and stuck panel UI no longer blocks notifications. See [pipes](/pipes) and [home](/home).
* **screen capture handles rare Apple OCR nil errors instead of crashing the worker** — OCR worker no longer panics on transient nil responses from the system OCR framework. Capture stays running.
* **disabled audio capture is respected on startup** — turning audio off in settings could still bring the audio pipeline up on the next launch. The recording starts now actually skip audio when it's disabled. See [meeting transcription](/meeting-transcription).
* **wlroots-based Wayland compositors capture again** — Linux users on Sway, Hyprland, and other wlroots Wayland compositors can capture the screen again — capture now uses `grim` on wlroots instead of the portal path that didn't work there. See [search screen history](/search-screen-history).
* **enterprise app routes consumer subscribers correctly** — the enterprise-app gate misrouted consumer subscribers; signed-in consumer accounts now land in the regular app, and signing out / switching accounts cleans up properly.
* **onboarding login no longer dead-ends when signed in without an entitlement** — an enterprise member who signed in before their grant propagated (or with the wrong email) used to be stuck on "✓ signed in" forever with no way forward. The step now re-verifies the entitlement against the server and, if still not entitled, shows a recovery panel with their account, a re-check button, and a "use a different account" option. See [getting started](/getting-started).
* **enterprise users are steered to the enterprise app** — an enterprise account opening the consumer app is now pointed to the enterprise build instead of falling through silently.
* **meeting note placeholder cursor sits in the right place** — the cursor in the empty meeting note no longer jumps after the placeholder text, so typing starts where you expect. See [meeting intelligence](/meeting-intelligence).
* **timeline transcript backfills merge instead of stacking** — transcripts that arrive in chunks now merge cleanly into one timeline run, instead of stacking duplicate or overlapping segments. See [search screen history](/search-screen-history).
* **frame API now requires authentication** — the local frame endpoint is now gated behind the same local auth as the rest of the API; unauthenticated callers can't pull frames over the loopback HTTP server. See [for developers](/for-developers).
* **HD meeting recording covers the whole call, not just the first 30 minutes** — on the desktop app, HD recording silently dropped back to normal capture 30 minutes into any longer meeting, so the back half of long calls was never captured in HD. HD now stays bound to the call from start to end (with a 4-hour cap), ending when the meeting actually ends. See [meeting intelligence](/meeting-intelligence).
* **search and timeline thumbnails load under API authentication** — with **Require authentication** enabled (the default on enterprise / admin builds), frame thumbnails in search results, the timeline, hover previews, Live Text, and the chat prefill banner used to 403 and render as "unavailable" — because `<img>` tags can't send an auth header. Thumbnails now load cleanly under auth. No change when auth is off. See [search screen history](/search-screen-history).
* **sidebar recording dot is visible in light mode** — the recording indicator in the translucent sidebar was rendered white-on-white in light mode, effectively invisible. It now follows the theme — black on light, white on dark. See [home](/home).
* **voice sample playback is reliable on Windows** — playing back a saved speaker voice sample from the speakers page used to fail intermittently on Windows. Playback is now reliable across platforms. See [meeting transcription](/meeting-transcription).
* **pipe-logs API returns data after an app restart** — fetching a pipe's logs over the API used to come back empty until the pipe ran again after the app restarted. The API now reads back the on-disk history immediately, so previous runs show up right away. See [pipes](/pipes).
* **chat sidebar polish: move-to-group, header, inspector button** — fixes a cluster of small chat-sidebar issues: the **Move to group** submenu now lays out correctly without overflowing, standalone chats get a proper header title and spacing, sidebar grouping behaves consistently across pinned / archived rows, and the inspector toggle button stays visible when the inspector panel is closed.
* **floating search bar opens fast on the first open after launch, too** — a previous fix made the search bar instant on the 2nd+ open in a session, but the very first open still froze 10–20 seconds on large histories (cold webview boot plus a per-file stat storm over 15k+ chats plus a 24h OCR scan racing first paint). The search window now pre-warms at startup, uses one native directory scan instead of thousands of round-trips, and defers the cosmetic suggestions scan — so the first open is fast too. See [search screen history](/search-screen-history).
* **one-click OAuth connectors (Linear, Stripe, Sentry, Notion, …) show as connected to the chat agent** — connectors connected via the new one-click MCP-OAuth flow were stored separately from the legacy connector secrets, so `GET /connections` still reported them as not connected — and the in-app chat agent would tell you "Linear is not connected" immediately after you connected it. The list now reconciles MCP-OAuth connections back to their connector, so the agent sees them as connected. See [connections](/connections).
* **provider tiles correctly show as connected** — connection tiles for one-click OAuth providers now flip to **connected** as soon as the OAuth flow returns, instead of staying greyed out until the next refresh. See [connections](/connections).
* **SQLite "cannot start a transaction within a transaction" write wedge fixed** — recurring audio-chunk and UI-event batch insert failures that surfaced as `SQLITE code 1` (a pooled connection coming back mid-transaction from a previous wedge) are now cleared before the next batch begins, so the write goes through on the first try instead of after the reactive retry. Recording stays running and the error stops surfacing. See [troubleshooting](/troubleshooting).
* **legacy custom-vocabulary entries no longer break recording settings** — a `vocabularyWords` list that mixed plain strings (the older format) with structured entries used to fail deserialization for the entire **Recording** settings object, leaving the page unable to load. Both shapes are accepted again. See [meeting transcription](/meeting-transcription).
* **macOS capture-permission denials no longer flood telemetry** — the periodic device check used to upload one Sentry event per cycle when screen / audio capture was denied in **System Settings**, including localized (non-English) denial messages that bypassed the existing filter. Permission-denied events are now filtered out in any locale; they still appear in your local logs, only the upload is dropped. See [permissions](/permissions).
* **Linux AppImage launches reliably on more distros** — the AppImage now bundles its runtime dependencies, falls back to system ffmpeg sidecars when the bundled binary isn't usable, retries static-ffmpeg downloads on flaky networks, provides a `qt-faststart` fallback, and preserves the launcher's executable bit — so first launch works on more distros without manual fix-ups.

## week of june 23, 2026

### new features

* **"download my archive" export** — cloud archive used to be upload-only: local data older than your retention period was deleted after upload, with no way to get it back. A new button in **settings → archive** downloads every archived blob, decrypts it locally, and writes it to a folder (`media/` for mp4 + jpg, `metadata/` for JSON), with live progress and an **open folder** action when it's done. Works even when archiving is disabled. See [cloud archive](/cloud-archive).
* **screenpipe on the go: selective sync + one-command agent setup** — two pieces for running screenpipe headless on a remote machine and pointing an agent at it. `screenpipe sync` now accepts `--no-media` (skip the heavy `data/` capture files) and `--exclude <glob>` (repeatable), and honors a `.screenpipeignore` file in your data dir — useful for shipping just text + memories to a VPS without the media. `screenpipe agent setup <openclaw|hermes|claude> [--api-url URL]` writes the screenpipe skills into the agent's skills dir and registers the screenpipe MCP server in its config in one command — idempotent, preserves existing servers. Pass `--api-url` so the agent talks to a synced/remote screenpipe instead of localhost. Headless `screenpipe login` now writes the cloud token to a place the engine actually reads, so cloud features work on a VPS without the desktop app. See [CLI reference](/cli-reference) and [connections](/connections).
* **Hermes Connect tab** — Hermes was already wired as a read-only client (MCP / Skill / remote sync). The new **Connect** tab in **settings → connections → Hermes** lets screenpipe pipes push events, messages, or jobs *into* a running Hermes agent via its OpenAI-compatible API server, matching the existing OpenClaw flow. See [connections](/connections).
* **chat sidebar groups recurring pipe sessions, plus manual groups** — the chat sidebar now folds recurring sessions for the same pipe under one group instead of one row per run, and you can create your own named groups for ad-hoc chats. Recents is capped at 15 rows globally so long histories don't push everything else off screen.

### updates

* **monitors picker sits directly under "use all monitors"** — toggling **use all monitors** off used to reveal the per-monitor picker several cards down the **screen** section, visually disconnected from the toggle that controlled it. The picker now appears immediately under the toggle.

### bug fixes

* **screenpipe cloud transcription respects your language selection again** — cloud (batch) transcription was silently falling back to English regardless of which languages you picked. The cloud worker now maps a single selected language to forced-language mode and "none / many" to multilingual auto-detect, matching the live-meeting path. Ships independently of an app release — reaches you on the next worker deploy. See [meeting transcription](/meeting-transcription).
* **DB "disk image is malformed" wedge recovers in-process** — after macOS sleep/wake, SQLite's WAL-index could desync and leave every write failing with code 522. The in-process recovery now closes the lingering secret-store connections so SQLite can rebuild the shared-memory mapping cleanly, instead of needing a full quit + relaunch.
* **local connection 401s no longer sign you out** — if your connected-account email was on a `@screenpi.pe` / `@screenpipe.com` domain, a transient 401 from a *local* connection (e.g. a Google Calendar token refresh blip) could be misread as your cloud session expiring, sign you out, and pause recording. The auth interceptor now matches on the URL host (never a substring), and localhost / 127.0.0.1 are never treated as the cloud auth surface. See [connections](/connections).
* **start/stop recording hotkey fires a notification** — the global start/stop-recording shortcut only emitted an in-app toast, which is invisible when the main window is hidden — exactly when a global hotkey is for. Toggling recording from the keyboard now fires a notification panel so you get glance-level confirmation regardless of window visibility.
* **opening screenpipe from the taskbar / dock lands on home** — clicking the taskbar (Windows) or dock entry while screenpipe was already running used to focus the timeline overlay instead of the home window. It now opens home, matching what you expect from a second app launch.
* **meeting detector: bare-host URL patterns no longer match lookalike domains** — meeting-URL patterns like `daily.co`, `app.daily.co`, `pop.com`, `8x8.vc`, and `meet.jit.si` were substring-matched against the page URL, so `daily.co` flagged `thedaily.com`, `dailywire.com`, and `daily.com` as phantom meetings — which an unrelated tab's "Leave" / "End" button could then sustain. URL patterns now match on host boundaries (a whole hostname or a real subdomain) and, when path-qualified, on bounded path components. See [meeting intelligence](/meeting-intelligence).
* **macOS CoreAudio tap can no longer be left orphaned** — on macOS, stopping audio capture could skip the teardown step that releases the CoreAudio Process Tap, leaving it orphaned and wedging `coreaudiod` system-wide. The stop path is now idempotent — it always drives the stream teardown — so the tap is released every time.
* **MCP `activity-summary` labels time ranges in your real timezone** — the per-app time range printed by the MCP `activity-summary` tool sliced HH:MM out of a local timestamp but hardcoded a " UTC" suffix, so a 09:03 IST frame printed as "09:03 UTC" — off by the offset. The label is now derived from the timestamp's own offset (`UTC`, `+05:30`, etc.). See [MCP server](/mcp-server).
* **Claude Desktop MCP install state stays in sync with the config file** — the **install screenpipe MCP into Claude Desktop** action in **settings → connections** could show stale state because the config-path lookup wasn't shared with the install-check. Both paths now resolve the config the same way, so the install / installed state reflects what's actually in `claude_desktop_config.json`. See [connections](/connections).
* **macOS click context: screenpipe ignores its own clicks** — on macOS, the click-context capture used to occasionally attribute clicks to screenpipe's own UI; it now skips its own process so click context only reflects what you're doing in other apps.

## week of june 22, 2026

### new features

* **brain: memories and artifacts split into two views** — the Brain section is now two focused panes instead of one mixed feed: a **memories** view with scalable multi-tag filters and inline editing in a dialog, and an **artifacts** view with refined cards grouped by origin. Memory previews now render markdown (parsed via AST, not behind a heavier renderer), so adding and editing memories is snappier. See [second brain](/second-brain).
* **`/search`: one call returns related context with `include_related=true`** — pass `include_related=true` alongside `tags=…` and the response now attaches a `related` block: the tags that co-occur with the ones you asked for, grouped by namespace (`people`, `projects`, `workflows`, …) and ordered by frequency. AI callers get the surrounding context in one request instead of several. Memory results also expose `frame_id` so you can jump straight from a memory to the exact captured moment via `GET /frames/{id}`. Bounded by a 5s timeout — auxiliary, so a slow store degrades to `related: null` instead of dragging out the search. See [API recipes](/api-recipes) and [search screen history](/search-screen-history).
* **"shape screenpipe" survey card in Help** — a new card near the top of **settings → help** opens a short survey so you can steer where the product goes. Sits after **send logs** and **getting started**.

### updates

* **Input Monitoring lives in Privacy now, not Connections** — on macOS, **Input Monitoring** is a system permission that gates keyboard and click capture — it isn't a "connection" like Claude or Slack. It's been moved out of **settings → connections** (tile, dialog, chat connection chip) and into **settings → privacy → capture rules**, right below the **capture clipboard / keyboard / clicks** toggles it actually controls. Behavior unchanged.

### bug fixes

* **`/search` no longer crashes on absurd relative-time inputs** — a request like `/search?start_time=99999999999999w` (or any value large enough to overflow a `Duration`) used to panic inside the query-string parser, reset the connection, and surface in the logs. Out-of-range magnitudes now fall through to the existing "invalid time" 400 path. Every search and Rewind time filter funnels through this parser, so the fix covers them all. See [search screen history](/search-screen-history).
* **retention loop survives a bad `retention_days` value** — a persisted config from an older client could carry a `retention_days` large enough to underflow the cutoff date and panic the background retention task silently — so retention stopped deleting without any signal. The cutoff is now computed through a checked helper that logs and skips the cycle on overflow, and the configure endpoint now rejects values outside 1–36500 days with a clear 400. See [privacy data flow](/privacy-data-flow).
* **`/search?max_content_length=0` returns the full text again** — `0` is the documented "opt out / full text" signal, but the HTTP `/search` handler was treating it as "truncate to zero" and returning just `...(truncated N chars)...`, destroying the text the caller asked to see in full. MCP and CLI clients that forwarded `max_content_length=0` were hit too. Zero is now a no-op, matching the MCP and CLI contract. See [API recipes](/api-recipes).

## week of june 21, 2026

### new features

* **inline "show, don't tell" previews across settings** — abstract toggles in **settings → recording**, **storage**, and **notifications** now render small grayscale illustrations that show what each knob actually does: a filmstrip whose density tracks **capture frequency**, a day-strip for **audio capture mode**, a per-piece view of what each **retention mode** drops, segmented tradeoff meters for **power mode**, an on-device-vs-cloud data-flow for **transcription**, and a sample toast for **notification** toggles. Visual only — every setting works the same. See [search screen history](/search-screen-history), [privacy data flow](/privacy-data-flow), and [meeting transcription](/meeting-transcription).
* **hover-to-highlight "where we look" preview in privacy settings** — the redaction panel now shows a small mock app window beneath the surface toggles: hovering a row outlines the matching region of the sample screen, and turning a surface on covers that region with a redaction bar. Pairs with the existing "what to hide" preview so both axes (what is hidden / where we look) are legible without a real captured frame. See [privacy filter](/privacy-filter).
* **form-field values redacted by default, plainer redaction UX** — when smart text redaction is on, **form field values** (the surface where typed passwords and other real PII live, including values accessibility exposes but OCR never sees) are now redacted by default. The redaction panel is split into **what to hide** (categories — primary) and **where we look** (surfaces — advanced, collapsed), with plain-language labels: *form field values*, *links inside app data*, *passwords & keys*. Existing user configs are honored exactly. See [privacy filter](/privacy-filter).
* **frontier models can no longer be assigned to background pipes** — pipes are unattended and often high-volume, so a frontier model (Opus, GPT-5.5, \*-pro, Fable — output ≥ \$20/Mtok) used to be a cost bomb if your default preset was pinned to one. The app now coerces frontier presets to **auto** when assigning a model to a pipe, and the AI gateway enforces the same rule as a backstop on background traffic (downgrade by default, hard-reject via `PIPE_FRONTIER_POLICY=reject`). Interactive chat is untouched — you can still pick a frontier model for live chat. See [pipes](/pipes).

### updates

* **plainer copy in recording & notifications settings** — jargon like *spectral analysis*, *silence-gap detection*, *clamshell*, and raw CLI flags has been replaced with plain descriptions of what each toggle does ("groups audio into longer stretches before transcribing", "laptop lid closed", "tells you when…"). No behavior change.
* **live meeting notes: engine picker inline on the header row** — the **live engine** selector now sits next to the live-meeting-notes toggle on the same row, and hides when the feature is off, instead of taking a separate labeled sub-row. See [meeting intelligence](/meeting-intelligence).

### bug fixes

* **frozen screen-capture streams recover on their own** — on macOS, ScreenCaptureKit could wedge its output callback so every screenshot returned the same stale frame silently for as long as the wedge lasted (observed: 400+ byte-identical snapshots over 30 minutes while the user kept working). The capture loop now detects a flat frame-delivery sequence across captures and rebuilds the stream automatically, with a per-monitor cooldown to prevent thrash. Idle content and look-alike window switches still advance the sequence, so this can't false-positive on a quiet screen. See [search screen history](/search-screen-history).
* **timeline stays live after sleep or network changes** — when the machine slept, the OS could tear down the timeline's WebSocket while JS was frozen, leaving the socket reading *open* but never delivering frames. The timeline used to sit frozen on the last pre-sleep frame until you hit refresh, and reconnect gave up after \~10 attempts. A liveness watchdog now force-reconnects a silent-but-open socket, reconnect retries indefinitely with capped backoff, focus reconnects a stale socket, and the displayed frame auto-advances at the live edge as new frames stream in. See [search screen history](/search-screen-history).
* **Brain finds HTML artifacts in fallback discovery** — HTML files generated by pipes and agents are now included in Brain's fallback artifact search (and search matches by filename and path), so HTML artifacts no longer go missing when the primary index doesn't have them. See [second brain](/second-brain).
* **per-row "optimize with ai" button on pipe cards is labeled correctly again** — the always-visible per-row button on pipe cards is back to **optimize with ai** (was briefly relabeled **edit** while the underlying flow stayed the same), so the affordance users relied on is discoverable again. The button still reads the pipe prompt and recent run logs and suggests improvements. See [pipes](/pipes).
* **OAuth connections resolve the right named instance for Microsoft 365 and Pi** — when you connected multiple named OAuth instances (e.g. personal + work), follow-up calls could resolve to the wrong instance and fail. The connection layer now picks the named instance you actually targeted. See [connections](/connections).

## week of june 20, 2026

### new features

* **flat Rewind-style timeline** — the timeline bar is now a constant-height horizontal strip with rounded-pill segments per app run and a small gap at each app or site transition. Browser sessions split into one segment per site (colored by site, not by browser), audio segments show as a thin white line above the bar, and tags appear as a thin amber underline. The playhead is a clean vertical line with a white time chip that no longer bobs while scrubbing. See [search screen history](/search-screen-history).
* **capture frequency floor** — a new slider in **settings → recording** guarantees a screenshot at least every N seconds (1–10s) regardless of whether anything changed on screen, so a still screen no longer goes uncaptured for minutes. Default `auto` follows the existing power-profile cadence; setting a value pins the floor and survives power-profile transitions. See [search screen history](/search-screen-history).
* **"lean" retention mode** — a new third option in **settings → storage policy** sits between **media** and **all**. Past the retention cutoff, lean reclaims media files *and* drops the heaviest text columns (accessibility element tree, raw accessibility JSON, keystroke/click stream) while keeping text search, transcripts, and memories intact — so the database file actually shrinks instead of just the on-disk media. See [privacy data flow](/privacy-data-flow).
* **hide dock icon on macOS** — a new macOS-only toggle in **settings → display** runs screenpipe as a menu-bar-only app with no Dock icon. The tray icon stays visible so the app is always reachable; default off, current behavior unchanged.
* **Grok CLI as an MCP client** — a new Grok CLI tile in **settings → connections** one-click installs the screenpipe MCP server into Grok CLI, alongside Claude Code, Codex, Copilot CLI, and the other supported agents. See [connections](/connections).
* **one-click "connect with Bee"** — the Bee wearable connection now uses Bee's native device-pairing flow (the same one `bee login` runs) instead of a manual Developer Token paste, so connecting is one click and there's no more pointing at a portal that no longer exists. See [connections](/connections).
* **PII redaction covers all remaining capture surfaces** — the on-device redaction worker now also scrubs the per-element accessibility properties (including focused-field and password-field values that accessibility exposes but OCR never sees), `ui_events` element name and description, window titles, browser URLs, and the raw accessibility tree JSON served by `/frames/:id/context`. Frame-derived columns are propagated from a single detection pass, so the extra coverage adds no new model calls. See [privacy filter](/privacy-filter).

### updates

* **recording → audio settings, regrouped** — the previously flat list of \~16 audio cards is now organized into four labeled sub-sections (transcription, meetings, devices & capture, voice & vocabulary) so related settings sit together. Purely presentational — every setting works the same.
* **search prioritizes keyword matches** — `/search` results now surface keyword matches ahead of secondary semantic results, and facet queries are capped so they can't drown out the primary hit. See [search screen history](/search-screen-history) and [API recipes](/api-recipes).
* **per-pipe last-run badge is accurate again** — the **last run** column on the pipes list now reflects real run history instead of showing **never run** for every pipe. The data was always there; the list now actually asks for it. See [pipes](/pipes).
* **HTML artifacts render in chat and Brain** — AI- and pipe-generated HTML artifacts now render in chat (previously source-only) and expand correctly from the Brain section, both inside the same locked-down sandbox so artifact styles can never leak into and repaint the app window. See [pipes](/pipes).
* **background AI traffic back on Gemini flex tier** — the AI gateway's background head (pipes, daily summary, suggestions) routes through `gemini-3.5-flash:flex` again — measured roughly 3.3× cheaper than the previous head for comparable quality on background work. Interactive chat is unaffected.

### bug fixes

* **OAuth connections work with a relocated data directory** — users who moved their screenpipe data directory could complete an OAuth connect (Microsoft 365, Google, ChatGPT, …) but every follow-up call failed with "no credentials found". Tokens were being written to one database and read from another. Tokens now always land in the configured data directory, and existing broken installs heal on next launch. See [connections](/connections).
* **OCR works on the Linux CLI without a system tesseract** — the npm `@screenpipe/cli-linux-x64` package now bundles tesseract and English language data, so OCR works on Linux hosts that don't have a system tesseract installed (matching what the AppImage and .deb already do). See [search screen history](/search-screen-history).
* **Windows speaker transcriptions during meetings** — Windows users were silently losing the far side of meetings when the meeting app rendered audio to an endpoint that wasn't the captured one (Meet/Zoom output picker changes, auto-switched USB defaults). The device monitor now follows actually-rendering endpoints, watches for sustained "audio playing, no speaker chunks landing" during meetings, restarts output capture if it wedges, and surfaces a notification with a one-click restart action when speaker capture stays dead. See [meeting transcription](/meeting-transcription).
* **mic fails over to the built-in input when AirPods disconnect** — if your pinned input device disconnected and was also the system default (typical AirPods setup), capture stopped entirely until you manually reconnected. The fail-over decider now picks any present input — preferring the on-board mic — instead of sitting idle, while still respecting user-disabled devices. See [meeting transcription](/meeting-transcription).
* **Windows audio: no more crash on non-default / virtual input devices** — capturing from a device that reports zero channels (virtual cables, some non-default WASAPI endpoints) no longer panics the capture thread and takes the app with it. Also fixes two COM resource leaks in the 2-second communications-device poll on Windows.
* **`/health` no longer flips to 503 on machines with no microphone** — RDP sessions, VMs, and desktops with speakers only used to mark the engine as **degraded: audio** after 120s, which also triggered a phantom "mic not capturing" notification. A missing input device is now reported as a benign idle state; real silent mics still degrade as before. See [for developers](/for-developers).
* **media paths starting with `~/` actually load in chat** — when the agent referenced a file as `~/Downloads/clip.mp4`, the inline media player was stripping the `~` and trying to open `/Downloads/clip.mp4`. Home-relative paths (and Windows `~\\` paths) now expand correctly, so files referenced with a tilde render inline.
* **timeline delete: inline confirm, loading spinner, no double-click trash** — selecting a range and clicking the trash on the timeline used to require two clicks (a centered modal rendered behind the floating toolbar) and gave no feedback while the delete ran. The confirm is now inline next to the trash, the button shows a spinner while deleting, and the modal stacking footgun is gone. See [search screen history](/search-screen-history).
* **timeline no longer crashes on frames without a `devices` field** — guarded against an `undefined` devices array that could throw `TypeError` and crash the entire timeline render under certain stream conditions. See [search screen history](/search-screen-history).
* **`screenpipe://` deep links and notification "open" actions land on the right window** — pipe stop, chat sidebar, and pipes-page stop flows now agree on running state, so stopping a pipe from any surface succeeds on the first click and doesn't leave a stale "running" indicator. See [pipes](/pipes).
* **calendar month nav stops at today** — the timeline's date picker can no longer page into impossible future months. See [search screen history](/search-screen-history).
* **AI gateway: long tool-call IDs and Gemini flex region errors** — fixed two top gateway crashes: OpenAI was rejecting tool-call IDs longer than 64 characters (which GLM and Gemini routinely mint), and Gemini flex requests in unsupported regions used to fail outright. Long IDs are now remapped to a short stable form across the assistant and tool turns, and flex-unsupported responses retry the same model at standard tier instead of erroring.
* **embedded browser hides itself behind modal dialogs** — opening a modal dialog while the in-app browser was visible used to leave the native webview painted on top of the modal. The webview now hides while a modal is open and restores when it closes. See [pipes](/pipes).

## week of june 19, 2026

### new features

* **home grid refocused on 4 high-signal cards** — the home page now ships a curated set of cards: **Automate My Work**, **Day Recap**, **Time Breakdown** (promoted), and a new **Missed To-Dos** card that surfaces action items from the last few days you may have missed. The longer discover tier is gone — clicks were going to the top tier anyway. Prompts for the kept cards were tightened too. See [home](/home).
* **Automate My Work actually builds the automations for you** — the Automate My Work card now analyzes your recent activity and creates three read-only, hourly automations tailored to your workflow, instead of just suggesting pipes and waiting for you to confirm each one. The created pipes use the **reader** permission, so they can never send, post, or modify anything. See [pipes](/pipes).
* **meetings auto-name speakers from on-screen name tags** — meeting summarization now reconciles generic labels like *speaker 1* or *unknown* against the name tags video-call apps render on screen, using OCR frames screenpipe already captures. It only renames on unambiguous evidence and never prompts you. See [meeting intelligence](/meeting-intelligence).
* **one-tap push of a meeting summary to a connected app** — after a meeting summary is saved, screenpipe now lists the apps you've actually connected (ranked by the apps you used in the meeting) and asks before pushing — as one-tap action buttons on the meeting notification, or as a message in chat. Nothing leaves your machine until you pick a target. See [meeting intelligence](/meeting-intelligence).
* **hover the timeline to preview frames** — hovering the bottom track on the timeline now shows a thumbnail of the frame at that point, so you can scrub to the right moment before clicking. See [search screen history](/search-screen-history).
* **timeline date pill shows the time** — the date pill at the top of the timeline now includes the time of the visible position, so you always know what moment you're looking at without zooming in.
* **lean toggles for `/activity-summary`** — `GET /activity-summary` now accepts `include_key_texts`, `include_apps`, and `include_windows` query params. Set any to `false` to omit that section from the response — useful for pure time-tracking sweeps across many ranges where the text-heavy `key_texts` is the biggest token cost. Defaults are unchanged. See [API recipes](/api-recipes).
* **`screenpipe profile` CLI command** — a new `screenpipe profile` subcommand prints per-stage pipeline timing (capture, OCR, audio, embed, write), so you can see where time is going on your machine without attaching a profiler. See [CLI reference](/cli-reference).
* **per-pipe logs are archived into dated folders** — old pipe logs are now rotated into dated subfolders instead of growing forever in a single file, so it's easier to find the run you care about and easier to clean up. See [pipe debugging](/pipe-debugging).

### updates

* **Zoom supports multiple OAuth accounts** — the Zoom connection now lets you connect more than one Zoom account on the same install (personal + work, for example), instead of overwriting the previous one. See [connections](/connections).
* **content filter chips moved to the top of search results** — the chips that filter search results by content type are now anchored to the top of the results area, so they don't shift around as results stream in. See [search screen history](/search-screen-history).
* **icon-only copy button in notification popups** — the copy button in notification popups is now a clean icon instead of an icon + label, reclaiming horizontal room for the message itself.

### bug fixes

* **Screenpipe Cloud transcription falls back correctly for paid Basic users** — paid Basic plan users hitting the cloud transcription path used to fail back to a less capable lane in some cases. Cloud transcription now falls back on the right tier for your plan.
* **cloud entitlement re-verifies when you refocus the app** — switching networks, waking from sleep, or being away long enough for the token to expire could leave the app in a stale signed-in state. Bringing the window to focus now re-verifies your cloud plan, so chat, transcription, and pipes use the correct tier immediately.
* **chat shows a clear, retryable error when the cloud gateway is unreachable** — when the cloud gateway is down or unreachable, chat now surfaces a clear message with a retry button instead of failing silently or hanging.
* **background pipes don't silently no-op when a tool call streams** — the AI gateway used to drop streamed `tool_calls` chunks in some cases, so background pipes finished without ever executing the tool. Streamed tool calls are now forwarded intact.
* **unread indicators stay consistent across chats, pipe runs, and restarts** — the unread dot would sometimes stick after you'd already read a chat, or clear when you hadn't, especially after switching chats, after a pipe run posted into chat, or after restarting the app. Unread state is now consistent in all three paths.
* **tag search no longer freezes on large databases** — searching by tag on a large memory database used to freeze the UI and sometimes return no results. The query is now indexed properly; tag search is responsive and complete on big DBs. See [search screen history](/search-screen-history).
* **multi-language transcription selection now persists** — picking multiple transcription languages used to reset on relaunch. Your selection now persists across restarts. See [meeting transcription](/meeting-transcription).
* **black / green corrupt frames are dropped, encode dimensions normalized, pasted screenshots accepted** — capture now rejects the all-black / all-green frames some drivers emit on wake or resolution change, normalizes encode dimensions so frames don't get stretched, and the feedback dialog now accepts screenshots pasted from the clipboard.
* **meeting notes editor: resizable images, escaped HTML attributes, harder sync** — images embedded in meeting notes can now be resized in place, HTML attributes are properly escaped (no more broken markup from quotes in transcripts), and the editor state syncs more reliably when you switch notes quickly.
* **pipe runs tab no longer shows duplicate output** — long-running pipes sometimes rendered the same chunk twice in the runs tab. Output now renders once. See [pipes](/pipes).
* **Windows ARM64 build no longer fails with `STATUS_DLL_NOT_FOUND`** — the Windows ARM64 build no longer fails to start because `OPENBLAS_PATH` wasn't being inherited by the build. ARM64 Windows users can install and launch normally.
* **phantom Safari meetings stopped** — Safari page titles that happened to match meeting-detection patterns no longer create phantom meeting notes. See [meeting intelligence](/meeting-intelligence).
* **manual sync surfaces backend errors instead of a false success** — clicking sync used to flash "synced" even when the backend rejected the call. Manual sync now reports the real outcome.
* **"open note" and HD button open the live note** — opening a note from the meeting card or the HD button now opens the live, editable note instead of a stale snapshot.
* **redact: missing target tables are disabled, not retried forever** — if a redaction target table doesn't exist on your install, screenpipe now disables that target instead of retrying it every cycle and filling the log.
* **agent file preview resolves relative paths correctly** — clicking a source citation from the in-app agent (for example `.pi/skills/screenpipe-api/SKILL.md`) used to fail with a "file not found" error because the viewer looked in the wrong directory. The viewer now resolves relative agent paths, falls back across the chat session dir / data dir / home / pipe dirs, and shows the resolved path in the breadcrumb.
* **duplicate deep-link events are ignored** — opening a `screenpipe://` link twice in quick succession no longer triggers two handlers (and two follow-up prompts) for the same action.

## 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](/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](/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](/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](/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](/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](/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=outline` for the element APIs** — `/elements` and `/frames/:id/elements` now accept `?format=outline` (alias `tree`), 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. MCP `search-elements` and `get-frame-elements` use this format by default. See [API recipes](/api-recipes).
* **deterministic browser snapshot + `/act` endpoint** — the browser snapshot now stamps every actionable element with a stable `#eN` ref (Playwright-MCP style) and reports inline state (`disabled` / `checked` / `expanded`). A new `POST /connections/browsers/:id/act {ref, action, value?}` endpoint runs `click` / `fill` / `clear` / `check` / `uncheck` / `select` / `hover` / `focus` against that ref. Works against both the Chrome extension and the built-in browser; React/Vue controlled inputs register correctly. See [API recipes](/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](/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](/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](/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 throw `malformed JSON` and 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](/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 single `select_account` value, which still shows the account picker and prompts for consent on first connect. See [connections](/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](/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](/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/frames` and remote-frame payloads expose a neutral `text` field** — both wire surfaces still labelled the captured screen text as `ocr_text`, even though most captures are accessibility-derived, not OCR. They now carry a neutral `text` field; `ocr_text` is kept as a deprecated alias so existing stream consumers don't break. See [API recipes](/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](/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`, and `pipe-logs` tools, plus a `screenpipe://guide/pipes` resource with the canonical pipe-creation guide (frontmatter, schedule syntax, presets, lifecycle). Agents can author scheduled automations end-to-end over MCP. See [MCP server](/mcp-server) and [pipes](/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](/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](/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](/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](/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](/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](/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 sharing `screenpipe://` 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_fbank` panic 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](/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](/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](/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](/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/elements` now accept opt-in `?format=csv` / `?format=tsv` and `?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](/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](/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_audio` boot 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](/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 `screenpipe` from 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](/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](/pipes) and [connections](/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 survey` and 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](/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](/meeting-transcription).

### bug fixes

* **PII redactor no longer false-flags strings like `x@y.c|m` as 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](/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 `System32` resolves to the real 64-bit PowerShell, 30 s timeout so the installer can't hang, longer post-kill settle). Upgrades on systems where the old `screenpipe.exe` is 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.5` and `gpt-5.5-codex` are 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](/privacy-filter).
* **clearer errors when the bundled pi coding agent fails to install** — if the embedded pi agent failed to install (for example, when `bun` crashed 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](/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](/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](/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](/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"** — `auto` and fallback requests now log the model that actually served the turn (read from the gateway's response header) instead of the literal string `auto`. Per-model spend in your usage view is now accurate and previously-flat `$0.01` unknown-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 `/outputs` and `/pipes/artifacts` routes are gone; pipes built against them should switch to `/artifacts`. See [API recipes](/api-recipes) and [pipes](/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.traineddata` and resolves it from inside the bundle. On hosts without `tesseract-ocr` installed, 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 `pi` agent 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 like `pi-web-access` no longer collides with the bundled `web_search` tool and kills the pipe at startup. See [pipes](/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](/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-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](/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](/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](/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](/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](/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](/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](/pipes).

### updates

* **cheaper, faster auto-routing for agentic work** — the AI gateway's auto waterfall now picks `glm-5` as 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](/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](/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](/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 Google account no longer wipes the first** — connecting a second Google Calendar or Docs 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](/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](/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 `pi` tokens 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](/connections).
* **`/v1/web-search` works again** — Google withdrew `gemini-2.0-flash` from Vertex, and the pinned web-search head started returning 404 on every call. Web search now routes through the GA `gemini-flash` alias.
* **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-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](/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](/connections).
* **Plaud connection** — a one-click OAuth tile in **settings → connections** lets the agent pull meetings and recordings from Plaud. See [connections](/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](/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](/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](/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](/pipes).
* **filter screen, audio, and memories by tag** — `/search` and the MCP `search-content` tool now accept a comma-separated `tags` filter that matches across screen, audio, and memories with exact-AND semantics. Namespaced tags like `person:`, `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](/search-screen-history) and [API recipes](/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](/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](/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](/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](/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](/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](/privacy-filter).
* **API + CLI skill packs in agent cards** — the Hermes and OpenClaw skill tabs now offer both `screenpipe-api` and `screenpipe-cli` skills behind an API/CLI switcher, so agents can pick the surface that fits the task. See [connections](/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](/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](/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-`messages` cases 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](/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](/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](/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](/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](/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-urls` actually 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](/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](/connections).
* **owned browser keeps the title set with `eval`** — `pi.browser.eval` was clobbering title changes set from inside the page. The owned-browser tab now keeps the latest title from `eval`. See [pipes](/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](/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](/meeting-intelligence).
* **annual upgrade option in the in-app Account page** — the Pro upgrade in **settings → account** now defaults to annual ($33/mo billed annually, save $200) with an inline toggle back to monthly (\$50/mo).
* **work-hours schedule flags on `screenpipe record`** — two new CLI args, `--schedule-enabled` and `--schedule-rule "day,start,end,mode"` (repeatable; mode is `all`, `audio_only`, or `screen_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](/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](/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 `/notify` route** — pipes posting to `/notify` used to display and persist notifications even when you'd turned **Pipe notifications** off. The route now reads the toggle and skips display + history for `type=pipe` when 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](/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](/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 $200" while annual is actually $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.md` folders (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](/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](/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](/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](/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](/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](/pipes).
* **pipe installs pick a tier-safe model** — installing a pipe now uses the `pipes` preset (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](/meeting-intelligence).
* **Windows CLI runs as a signed binary** — the `screenpipe` CLI 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-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.exe` process 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 with `STATUS_DLL_INIT_FAILED`.
* **panic log for embedded CLI/engine** — the engine binary now writes a `last-panic.log` (with backtrace) next to `screenpipe.log` and 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](/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 `messages` list 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 repair` install works on Windows** — fixed the repair flow for the `pi` agent 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](/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](/mcp-server) and [connections](/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](/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](/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 of `drive.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](/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](/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](/privacy-filter).
* **vocabulary badge reflects the real limit** — the custom-vocab header used to show `n/1000` while the detail view showed `n/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-Agent` header. GitHub now sees a proper UA + accept headers, so issues, PRs, and repo data load through the connection again. see [connections](/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](/permissions).
* **cleaner logs after unplugging a display** — stale display IDs no longer flood the log with hundreds of `xcap` errors 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](/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](https://screenpi.pe/team) in your default browser instead of doing nothing. see [teams](/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](/meeting-transcription).
* **`screenpipe vault lock` no 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](/connections) and the [connection reference](/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](/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](/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](https://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](/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](/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 export` CLI (`--meeting-id` or `--start/--end [--open]`), and `POST /export` (also wired into the MCP `export-video` tool). see the [CLI reference](/cli-reference) and the [API docs](/for-developers).
* **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](/search-screen-history).
* **timelapse export retired in favor of real-time export** — the legacy `/frames/export` route (fixed-fps timelapse) is gone. every "export my last N minutes" path — chat agent, MCP `export-video` tool, and the video-export pipe — now uses `POST /export`, which produces a real-time clip with synced audio instead of a sped-up sequence of frames. see the [API docs](/for-developers).
* **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](/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](/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](/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-meeting` works again** — the MCP tool was sending PATCH where the server expects PUT; meeting updates from MCP clients now succeed. see [MCP server](/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](/connections) and the [connection reference](/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](/connections) and [MCP server](/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](/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-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](/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](/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](/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](/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](/pipes).
* **gemini-3.5-flash at the top of the auto waterfall** — the AI gateway now prefers gemini-3.5-flash for the default `auto` model when latency and cost both matter.
* **SDK 0.4.2 with native bindings** — `@screenpipe/sdk` now ships native bindings across all supported platforms and the Swift mirror tags automatically on each npm publish. see [pipes](/pipes).
* **`App::Title` window scope documented in the SDK** — `RecorderOptions` and `FilterPatch` tooltips now describe the `App::Title` syntax inline. see the [CLI reference](/cli-reference) and [privacy filter](/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](/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](/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](/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](/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](/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 to `true`/`false`. see [API recipes](/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](/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 search` CLI** — query your local history straight from the terminal without the daemon running. Same flags and JSON shape as `GET /search`, so existing `jq` filters work unchanged and AI scripts can read your data even when the desktop app is closed. see the [CLI reference](/cli-reference).
* **`screenpipe team` CLI 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 your `team_api_token` from `~/.screenpipe/enterprise.json`. see the [CLI reference](/cli-reference) and [teams](/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_quality` setting (`low` 1280, `balanced` 1920, `high` 3840, `max` native) 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](/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](/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](/connections).
* **canonical domain switch to screenpipe.com** — desktop app and CLI website links now point to `screenpipe.com`. Existing `screenpi.pe/join/...` team invites still work, and API endpoints are unchanged. see [teams](/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](/for-developers).
* **`npx screenpipe-mcp --http` now works as documented** — the README one-liner used to 404 because no `screenpipe-mcp-http` package existed on npm. The `--http` flag on the main package now routes to the HTTP server directly. see [MCP server](/mcp-server).
* **auto-restart toggle shortcut fixed** — the keyboard shortcut for toggling auto-restart now fires reliably.
* **`screenpipe://view` links 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](/connections) and [MCP server](/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`, and `error` — across the Node, Electron, Tauri, and Swift bridges, so host apps can react to recording state and progress without polling. see [pipes](/pipes).
* **scoped window filters with `App::Title`** — `ignored_windows` and `included_windows` now accept an `App::Title` syntax: `Slack::#hr` matches only the `#hr` window inside Slack, `::Confidential` matches that title in any app, and bare entries like `Slack` keep their original meaning. scoped includes whitelist one window without affecting other apps. see the [CLI reference](/cli-reference) and [privacy filter](/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](/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](/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](/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](/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](/connections) and [Obsidian](/obsidian).
* **CLI flags for keystroke, clipboard, and scroll capture** — `--capture-on-keystroke`, `--capture-on-clipboard`, and `--capture-scroll` let you link non-printable key events, clipboard rows, and scroll-stop triggers to the screen frame they fired on. see the [CLI reference](/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](/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](/meeting-transcription).

### bug fixes

* **OAuth connections no longer brick themselves overnight** — fixed a refresh bug that silently dropped your `refresh_token` and 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 echo `expires_in` on refresh are also covered. see [connections](/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 `/search` and 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](/connections).
* **Zoom and other long-lived OAuth tokens refresh cleanly** — fixed a follow-up edge case where a stale `expires_at` could cause an infinite refresh loop for providers that don't return `expires_in` on 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](/connections)** and use it alongside Claude Code, Codex, and the other supported agents. see [Copilot CLI](/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](/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](/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](/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](/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](/mcp-server) and [teams](/teams).
* **frame ID on `/search` results** — `/search` input results now include the `frame_id` they were captured from, so pipes can join search hits back to the exact screen frame for screenshots or replay. see the [API docs](/for-developers).
* **richer SDK runtime controls** — the `@screenpipe/sdk` (now 0.2.0) adds `setFilters` / `filterStatus` at runtime, emits `paused` and `resumed` events, and honors ignored/included windows plus ignored URL filters from your pipe code. see [pipes](/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](/cli-reference).
* **`ui_recorder` status 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](/for-developers).

### 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](/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.bin` now resolve presets correctly at start.
* **MCP `keyword-search` quality** — fixed argument mapping, time-range normalization, error messages, and OCR truncation in the screenpipe MCP `keyword-search` tool. see [MCP server](/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.
* **`/health` can'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](/cli-reference).
* **admin team API token field is editable** — first-time admins can now paste their team API token in **settings → [teams](/teams)** instead of seeing a read-only field.
* **`screenpipe status` reads the right database** — the CLI now resolves `db.sqlite` from `base_dir`, matching where the daemon actually writes. see the [CLI reference](/cli-reference).
* **`npx screenpipe` and global install work again** — the npm wrapper bin is wired correctly so both `npx screenpipe …` and `npm i -g @screenpipe/cli` run the right binary. see the [CLI reference](/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](/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](/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](/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](/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-detector` skips the v2 meeting watcher entirely (no process / accessibility scan every 5 s). useful for headless or task-mining setups that only consume `accessibility_text` and `ui_events`. see the [CLI reference](/cli-reference).
* **CLI flag to skip snapshot compaction** — `--disable-snapshot-compaction` skips the background JPEG→MP4 worker for users who don't open the MP4 timeline UI. disk usage falls back to your `--retention-days` setting. see the [CLI reference](/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](/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](/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 doctor` now 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-reference).
* **CLI tips use `npx`** — startup tips for installing bundles and signing in now show `npx 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](/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](/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](/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/split` endpoint and a smarter merge that preserves titles, attendees, and notes from both sides. see the [API docs](/for-developers).
* **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](/teams).
* **Intune deployment guide** — IT admins deploying screenpipe to Windows fleets via Microsoft Intune now have a canonical reference. see [Intune deployment](/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](/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 top-up button now actually gives you $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/status` now reports `active_no_data` while a hijacked or silent device recovers, instead of misleadingly reporting `ok`.
* **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.log` on 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](/connections)**.
* **Hermes Agent connection** — drop screenpipe's MCP server into your `~/.hermes/config.yaml` from the connections panel. see [MCP server](/mcp-server).
* **Bee wearable** — pair your Bee device as a connection so its captures join your screenpipe timeline. see [connections](/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](/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](/meeting-transcription).
* **browser API: `/navigate` and `/snapshot`** — drive the embedded browser from your pipes and grab DOM snapshots. see the [API docs](/for-developers).
* **MCP `update-meeting` tool** — let your AI write summaries back to a meeting note via a typed MCP tool. see [MCP server](/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](/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 `@input` works 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 `GetWindowRect` import.
* **pi config** — `pi config` now 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](/connections), 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 `/search` results and chat messages before they leave your machine. toggle from the chat composer. [learn more](/privacy-filter).
* **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.0` so other devices on your network can reach it. API auth is force-enabled when LAN access is on. see the [API docs](/for-developers).
* **`screenpipe sync remote`** — back up your screenpipe data over SSH/SFTP to a server you control. see the [CLI reference](/cli-reference).
* **`screenpipe db {check, recover, cleanup, unlock}`** — new CLI commands to repair database corruption and reclaim disk space. see the [CLI reference](/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_id` index 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`.
