Changelog

Latest releases, completed work, and improvements shipped to Elmo.

Releases

November 5, 2026

What's Changed

  • Add elmo lab audit, which checks how well AI agents and crawlers can reach, read, and understand a website. by @jrhizor
  • Add elmo lab commands that generate tracking prompts, evaluate them across providers, and suggest AEO improvements as one-off runs. by @jrhizor
  • Fixed the brand analysis API accepting a maxCompetitors or maxPrompts above the documented maximum of 100. by @mrlubos
  • Fixed the API and MCP tools reporting a plan's billing interval as month or year instead of the documented monthly or annual. by @mrlubos
  • The citation flow chart counts a page once even when AI engines tag its links with UTM parameters. by @jrhizor
  • The demo now invites visitors to start their own Elmo Cloud workspace, including when they try to save a change. by @jrhizor
  • Stop a prompt's scheduled run being charged twice when its job outlives a 15-minute expiry. by @jrhizor
  • Show the last used sign-in method when returning to Elmo Cloud. by @glaucusec
  • Reports now show how far along they are, and one whose worker died is marked failed instead of appearing to run forever. by @jrhizor
  • A rate-limited API request's Retry-After header now gives the wait in seconds instead of milliseconds, and the API reference lists it as the only header a 429 carries. by @mrlubos
  • Fixed the API's prompt runs list rejecting an out-of-range page or limit with a 400 instead of clamping it as documented. by @mrlubos
  • Remove the stray divider and empty space at the bottom of the account menu in the demo. by @jrhizor

October 29, 2026

What's Changed

  • Add a citation flow chart to the citations page that shows which AI engines cite any domain — yours, a competitor's or a third party's — and which of its sections and pages they cite. by @jrhizor
  • Added Cloudflare Turnstile bot protection to Elmo Cloud email sign-up, sign-in, and password reset. by @jrhizor
  • The API's cited URLs, cited domains and query fan-out lists are paginated and searchable, so large brands no longer get responses too big to return. by @jrhizor
  • Keep light-colored brand icons with transparent backgrounds visible on the site. by @jrhizor
  • Additional citations and sentiment page speed optimizations. by @jrhizor
  • Added a /.well-known/change-password redirect to the in-app change-password page. by @TheGhulam

October 27, 2026

What's Changed

  • Fixed sign-in and API requests failing until a server restart after a brief database connection error at startup. by @jrhizor
  • The citations page loads faster for long date ranges. by @jrhizor
  • The sentiment page loads faster. by @jrhizor
  • Added a /api/health endpoint for uptime monitors. by @jrhizor
  • Elmo Cloud plans can now track Kimi as one of their platforms. by @jrhizor
  • Removes "Title Changes" tab from the citations page. It wasn't very useful since providers don't surface titles consistently. by @jrhizor
  • Dropped unused database indexes, reducing disk usage and speeding up writes for runs and citations. by @jrhizor

October 25, 2026

What's Changed

  • Call Jev through OpenRouter when no TypeSafe key is set: elmo init asks which to use, and can reuse your OpenRouter key. by @easeev

October 23, 2026

What's Changed

  • Show query availability on the Query Fan-Out page before any web-search runs come in. by @jrhizor
  • The web and worker images now ship with Node.js 24.22.1, which includes the October 2026 Node.js security fixes, so self-hosted installs should update. by @jrhizor

October 19, 2026

What's Changed

  • Show which engines reveal their web searches on the Query Fan-Out page, and flag any that stopped. by @jrhizor
  • Show ChatGPT's web search queries again for ChatGPT tracked through Cloro. by @jrhizor

October 17, 2026

What's Changed

  • Fix reprocessing timing out for brands with many prompts. by @jrhizor

October 16, 2026

What's Changed

  • The sentiment page's quotes now open on praise, with mixed and criticism in their own tabs, and each card explains what its numbers mean. by @jrhizor
  • Split rare cases where many tracked companies result in too large Jev calls. by @jrhizor

October 16, 2026

What's Changed

  • Jev (TypeSafe) is now a required dependency of Elmo: the worker won't start without TYPESAFE_API_KEY. Jev judges mentions and sentiment, which is far more accurate toward your brand and each competitor. It costs very roughly $0.15–0.35 per 1,000 answers that name a tracked company, more for long answers that name many. Upgrading re-judges the last 90 days of answers once, about three months' worth of that cost; set REPROCESS_DAYS=all before upgrading to re-judge your whole history instead. by @jrhizor
  • Center company names and icons in their rows and number each company in the company-by-model tables on the overview and sentiment pages. by @jrhizor
  • Read the text of older ChatGPT and Claude responses recorded before Elmo stored which provider fetched them. by @jrhizor
  • Re-judge history only for enabled prompts and brands, and only over the last 90 days by default (REPROCESS_DAYS); a prompt or brand enabled again has that window brought up to date then. by @jrhizor

October 16, 2026

What's Changed

  • Explain what the competitive landscape's chart shows in an info tooltip that follows the selected measure. by @jrhizor
  • Sentiment is now a 0–100 score where neutral answers count as 50 rather than against your brand, and the API returns it as score in place of positiveShare and negativeShare. by @jrhizor
  • The overview fits the screen without a sliver of page scroll on laptop-sized displays. by @jrhizor
  • The overview page now lines up with the other brand pages, so the title no longer shifts when you switch between them. by @jrhizor
  • The brand dashboard pages fit phone screens better. by @jrhizor
  • The overview's Position card now shows an up arrow when your position improves. by @jrhizor
  • Sort the company-by-model tables on the overview and sentiment pages by any model, or by the overall figure, by clicking its column header. by @jrhizor
  • The Sentiment by Prompt table now lists the highest scores first, adds a Positive column, and sorts by Mentions, Score, Positive or Negative when you click a header. by @jrhizor
  • Hover the visibility sparkline on the Visibility page to see each day's value. by @jrhizor

October 16, 2026

What's Changed

  • The overview fits on one screen, and long competitor lists scroll in place on the overview and sentiment pages. by @jrhizor

October 15, 2026

What's Changed

  • Default the OpenAI and Anthropic model targets to gpt-6-luna and claude-haiku-5-5 (openai/gpt-6-luna and anthropic/claude-haiku-5.5 on OpenRouter); existing installs keep their configured models, so consider updating SCRAPE_TARGETS to switch from gpt-5-mini and claude-sonnet-5. by @jrhizor
  • The API and MCP tools return each answer's mention assessments with sentiment and position, and sentiment and average position for the brand, each competitor, model and prompt, with daily series (experimental). by @jrhizor
  • Show sentiment toward your brand and its average position among the companies AI answers name on the overview, and the passage behind each mention and each company's position on responses. by @jrhizor
  • The overview now leads with visibility, share of voice, sentiment and position cards and compares you with competitors by model, and Share of Voice charts your top competitors over time. by @jrhizor
  • A new Sentiment page shows how AI answers describe your brand, responses can be filtered and sorted by tone, and clicking a company on a response highlights the passage its tone was read from. by @jrhizor
  • Decide brand and competitor mentions with a bundled local model that matches whole words and reads each mention in context, so names that are also ordinary words no longer inflate visibility; past responses are re-judged in the background after upgrading. by @jrhizor

October 15, 2026

What's Changed

  • Name the premium ChatGPT and Claude tiers "GPT Search" and "Claude (web)" so they stay accurate across model upgrades. by @jrhizor
  • Additional backfill speedups and crash prevention.

October 15, 2026

What's Changed

  • Restore the category colors on citation badges. by @jrhizor
  • Improve rollup backfill speed.

October 15, 2026

What's Changed

  • All stats in the UI and API are significantly faster. This is a large migration and there may be a delay for stats to appear initially as the worker backfills. by @jrhizor
  • Response search now matches only the answer text, not the provider's raw response data. by @jrhizor
  • Analytics window boundaries are rounded to the quarter hour.

October 14, 2026

What's Changed

  • Add a Skill page under Docs that shows how to install the aeo skill for Claude Code, Cursor, Codex, and other agents. by @jrhizor
  • Support chat on Elmo Cloud now opens from a button in the header instead of a floating bubble that covered page controls. by @jrhizor
  • Fixed alignment issue for the team invite email for users with a password manager. (7b1f35c)

October 13, 2026

What's Changed

  • The "All time" range now covers a brand's whole history on every page, instead of stopping at the last 12 months or two years on some of them. by @jrhizor
  • The API Docs settings page now shows how to install and call the TypeScript and Python SDKs. by @jrhizor
  • Added start and end date pickers to the dashboard lookback filter, usable alone or together and kept in the shareable URL. by @jrhizor
  • Fixed date ranges outside UTC starting at the wrong hour, which pulled in or dropped runs from the edge of the first day. by @jrhizor
  • The prompts page can now suggest new prompts your brand doesn't track yet, added to your list for you to review before saving. by @jrhizor
  • Responses page paging now returns to the top, stays clear of the chat button, and shows when a search is still loading. by @jrhizor
  • Prevent some types of deployments from failing while generating the auth schema. by @jrhizor
  • Fixed brands and competitors with a blank alias or domain being counted as mentioned in every answer. by @jrhizor

October 2, 2026

What's Changed

  • Elmo's startup check now asks for a direct LLM key when onboarding needs one, counts provider keys saved in the app, and no longer requires the whitelabel parent-app link. by @jrhizor
  • The billing page now leads with your plan, total cost, and usage side by side, with the full plan comparison folded away until you ask for it. by @jrhizor
  • Fixed the competitor limit being exceeded when several requests added competitors to a brand at the same time. by @jrhizor
  • Reports accept other names a brand goes by, and count a mention of any of them as a brand mention. by @jrhizor
  • Add a Responses page that lists every AI answer for a brand, searchable by its text and filterable by prompt. by @jrhizor
  • Fix a critical cross-site scripting vulnerability in TanStack Start. by @jrhizor
  • Auth rate limiting is now counted in the database, so the limits on sign-in and password reset hold across restarts and multiple app instances. by @jrhizor
  • Prompt runs on the OpenAI API provider now store the full API response, so the searches behind an answer stay readable. by @jrhizor

September 28, 2026

What's Changed

  • elmo init now asks for the public URL you'll reach Elmo at, so sign-in works when it's served from a domain. by @jrhizor
  • Fixed the API and MCP tools reporting when a prompt first ran as several hours off on servers set to a timezone other than UTC. by @jrhizor
  • The worker now lists every missing environment variable and misconfigured scrape target at startup instead of stopping at the first one. by @jrhizor
  • Google AI Overview runs through SearchApi no longer fail when Google loads the overview separately from the result page. by @jrhizor

September 24, 2026

What's Changed

  • Add SearchApi.io as a scraper provider for ChatGPT, Perplexity, Copilot, Gemini, Google AI Mode, and Google AI Overview. by @jrhizor
  • The API, API Keys, and MCP settings pages now say when access is disabled in demo mode, instead of handing out connection steps that the server refuses. by @jrhizor
  • Dialogs no longer flash a dark backdrop as they close. by @jrhizor
  • Removed an unused CORS header from the MCP server's sign-in challenge. by @jrhizor
  • Fixed prompt run history revealing whether a prompt id exists to signed-out visitors. by @jrhizor

September 15, 2026

What's Changed

  • Fix MCP sign-in for clients that use a client ID metadata document. by @jrhizor

September 15, 2026

What's Changed

  • elmo init now checks Docker before the setup wizard and reports whether Docker is missing or not running. by @MFA-G
  • Elmo now serves a full external API and an MCP server. /api/v1 covers brands, prompts, competitors, reports, analytics, models, tags, and opportunities. /api/mcp connects Claude Code, Codex, Cursor, OpenCode, and VS Code, either by signing in from the client or with an API key. Keys belong to an organization and are issued read-only or read-write from Settings, which now also has API and MCP pages describing your own deployment. by @jrhizor
  • Every /api/v1 list response now includes a data array. The brands, prompts, competitors, and reports keys still carry the same array and will be removed in a future release. by @jrhizor
  • Citation categorization now covers developer docs, blog subdomains, software directories, and Google link wrappers. by @jrhizor
  • Redesigned the Open Graph share images with a cleaner layout, headline sizing that fits long titles, and the app's host in the footer. by @jrhizor
  • Fixed BrightData scraping errors being stored as a prompt run's answer; those runs now fail. by @jrhizor
  • Answers scraped through Cloro now keep their formatting and inline citations. by @jrhizor
  • Prompt runs on the OpenAI API provider now correctly show the search queries the model ran. by @jrhizor

August 31, 2026

What's Changed

  • elmo init now says up front that a managed cloud option exists, and what it costs, before walking through self-hosted setup. by @jrhizor
  • Fix broken docs link in elmo init and the LLMs settings page. by @jrhizor
  • The worker now gets time to finish in-flight jobs when a deployment stops or upgrades, instead of being killed mid-evaluation. by @jrhizor
  • Adds support for Elmo Cloud. by @jrhizor
  • Moved the admin links into the account menu so the sidebar only shows nav for where you are; admin routes keep them on the sidebar. by @jrhizor
  • Fixed citation position calculation bug for Claude. by @jrhizor
  • Rebuilt the interface on Base UI, so menus, dialogs, tooltips and form controls behave more consistently across keyboard and assistive tech. by @jrhizor
  • The sign-up page now closes as soon as a self-hosted instance has its first account, instead of staying reachable until the server restarts. by @jrhizor
  • The account menu offers a single Switch Brand link instead of listing every organization once you belong to more than three. by @jrhizor
  • Improve visibility chart accessibility for colorblind users. Your brand's lines are emphasized and you can click on an entry in the legend to isolate a competitor's line in the graph. by @jrhizor
  • Dashboard URLs now include the organization and the brand — /app/org/{organization}/brand/{brand}. by @jrhizor
  • Keep a brand's prompts editable when it already holds more than the prompt limit. by @jrhizor
  • Fix a crash in the onboarding wizard and competitor/prompt editors on deployments served over plain HTTP, where crypto.randomUUID is unavailable. by @morovinger
  • Support "GitHub Flavored Markdown" on prompt detail pages. LLM responses now render tables, strikethroughs, and URL autolinks more correctly. by @jrhizor
  • Authentication and organization entry pages now show descriptive, deployment-aware browser tab titles. by @uchiha-suraj
  • Show brand and competitor icons across the dashboard. by @jrhizor
  • Whitelabel sign-in no longer creates organizations from Auth0 app_metadata; it only grants membership in organizations that already exist, which are provisioned through the admin brands API. by @jrhizor
  • Truncates excessively long citation titles when stored in the database. by @jrhizor

August 10, 2026

What's Changed

  • New deployments now run Postgres 18. Existing deployments are unaffected and keep the Postgres version they were created with. by @jrhizor
  • Fixed the logo briefly rendering in a fallback font before swapping on the first page load. by @jrhizor
  • Waiting out a busy scraping provider's queue no longer abandons requests it has already charged for, and a prompt whose runs all fail now backs off instead of being retried immediately. by @jrhizor

August 6, 2026

What's Changed

  • Oxylabs requests now use the asynchronous jobs API instead of the Realtime API, which Oxylabs is deprecating. If you have any :oxylabs targets in SCRAPE_TARGETS, upgrade before August 31, 2026 to avoid failures. by @jrhizor
  • Add Cloro as a scraper provider for ChatGPT, Perplexity, Copilot, Gemini, Google AI Mode, and Google AI Overview. by @jrhizor
  • BREAKING CHANGE: DataForSEO now scrapes the real ChatGPT and Gemini interfaces instead of calling their model APIs, with no change needed to existing SCRAPE_TARGETS. This is more expensive (about $0.004 instead of $0.0006 to run). This could also impact visibility/citations as it switches to better reflect what users see in the actual chat website. If you would prefer to keep the old behavior, you will need to update your SCRAPE_TARGETS to pin the specific version of the model (chatgpt:dataforseo:gpt-5.5:online or gemini:dataforseo:gemini-2.5-flash:online) to keep using the LLM Responses API instead of the LLM Scraper API. by @jrhizor
  • Added an ELMO_ENCRYPTION_KEY to new and upgraded deployments, which Elmo now requires to encrypt provider credentials stored in the database. by @jrhizor
  • Prompts can now be added in bulk by pasting one per line. by @nosey-dewdrop
  • Brand analysis can now be pointed at a full page URL to research a sub-brand, while mentions stay tracked against the site's domain. by @snowyukitty
  • The prompts page now keeps a save bar in view that flags unsaved changes, highlights the rows you edited, and warns before you navigate away or close the tab. by @jrhizor
  • Sort prompts alphabetically on the prompt settings page. by @jrhizor
  • Fix Oxylabs Perplexity query fan-out which incorrectly included follow-up questions. by @jrhizor
  • Cap per-request spend on the direct API providers: output tokens on Anthropic, OpenAI, OpenRouter, and Mistral, plus web-search budget (Anthropic max_uses, OpenAI maxToolCalls), so no single tracked run can spend unboundedly. by @jrhizor

July 21, 2026

What's Changed

  • You can now track Google AI Overviews via the BrightData, DataForSEO, and Oxylabs providers; SCRAPE_TARGETS now accepts google-ai-overview:brightdata:online, google-ai-overview:dataforseo:online, and google-ai-overview:oxylabs:online. by @jrhizor
  • Grok is now only supported via OpenRouter, since unauthenticated access has been removed and all Grok scrapers are permanently failing. by @jrhizor
  • Competitor domains can now be added by pasting a full URL. by @jrhizor
  • You can now use the keyboard to select tags for filtering. by @jrhizor
  • Show when an opportunities report was last evaluated. by @jrhizor
  • DeepSeek and Moonshot/Kimi models render with their own logos instead of generic icons. by @jrhizor

July 10, 2026

What's Changed

  • IMPORTANT BUGFIX: Fixed OpenAI response retrieval that broke in v0.2.15, which caused repeated (but billable) failures. If you are collecting data from the direct OpenAI API using Elmo, please update immediately. by @jrhizor

July 8, 2026

What's Changed

  • Add an optional JINA_API_KEY env var to avoid anonymous rate limits when fetching website content during brand onboarding. by @jrhizor
  • Ensure the overview charts use the same timezone-specific x-axis. by @jrhizor
  • Changing some brand/org configurations behind the scenes to prepare for Elmo Cloud which requires db migrations (should run automatically on Docker Compose installations). by @jrhizor

NOTE: If you created brands using the admin API, you will have to run this for the db migration to work:

INSERT INTO "organization" ("id", "name", "slug", "created_at")
SELECT b."id", b."name", b."id", now()
FROM "brands" b
LEFT JOIN "organization" o ON o."id" = b."id"
WHERE o."id" IS NULL;

July 1, 2026

What's Changed

  • Add elmo upgrade to move a local deployment to the version supported by the installed CLI: runs any registered migrations, re-pins the Docker image tags, and restarts the stack (only if it was running before). Warns when the CLI itself is behind the latest published release. by @jrhizor
  • Add ChatGPT, Perplexity, and Gemini support to the DataForSEO provider. elmo init now offers them when you enable DataForSEO, and SCRAPE_TARGETS accepts chatgpt:dataforseo:online, perplexity:dataforseo:online, and gemini:dataforseo:online (override the underlying model via the version slug, e.g. chatgpt:dataforseo:gpt-5-mini:online). Configure via DATAFORSEO_LOGIN + DATAFORSEO_PASSWORD. by @jrwrest
  • Add Oxylabs as a scraper provider. elmo init now offers Oxylabs alongside BrightData and Olostep, and SCRAPE_TARGETS accepts chatgpt:oxylabs[:online], perplexity:oxylabs:online, and google-ai-mode:oxylabs:online. Configure via OXYLABS_USERNAME + OXYLABS_PASSWORD. by @jrhizor
  • Onboarding brand analysis now runs in the background and is more resilient to failures, avoiding timeouts on slow analyses. by @melalj

June 12, 2026

What's Changed

  • Added new citation source categories and a Google Shopping breakdown to the citations dashboard. by @jrhizor
  • Local-mode deployments now support multiple brands. The brand switcher shows a "Create new brand" option that provisions a new org + admin membership for the user. by @jrhizor
  • Added the Google Shopping breakdown to a prompt's Citations tab on the prompt details page. by @jrhizor
  • Added a sort control to the Visibility page. by @jrhizor
  • Added a Query Fan-Out section showing the searches AI engines run for your prompts, with a prompt-to-query diff, the words engines add or drop, and the searches you're missing. by @jrhizor
  • Breaking: /api/v1 DELETE endpoints now return the deleted resource directly instead of a { message, data } wrapper (the deleted prompt includes a deletedRunsCount field), PATCH endpoints reject an empty body with a 400, an unparseable website on /tools/analyze is now a 400 instead of a 500, and 500 responses no longer echo internal error messages. by @jrhizor

June 7, 2026

What's Changed

  • Fixes bug where in some cases BrightData processing could get stuck. by @jrhizor

June 7, 2026

What's Changed

Web app

New

  • Share of Voice and Opportunities pages.

Fixes

  • "Current visibility" now shows the latest point of the carried-forward trend (the value the line ends on) instead of the whole-window average, so the headline number matches the chart beside it.
  • Fixed the sidebar showing only "Overview" after the onboarding wizard finishes in local mode (previously required a page refresh).
  • Fixed the visibility page failing to load for brands with many active prompts.

CLI (@elmohq/cli)

  • --dir is now a global option. It applies to init, compose, and edit, and shows up in elmo --help as well as each subcommand's help.
  • elmo -h now makes clear what elmo edit lets you change and which targets it accepts.
  • Generated docker-compose.yml image tags are now pinned to the CLI's version (e.g. elmohq/elmo-web:0.2.10) instead of latest, so stacks stay on the version they were initialized with until you upgrade.
  • Removed elmo status — use elmo compose ps instead.

May 12, 2026

What's Changed

  • Default the CLI config directory to ~/.elmo. by @jrhizor
  • Prompt for the web app port in elmo init (defaults to 1515). by @jrhizor
  • Recommended elmo init setup no longer adds direct-API query targets — only scraping tracks ChatGPT and Google AI Mode. by @jrhizor
  • Add elmo edit, drop elmo telemetry and the ~/.elmo/config.json file. elmo edit env|compose opens the file in $VISUAL / $EDITOR (fallback nano) — toggle DISABLE_TELEMETRY there instead of via the removed elmo telemetry subcommand. Telemetry state and the deployment ID now live entirely in .env; elmo init stamps the CLI version and timestamp into the .env and elmo.yaml headers, and re-running it preserves the existing DEPLOYMENT_ID. by @jrhizor
  • Remove elmo start, elmo stop, elmo logs, and elmo build aliases — use elmo compose <args> directly (e.g. elmo compose up -d, elmo compose down, elmo compose logs -f, elmo compose build). by @jrhizor
  • Fix the dashboard briefly showing "No Data Yet" with "none are currently enabled" right after the onboarding wizard finishes in local mode. by @jrhizor
  • Bulk-select prompts in the editor (settings and onboarding) to enable or disable many at once. by @jrhizor
  • Log start/done (with duration and result counts) for analyzeBrand, so the onboarding analyze step is visible in the web server logs. by @jrhizor

May 11, 2026

What's Changed

  • Clean up wording in elmo init. by @jrhizor
  • Accept bare domains (e.g. example.com) in the brand website field and normalize the stored value to the origin (https://example.com/products is saved as https://example.com/). by @jrhizor
  • Show the signup screen instead of login on a fresh local deployment. by @jrhizor
  • Attach a boss.on("error") handler so transient pg-boss connection blips no longer crash the worker. by @jrhizor

May 10, 2026

What's Changed

  • Publish elmohq/elmo-db-migrate images instead of always attempting to build as part of the CLI. by @jrhizor

May 10, 2026

What's Changed

  • Standardize Docker image naming between the CLI and release process on elmohq/elmo-web and elmohq/elmo-worker. by @jrhizor
  • Fix OG image generation: og:image is now an absolute URL and renders the current page's title/description. Adds og:url, og:site_name, og:locale, and og:logo to the document head. by @jrhizor

May 6, 2026

What's Changed

  • Admin /api/v1/brands endpoints (POST, GET, PATCH) now accept and return a single domains list instead of website + additionalDomains. This future-proofs against a future db model change. by @jrhizor

May 6, 2026

What's Changed

  • elmo init adds a recommended setup path — pick a scraper (BrightData or Olostep), pick a direct LLM API (OpenRouter, Anthropic, OpenAI, or Mistral), four prompts total. The custom path now requires at least one direct LLM API so onboarding analysis works out of the box. by @jrhizor
  • Add telemetry opt-out prompt during elmo init and new elmo telemetry status|enable|disable subcommand. See Telemetry for what's collected. by @jrhizor
  • Add Mistral as a direct API provider. Set MISTRAL_API_KEY and target via mistral:mistral-api:<model>[:online]. by @jrhizor
  • License Elmo under the MIT License. Add Code of Conduct, Contributing guide, Security policy, and a lightweight CLA process. by @jrhizor
  • BrightData: prefer answer_text_markdown over answer_text when extracting response text, so prompt responses render with markdown formatting in the UI. by @jrhizor

April 24, 2026

What's Changed

  • Fix local-mode registration end-to-end and lock down the auth surface. The first /auth/register submission in local mode now atomically creates the default org + admin membership, so register → brand onboarding works in one pass; any subsequent signup is rejected. Demo mode narrows writable /api/auth/** endpoints to a whitelist of just sign-in and sign-out. Drops the unused DEFAULT_ORG_ID and DEFAULT_ORG_NAME env vars. by @jrhizor
  • Redesign the Visibility and Citations filter bar (model / tags / lookback dropdowns + search), wire model filters to brand.enabledModels, and move the visibility-bar rollup into a single SQL query — cuts load time from ~10s to under 1s on large brands. Also fixes the "unbranded" tag filter and a search clear-X flicker. by @jrhizor

April 23, 2026

What's Changed

  • Make default brand cadence configurable via DEFAULT_DELAY_HOURS env var. brand.delayOverrideHours still takes precedence. The default changed from the hard-coded 72h to 24h. by @jrhizor
  • Restyle the demo login and add a preview to Storybook. by @jrhizor
  • Ensure icons/favicons are comprehensive for non-whitelabel deployments. by @jrhizor
  • Replace the page-top demo-mode banner with a compact "Demo" pill next to the sidebar logo (with a tooltip explaining the read-only behavior), and move version / elmohq.com / GitHub links into the sidebar footer for every deployment mode except whitelabel. Also reads the better-auth user.image field so avatars actually render. by @jrhizor

April 22, 2026

What's Changed

  • CLI: mask the external DATABASE_URL prompt and note that it must be an IPv4-compatible direct connection or pooler. by @jrhizor
  • Demo mode: visitors can now actually sign in — better-auth endpoints are exempt from the read-only write-block, and the login form pre-fills the seeded demo credentials. by @jrhizor
  • Demo deployments (READ_ONLY=true) now enable supportsMultiOrg, so the /app brand switcher renders when the demo user is seeded into multiple organizations. Pure local deployments continue to auto-redirect to the default org. by @jrhizor
  • Fix missing stylesheet and favicon in Docker builds caused by @tailwindcss/vite emitting different CSS hashes in the client and SSR passes. by @jrhizor
  • Worker dispatch now reads SCRAPE_TARGETS end-to-end via the provider registry. Deployments that configure non-default providers no longer hit AI_LoadAPIKeyError for providers they never set up, the worker fails fast at startup on misconfigured SCRAPE_TARGETS, and brand.enabledModels filters per brand. by @jrhizor

v0.2.1

GitHub

April 21, 2026

What's Changed

  • CLI elmo init now walks through each provider one at a time. by @jrhizor

Closed Issues

November 2026

October 2026