Categories
AI

I built an AI agent to fix my reading list problem. Here’s what I learned.

I have a confession: my Twitter favourites are a disaster.

Hundreds of saved articles. Papers I was going to read. Threads I bookmarked at 11pm telling myself “tomorrow”. Tutorials I saved three times because I forgot I already had them.

The problem isn’t finding interesting content — there’s too much of it. The problem is that saving something and actually reading it are two completely different behaviours. The bookmark is a lie I tell myself.

So instead of trying to fix my habits, I built a bot to deal with the mess.

What tl-dr-bot actually does

The idea is simple: you send a URL to a Telegram bot, and it does three things.

First, it reads the article. Not you — the bot. It fetches the full content, even on pages that are heavy on JavaScript or behind a basic paywall.

Second, it decides whether it’s worth your time. This is the part most tools skip. It doesn’t just summarize everything — it makes a judgment call. Is this actual signal, or is it hype? If the answer is “hype”, the article goes to a trash folder. Automatically. You never see it again.

Third, if it’s worth reading, it writes a structured summary — three key points, a category, related concepts — and saves it directly to my Obsidian vault on GitHub. No copy-paste. No manual filing.

The result: I send URLs whenever I find something interesting, and my knowledge base grows on its own.

Chat with the tl-dr bot summarizing saved links with a short verdict on each

Why this is an agent and not just a chatbot

I’ve been thinking about this a lot because the word “agent” gets thrown around loosely.

A chatbot answers your question. An agent takes an action based on a goal.

tl-dr-bot doesn’t wait for me to tell it what to do with each article. It has a set of criteria, makes a decision, and executes a chain of steps: fetch → evaluate → summarize → classify → save (or discard). I just trigger it with a URL.

That decision step is what makes it an agent. It’s not routing my request to a template — it’s applying judgment. And that judgment is handled by Claude, Anthropic’s model, which reads the content and returns structured data: title, bullets, category, and a yes/no on whether it’s worth keeping.

Product people often ask me: “so what’s the actual value of using an LLM here instead of just a scraper?” The answer is that the evaluation step is genuinely hard to rule-encode. What counts as “worth reading” depends on context, recency, relevance to what I’m working on. A rules engine would need hundreds of conditions. Claude does it in one prompt.

The technical stack (simplified)

  • Telegram: the interface. You send a URL, it responds.
  • Jina AI Reader: fetches the actual article content, including JS-heavy pages.
  • Claude API: reads the content, evaluates it, and returns a structured summary.
  • GitHub API: saves the resulting markdown file to my Obsidian vault, which syncs to my phone.

The whole thing runs on a small server (€6/month on Hetzner) and restarts automatically if it crashes. I built it in a few hours with Claude Code.

What surprised me

The discard function is more useful than the summary. I thought the value was in the summaries. But it turns out the bigger relief is knowing that the bot filtered out something that wasn’t worth my time. I don’t have the nagging feeling that I’m missing something — because something made the call for me.

The categories emerge naturally. I defined a list upfront: Agents, MCP, LLMs, Tools, Career, Tutorials, Trash. But Claude interprets them sensibly even for edge cases. It doesn’t hallucinate new categories — it finds the best fit.

It changes how I save things. Before, I’d save articles selectively because I knew I’d have to process them manually. Now I save more aggressively, because the cost of sending a bad URL is zero — it just goes to trash.

Why product people should care

If you’re building products with AI, tl-dr-bot illustrates a design principle worth internalising: the most valuable thing an AI agent can do is make a decision so you don’t have to.

Summarisation is useful. But judgment is where the leverage is.

Most AI features I see in products are in the summarisation category: take this input, format it nicely, show it to the user. That’s fine. But the higher-value pattern is: take this input, evaluate it against a goal, and act — without asking the user to confirm every step.

The tricky part is that users need to trust that the agent’s judgment is good enough. With tl-dr-bot, I calibrated the prompt over a few iterations until the trash/keep split felt right. That calibration work is the actual product design challenge, not the code.

Try it yourself

tl-dr-bot is open source: https://github.com/sidddi/tl-dr-bot

The README has setup instructions. You’ll need a Telegram bot token, an Anthropic API key, and an Obsidian vault on GitHub. If you get stuck or want to discuss the agent design, I’m on LinkedIn.