Releases: thrashr888/alchemy
Release list
v0.25.0 — Mac file search, cloud folders, slash commands, system text size
Highlights
- Search your Mac to add sources. Add Source gains a search step backed by Spotlight: type a few characters and ranked file and folder hits come back, addable in one click. Results float ingestible, name-matching, recently-modified files first and stay clear of Trash,
node_modules, and~/Libraryclutter. Anything you add routes through the same path as a drag-and-drop, so folders become synced folder sources and OKF bundles import exactly as they always have. - Box, Dropbox, and iCloud Drive are first-class folder sources. Alchemy detects your cloud sync roots and offers them as quick-picks in "Add folder" — the picker opens inside the drive so you drill to the subfolder you actually want instead of ingesting the whole thing. Box Notes (
.boxnote) now parse into real text, both the modern and the legacy format; Dropbox Paper (.paper) stubs resolve to their content; and iCloud placeholder files are downloaded on demand instead of being skipped. - Slash commands in the chat composer. Type
/and a compact picker opens over every command, grouped by Generate, Learning, Documents, and Actions. All 18 generators are there — trailing text becomes custom instructions — alongside/add,/model,/research,/grep,/note,/report, and/clear. Fuzzy matching tolerates spaces and hyphens, Tab completes, and an unrecognized slash just sends as ordinary text. The full list also lives in Settings → Shortcuts. - Exact-match search from chat.
/grepexposes the ripgrep engine — previously reachable only through MCP — directly in the composer, rendering hits inline with no model call and nothing persisted to the transcript. - The interface follows your macOS text size. WKWebView ignores the system Accessibility text-size slider, so Alchemy now reads the effective Dynamic Type size natively and rescales the entire UI to match, live on window focus. The whole app moved from fixed pixels to a semantic type scale to make this possible. Your own chat and reader size adjustments compose on top, and PDF export is pinned so printed output never scales.
- Capture pages that require a login. The hidden capture window is a cookieless session, so anything behind a sign-in or on an intranet always came back as a wall. The browser extension now reads the rendered page from your own logged-in tab and hands it to the app through the same path a normal capture uses. Enable it in Settings → Sources.
Fixes
- Prompts sent to the on-device model now fit its 8192-token window, and re-trim to the measured token count when dense sources — code, RFCs, CJK text — tokenize heavier than the estimate predicted.
- The system text scale is anchored at the slider's Default position, so the interface renders at its design size there instead of only at the smallest stop.
- Settings → Models rows load independently per provider; one unreachable or hung provider no longer leaves every other row stuck on "checking…".
- The Mac search field no longer applies autocorrect, spellcheck, or auto-capitalization, so filename queries stay literal.
- Search results are filtered to files Alchemy can actually add, removing the dimmed rows that only invited dead clicks.
Notes
Login-walled page capture requires the browser extension and is off by default — turn it on in Settings → Sources. Clipped pages are snapshots: re-sync stays a no-op, since the app itself still can't reach them.
Full Changelog: v0.24.0...v0.25.0
v0.24.0 — corpus-scale retrieval, source gists, global answers
Highlights
- Retrieval that holds up at scale. Notebooks now stay fast and accurate well past a few million characters — the search quality fence is verified flat from 1M to 10M chars. The sources gauge reflects this: it measures where you are against a 10M scale target instead of warning about a capacity wall that no longer exists.
- Source gists. Every source gets a short distilled overview in the background, so corpus-wide questions ("what's in here?", "which source covers X?") find the right document even when no single passage is an obvious match. Folders show their own contribution to the total at a glance.
- Global answers over your whole library. Ask something broad — "summarize the themes across my sources," "what do these disagree on?" — and the answer is assembled from every relevant source, not just the closest few passages.
- Sharper page-capture retrieval. Captured web pages get a per-chunk context pass and shed navigation cruft, so search over clipped articles reads much closer to search over clean documents.
- Code files render with syntax highlighting in the reader, with find-in-source over the colored view.
- Color is back on the studio generator types — a quiet per-family accent on the generator buttons and note icons, for at-a-glance wayfinding.
- A calmer sources list. Rows carry only what's actionable (NotebookLM-style), folders remember open/closed across restarts and appear instantly with an embedding-progress indicator.
Fixes
- Importing a folder containing a malformed or encrypted PDF no longer panics or hangs the import — the bad file is flagged and the rest imports normally.
- Deleting a large folder no longer times out; the whole tree is removed in one pass.
- Generating a summary no longer produces a duplicate note card.
- The select-all control at the top of the sources list no longer reads as a blank, menu-less source.
- Long Settings tabs scroll again; the Settings header is now part of the nav.
- The vision-OCR gateway model is a dropdown of your gateway's models instead of a free-text field.
- Numerous background-distillation quality and stability fixes (index-rebuild races, gate tuning so accurate summaries aren't rejected, faster bulk ingest).
Notes
Background distillation (source gists and page-capture enrichment) runs after import, is gated for quality, and degrades to prior behavior on any failure. It's on by default and can be turned off in Settings → Models if you'd rather not spend the local model time.
Full Changelog: v0.23.0...v0.24.0
v0.23.0 — Obsidian vaults & Notion pages as living sources
Highlights
- Obsidian vaults are living sources. Add a folder that contains
.obsidian/and Alchemy recognizes it as a vault — a distinct icon, an "Obsidian vault" label, and a vault map. Your notes'[[wikilinks]]render as clickable hops between notes (resolved by Obsidian's shortest-path rule), YAML frontmatter is kept as provenance instead of polluting retrieval, and atags:list feeds the search context. Folders you added before this update upgrade themselves to vaults on their next sync — no re-adding. - Notion pages are living sources. Create an internal integration, share pages with it, and paste a
notion.soURL: the page and its child-page tree import as one source, re-syncing whenlast_edited_timemoves — only the pages you actually changed re-embed. Settings → Sources has a Notion token field that validates against your workspace as you type ("Connected to …") with a one-click link to create the integration. - Notion databases come in as tables. A database inside a page renders as a markdown table of its rows — titles, links, select/status, dates, people, and more — so "what's in this list" questions answer straight from the source.
Fixes
- Long Settings tabs (Models, Appearance, Agents) scroll again — a height regression let them grow past the modal instead of scrolling within it.
- The provider add/edit wizard has a consistent "‹ Back" to the provider list from every step.
Notes
- Notion access uses an internal integration token you create at notion.so/my-integrations; it's stored locally and sent only to Notion. Sharing a page with the integration is the permission model — Alchemy sees only what you share.
- Vaults and Notion pages ride the same machinery as folders and git repos: the same auto-sync cadence (Settings → Sources), the same reader tree, the same promote/demote and grep retrieval. Nothing new to configure.
- Design details in
docs/RFC-obsidian-notion.md.
Full Changelog: v0.22.0...v0.23.0
v0.22.0 — Inference providers: chat with any model you already have
Highlights
- Chat with any model you already have. One provider list covers your coding-agent subscriptions (Claude Code, Codex, Gemini CLI, Cursor, OpenCode, GitHub Copilot, Hermes, IBM Bob — run headless, your existing sign-ins carry the bill), API gateways (30+ presets from OpenAI and Anthropic to NVIDIA, OpenRouter, and Groq, plus any custom OpenAI-compatible endpoint), and local servers. Switch anytime from the model pill in the chat box; answers are captioned with the model that wrote them, including metered cost when the provider reports one.
- On-device chat on macOS 26. With Apple Intelligence enabled, Apple's on-device model answers entirely offline — no server, no account. Retrieval tightens automatically to fit its smaller window, verified against the recall eval suite.
- Failures you can act on. Provider errors land in the transcript as durable rows in plain language — out of credit, model unavailable on this account, sign-in expired — with a Retry button, a one-click "Open Terminal" fix that launches the right sign-in command, or a jump straight to model settings. Hung providers fail in seconds instead of spinning forever.
- Route studio work separately. Studio generation and helper tasks (titles) can use a different provider than chat, with graceful fallbacks — pair local chat with a heavyweight generator, or the reverse.
- Setup with three doors. First run offers: use a subscription you already pay for, paste an API key (the wizard probes it and picks a working model), or stay fully local. Editing a provider re-probes and shows the live model list.
Notes
- Saving settings is instant now, even mid-generation, and switching providers can't bleed into an in-flight answer.
- Embeddings stay on the built-in private embedder by default and remain deliberately separate from chat.
- Message history records the answering model; messages from before this release show no caption.
- Full design in
docs/RFC-inference-providers.md.
Full Changelog: v0.21.0...v0.22.0
v0.21.0 — Git repositories as living sources
Highlights
- Git repositories are first-class sources. Paste a GitHub, GitHub Enterprise, or any git URL — or point Alchemy at a local checkout — and it becomes a living source that re-syncs automatically. A repo-home URL captures just the README by default; a
/treeor clone URL brings the whole thing. - Choose what to import, before you import. Git-shaped URLs show a README · Docs · Everything ladder right in the add dialog, so you pull only the written knowledge when that's all you want.
- Built for big repos. Large repositories embed their docs and READMEs while code stays searchable-not-embedded, so a monorepo costs almost nothing at rest. Code is still fully findable — a ripgrep pass joins chat retrieval whenever your question looks like code, and per-file symbol outlines make definitions searchable by name.
- A real repo reader. Opening a repo gives you a file tree, syntax-highlighted code (themed to match every color scheme), Finder-style breadcrumbs, a line-number toggle, and select-code-to-chat. Promote or demote any file between embedded and search-only from the same view.
- Uses your own git credentials, stores no tokens. Private and Enterprise repos work because your SSH keys, credential helpers, and
ghauth already do — Alchemy never holds a secret. Remote repos re-fetch on a cadence you set (Settings → Sources), or never, if you prefer. - Agents can search your repos. The MCP server gains
grep_sources(exact/regex) andast_search(structural code patterns like$X.unwrap()), so connected agents explore repositories through Alchemy without cloning anything. - Settings, reorganized. General now splits into General, Sources, and Studio tabs.
Notes
- Code files ingest verbatim (indentation preserved) and chunk on structure, not prose windows. Symbol outlines cover ~15 languages via bundled tree-sitter grammars.
- See
docs/RFC-git-sources.mdfor the full design.
Full Changelog: v0.20.0...v0.21.0
v0.20.0 — The Render Pass: rescue blocked & JavaScript-rendered pages
Highlights
- Failed page imports now rescue themselves. When a URL comes back blocked, blank, or JavaScript-rendered, Alchemy retries it in a hidden WebKit render pass — the real browser it already ships — and extracts the settled page. All local: no scraping service, no API key, no URL ever leaves your machine. Pages that used to import as errors or a sentence of boilerplate now arrive whole (a Cerebras blog post went from 48 characters to 22,700; Apple's Human Interface Guidelines pages from ~260 to 4k–55k each).
- Rescue reaches add, refresh, and scheduled re-syncs alike. Any source that flows through URL import — a fresh add, a manual refresh, a report's re-sync — inherits the render pass, so old errored sources heal on their next refresh.
- Cleaner captures. The render pass scrolls the page (including inner scroll panes) to trigger lazy-loaded content, drops full-screen consent overlays, and pulls author and publish date into a provenance line at the top of the source.
- Sites that need rendering are remembered. Once a domain wins by rendering, later imports from it skip straight to the render pass instead of re-failing the quick fetch first; a domain that starts working normally again is forgotten (30-day freshness).
Notes
- Rescue is macOS-only for now and runs automatically — no setting to enable.
- Login walls, bot challenges (CAPTCHA/Cloudflare), and empty search results are left as-is rather than worked around; those stay honest errors or thin results.
Full Changelog: v0.19.0...v0.20.0
v0.19.0 — Glass & Cards: the chrome redesign
Highlights
- The card layout — the window is one chrome surface with the sidebars floating as inset rounded cards, Finder-style; chat and the reader stay an open center column. Headers align across every panel, collapsed rails shrink to their contents, and the home page follows suit with Latest Reports as a collapsible side-card.
- Liquid Glass — the real macOS 26 material behind the whole chrome, with Off / Tinted / Clear levels matching the system's own vocabulary. The tint follows your theme (white glass under light palettes), explicit themes pin the material's appearance, and the System theme keeps auto-switching at sunset. Under glass, the material is the ambience — the blank-chat shader steps aside.
- Frosted menus everywhere — dropdowns, popovers, the notebook color picker, and the ⌘K palette share one native-menu material: translucent elevation over a backdrop blur. Right-click menus included, and macOS "Reduce transparency" gets fully opaque fallbacks.
- Reference-grade light mode — white border-only cards with hairline borders and whisper shadows, a defined chrome tone, and a WCAG AA contrast pass across all 20 themes (sixty muted-text, primary, and unread-accent fixes) driven by a reusable in-app audit.
- Quiet color — color is semantic now: source-type icons went monochrome, studio tiles share one neutral treatment, the capacity gauge wears the notebook's color, and colored left-border stripes became dot chips.
- Documents got properties — a Linear-style label/value header on every source and note (type, site, added, size · kind, origin, created, updated), excluded from find and citation matching.
- Quieter chat plumbing — tool confirmations render as one-line chips instead of full message bubbles.
- Notebook context menus — right-click a notebook card for open, rename, color, and delete.
Fixes
- Switching a light theme on and off glass no longer leaves the window black — the chrome always paints
- The System theme follows macOS light↔dark flips while glass is on
- A failed glass apply no longer wedges glass off until relaunch
- Panel resize handles are grabbable again (the rounded cards were clipping them)
- Note-card dropdowns paint above card text — menus are portaled, ending the stacking whack-a-mole
- Source error messages wrap instead of forcing a horizontal scrollbar
- Find-in-source counts match between rendered and plain views
- The reports blank slate is compact, and Settings can reveal the templates folder in Finder
- The hidden ambience shader no longer burns CPU under glass
Full changelog: v0.18.0...v0.19.0
v0.18.0 — The Reader: in-place documents, seamless notes, live pages
Highlights
- The Reader — sources and notes open in the center column, never a modal: Chat ⇄ Reader tabs, browser-style back/forward (⌘[ / ⌘]), j/k through the notebook, ⌘F find on the rendered view, per-document scroll memory, and a floating table of contents that hugs the text column.
- Citations land on the passage — clicking a citation opens the source scrolled to the cited text with it highlighted in place (CSS Custom Highlights), not the top of the page.
- Seamless notes — prose notes are the editor: edit in place with idle autosave (no Save/Cancel), GFM tables that round-trip losslessly with row/column controls, clickable links, and related passages floating alongside as you write — click to jump, or insert a reference at the cursor.
- A document graph — web pages extract to real markdown (headings, lists, tables, links survive), links between sources jump wiki-style with hover preview cards, and every document shows what links to it.
- Live web view — URL sources get a Cached ⇄ Live toggle that embeds the actual page in the reader, read-it-later style; pages that refuse extraction open straight into Live.
- Real artifacts — flashcards are a spaced-repetition deck (1/3/7/21-day boxes), quizzes grade themselves with explanations, slide decks render as themed 16:9 slides with a fullscreen Present mode and one-click PDF export, and mind maps pan and zoom like an infinite canvas.
- Capture from anywhere — the menu bar extra adds your clipboard (files, images, URLs, or text), a URL, or pasted text into any notebook; ⌘⇧U / ⌘⇧V in the app. Word documents extract with their structure, and image sources show the original image, not just its OCR text.
- Agents can connect Mac items — MCP
add_sourceacceptscider://origins (a Reminders list, Apple Note, Calendar window, or Stocks watchlist) directly.
Fixes
- Enter submits the add-URL field instead of bouncing back to the tiles
- Sites that serve full articles with error statuses (broken SSR) now extract
- Citation anchors fire even when the window is occluded (rAF pause)
- Opening a note never autosaves or reorders the notes list
- List bullets restored everywhere markdown renders
- Reports are read-only records; deliberate edits behind the pencil
- Source rows above dropdown menus, sync from the reader toolbar, right-click row menus
Full Changelog: v0.17.0...v0.18.0
v0.17.0 — Retrieval, grown up: routing, deep search, linked citations
Highlights
- Ask Everything got a retrieval overhaul. Questions now route to the notebooks most likely to hold the answer (semantic routing over source/note titles, active once you have more than 5 notebooks), while keyword search stays corpus-wide as the exact-identifier escape hatch — so "what uses port 32400?" still hits even when routing guesses wrong. Diversity caps keep one large notebook from crowding everything else out of the answer, and "where did I save X?" now matches source and note titles directly.
- Deep search, on demand. A Telescope toggle in ⌘K ask mode (same UX as chat's deep research) retrieves a 3× candidate pool and has the model keep the passages that actually answer. Smart default: on for gateway models, off for local; degrades safely to normal search if the reranker is unavailable.
- Citations you can click, everywhere. Inline
[1]markers in Ask Everything answers are now clickable chips that jump across notebooks to the exact passage or note, matching notebook chat. - Same question, same citations. Hybrid search had a hidden coin flip: tied fusion scores ordered randomly per launch, so answers could cite different passages run to run. Ties now break deterministically — measured as exact-identifier MRR@10 going from an unstable 0.88 to a stable 1.00.
- Retrieval shows its work. Every retrieval appends a local trace (query, stages, warnings, ranked citations) to
traces/retrieval.jsonl, and agents get an MCPsearch_debugtool that exposes the vector/keyword/fused stages — when an answer looks off, you can see exactly why. - Quality is now measured, not vibes. A dataset-driven eval harness (Recall@5/10, MRR@10, MAP@10, nDCG@10 across exact/paraphrase/section/metadata/multihop queries) runs in
cargo testand floors the metrics, so retrieval regressions fail CI before they reach you. The routing and diversity designs above were chosen by these numbers (per-item routing: 0.93 vs 0.83 accuracy; diversity: 3.0 vs 2.7 notebooks represented, recall unchanged).
Fixes
- Citation order is deterministic across runs (fusion tie-break).
- Home activity feed renders each section as it loads instead of waiting for the slowest.
- Studio refinements and accessibility fixes: focus restore, dialog guards, restored generator colors (#2).
Notes
- First corpus-wide ask builds a small
routesindex (new LanceDB table) and keeps it fresh incrementally; existing databases need no migration. - Retrieval traces are strictly local, capped at 5 MB with rotation.
- MCP:
search_debugis new;ask_everythingaccepts an optionaldeepflag.
Full Changelog: v0.16.0...v0.17.0
v0.16.0 — Notes as memory: evidence notes, auto-capture, and the curator
Highlights
- Chat saves its own conclusions. After an answer that synthesizes across sources, Alchemy may save an evidence note — the claim, quoted passages with their sources, confidence, counter-evidence, open questions. It's conservative by design (most exchanges save nothing), dedupes by claim so records accumulate evidence instead of siblings, and an
autobadge marks what it created. Editing an auto note makes it yours. - Notes are searchable memory now. Notes are embedded into the same retrieval index as sources, as a clearly labeled tier: chat can cite your notes (with a note badge — click opens the note), ⌘K finds passages inside them, meta-chat returns them across notebooks, and MCP
searchreportsnoteIdso agents can recall prior conclusions. Existing notes are indexed automatically on first launch. - A curator keeps auto notes tidy. Unused auto notes go stale after ~30 app-open days (dimmed) and archive at ~90 (out of retrieval, never deleted — an Archived section keeps them a click away, and any use revives them). Once a week, while you're away, it also merges auto records that state the same claim (Settings → General to turn off). Every action lands in a per-notebook "Curator report" note.
- Evidence Log generator. A new Studio tile distills a notebook's major claims into auditable records; agents can create evidence notes over MCP with
kind: "evidence". - Reports collapsed to living notes. Each scheduled report now maintains one note — stable title, newest content, run stamp inside — instead of piling up timestamped copies. Existing piles collapse on first launch.
Fixes
- Auto-evidence parsing survives real model output (markdown-decorated markers, reasoning preambles) instead of silently skipping.
- Dev builds bind the MCP server one port above the configured one, so a dev instance and the installed app no longer collide.
- Dev builds show a DEV chip in the title bar and the commit sha in Settings → About.
- The home title bar drops the non-actionable provider-status chip.
Notes
- First launch migrates the notes table (new
origin/statuscolumns) and backfills the retrieval index with existing notes — a brief one-time cost. - Weekly auto-note consolidation is on by default; it's idle-gated, capped, and fully reversible. Settings → General → "Consolidate auto notes weekly" to disable.
- Audio Overview scripts are deliberately excluded from retrieval.
Full Changelog: v0.15.0...v0.16.0