# Mentio changelog

What changed in Mentio, newest first. RSS: https://docs.mentio.dev/changelog/rss.xml. Docs: https://docs.mentio.dev.

## September 18, 2026: An Interacted button in Slack closes the mention and says who handled it

New. Every Slack alert now carries an Interacted button that marks the mention done and answers in the thread with the name of the person who pressed it.

A Slack alert could be read, opened and muted, but not closed: the only way to mark a mention handled was to leave Slack and open the dashboard, and nothing recorded who had taken it, so two teammates could answer the same post without knowing.

Every instant alert now carries an **Interacted** button. Pressing it marks the mention done and posts a line in that message's thread saying who pressed it, so the channel itself shows what is still waiting. Because one Slack message stands for a post however many of your keywords it matched, it closes every match of that post at once, and it appends a line to the mention's note ("Interacted by Miki via Slack, 2026-09-18") that you can read later in the dashboard.

The buttons stay exactly as they were after a press, so a second person can press Interacted too: each press adds its own line in the thread and its own line in the note. The first press is what counts as the time to done.

## September 18, 2026: Keyword settings and workspace filters decide what gets stored

New. Required and excluded terms, excluded authors, case sensitivity and a classifier hint per keyword; workspace-wide noise rules; a rejected post is never billed.

A common word no longer has to be a noisy keyword. Every keyword takes `matching` rules: terms the post must also contain (any of them, or all of them), terms that drop it (with a `*` wildcard at an end, so `beta.*` catches every build number), authors to skip in the same forms an alert's mute list takes, and `caseSensitive` for an acronym like `RAG`. A keyword also takes a `context` sentence the classifier reads for that term alone ("Arc is our browser; ignore the geometry word"), and its `kind` can now be changed after creation.

The whole workspace gets its own noise rules at `GET` and `PATCH /v1/filters`: terms and authors excluded for every keyword, GitHub repositories, and subreddits to allow or deny. Both layers run in the matcher before a mention is stored, which is what makes them different from an alert's filter: a post they reject is never classified, never delivered and never billed. Deleting a keyword now also takes it out of every alert rule that named it, and disables a rule that named only that keyword instead of quietly widening it to everything.

MCP: `add_keyword` and `update_keyword` take the new fields; `get_keyword`, `delete_keyword`, `get_filters` and `update_filters` are new. The CLI gains `filters:get` and `filters:update`. Guide: [How it works](/how-it-works#matching-rules).

## September 18, 2026: Overrule the classifier, weekly digests, the team and the balance over the API

New. Relevance and sentiment verdicts on a mention, post language, weekly digests, key expiry, whoami, usage, members and invitations, competitors and guidelines on the company profile.

**Your verdict on a mention.** `PATCH /v1/mentions/{id}` takes `relevant: true` or `false` and a corrected `sentiment`. The verdict is written through: a mention marked noise leaves the relevant feed, the digests, the counts and the analytics; one the classifier missed comes back in. `null` withdraws it and restores the classifier's value, which `classification.feedback.original` kept. Every keyword reports its verdicts under `stats.feedback`. Verdicts never bill or unbill anything.

**Language.** The classifier now returns the post's language (ISO 639-1) with the rest of the verdict, at no extra cost. It is on every mention (`classification.language`), filters the list (`languages`, `notLanguages`), narrows an alert rule (`filter.languages`), rides in the CSV and groups a new analytics breakdown (`by=language`).

**More filters and reports.** `GET /v1/mentions` takes `maxFollowers`, `isReply` (replies against top-level posts), `alertId` (the same mentions an alert rule would send) and searches the author's name with `q`. Analytics series split `by=sentiment` and bucket by `hour` (for a launch day) or `month`.

**Weekly digests.** An alert rule can be `weekly`: one digest a week on `schedule.weekday`, covering the week. **Run now** sends the rule's own period.

**Credentials and the team.** `GET /v1/whoami` introspects the credential (workspace, kind, scope, a key's expiry). API keys take `expiresAt`. `GET /v1/members`, `GET` and `POST /v1/members/invitations`, `DELETE /v1/members/invitations/{id}` and `DELETE /v1/members/{id}` manage the team; changes need a signed-in owner or admin (an OAuth token or the dashboard session, not an API key), and an invitation sent over the API is accepted the same way as one from the dashboard. `GET /v1/usage` answers the money question in one read: balance, burn, days left, keywords running and paused, matches today.

**Company profile.** `competitors`, `guidelines` (free-text rules for the classifier) and `website` join the profile and are composed into the context.

MCP gains `whoami`, `get_usage`, `list_members`, `get_alert` and `delete_alert`; the CLI `auth:whoami`, `usage:get` and the `members:*` commands. Guides: [How it works](/how-it-works#your-verdict), [Alerts](/alerts#daily-and-weekly-digests), [Authentication](/authentication).

## September 18, 2026: A filter dropdown no longer changes shape while you are using it

Fixed. The searchable filter dropdown stopped swapping forms mid-selection, greys an empty selection again, and names itself to screen readers.

The searchable filter dropdown, added a few days ago, changed form the moment its list crossed six options. A keyword list that grew while the dropdown was open (another tab adding a keyword, or a refresh landing) rebuilt the popup under the pointer. It now changes form only while closed, so what you are picking from stays put.

Two smaller things went with it. A filter pointing at something that no longer exists, a bookmarked link to a deleted keyword, reads "Any keyword" again in grey rather than in full black, so it no longer looks like a live selection. And the list now tells a screen reader which filter it belongs to ("Keyword") instead of reading back the current selection.

Long lists are also cheaper to open: the options are built once per page rather than on every render, which is what the keyword filter of a workspace tracking hundreds of them was paying for.

## September 16, 2026: Mentions from bots are labelled

New. The classifier says whether a post reads as machine-made, and every surface can filter on it.

* Every mention carries `classification.automated`: true when the post reads as machine-made (a bot or app account, a scheduled or templated post, generated text). It comes from the classifier's existing pass over the text plus the account itself, so a GitHub App or a handle like `release_bot` is caught even when a single post reads human.
* Filter with `GET /v1/mentions?automated=true` (or `false` for everyone else), in the feed's new Automated chip, and in alert rules through the `automated` filter, so a rule can watch the bots or keep them out of a channel.
* The audience and segments filter by `automated` too: a person counts as a bot when most of their matched posts do, which is how you tag or mute a whole account.
* It labels, it never hides: nothing is dropped from the feed or from delivery, and every matched mention is billed as before. Mentions classified before today read as not automated, so no filter makes old mentions disappear.

## September 16, 2026: Alerts say what the mention is, and sentiment follows the keyword

Improved.

Every alert used to open with the same line whatever it was about, so a competitor rant and a piece of praise looked alike in Slack. An alert now leads with the mention itself: the strongest signal first (a buying signal, a comparison, a complaint, a question, praise), otherwise the sentiment, always naming the keyword that matched. Slack shows it as the message header, Telegram as the first line, email as the subject.

The classifier also stopped reading the mood of a post as an opinion about your keyword. A tool named once inside an angry story, a competitor cited in a link or a hashtag, or a friendly reply on a thread about your pricing used to come back negative with a complaint intent. Sentiment and intent are now judged from what the text actually says about the keyword, and a keyword that only appears in a link, a hashtag, a handle list or a list of tools is scored as the passing mention it is. Measured against a set of real mentions, correct verdicts went from 27 in 45 to 38 in 45.

## September 16, 2026: Filter dropdowns you can search

Improved.

Picking a keyword or a platform in the mentions and audience filters meant reading a list that grew with your workspace, and a list of keywords ran off the bottom of the screen. Once a filter holds more than six options its dropdown now opens with a search field and scrolls at six rows, so you type two letters instead of scanning. Shorter lists are unchanged.

## September 16, 2026: The daily digest reads by platform

Improved.

The digest's platform split is now a block you can scan: each platform with its own logo, the count in full size, and how it moved against the day before (a platform with nothing yesterday reads "new"). Underneath, both lists group their mentions by platform, so you answer the X posts, then the Reddit threads, instead of switching platform on every row.

## September 16, 2026: The outreach line in a mention shows up only when it has something to say

Improved.

Opening a mention showed an outreach line on every author, and on most of them it only said "Not contacted · No owner". It now appears when a teammate owns the person, their stage has moved, or someone logged a contact, which is when it matters: a highlighted line that keeps you from reaching out to somebody a teammate is already talking to. On everyone else the Triage card carries a quiet "Log a contact" link into their outreach log.

## September 16, 2026: The SDKs page shows every client, its install line and its repository

Improved.

The docs' SDKs page was a table of language names. It now opens with a card per published client, each with the language's own logo, the package, the install command, and links to the guide, the source repository on GitHub and the registry. The languages with no official client yet keep their own row, next to the three ways to work in them today. Sidebar entries for the clients carry their language logo, so the section reads as a list of languages, and the Markdown twin at `/sdks.mdx` lists the same packages and repositories as a table for anything reading the docs as text. Changelog also sits with the other sidebar entries now, with an icon, instead of floating alone under a blank gap.

## September 16, 2026: A team invitation no longer gets lost on the way through sign-in

Fixed.

Opening an invitation link, starting a Google sign-in, going back and signing in again could land you in a new empty workspace instead of the team's, with the invitation still unaccepted. When a sign-in is needed on the way, it now returns you to the page you were on. Workspace setup also lists pending invitations for your verified email address, so you can join the team from there even if you signed up without the link.

## September 15, 2026: Alert when a post links to a competitor, a partner or you

New. The links in a post are now a filter on alert rules and on the audience, not only on the feed, and a host now covers its subdomains.

Yesterday a mention started carrying its links. Today they are something you can be told about.

An alert rule takes a **Links to** list. Put a competitor's domain in it and their next mention in someone's post is a Slack message; put your affiliate short domain in it and you hear when a partner actually uses their link.

```bash
curl -X POST "$MENTIONS_API_URL/v1/alerts" \
  -H "Authorization: Bearer $MENTIONS_API_KEY" -H "Content-Type: application/json" \
  -d '{ "name": "Competitor links", "mode": "instant",
        "filter": { "linkHosts": ["octolens.com"] }, "channelIds": ["dest_…"] }'
```

The same filter is now on the audience: `GET /v1/people?linkHosts=octolens.com` is the people who have shared such a link, and it saves as a segment. On the mentions page **Links to** is a filter you can add yourself, not only a chip that arrives when you click a link in a mention.

One rule changed for everyone. A host entry now names a company rather than one server: `octolens.com` matches `blog.octolens.com` too, a pasted URL and a `www.` prefix read as the same host, and the dot boundary keeps `t.co` from matching `not.co`. A post with no links never matches a link filter.

The query parameter is `linkHosts` everywhere, in the API, the CLI (`--linkHosts`), the SDKs and the MCP tools.

## September 15, 2026: Outreach on people, so two teammates never contact the same person

New. An owner and a stage on every person, and a log of who reached out, when and how.

* Every person carries `outreach`: the teammate who owns the contact, a stage (`not_contacted`, `contacted`, `replied`, `in_talks`, `customer`, `not_a_fit`) and when someone last reached out. Set the owner and the stage with `PATCH /v1/people/{id}` (`ownerId`, `stage`).
* `POST /v1/people/{id}/activities` logs a contact: the channel (email, X, LinkedIn, a call...), a short note and who made it. The first one claims an unowned person and moves them to `contacted`; an owner is never taken away. `GET` lists the log across all of the person's accounts and `DELETE /v1/people/{id}/activities/{activityId}` removes a mistake.
* `GET /v1/people` and segments filter by `stages` and `ownerIds` (`none` for people nobody owns), and the people CSV gains stage, owner and last contacted columns.
* On the MCP server, `update_person` sets the owner and stage, and `list_activities`, `log_activity` and `delete_activity` work the log.

## September 14, 2026: A changelog, with an RSS feed

New. This page. One entry per user-facing change, newest first.

What changes in Mentio is now written down in one place: this page, newest first, with a tag for what kind of change it is. Subscribe at [/changelog/rss.xml](/changelog/rss.xml); agents can read it as Markdown at `/changelog.mdx` or with `Accept: text/markdown`.

## September 14, 2026: Every mention now carries the links in the post, and you can search by them

New. post.links on every mention, and a linkHosts filter that answers "who is linking to my docs, my pricing page, a competitor".

A mention now carries the links its post contains, in the order they were written, as `post.links`. Nothing was fetched to build this: the text was always stored, so the links were always there, just not reachable.

The point of it is the filter. `GET /v1/mentions?linkHosts=docs.mentio.dev` returns the posts linking to a host, any-of, `www.` ignored:

```bash
mentio mentions:search --linkHosts docs.mentio.dev,mentio.dev
```

It works in the API, the CLI, the SDKs and the `search_mentions` MCP tool, and `links` is a column in the CSV export. Existing mentions were backfilled from the text already stored, so the filter reaches your whole history, not only what arrives from now on.

## September 14, 2026: Mentio on GitHub, with the SDKs, the CLI and Claude Code skills as public repositories

New. github.com/mentio-dev holds read-only copies of the TypeScript SDK, the Python SDK, the CLI and the OpenClaw skill, plus a new repository of Claude Code skills.

* [mentio-dev/sdk](https://github.com/mentio-dev/sdk), [mentio-dev/sdk-python](https://github.com/mentio-dev/sdk-python), [mentio-dev/cli](https://github.com/mentio-dev/cli) and [mentio-dev/openclaw-skill](https://github.com/mentio-dev/openclaw-skill) are published from the main codebase on every release, tagged with the version. The npm and PyPI package pages now link to them.
* [mentio-dev/claude-skills](https://github.com/mentio-dev/claude-skills) is new: the `/reddit-morning` skill from [the Reddit playbook](https://mentio.dev/blog/find-customers-on-reddit/), a `CLAUDE.md` template with the reply rules, and install steps.
* Issues are welcome on any of them. Changes land upstream and are mirrored back.

## September 14, 2026: A roomier mention drawer

Improved.

The mention drawer is wider on desktop. Triage is one card with the assignee and snooze side by side and the note underneath, and the classification opens with four tiles (relevance against the delivery threshold, priority, sentiment, reach), then the intents and author tags as chips and the classifier's reasoning. Keywords also moved up in the sidebar, right under Mentions.

## September 14, 2026: Filter mentions by intent

Improved.

The Mentions page has an Intent filter next to Sentiment: buying intent, question, complaint, praise or comparison. It is the same `intent` parameter `GET /v1/mentions` already accepts, so a filtered view in the dashboard and a call to the API return the same mentions.

## September 14, 2026: Segments as a table

Improved.

The Segments page lists your saved segments as a table: the name and description, what the filter says, how many people qualify right now and when it last changed, with View people, CSV and Edit on every row. Clicking a row opens the editor. Presets sit underneath as a compact list, each one saved with Use preset.

## September 14, 2026: The daily digest reads like a to-do list, not four copies of the same thing

Improved. Two lists instead of four overlapping sections, the keyword on every row, and the sentence that actually matched.

The daily digest used to show Priority, Negative, Buying signals and Questions as four separate sections over the same mentions, so a single post could appear three times. It is now two lists and each mention sits in exactly one of them:

* **Needs you today**: buying intent, a question, or an unhappy post.
* **Also worth a look**: everything else, best first.

Three more changes on every row and in the header:

* Each row names the **keyword** it matched, so ten tracked terms stay apart.
* Each row quotes the **sentence that matched** instead of the first 280 characters, which on LinkedIn and GitHub used to be the author's headline or a pull request template.
* The header adds a per-keyword split next to the per-platform one.

People you muted on the Audience page no longer appear in a digest, the way they already stayed out of the feed and instant alerts. Muting your own team is now the one place to stop hearing about yourselves. The same two lists render in the Slack and Telegram digests; the digest webhook payload is unchanged.

## September 14, 2026: Changing a member's role could fail on older workspaces

Fixed.

Memberships created before workspaces gained their current member table could carry no id, and the Team page then answered a role change or a removal with a validation error. The affected rows were repaired and the table now refuses a missing id.

## September 14, 2026: Confirming an email channel failed with an internal error

Fixed.

The link in the confirmation email answered `internal_error` instead of confirming the address: the API matched it against the "get one channel" route and read `confirm` as a channel id. Confirmation links work again, and the ones already sent are still valid until they expire.

## September 14, 2026: Joining a team no longer leaves an empty workspace behind

Fixed.

Every new account gets a workspace of its own at sign-up, so someone who signed up through a team invitation ended up with the team's workspace and an empty personal one. Accepting an invitation now removes that personal workspace when nobody ever used it: no keyword, no onboarding, no top-up, no other member. A workspace that was used stays.

## September 13, 2026: Sign in with GitHub, and a shorter sign-in page

New. Google and GitHub come first; email sign-in sits behind a toggle.

* **GitHub** joins Google as a sign-in provider. An existing account signs in with whichever it used before; nothing changes for email sign-in.
* The sign-in and sign-up pages are one card: the two providers first, then "Continue with email" for the magic link, and the terms line under it.

## September 13, 2026: MCP sign-in from Claude Code works end to end

Fixed.

Three things stood between `claude mcp add` and a working session and all three are gone: the authorization server discovery document is now answered for the exact resource path Claude Code asks about, the consent page no longer sends a doubled `Content-Type`, and the consent page names the client that is asking, with its mark, before you pick a workspace. Guide: [MCP server](/mcp).

## September 12, 2026: A request id on every response and one catalog of error codes

New. Quote the id to support; read the code, not the message.

* Every API response carries `X-Request-Id`; an inbound one is honored when it is 8 to 64 URL-safe characters. Error bodies repeat it as `error.requestId`, and the dashboard's error messages show it.
* Every error code is stable and documented on the [Errors](/errors) page, generated from the same catalog the API answers from, with its status and who has to act. A failing upstream platform now answers `502 upstream_unavailable` instead of a generic 500.

## September 12, 2026: Sign in to the MCP server with your account

New. OAuth 2.1 with PKCE and dynamic client registration; API keys keep working.

Clients that support OAuth (Claude Code, Cursor, claude.ai, ChatGPT and others) can now connect to `https://mcp.mentio.dev/mcp` with a sign-in instead of a pasted key. The flow opens the browser, signs you in, and lets you choose the workspace the client acts on; scopes are `read` and `write`, the same as API keys. A key still works everywhere a token does. Guide: [MCP server](/mcp).

## September 12, 2026: One billing customer per person, shared by their workspaces

Improved.

A person's workspaces now share one billing customer and one card list, so a card added in one workspace is available in the others. Receipts stay per workspace. A second workspace no longer receives a welcome credit; it starts with a funding step and runs once it has a balance. Details: [Billing](/billing).

## September 11, 2026: Documentation an agent can read, and a skill for OpenClaw

New. Every page as Markdown, llms.txt, a documentation MCP server and the mentio skill on ClawHub.

* Every documentation page exists as Markdown at `/<page>.mdx`, and a request with `Accept: text/markdown` on the page URL gets it directly. The index is at `/llms.txt`, the whole site in one file at `/llms-full.txt`.
* A read-only documentation MCP server at `https://docs.mentio.dev/api/mcp` answers `search_docs`, `read_page` and `list_pages`; no key needed.
* The [OpenClaw skill](/integrations/openclaw) is on ClawHub as `mentio`: one file the agent reads first and one rule file per API area, the reference parts generated from the OpenAPI document.

## September 10, 2026: TypeScript SDK, Python SDK and CLI

New. @mentio-dev/sdk and @mentio-dev/cli on npm, mentio on PyPI, all generated from the OpenAPI document.

* [TypeScript](/sdks/typescript): `npm install @mentio-dev/sdk`, one function per endpoint with request and response types, `{ data, error }` results or `throwOnError`.
* [Python](/sdks/python): `pip install mentio`, one object with a call per endpoint, sync and async, typed.
* [CLI](/cli): `npm install -g @mentio-dev/cli`, every endpoint as a `noun:verb` command, `mentio auth:login` through the browser, `mentions:watch` for a live feed as JSON lines, `mcp:config` for the client block.

All three are regenerated and published whenever the API changes, so they are never behind it.

## September 10, 2026: One design for every email Mentio sends

Improved.

Account emails, wallet notices, instant alerts and daily digests now share one layout in the brand type and palette, with the help link and, on alerts and digests, a manage-notifications link in the footer. The founder's short notes about getting started arrive from a personal sender with one-click unsubscribe and never go to anyone who opted out.

## September 9, 2026: Prices in US dollars, top-ups from $20

Improved.

The balance, the rates and the checkout are in USD: $5 per keyword per month, $0.008 per matched mention, top-ups of any amount from $20 up to $5,000. Existing balances were converted at the day's rate. Details: [Billing](/billing).

## September 7, 2026: A prepaid balance instead of plans

New. No plans, no seats, no tiers. A balance, two rates, and a welcome credit.

* Every workspace holds a balance. Keywords cost $5 per month, charged per day; every matched mention costs $0.008 whether it turned out relevant or not, and the dashboard shows both counts so the balance never disagrees with the feed.
* Every new account starts with $5.80 of credit: one keyword for a month plus 100 mentions, no card.
* When a balance cannot cover the next day, keywords pause and resume on their own after a top-up; you get an email at 20% of your last credit and at the stop. Details: [Billing](/billing).
