---
title: Changelog · Elmo
description: See what's new in Elmo. Track recent releases, improvements, bug fixes, and completed features.
canonical: https://www.elmohq.com/changelog
---

# Changelog

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

[View Releases on GitHub](https://github.com/elmohq/elmo/releases)

## Releases

### v0.7.8

[View Commits](https://github.com/elmohq/elmo/compare/v0.7.7...v0.7.8)

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

### v0.7.7

[View Commits](https://github.com/elmohq/elmo/compare/v0.7.6...v0.7.7)

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

### v0.7.6

[View Commits](https://github.com/elmohq/elmo/compare/v0.7.5...v0.7.6)

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

### v0.7.5

[View Commits](https://github.com/elmohq/elmo/compare/v0.7.4...v0.7.5)

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

### v0.7.4

[View Commits](https://github.com/elmohq/elmo/compare/v0.7.3...v0.7.4)

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](https://nodejs.org/en/blog/vulnerability), so self-hosted installs should update. by @jrhizor

### v0.7.3

[View Commits](https://github.com/elmohq/elmo/compare/v0.7.2...v0.7.3)

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

### v0.7.2

[View Commits](https://github.com/elmohq/elmo/compare/v0.7.1...v0.7.2)

October 17, 2026

### What's Changed

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

### v0.7.1

[View Commits](https://github.com/elmohq/elmo/compare/v0.7.0...v0.7.1)

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

### v0.7.0

[View Commits](https://github.com/elmohq/elmo/compare/v0.6.2...v0.7.0)

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

### v0.6.2

[View Commits](https://github.com/elmohq/elmo/compare/v0.6.1...v0.6.2)

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

### v0.6.1

[View Commits](https://github.com/elmohq/elmo/compare/v0.6.0...v0.6.1)

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

### v0.6.0

[View Commits](https://github.com/elmohq/elmo/compare/v0.5.2...v0.6.0)

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

### v0.5.2

[View Commits](https://github.com/elmohq/elmo/compare/v0.5.1...v0.5.2)

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.

### v0.5.1

[View Commits](https://github.com/elmohq/elmo/compare/v0.5.0...v0.5.1)

October 15, 2026

### What's Changed

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

### v0.5.0

[View Commits](https://github.com/elmohq/elmo/compare/v0.4.6...v0.5.0)

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.

### v0.4.6

[View Commits](https://github.com/elmohq/elmo/compare/v0.4.5...v0.4.6)

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)

### v0.4.5

[View Commits](https://github.com/elmohq/elmo/compare/v0.4.4...v0.4.5)

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

### v0.4.4

[View Commits](https://github.com/elmohq/elmo/compare/v0.4.3...v0.4.4)

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

### v0.4.3

[View Commits](https://github.com/elmohq/elmo/compare/v0.4.2...v0.4.3)

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

### v0.4.2

[View Commits](https://github.com/elmohq/elmo/compare/v0.4.1...v0.4.2)

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

### v0.4.1

[View Commits](https://github.com/elmohq/elmo/compare/v0.4.0...v0.4.1)

September 15, 2026

### What's Changed

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

### v0.4.0

[View Commits](https://github.com/elmohq/elmo/compare/v0.3.0...v0.4.0)

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

### v0.3.0

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.19...v0.3.0)

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](https://app.elmohq.com/). 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

### v0.2.19

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.18...v0.2.19)

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

### v0.2.18

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.17...v0.2.18)

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

### v0.2.17

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.16...v0.2.17)

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

### v0.2.16

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.15...v0.2.16)

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

### v0.2.15

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.14...v0.2.15)

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;
```

### v0.2.14

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.13...v0.2.14)

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

### v0.2.13

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.12...v0.2.13)

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

### v0.2.12

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.11...v0.2.12)

June 7, 2026

### What's Changed

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

### v0.2.11

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.10...v0.2.11)

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.

### v0.2.10

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.9...v0.2.10)

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

### v0.2.9

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.8...v0.2.9)

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

### v0.2.8

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.7...v0.2.8)

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

### v0.2.7

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.6...v0.2.7)

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

### v0.2.6

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.5...v0.2.6)

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

### v0.2.5

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.4...v0.2.5)

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](https://elmohq.com/docs/developer-guide/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

### v0.2.4

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.3...v0.2.4)

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

### v0.2.3

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.2...v0.2.3)

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

### v0.2.2

[View Commits](https://github.com/elmohq/elmo/compare/v0.2.1...v0.2.2)

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](https://github.com/elmohq/elmo/releases/tag/v0.2.1)

April 21, 2026

### What's Changed

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

## Closed Issues

### November 2026

- [Add unit tests for the tracked target schedule helpers](https://github.com/elmohq/elmo/issues/1128)

  [#1128good first issuehelp wantedcore](https://github.com/elmohq/elmo/issues/1128)
- [Add unit tests for the organization admin role check](https://github.com/elmohq/elmo/issues/1095)

  [#1095good first issuehelp wantedcore](https://github.com/elmohq/elmo/issues/1095)
- [Add unit tests for the API key scope helpers](https://github.com/elmohq/elmo/issues/1088)

  [#1088good first issuehelp wantedcore](https://github.com/elmohq/elmo/issues/1088)
- [Add unit tests for the company colour helper](https://github.com/elmohq/elmo/issues/1076)

  [#1076good first issuehelp wantedcore](https://github.com/elmohq/elmo/issues/1076)
- [Add unit tests for the page title helpers](https://github.com/elmohq/elmo/issues/1077)

  [#1077good first issuehelp wantedcore](https://github.com/elmohq/elmo/issues/1077)
- [Add unit tests for the mention passage helpers](https://github.com/elmohq/elmo/issues/1074)

  [#1074good first issuehelp wantedcore](https://github.com/elmohq/elmo/issues/1074)
- [Remove unused dark: Tailwind classes from the web app](https://github.com/elmohq/elmo/issues/1071)

  [#1071good first issuehelp wantedcore](https://github.com/elmohq/elmo/issues/1071)
- [Add unit tests for the sentiment score helpers](https://github.com/elmohq/elmo/issues/1063)

  [#1063good first issuehelp wantedcore](https://github.com/elmohq/elmo/issues/1063)
- [Add unit tests for the response highlighting helpers](https://github.com/elmohq/elmo/issues/1069)

  [#1069good first issuehelp wantedcore](https://github.com/elmohq/elmo/issues/1069)

### October 2026

- [show previous login method for cloud](https://github.com/elmohq/elmo/issues/655)

  [#655good first issuecloud](https://github.com/elmohq/elmo/issues/655)
- [Add unit tests for the subreddit helpers](https://github.com/elmohq/elmo/issues/1056)

  [#1056good first issuehelp wanted](https://github.com/elmohq/elmo/issues/1056)
- [Add unit tests for prompt list ordering](https://github.com/elmohq/elmo/issues/1061)

  [#1061good first issuehelp wantedcore](https://github.com/elmohq/elmo/issues/1061)
- [redirect /.well-known/change-password to the change password page](https://github.com/elmohq/elmo/issues/660)

  [#660good first issuecloud](https://github.com/elmohq/elmo/issues/660)
- [Make TypeSafe (Jev) optional: add a setting to turn off sentiment, and show a warning in the dashboard](https://github.com/elmohq/elmo/issues/983)

  [#983](https://github.com/elmohq/elmo/issues/983)
- [Citations "What's changed" never reports title changes](https://github.com/elmohq/elmo/issues/1010)

  [#1010](https://github.com/elmohq/elmo/issues/1010)
- [Expose mention sentiment and verdicts through the REST API, MCP and OpenAPI spec](https://github.com/elmohq/elmo/issues/918)

  [#918core](https://github.com/elmohq/elmo/issues/918)
- [ensure mentions don't include responses like "couldn't find \<brand>"](https://github.com/elmohq/elmo/issues/5)

  [#5core](https://github.com/elmohq/elmo/issues/5)
- [high level brand sentiment tracking](https://github.com/elmohq/elmo/issues/6)

  [#6core](https://github.com/elmohq/elmo/issues/6)
- [record where the brand appears in an answer, not just whether it does](https://github.com/elmohq/elmo/issues/598)

  [#598core](https://github.com/elmohq/elmo/issues/598)
- [visualize visibility differences across models](https://github.com/elmohq/elmo/issues/570)

  [#570core](https://github.com/elmohq/elmo/issues/570)
- [Make mention analysis replayable: persist extracted text, recompute on brand changes](https://github.com/elmohq/elmo/issues/329)

  [#329core](https://github.com/elmohq/elmo/issues/329)
- [Add stats rollup table for visibility/citation metrics](https://github.com/elmohq/elmo/issues/334)

  [#334core](https://github.com/elmohq/elmo/issues/334)
- [Extract a shared service layer between server functions and /api/v1](https://github.com/elmohq/elmo/issues/331)

  [#331core](https://github.com/elmohq/elmo/issues/331)