Knowmarks Changelog

What changed in Knowmarks.

New features, improvements, and fixes from the private alpha. Short on ceremony, long enough to know what is worth trying next.

Fixed

  • Author names with apostrophes or other special characters now display correctly in the reader byline (previously you might see codes like ' instead of the apostrophe). New saves store the clean name, and items you've already saved render correctly too.

Improved

  • Home is now a front page. Your dashboard opens as today's edition — a masthead with the date and edition number, your Brief as the lead story with a drop cap and pull quotes, recent saves set as a "New on the shelf" department, observations under "Notes & Queries," and housekeeping condensed into a single quiet ledger line. No more cards and banners — the page reads top to bottom like something written for you.
  • Reading got a magazine treatment. Articles, repos, videos, PDFs, and threads open as a feature spread: a serif title, a wider warm reading column, and source marks (little favicons) wherever a source is named. The context panel beside your reading now shares the same warm palette, so the whole item view feels like one surface.
  • The top bar is gone on desktop. Search lives in ⌘K, and feedback, notifications, and your account moved to the bottom of the sidebar — your content starts at the top of the window. (Mobile keeps its header.)
  • Both themes were designed for this, not inverted: dark reads like lamplight, light reads like warm paper.

Added

  • You can now export your entire library as a single archive from Settings. One click on "Export Everything" packages every save, space, note, citation, and automation rule into a zip of plain markdown and JSON files — open it in any file browser and your stuff is right there, readable. Your original uploaded files (PDFs and documents) come along too.
  • The archive is round-trippable: bring it into any Knowmarks instance with km import knowmarks <archive> and everything is restored — already-present items are skipped, so importing twice is safe. km export <path> does the same export from the command line.

Fixed

  • Item titles mentioned in your Brief are links again, and they open the in-app reader. The Brief's narrative had stopped linking the saves it talks about entirely — titles rendered as plain text; they now link straight to the same reader page the rest of the dashboard uses, and you can middle-click or open them in a new tab.
  • Bold emphasis in the Brief narrative now renders properly instead of showing literal asterisks around item names.

Added

  • Press ⌘K (Ctrl+K on Windows and Linux) anywhere in the dashboard to open the new command palette — one box that does three things. Type a few characters to search your saves and hit Enter to open the best match. Type > to run a command: create a note, save a link, import bookmarks, ask the Companion something, or jump to any screen. Paste a link and the palette offers to save it, with a Space picker right there so the save lands where you want it. It works on every screen, and the "Search or run…" row at the top of the sidebar opens it with a click or a tap — no keyboard shortcut needed.
  • A few quiet accelerators came along with the palette: press / to open it, paste a copied link on any screen (⌘V) to save it without opening anything first, and use two-key jumps — G then P for Pulse, G then S for Spaces, G then N for Notes.
  • Opening a saved item now takes you to a full reader view instead of a small pop-over. You get a clean reading layout tuned to what the item is: articles read like articles, GitHub repos show their README with stars and activity, YouTube videos surface chapters and a timestamped transcript, documents get an outline, and Reddit threads read as a conversation. The original page is still one click away from the reader's toolbar.
  • The right side of the dashboard is now one rail with two tabs: Context and Companion. While you're reading an item, the Context tab shows what it is — its source, the spaces it belongs to, its structure, and its details — and the Companion is one tab flip away. On list and home views the rail stays Companion-only. The rail still collapses to a thin strip, still toggles with ], and still remembers your choice.
  • The Companion now knows what you're reading. Flip to its tab while an item is open and you'll see a quiet "About this page" line with the item's title — ask "what's the key claim here?" and it answers about that page directly, no pasting or explaining needed. It's still one ongoing conversation: move to another item and keep talking.

Fixed

  • Tables in saved pages render as actual tables now — header row, aligned columns, clean row lines — instead of a wall of pipe characters. You'll notice it most on GitHub READMEs with command or feature tables.
  • Some older saved GitHub repos showed their README as a wall of plain text with the links stripped out. Cause: repos saved during big imports could exhaust GitHub's anonymous API limit and fall back to a lossy text extraction. Saving now uses your GitHub connector's token (much higher limit), the fallback keeps links and formatting, and the affected saves were re-fetched with their formatting restored.
  • Saved pages render their formatting properly in the reader: italic captions no longer show stray underscores, section headings underlined with dashes display as real headings instead of literal dash runs, quoted passages render as proper quote blocks (GitHub-style NOTE and CAUTION callouts get a labeled treatment), divider lines display as rules, and bare web addresses in the text are now clickable.
  • The forks and open-issues icons on repo pages render now (they were silently missing from the icon set, along with nine others across the app — all restored, with a test that keeps the set complete).
  • GitHub READMEs that open with raw HTML taglines no longer leak code fragments like </a> into the reading view — the text stays, the markup goes.
  • The source card no longer claims an item is "103% vitality" — scores cap at 100% everywhere, and existing items were healed automatically.
  • Reddit posts whose body was removed on Reddit now show a quiet "post body removed" note instead of the raw [removed] token, and pages that publish placeholder author names (like "Fallback-author") no longer show them in the byline.

Improved

  • GitHub repos in the reader match the design frame: the owner sits in a small line above the title with the GitHub mark (instead of a plain "github.com" chip), the big title is just the repo name, and the rail's Source card shows the same mark + owner/repo identity. README images referenced by relative paths now load instead of showing a broken-image placeholder.
  • The empty strip across the top of the content area is gone on desktop — your content starts at the top of the window now. In the reader, the Back row is the top bar, lined up with the rail's tabs, and the Back button says where it's taking you ("Back to Pulse", "Back to Spaces"). On phones nothing changes: the top bar stays, since it holds the menu and search.
  • The light/dark theme switch moved from that strip to the bottom of the sidebar, next to the version number — and it's in the ⌘K palette too ("Toggle light/dark theme"). The old sparkles button is gone: it predated the rail's Context · Companion tabs, which (along with the ] shortcut) are how you open the Companion now.
  • Reddit threads in the reader now show more of what you'd see on Reddit itself: when the post went up, the real total comment count (not just the comments captured with your save), the "% upvoted" ratio, and — on each comment — when it was written plus the commenter's flair. New saves pick these up automatically; already-saved threads fill in the next time the metadata backfill sweep runs.
  • The search bar at the top of the screen is gone on desktop — the palette replaces it. Everything the bar did still works and is faster to reach: searching and saving live in ⌘K (or the sidebar's "Search or run…" row), and your reading area gets the vertical space back. The theme and Companion-rail buttons stay in the top corner where they were. On phones and small windows nothing changes: the visible search bar stays, since there's no ⌘ key to lean on there.
  • The reading column in the reader got wider: item details moved out of an inline side panel and into the rail's Context tab, so the content gets the full width of the screen while the details stay one glance away.
  • READMEs and other markdown-heavy saves render cleanly in the reader: badge rows and leftover HTML scaffolding are filtered out, and images embedded in the content display as real images instead of raw markup.
  • The previous quick-view panel still appears where it makes sense — in Companion chat, duplicate review, and other in-flow checks — so those workflows keep their action buttons close at hand.
  • Your existing library got the reader treatment too: saved YouTube videos picked up their duration, chapters, and timestamped transcripts, and saved Reddit threads now read as real conversations with authors and scores — not just for new saves.
  • When a page can't be extracted cleanly (heavy scripts, login walls), Knowmarks no longer quietly gives up. It retries with progressively stronger extraction, and when only a real browser will do, the home screen shows which saves need a quick browser visit to finish — the browser extension capture completes them.
  • Health checks in km doctor now also cover stored page snapshots and the extraction retry pipeline, so you can see at a glance whether anything is stuck.

Fixed

  • Opening an item now opens the rail's Context tab even if you'd collapsed the rail earlier — your item's details were invisible until you manually expanded it. Collapsing still works; the rail just reopens when you start reading something new.
  • Documents look the way they should in the reader: the file name and page count moved into the reader's slim top bar, and the content starts right below it instead of after a stretch of empty space.
  • The item controls are back while you read: a new "**" menu in the reader's top bar carries add to a space, save as note, ask Companion, re-fetch content, reclassify, and a quick-view escape hatch to the full legacy panel. (They had been reachable only through ⌘K or the old pop-over since the reader took over.)
  • Reddit threads in the reader now show who posted (u/name), the post score, an OP badge on the author's own comments, and a "Voices" list in the rail — the top contributors in the saved conversation. The Back button got its arrow back, too.

Added

  • The Settings → Diagnostics card now shows Envelope Conformance, Document Extraction, and Telemetry — the Response Envelope Contract guards, Docling readiness + model-cache state, and Sentry/PostHog wiring that were previously only visible via km doctor. The dashboard finally has the full set of integrity checks the CLI does.
  • km doctor gains a new Radar Rules section reporting the RSSHub discovery-rules cache (domain count, size, freshness). The cache file has lived on disk for cycles, but only the JSON diagnostics endpoint surfaced it — now km doctor does too.

Added

  • The Settings → Diagnostics card now shows Spaces Integrity, Citations Integrity, and Notes Integrity alongside the existing sections. These checks have been in km doctor for a while; the dashboard finally has them too, so you can spot a missing note file, a citation pointing at a removed passage, or a Space-substrate drift without dropping to the terminal.
  • The Settings → Diagnostics card also picks up Pipeline Integrity, Onboarding Integrity, and Companion Integrity — the reconciler / inference-queue snapshot, the welcome-flow wiring guard, and the Companion §2.0g surface check that were previously only visible via km doctor.

Improved

  • km doctor and the Settings → Diagnostics card now report cause-tagged reasons when an enrichment job fails — you can tell at a glance whether a stuck save is waiting on a different model, needs a fetch retry, or is hitting a configuration problem, instead of seeing a generic "error" row.
  • The Settings → Diagnostics card runs the embedding and LLM reachability probes in parallel and reuses a single connection across them, so the panel loads faster when a provider is slow to respond. Each probe now has an explicit connect / read timeout split, so a slow redirect chain can't block the whole card.
  • The "Review due" row in Notes Integrity now renders the overdue count in yellow in km doctor again (it had briefly been showing as literal [yellow]…[/yellow] debug text — a rendering escape introduced during the doctor refactor and caught in the chunk-3 review).
  • Citations with the durable retention class that have drifted or broken are now treated as workflow signal, not a problem — the Settings → Diagnostics card no longer paints the Citations Integrity card yellow just because a re-verify pass is overdue. External health checks polling the dashboard JSON for extras.citations_integrity.status no longer flap on naturally aging citations.

Fixed

  • Citations Integrity no longer reports fake-clean zero counts when the citations table is missing from the database — it now surfaces a single "Check skipped: citations table not present" row so the schema gap is obvious instead of hidden.
  • Notes Integrity stops false-flagging files like mynote.md.md as orphans. Backup tools that append .md to filenames, or a Finder hide-extension save-as mistake, no longer turn the section red.

Fixed

  • A misconfigured LLM_BASE_URL (empty, or pointing at an obviously wrong host) no longer takes down the entire Diagnostics card. Each section reports its own outcome independently, so one bad provider can't blank the rest of the panel.

Added

  • The Knowmarks iOS app now syncs your saved links in the background. Anything you share from your iPhone reaches Knowmarks on its own once your server is reachable — you no longer have to reopen the app to flush the queue. Background sync is best-effort by design (iOS decides when to grant background time), so opening the app still triggers an immediate sync if you don't want to wait.

Added

  • Notes now have an optional review cadence. Set a review: field in the note's .md frontmatter — 90d, 6mo, 1y, or never — and Knowmarks surfaces the note in stale items when it's overdue. New notes default to 90 days; existing notes start at no cadence so nothing in your library gets flagged retroactively. Use km note review <id-or-slug> to mark a note reviewed without touching its body (the lifecycle counterpart to km save for URLs).
  • Documents (PDFs, Office files, anything you uploaded) can now be re-uploaded in place. km ingest <path> --replace <knowmark-id> (or the optional replace_knowmark_id field on the upload form) keeps the Knowmark id, preserves Space membership, re-extracts content, and re-verifies every citation pointing at the document. The revision counter on the document ticks up so you can see how many times you've refreshed it.
  • PDF citations now show the page number when the source PDF reports one. The "Anchor" line on km cite open and the MCP cite_open response read · Page N after the surrounding context, and the stored selectors carry W3C PageSelector + BoundingBoxSelector alongside the existing TextQuoteSelector and TextPositionSelector.
  • The Companion gained two proactive observation kinds. Note review due surfaces your top two or three notes overdue against their cadence; Document aged surfaces your top two or three uploaded documents whose publication date is older than the aged-document threshold (3 years by default, configurable via KNOWMARKS_AGED_DOCUMENT_YEARS).

Improved

  • Stale items now treat notes, URLs, and documents on their own terms. Notes are governed by review cadence, URLs by HTTP vitality, and documents by publication date — a note isn't flagged stale just for being old, and a PDF isn't run through a URL-vitality probe.
  • Editing a note re-runs every citation against its body through the existing four-state model. Quote anchors that still resolve stay valid; ones that don't drift to drifted cleanly, so a citation you made yesterday doesn't go silently wrong after you fix a typo.
  • Every saved item — link, note, or document — now runs through the same post-create enrichment pipeline (auto-summary, auto-connections, cluster refresh, curated-collection refresh, project-inbox routing, knowledge-gap check, rules). Notes pick up the same enrichment URLs have always had; the rules engine gained a kind condition so you can target rules at links, notes, or documents specifically.
  • Deleting a note from the dashboard, the API, or the MCP now also removes its .md file from disk in lockstep — no orphaned files left behind.

Fixed

  • Brief refreshes now track narrative retry and failure states more clearly, so Pulse can keep showing the last good narrative while making temporary summary generation problems easier to understand.

Fixed

  • Pulse now keeps the last successful narrative visible when a Brief refresh hits a transient LLM/provider failure, while making clear that the structured signals are current and the narrative will catch up on a later pass.

Fixed

  • Setlist-synced Projects now keep their visible metadata and recommendation context current when Setlist changes, including older local Projects that match Setlist by path, while preserving fields that were edited directly in Knowmarks after the last import.
  • Suggested Spaces no longer duplicate when overlapping cluster rebuilds are triggered close together.

Fixed

  • Projects, Spaces, Collections, and pinned Space lists now sort names case-insensitively, so lowercase names appear in the main alphabetical order instead of being separated from uppercase names.

Added

  • Dashboard URL saves can now optionally route the saved link into multiple selected Spaces or Projects at save time.
  • Chrome extension saves now show the same optional multi-select Space routing control, so a browser-toolbar save can land in the right Project, Collection, Suggested Space, or Connection while saving.
  • Settings now includes hosted-alpha client setup links under Access Tokens, with downloadable Chrome extension and Claude Desktop extension packages that use the alpha API URL and the tester's own Access Token.

Fixed

  • What Knowmarks Noticed cards now use current Brief support signals instead of repeating evergreen filler or echoing the Brief headline.

Added

  • Chrome extension saves can now send browser-captured Selection or Article text as source content, keeping user notes separate while making Medium, Reddit, X/Twitter, paywalled, logged-in, verification-wall, and JavaScript-heavy pages more reliably searchable.
  • iPhone share-sheet saves can now include selected or shared page text as source content when iOS provides it, while keeping the user's own note separate from captured text.
  • Stale GitHub Stars and Reddit saves in Issues can now use Unfavorite + Delete to remove selected links from Knowmarks while also queuing source-side cleanup, such as unstarring GitHub repos or unsaving Reddit posts.

Improved

  • Browser-captured extension saves now skip slow server-side extraction when the extension already has readable page text, and the popup reports a timeout instead of staying on Saving... indefinitely.
  • Extraction issues now explain why Knowmarks may not have readable content and what to try next, with cards sized more like the Stale Content list.
  • Firecrawl extraction now uses longer browser-render timeouts, lighter scrape options, rendered-HTML fallback, and clearer failure reasons when browser extraction still cannot produce readable content.
  • Extraction Issues now recommend Chrome extension browser capture for sites that likely need the user's rendered browser session, such as blocked, paywalled, verification, or empty browser-extraction pages.
  • Bulk unfavorite cleanup now removes selected rows from Issues immediately, keeps source cleanup running in small background batches, and shows progress at the top of the Issues page instead of making rejected rows reappear.
  • Pulse Recently Added cards now use cleaner text-first titles without repeated bookmark icons.

Fixed

  • iPhone settings now allow local/private Knowmarks servers to pass connection testing without an access token when the local API is running without API-key auth, while hosted alpha still requires token validation.
  • iPhone sync now coalesces overlapping foreground, network-restore, and manual retry triggers so the same pending share is not sent to the server more than once.
  • Stale Content now filters cached issue rows against the live Knowmarks row state, so items hidden for pending source cleanup do not reappear while Huey keeps trying to unstar or unsave them.
  • Source cleanup status now tracks older scheduled cleanup jobs and surfaces specific provider reasons, such as GitHub token permission issues, instead of collapsing them into a generic connector-credentials message.
  • Browser extension saves with meaningful captured content now heal older partial extraction rows instead of leaving them in Extraction Issues with a stale browser-capture recommendation.
  • Pulse now keeps Sources, Worth Opening First, and What Knowmarks Noticed in sync with the latest Brief, avoiding duplicate source picks and stale noticed cards after a refresh.

Added

  • Search result multi-select can now create a new Collection from the selected items, not just add items to an existing Collection.
  • Search now supports pruning terms with NOT:term or -term, plus Keyword and Semantic filter chips for narrowing result types.

Improved

  • AI-generated item summaries now lead with the saved item’s specific value instead of generic openers like “This GitHub repository,” making search results easier to scan.
  • The search multi-select Collection/Project picker now behaves like a normal menu: pressing Escape or clicking outside closes it without clearing the current selection.
  • Search result selections now persist while moving to the next or previous result page, so bulk actions can span more than one visible page.
  • Added an in-app Search operators reference so testers can see the available query syntax without leaving the dashboard.
  • Search relevance now gives more weight to exact and adjacent multi-word phrases while discounting broad corpus-wide terms, reducing noise for queries like “AI writing skills.”
  • Removed the old “All clusters” toolbar menu so search filters are limited to controls that clearly affect the current search results.

Fixed

  • The detail panel's Add to Space picker now uses the current Spaces labels and includes Connection spaces, instead of showing older Project/Topical/ Curated-only options.

Added

  • Added selectable table-style rows for Space detail views, making it easier to scan and act on grouped items.
  • Added clearer search result match labels so semantic matches and keyword matches are easier to understand at a glance.
  • Added Gmail-style search operators such as type:, format:, source:, space:, site:, after:, and before: so searches can be narrowed directly from the search box.
  • Added keyboard-friendly operator menus for bounded fields like type, format, source, and Space.
  • Added a running changelog so new features, improvements, and fixes have one durable place to land.
  • Added a marketing-site changelog page that publishes the tester-facing entries from this markdown file.

Improved

  • Search results now use the compact selectable table pattern, with tighter match pills and less visual clutter.
  • Detail pages now separate AI summaries, your own notes, captured source text, and related items more clearly.
  • Related-item "why" explanations are tighter and easier to scan.
  • Pulse, curated Spaces, and MCP tools got a round of polish so assistant-facing views line up better with the app.
  • Marketing screenshots behave better across smaller screens.
  • Updated the alpha weekly email workflow to point at this changelog when preparing tester updates.
  • GitHub Stars sync is now lighter during scheduled checks: recent stars can be picked up frequently while existing repo vitality is refreshed separately.
  • Stale content review now understands GitHub repo maintenance signals such as archived repos and long gaps since the last push.

Fixed

  • Permanent deletes now ask for confirmation in the frontend before removing items.
  • Sidebar pinning is now limited to Spaces and Notes, so ordinary saves no longer expose misleading pin controls.
  • Search match labels and pills were cleaned up after the table migration.

Added

  • Added a hosted alpha app tour to help new testers understand the shape of the product before they start saving.
  • Refreshed the alpha marketing site with current screenshots and clearer alpha positioning.

Improved

  • Cleaned up hosted alpha onboarding so setup points testers toward the right hosted flow instead of local/self-hosted assumptions.
  • Updated alpha docs and marketing copy for more accurate setup, privacy, and deployment language.
  • Prepared the alpha API and Space icon behavior for the hosted tester environment.

Fixed

  • Fixed the alpha worker healthcheck so the hosted worker reports health more reliably.
  • Fixed a Huey dispatcher issue that could break Sentry reporting for queued jobs.

Added

  • Added Knowmarks MCP Apps views so assistant clients can open richer Pulse and app-style surfaces.
  • Added an embedding bakeoff workflow, including redacted search-log evaluation export and a synthetic smoke run.
  • Added a dedicated LLM lane for Space title generation.

Improved

  • Matched the MCP Pulse app to the current Pulse view and removed duplicated brief prose.
  • Polished alpha frontend interactions, including content action wording and view-mode consistency.
  • Clarified Space membership and pin behavior across the app and APIs.
  • Improved markdown extraction and repair tooling for backfilled content.

Fixed

  • Fixed MCP Apps hydration in Claude Desktop.
  • Suppressed typo-driven query-gap noise so the app is less likely to overreact to simple misspellings.
  • Handled duplicate passage chunks during content processing.

Improved

  • Scheduled connector and governance refreshes now move through the Huey worker path more consistently.
  • Local Huey queue runtime behavior is more resilient during development and alpha operations.
  • GitHub connector failures now report more safely when an upstream request fails.

Fixed

  • Reduced noisy retry behavior for scheduled connector jobs.
  • Fixed command output wrapping for Huey dry-run commands.

Added

  • Added the Huey-backed job queue foundation for background Brief, connector, and governance work.
  • Added a combined local command that starts both the web app and worker for normal local use.
  • Added the LLM lane bakeoff harness and OpenRouter presets used to compare Brief, Pulse, and structured-output models.

Improved

  • Hardened Pulse brief generation and tightened the editorial layout.
  • Normalized search match explanations so keyword matches read more consistently.
  • Improved local server database handling to avoid WAL checkpoint stalls.

Fixed

  • Fixed intermittent dashboard search latency.
  • Fixed project dropdown line height.
  • Fixed CI failures around WAL handling and voice-guide changes.