Rereflect - Self-hosted AI feedback analysis. MIT, BYOK, zero telemetry
by•
Rereflect turns customer feedback into sentiment, pain points, feature requests and churn risk. 100% open source (MIT), self-hosted, zero telemetry. Bring your own LLM key, or run the free local pipeline with no API key and no cost. Nothing is locked.

Replies
love that it's self-hosted and mit licensed, no telemetry is a huge plus. spun it up locally with the free pipeline and the sentiment breakdown was surprisingly clean for something without an api key.
@lucian_kensington Thanks, that's great to hear. The keyless path was the part we were most nervous about VADER plus the keyword pipeline does the whole thing locally, so "no API key" is a real mode, not a crippled demo. If you ever want a step up without giving up offline, there's an opt-in local transformer sentiment model (CPU, per-org) with an accuracy card that compares it against VADER on a labeled set, so you can see whether it's actually better on your data before switching. Still no key, still nothing leaving your box.
Honestly the bring your own key setup is really nice, but it would be great if you could plug in a Slack or Discord webhook to get pinged whenever a batch of new feedback crosses a certain sentiment threshold. Would make triaging way faster for our team.
@distributiondan Thanks, glad the BYO-key part landed well.
Half of this already ships in 1.0.0, so let me split it:
Slack is supported today. Settings > Integrations, paste an incoming
webhook URL (https://hooks.slack.com/...) or connect via OAuth, and
there's a Test button to confirm it before you rely on it.
Generic outbound webhooks are in Settings > Webhooks. You subscribe to
feedback.created, feedback.analyzed, feedback.urgent,
feedback.status_changed or feedback.category_match, optionally filter by
category, add custom headers, and sign with an HMAC secret. HTTPS only.
Sentiment-based triggering lives in Settings > Automations. The "Negative
Sentiment Alert" template fires when one customer sends 3+ negative
feedbacks in 7 days, and the count/window/sentiment are all editable.
What you're describing is a bit different, though, and we don't have it:
a threshold across a whole incoming batch rather than per customer. That's
a fair gap and a good fit for the automations trigger model, I'll open an
issue for a batch-level sentiment trigger, plus routing automation alerts
to Slack directly.
Discord isn't supported yet. Its webhook API wants {content} or {embeds}
and we post our own JSON envelope, so pointing our webhook straight at a
Discord URL will just 400, you'd need a small relay in between today. A
native Discord formatter is worth doing; I'll track it alongside the above.
If you open an issue with what "a batch crosses the threshold" means for
your team (percentage negative? absolute count? per import or per hour?),
that'll shape the trigger config directly.
the bring your own key setup is genuinely thoughtful, basically lets teams keep control of their data without locking anyone into a specific model. love that it's fully open source too, that's the kind of execution this space really needs right now.
@hulda_adam Appreciate that. Not locking anyone to a model was deliberate the key is yours, encrypted at rest, nothing proxied through us, and you can point it at OpenAI, Anthropic, Google, or a fully local Ollama endpoint including the Copilot embeddings. Same reasoning behind MIT rather than open-core: a feature you can't reach isn't really shipped.
Love the BYOK setup and self-hosted angle, feels rare these days. One thing that would make it way more useful for me is integrating directly with Intercom or Zendesk so feedback flows in automatically instead of pasting tickets manually. Would save a ton of time on weekly reviews.
@orville_lutterworth Thanks — and good news on the first half: Zendesk is already in, you don't have to paste anything. Settings → Integrations → Zendesk, connect with your subdomain, an agent email and an API token, and Rereflect polls for new tickets on a schedule (optional webhook if you want them the moment they're created). It auto-creates the feedback source on connect, maps the requester to a customer in Customer 360, and can optionally sync the feedback item's status back as the ticket moves to Solved. Setup is in docs/SELF_HOSTING.md under "Connecting Zendesk".
Intercom I'll be straight about. Connecting works over OAuth and conversations flow in via webhooks, but you currently have to create your own Intercom app and set INTERCOM_CLIENT_ID / INTERCOM_CLIENT_SECRET / INTERCOM_REDIRECT_URI and that isn't documented anywhere yet, so clicking "Connect to Intercom" on a fresh self-host just errors. That's our gap, not yours. There's also no polling fallback for Intercom yet, so it's webhook-driven only. I'm writing those setup docs now, and looking at adding a token-paste option like the one Zendesk/Jira/Asana use so it doesn't need OAuth on a self-host at all.
Also fair criticism that you had to ask: the README only lists CSV, email, webhooks and Slack, and never mentions Zendesk, Intercom, Jira, Linear or Asana. Fixing that too.
So, if Zendesk is your main channel, you're covered today. If it's Intercom, give me a few days.
finally tried a self-hosted tool that actually respects my data, and the local pipeline worked without me hunting for an api key. the pain point breakdown on a small batch of feedback was surprisingly sharp.
@keanureeves Thank you. that's exactly the bar I was aiming for. The local pipeline
working with no key is deliberate: you should be able to clone it and get
real output before deciding whether you want an LLM in the loop at all.
Worth knowing when you're ready for it: adding your own key doesn't change
where the data lives, it just improves categorization nuance and unlocks
the drafted-response features. The local path stays fully supported either
way, it isn't a crippled demo mode.
If the pain point breakdown starts drifting on larger batches, please open
an issue small-batch accuracy and large-batch accuracy are different
problems and I'd rather hear about the second one early.
honestly the no-telemetry self-hosted setup is what caught my eye, and bringing my own LLM key feels pretty refreshing these days. parsed a batch of support tickets in like two minutes and the pain point grouping was more accurate than i expected.
@angusyoung Really appreciate this. No telemetry and BYO key were the two things I
wasn't willing to compromise on in the OSS pivot. your feedback is your
data, and if it goes to a model provider it should be one you chose and
pay directly.
The pain point grouping is the part I'd most like feedback on as your
volume grows. If you ever see it splitting one real complaint into two
clusters or merging two distinct ones, an issue with a couple of the
example texts (redacted is fine) is genuinely useful, that's the fastest
way for me to tune it.
the bring your own LLM key approach is genuinely smart, especially since not everyone wants their customer feedback flying off to some third party. one thing i'd love to see is a built in trend view over time, so you can actually watch how sentiment and recurring pain points shift week to week rather than just looking at a snapshot. that would honestly make it way more useful for product teams trying to catch issues before they snowball
@bladerunne Thanks. and good news, this one already exists. It's just not obvious
enough from the landing page, which is on me.
The Analytics page (/analytics) is exactly the week-over-week view you're
describing. It gives you 7/30/90 day ranges with daily or weekly buckets,
and plots average sentiment, volume, urgent count, pain points and feature
requests over time rather than as a snapshot. Below the charts, top pain
points and top feature requests each carry an up/down/stable arrow so you
can see which themes are actually accelerating versus just being loud. It
also does source breakdown, CSV export, saved views, and read-only share
links if you want to hand a view to someone without an account.
Honest limits: 90 days is the current maximum window, and it's bucketed
counts rather than statistical change detection, it'll show you a pain
point climbing, it won't tell you the climb is significant.
If you try it and it still doesn't answer "is this getting worse," tell me
what's missing. Longer retention windows and anomaly flagging are the two
obvious next steps and I'd rather build the one you'd actually use.