Review a sample of chatbot conversations every morning for bugs

The maker of the Calorize nutrition app runs a daily Claude Code task that reads 50 random user conversations from Langfuse against the code and reports bugs to Telegram.

Done withClaude CodeinLangfuseTelegram· Oct 17, 2026

What they did

Lialia Sakhno builds Calorize, a nutrition app whose assistant, Mira, logs food and edits a diary through tool calls. Every conversation is stored in a self-hosted Langfuse, several thousand turns a day. Instead of reading those traces by hand, she set up a scheduled task in Claude Code that starts an Opus session each morning. A short script pulls the previous day's turns, groups them into one conversation per user per day, and picks 50 at random with no filtering. Claude reads each one in full, tool calls and results included, with access to the project's code, and only reports a finding when it can name the mechanism and the place to fix it: a line of code, a tool description or a prompt section. The full report lands in the Claude Code chat and a short one goes to Telegram every day, even when nothing was found. The task text keeps a section of things already ruled out, which grows each time she says a finding is not a bug.

How it went

She says she now catches more bugs than when she read traces herself. Examples it found: a memory tool that kept only the first 200 characters of a fact while telling Mira it was saved, live for seven days; a create-product tool that returned an existing product as newly created, so Mira retried three times and ran out of steps; and lost reasoning between steps that made Mira redo finished work. Replaying one turn 20 times, the redo happened in 5 runs without the reasoning and none with it. None of the fixes were prompt rules. One review is about a half-hour session, and she no longer opens Langfuse unless a finding points to a trace.

Worth knowing

The reviewer is read-only: it edits no code or data and messages nobody. Conversations carry an internal number, not names or emails, but the text still goes to a model API. She chose this over Langfuse's built-in LLM judge because a judge needs criteria written in advance, scores turns in isolation and cannot see the code. Abusive messages are kept out of the report by a rule in the task.

Try it

With Claude Code· 6 parts to fill in

Every morning, run this review of [my assistant]'s conversations. Pull all of yesterday's turns from [Langfuse or my trace store], group them into one conversation per user per day, and pick [50] at random with no filtering. For each, read the user's messages, every tool call and its result, and the assistant's reply, and check them against the code in [this repo]. Report a finding only when you can name the mechanism and where to fix it (a line of code, a tool description or a prompt section); otherwise report nothing. Check numbers in replies against what tools returned earlier in the conversation. Skip anything listed under [What we already know]. Do not change code or data. Put the full report here and send a three-line summary to [Telegram], even when it is empty.

Square brackets are the parts to fill in. The prompt is ours; the story is theirs.

Where they said it

Related