Launching today

Recourse
One support agent on WhatsApp, Slack, Teams, email and phone
1 follower
One support agent on WhatsApp, Slack, Teams, email and phone
1 follower
One agent on WhatsApp, Slack, Telegram, Teams, Discord, SMS, email, a phone number, your own widget and inside Intercom's messenger. Not a chat box on a website. It answers from your pages, your Notion and tickets your team already closed, and shows which page it used. It can look up a Stripe charge or a Shopify order, read only. When a person takes the thread it goes to one of nine desks, and their reply goes back out on the channel the customer used. Self-hosted. MIT.





Hey PH. First thing to know: this is not a chat box on a website. The same agent, same persona, same procedures, answers in your own widget, on WhatsApp, Messenger, Slack, Telegram, Discord, Microsoft Teams, SMS, email, and inside Intercom's messenger. Zendesk Sunshine is one integration that reaches WhatsApp, Messenger, Instagram, Telegram, LINE, WeChat, Viber and SMS on its own.
It also answers the phone. A caller dials a number and talks to it, and it looks things up mid-sentence while they are still speaking. That path was proved against a real call, not a simulator. In the widget people can click and talk to it out loud instead, no phone number and nothing to install, and there is dictation too if they just want to speak their question rather than type it, which runs on-device by default and needs no credential.
Nine of those have been run against real accounts on real traffic, not against mocks, with the dates recorded in the repo.
When a person should take the thread, it goes to Zendesk, Intercom, Freshdesk, Help Scout, Zoho Desk, HubSpot, Gorgias, Salesforce or Odoo. Adopting this does not mean abandoning the desk you already pay for.
There is a real help desk behind it, not just a chat log: a ticket queue with statuses, teams, routing rules and timezone-aware schedules, saved views, and replies it drafts but never sends. The reporting measures whether customers came back rather than deflection rate, and says plainly when an anonymous conversation cannot be tracked.
Safety screening runs with no model and no network at all. It checks the customer's message, every passage it retrieved and every action result, and screens the answer sentence by sentence as it streams. On by default, as are the loop guards that refuse a repeated action and stop a runaway turn.
It answers from your own pages and shows which page it used, so a customer can open the source instead of taking a paraphrase on faith. The widget renders cards, buttons, tables and forms rather than only text, the agent can trigger a handler on the host page, and a link like /billing?recourse_q=How+do+I+change+my+VAT+number opens it with the question already asked.
Two things matter more to me than the channel count. Procedures are code you write, not settings you pick. Your refund flow is your refund flow, step by step, in your repo. A hosted tool gives you a configuration surface, and whatever it does not expose, you cannot do.
And a wrong answer is fixed by whoever spots it. They write what it should have said, it applies to the next message, no deploy and no engineer. That is a support lead's workflow, not a developer's.
Where hosted wins, honestly: ten minutes to running, no infrastructure, a real dashboard, somebody else on call. This is for people who cannot or will not use one, because the data cannot leave, because a settings page does not fit the workflow, or because per-message pricing does not survive the volume.
Retrieval is hybrid, BM25 plus vectors once you configure an embedder. Any OpenAI-compatible endpoint works, and so do local models. Configure no model at all and it still runs: it retrieves, shows the passages it found, and says plainly that nothing is configured rather than inventing an answer.
MIT, TypeScript, Workers or Node, D1 or Postgres. The demo runs keyword-only because it is on a free tier with no embedding credential, and it says so about itself.
Happy to answer anything about the channel adapters or the handover format. Go break it: https://recourse-demo.ibrhajjaj.workers.dev