What Claude Code actually reads when it opens a web page, and a hook that trims it
You ask Claude Code to check an API doc and add a call to your code. It curls the page, reads it and writes the code. The run looks cheap. Whether it was depends on what the agent actually read.
I'm building leantext, a hook that converts what Claude Code reads into lean Markdown before it reaches the context.
I built it with Claude Code. I designed the approach and the checks. Claude Code wrote most of the extractors and the hook, and built the benchmark harness that runs headless sessions with the hook on and off.
On PyPI's NumPy page, the useful part is about 2,000 tokens, but the full page as Markdown is 92,348, mostly a hidden list of release files. With leantext the agent reads 755. In end-to-end runs with the hook on, Claude Code answered 21 of 21 tasks correctly.
For each file the agent reads, the hook does this:
1. Intercept: the agent's own Read and curl calls.
2. Convert: web pages, scanned PDFs and Office files into Markdown, keeping tables and code.
3. Check: for missing content or bot walls, and skip if it saves less than 15%.
4. Fall back: if any check fails, the agent reads the original.
What I learned building it: most of the waste is invisible, and failing open matters more than compressing hard. A bad conversion costs more than no conversion.
Free and open source under Apache-2.0:
git clone shouvik12/leantext
cd leantext && ./install.sh
Say yes to the hook during install and restart Claude Code.
3 comments
I made leantext: it converts every file your agent reads into lean Markdown, OCR first, falls back if conversion fails
Solo dev here. The video shows leantext in action.
The problem I kept hitting: agents read docx, xlsx, pptx, PDFs and images raw, and burn a ton of context doing it.
So I built leantext. What it does:
- Converts anything the agent reads into lean Markdown, keeping tables and code blocks
- Images go through OCR first, and only fall back to a vision model if OCR isn't enough
- If a conversion looks wrong, it hands the agent the original file instead of garbage
Known limits: right now it drops some short Sphinx API definitions and footnotes in Python docs. It's on my list.
It's open source (Apache-2.0): shouvik12/leantext
Next I want to measure it end to end inside real agents: accuracy, tokens, latency and cost, with leantext on vs off. Which agent would you want it tested on? And if you find files that break it, I'd love to hear about them.
3 points · 9 comments
I built a retro TV for developers — one HTML file, no backend, 15+ live channels (and some of you are already on it)
Hey everyone 👋
Quick update on DEV·TV, the retro, channel-surfing TV for developer content that runs entirely in your browser. (New here? I built it because I was tired of hopping between a dozen tabs every morning for new models, trending repos and indie projects.)
🔗 Live: shouvik12.github.io
⭐ Repo: shouvik12/devtv
What’s new
- 💻 LOCAL MODELS (ch 14, shipped today): new models you can run on your own machine, refreshed daily by a GitHub Action
- ☁️ CLOUD MODELS (ch 11): the old NEW MODELS channel, renamed now that local has its own channel
- ⭐ SPOTLIGHT (ch 15): SeoLoupe and Augur, both found right here on r/AppsWebappsFullstack, are now on air
The full lineup
GITHUB · HACKER NEWS · DEV · HUGGING FACE · RELEASES · AI PAPERS · LATEST PAPERS · CVE · HN VIDEO · AI VIDEO · CLOUD MODELS · AGENT SKILLS · MODEL FACE-OFF · LOCAL MODELS · SPOTLIGHT
There’s also a GUIDE that shows what’s on every channel (arrow keys + Enter, like a real TV), YOU ON TV, a 2× speed button, and fake commercial breaks with free “ads” for indie dev tools.
Still one file
The whole app is a single index.html: no framework, no build step, no server, hosted free on GitHub Pages, Apache-2.0. It was #5 Product of the Day on Product Hunt and #1 on IndieLink.
For this sub
Spotlight and commercial-break slots are free for indie devs. Hit Submit your project at the bottom of the TV, or email [devtv.developers@gmail.com](mailto:devtv.developers@gmail.com).
What’s next
V2 stays single-file forever. V3 is a separate track with a minimal backend: accounts, likes, personalized recommendations, and a directory of everything featured. I’m looking for volunteers to help shape that roadmap.
What channel should I build next? 📡
1 point · 5 comments
I built living-canvas, a free Claude skill that turns any repo, site or idea into an animated explainer
I built living-canvas, a free, open-source skill for Claude. You point it at a GitHub repo, a URL, a doc or a single sentence, and Claude turns it into an animated explainer that a stranger can understand from one still frame.
What it does
Claude reads the subject, distills it into one core idea, and draws it as three labeled stages: problem → what it does → result. The output is an animated SVG for a README, or an interactive HTML page.
How Claude helped build it
• I wrote the skill.md with Claude: we iterated on the rules until the outputs passed a "still-frame test", where a single screenshot has to explain the whole idea.
• Claude does the actual work at runtime: it reads the source, picks a visual metaphor, and writes the canvas code (HTML + requestAnimationFrame, or SVG with SMIL).
• Claude also wrote the recording script for the video: headless Chromium with a controlled clock steps the animation frame by frame, and ffmpeg encodes the frames to MP4.
In the video (three runs)
• Caveman: the Claude Code skill that strips filler from agent replies
• Reddit: Claude read Reddit's published numbers first, then drew post → vote → discuss
• Nemotron 3.5 Transcribe: an explainer for NVIDIA's open speech model
Known limitation: for repos it reads the README, file tree and languages, not the source code, so a stale README gives a stale picture. Reading the code is next.
Free to try
1. Get the skill from shouvik12/living-canvas
2. Claude Code: copy the skill folder into ~/.claude/skills/. Claude.ai: upload it under Settings → Capabilities → Skills.
3. Ask: "apply living canvas to <repo, URL or idea>"
Feedback welcome, especially on repos where the result falls flat.
3 points · 4 comments
I asked a Claude skill to explain X in one picture. Here's what it made 👇
living-canvas turns any repo, URL or idea into an animated canvas you understand from a single frame.
Open source: shouvik12/living-canvas
@claudeai @AnthropicAI #buildinpublic t.co
4 likes · 1 repost · 110 views
Animated cover GIF made with living-canvas. Turn any repo or idea into an animated banner.
shouvik12/living-canvas
1 like · 15 views
Leave a ⭐ if you like devtv
shouvik12/devtv
Do send in your ads or spotlight entries if any.
Happy to host them on DevTv t.co
1 like · 2 reposts · 25 views
Each banner is one self-contained SVG: no JavaScript, under 10 KB, and it renders right in a GitHub README.
Try it on your repo: 🎨 shouvik12/living-canvas
📺 And catch it on DEV·TV's commercial breaks: shouvik12.github.io
2 likes · 1 repost · 20 views
I pointed living-canvas at 3 famous repos 🎨
shouvik12/living-canvas
living-canvas is my Claude skill that turns any GitHub repo into an animated README banner. It reads the README, finds the one idea at the project's heart, and turns it into motion.
So I tried it on three projects I love 👇
🐴 Ponytail by @DietrichGebert
You ask your agent for a date picker. Without Ponytail: 335 lines and a hand-built calendar. With it: 10 lines that reuse the browser's own date input.
7 likes · 2 reposts · 183 views
DEV·TV now runs real ads, and the first one is mine
---
title: DEV·TV now runs real ads, and the first one is mine
published: true
description: DEV·TV's fake commercial breaks just got their first real ad, for leantext, an open-source tool that cuts agent tokens by up to 99%.
tags: showdev, webdev, ai, opensource
---
If you've left DEV·TV running on autopilot, you've probably sat through a commercial break. Static, then a full-screen ad for something that doesn't exist: Off-By-One Pizza (order 10 slices, get 9, or 11), Rollback Airlines, Semicolon Insurance, node_modules Self Storage.
Those were always a joke. A retro TV should have ad breaks, and developers should be the ones laughing at them.
As of today, some of those breaks are real.
What changed
DEV·TV already ran two house ads between the joke ones: one inviting you to submit your project to the Spotlight channel, and one asking for a GitHub star. Unlike the fake ads, their buttons actually do something.
Now there's a third, and it's the first real product ad on DEV·TV.
Leading with leantext
The first real ad is for leantext, an open-source tool I just made public.
The idea is simple: web pages, PDFs, screenshots and Office files get turned into lean Markdown before your coding agent reads them. When a conversion looks wrong, the agent gets the original instead.
Why bother? A lot of what agents read is bloated: navigation, scripts, layout, pixels. On real pages leantext cuts tokens by up to 99% (PyPI's NumPy page drops from 92,348 tokens to 755), and in end-to-end Claude Code runs it still got 21 out of 21 tasks right.
It's Apache-2.0 and free:
👉 shouvik12/leantext
Your coding agent reads the web. Make it read less.
Why leantext goes first
Every TV network runs promos for its own shows. DEV·TV is no different: the first real ad is for something I built.
I tried to do it honestly, though. The ad says "From the maker of DEV·TV" right in the copy. The "not a real advertisement" disclaimer that sits under the joke ads is hidden on this one, because this one is real. And it rotates with the Spotlight and Star ads, so it never takes time away from the projects featured on the Spotlight channel.
How it shows up
Breaks are rare by design, roughly every five minutes on autopilot, and you can switch them off in settings. They alternate between a joke ad and a house ad, and the house ads take turns. When leantext comes up, you get nine seconds of teal and mustard, and the GET LEANTEXT button opens the repo in a new tab. Flip the channel and the ad goes away, just like real TV.
The whole thing is still one index.html with zero infrastructure. Adding the ad was a four-line change.
What's next
The fake ads are staying. Off-By-One Pizza isn't going anywhere.
But now that the break slot can carry something real, it opens a door. Developer tools in the break, next to Merge Conflict Therapy, feels like the right kind of weird. If you've built something you'd want on air, the Spotlight channel is still free, and you can submit from inside the app.
📺 Tune in: shouvik12.github.io
And if leantext sounds useful, a ⭐ on the repo helps more than you'd think.
5 reactions
Mentions
What Claude Code actually reads when it opens a web page, and a hook that trims it You ask Claude Code to check an API doc and add a call to your code. It curls the page, reads it and writes the code. The run looks cheap. Whether it was depends on what the agent actually read. I'm building leantext, a hook that converts what Claude Code reads into lean Markdown before it reaches the context. I built it with Claude Code. I designed the approach and the checks. Claude Code wrote most of the extractors and the hook, and built the benchmark harness that runs headless sessions with the hook on and off. On PyPI's NumPy page, the useful part is about 2,000 tokens, but the full page as Markdown is 92,348, mostly a hidden list of release files. With leantext the agent reads 755. In end-to-end runs with the hook on, Claude Code answered 21 of 21 tasks correctly. For each file the agent reads, the hook does this: 1. Intercept: the agent's own Read and curl calls. 2. Convert: web pages, scanned PDFs and Office files into Markdown, keeping tables and code. 3. Check: for missing content or bot walls, and skip if it saves less than 15%. 4. Fall back: if any check fails, the agent reads the original. What I learned building it: most of the waste is invisible, and failing open matters more than compressing hard. A bad conversion costs more than no conversion. Free and open source under Apache-2.0: git clone shouvik12/leantext cd leantext && ./install.sh Say yes to the hook during install and restart Claude Code.
I made leantext: it converts every file your agent reads into lean Markdown, OCR first, falls back if conversion fails Solo dev here. The video shows leantext in action. The problem I kept hitting: agents read docx, xlsx, pptx, PDFs and images raw, and burn a ton of context doing it. So I built leantext. What it does: - Converts anything the agent reads into lean Markdown, keeping tables and code blocks - Images go through OCR first, and only fall back to a vision model if OCR isn't enough - If a conversion looks wrong, it hands the agent the original file instead of garbage Known limits: right now it drops some short Sphinx API definitions and footnotes in Python docs. It's on my list. It's open source (Apache-2.0): shouvik12/leantext Next I want to measure it end to end inside real agents: accuracy, tokens, latency and cost, with leantext on vs off. Which agent would you want it tested on? And if you find files that break it, I'd love to hear about them.
I built a retro TV for developers — one HTML file, no backend, 15+ live channels (and some of you are already on it) Hey everyone 👋 Quick update on DEV·TV, the retro, channel-surfing TV for developer content that runs entirely in your browser. (New here? I built it because I was tired of hopping between a dozen tabs every morning for new models, trending repos and indie projects.) 🔗 Live: shouvik12.github.io ⭐ Repo: shouvik12/devtv What’s new - 💻 LOCAL MODELS (ch 14, shipped today): new models you can run on your own machine, refreshed daily by a GitHub Action - ☁️ CLOUD MODELS (ch 11): the old NEW MODELS channel, renamed now that local has its own channel - ⭐ SPOTLIGHT (ch 15): SeoLoupe and Augur, both found right here on r/AppsWebappsFullstack, are now on air The full lineup GITHUB · HACKER NEWS · DEV · HUGGING FACE · RELEASES · AI PAPERS · LATEST PAPERS · CVE · HN VIDEO · AI VIDEO · CLOUD MODELS · AGENT SKILLS · MODEL FACE-OFF · LOCAL MODELS · SPOTLIGHT There’s also a GUIDE that shows what’s on every channel (arrow keys + Enter, like a real TV), YOU ON TV, a 2× speed button, and fake commercial breaks with free “ads” for indie dev tools. Still one file The whole app is a single index.html: no framework, no build step, no server, hosted free on GitHub Pages, Apache-2.0. It was #5 Product of the Day on Product Hunt and #1 on IndieLink. For this sub Spotlight and commercial-break slots are free for indie devs. Hit Submit your project at the bottom of the TV, or email [devtv.developers@gmail.com](mailto:devtv.developers@gmail.com). What’s next V2 stays single-file forever. V3 is a separate track with a minimal backend: accounts, likes, personalized recommendations, and a directory of everything featured. I’m looking for volunteers to help shape that roadmap. What channel should I build next? 📡
I built living-canvas, a free Claude skill that turns any repo, site or idea into an animated explainer I built living-canvas, a free, open-source skill for Claude. You point it at a GitHub repo, a URL, a doc or a single sentence, and Claude turns it into an animated explainer that a stranger can understand from one still frame. What it does Claude reads the subject, distills it into one core idea, and draws it as three labeled stages: problem → what it does → result. The output is an animated SVG for a README, or an interactive HTML page. How Claude helped build it • I wrote the skill.md with Claude: we iterated on the rules until the outputs passed a "still-frame test", where a single screenshot has to explain the whole idea. • Claude does the actual work at runtime: it reads the source, picks a visual metaphor, and writes the canvas code (HTML + requestAnimationFrame, or SVG with SMIL). • Claude also wrote the recording script for the video: headless Chromium with a controlled clock steps the animation frame by frame, and ffmpeg encodes the frames to MP4. In the video (three runs) • Caveman: the Claude Code skill that strips filler from agent replies • Reddit: Claude read Reddit's published numbers first, then drew post → vote → discuss • Nemotron 3.5 Transcribe: an explainer for NVIDIA's open speech model Known limitation: for repos it reads the README, file tree and languages, not the source code, so a stale README gives a stale picture. Reading the code is next. Free to try 1. Get the skill from shouvik12/living-canvas 2. Claude Code: copy the skill folder into ~/.claude/skills/. Claude.ai: upload it under Settings → Capabilities → Skills. 3. Ask: "apply living canvas to <repo, URL or idea>" Feedback welcome, especially on repos where the result falls flat.
I asked a Claude skill to explain X in one picture. Here's what it made 👇 living-canvas turns any repo, URL or idea into an animated canvas you understand from a single frame. Open source: shouvik12/living-canvas @claudeai @AnthropicAI #buildinpublic t.co
Animated cover GIF made with living-canvas. Turn any repo or idea into an animated banner. shouvik12/living-canvas
Leave a ⭐ if you like devtv shouvik12/devtv Do send in your ads or spotlight entries if any. Happy to host them on DevTv t.co
Each banner is one self-contained SVG: no JavaScript, under 10 KB, and it renders right in a GitHub README. Try it on your repo: 🎨 shouvik12/living-canvas 📺 And catch it on DEV·TV's commercial breaks: shouvik12.github.io
I pointed living-canvas at 3 famous repos 🎨 shouvik12/living-canvas living-canvas is my Claude skill that turns any GitHub repo into an animated README banner. It reads the README, finds the one idea at the project's heart, and turns it into motion. So I tried it on three projects I love 👇 🐴 Ponytail by @DietrichGebert You ask your agent for a date picker. Without Ponytail: 335 lines and a hand-built calendar. With it: 10 lines that reuse the browser's own date input.
DEV·TV now runs real ads, and the first one is mine --- title: DEV·TV now runs real ads, and the first one is mine published: true description: DEV·TV's fake commercial breaks just got their first real ad, for leantext, an open-source tool that cuts agent tokens by up to 99%. tags: showdev, webdev, ai, opensource --- If you've left DEV·TV running on autopilot, you've probably sat through a commercial break. Static, then a full-screen ad for something that doesn't exist: Off-By-One Pizza (order 10 slices, get 9, or 11), Rollback Airlines, Semicolon Insurance, node_modules Self Storage. Those were always a joke. A retro TV should have ad breaks, and developers should be the ones laughing at them. As of today, some of those breaks are real. What changed DEV·TV already ran two house ads between the joke ones: one inviting you to submit your project to the Spotlight channel, and one asking for a GitHub star. Unlike the fake ads, their buttons actually do something. Now there's a third, and it's the first real product ad on DEV·TV. Leading with leantext The first real ad is for leantext, an open-source tool I just made public. The idea is simple: web pages, PDFs, screenshots and Office files get turned into lean Markdown before your coding agent reads them. When a conversion looks wrong, the agent gets the original instead. Why bother? A lot of what agents read is bloated: navigation, scripts, layout, pixels. On real pages leantext cuts tokens by up to 99% (PyPI's NumPy page drops from 92,348 tokens to 755), and in end-to-end Claude Code runs it still got 21 out of 21 tasks right. It's Apache-2.0 and free: 👉 shouvik12/leantext Your coding agent reads the web. Make it read less. Why leantext goes first Every TV network runs promos for its own shows. DEV·TV is no different: the first real ad is for something I built. I tried to do it honestly, though. The ad says "From the maker of DEV·TV" right in the copy. The "not a real advertisement" disclaimer that sits under the joke ads is hidden on this one, because this one is real. And it rotates with the Spotlight and Star ads, so it never takes time away from the projects featured on the Spotlight channel. How it shows up Breaks are rare by design, roughly every five minutes on autopilot, and you can switch them off in settings. They alternate between a joke ad and a house ad, and the house ads take turns. When leantext comes up, you get nine seconds of teal and mustard, and the GET LEANTEXT button opens the repo in a new tab. Flip the channel and the ad goes away, just like real TV. The whole thing is still one index.html with zero infrastructure. Adding the ad was a four-line change. What's next The fake ads are staying. Off-By-One Pizza isn't going anywhere. But now that the break slot can carry something real, it opens a door. Developer tools in the break, next to Merge Conflict Therapy, feels like the right kind of weird. If you've built something you'd want on air, the Spotlight channel is still free, and you can submit from inside the app. 📺 Tune in: shouvik12.github.io And if leantext sounds useful, a ⭐ on the repo helps more than you'd think.