惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
Kaspersky official blog
云风的 BLOG
云风的 BLOG
IT之家
IT之家
T
The Blog of Author Tim Ferriss
C
Check Point Blog
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
G
Google Developers Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
F
Fortinet All Blogs
D
DataBreaches.Net
The Register - Security
The Register - Security
L
LINUX DO - 最新话题
W
WeLiveSecurity
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V2EX - 技术
V2EX - 技术
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
小众软件
小众软件
F
Full Disclosure
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
I
InfoQ
S
Secure Thoughts
TaoSecurity Blog
TaoSecurity Blog
MyScale Blog
MyScale Blog
AI
AI
Recent Announcements
Recent Announcements
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CXSECURITY Database RSS Feed - CXSecurity.com
V
Vulnerabilities – Threatpost
NISL@THU
NISL@THU
SecWiki News
SecWiki News
Cisco Talos Blog
Cisco Talos Blog
H
Heimdal Security Blog
Y
Y Combinator Blog
N
News | PayPal Newsroom
P
Privacy International News Feed
美团技术团队
Attack and Defense Labs
Attack and Defense Labs
D
Docker
PCI Perspectives
PCI Perspectives
Webroot Blog
Webroot Blog
A
About on SuperTechFans
A
Arctic Wolf
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
MongoDB | Blog
MongoDB | Blog
T
Threat Research - Cisco Blogs

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店 GitHub - EdoardoBambini/Agent-Armor-Iaga: AI agents are getting tool access — shell, file system, databases, APIs, secrets. But **nobody is governing what they actually do with it**. Frameworks like LangChain, CrewAI, AutoGen, and Claude Code give agents the power to execute. Agent Armor gives you the power to control, audit, and approve every single action before it happens. HN Vibes — Week 15, Apr 7–13 2026 GitHub - chojs23/ec: Easy terminal-native 3-way git mergetool vim-like workflow GitHub - SethPyle376/hiraeth: Local AWS emulator focused on fast integration testing, with SQS support, SQLite-backed state, and a debug-friendly web UI. GitHub - JakOb-dotcom/cloud-sandbox-security-analysis: Technical analysis and Proof of Concept (PoC) regarding environment variable exfiltration in containerized cloud sandboxes via side-channel data leaks. Springboards - Flint Alpha Show HN: A simpler coding agent harness GitHub - audiodude/sudomake-friends GitHub - 256thFission/mini-mythos: OSS clone of Anthropic’s Mythos harness to locate C/C++ memory vulnerabilities Show HN: OpenParallax: OS-level privilege separation for AI agent execution Hacker News Sorted - Chrome 应用商店 Show HN: How to Install Docker on Ubuntu 24.04 LTS: Complete 2026 Guide GitHub - himanshudongre/smriti GitHub - sverrirsig/claude-control: macOS desktop dashboard for monitoring and managing multiple Claude Code sessions GitHub - ory/dockertest: Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal work. Chiral - Chrome 应用商店 Show HN: Two Claudes collaborating through shared memory on a $100 mini-PC GitHub - pmichaillat/latex-cv: Minimalist LaTeX template for academic CVs GitHub - oguzbilgic/posse: A web UI for Anthropic Managed Agents. GitHub - sshiraz/depsly: Dependency risk analysis tool for npm packages ABI Add safari/agent-harness — Safari browser automation via safari-mcp by achiya-automation · Pull Request #212 · HKUDS/CLI-Anything GitHub - Halfblood-Prince/trustcheck: Verify PyPI package attestations and improve Python supply-chain security GitHub - oguzbilgic/kern-ai: Agents that do the work and show it. GitHub - bruits/satteri: High-performance Markdown and MDX processing for the JavaScript ecosystem GitHub - tylergibbs1/feedstock: High-performance web crawler and scraper for TypeScript, powered by Bun and Playwright GitHub - Grimm67123/grimmbot: The self-improving sandboxed and open-source AI agent. With persistent memory and scheduling. GitHub - whitevanillaskies/whitebloom: Local whiteboard that blooms. GitHub - hwdsl2/docker-whisper: Docker image for a self-hosted Whisper speech-to-text server with speaker diarization and OpenAI-compatible transcription and translation APIs. Powered by faster-whisper. Supports all Whisper models, NVIDIA GPU (CUDA) acceleration, JSON/SRT/VTT output, SSE streaming, offline mode, and multi-arch (amd64, arm64). GitHub - yisding/reviewwiggum GitHub - MarwanAlsoltany/serrors: Structured errors for Go: sentinel hierarchies, typed data, custom formatting, and slog integration. GitHub - soatok/age-php GitHub - Luthiraa/markitme GitHub - stagas/rtdiff: realtime git diff gui and AI-assisted commits GitHub - tombedor/excalicharts GitHub - wh1le/excalidraw-edit: Open and edit .excalidraw files from the terminal. Offline, auto-saves to disk. MalExt Sentry - Malicious Extension Scanner - Chrome 应用商店 GitHub - syi0808/asciianimesvg: Generate animated ASCII art SVGs from text. CLI, Rust library, WASM, and web editor. GitHub - zaina-ml/ml_forge: A visual-based graph node editor for training computer vision models. GitHub - anakin87/llm-rl-environments-lil-course: 🌱 A little course on Reinforcement Learning Environments for evaluating and training Language Models GitHub - takaakit/superpowers-uml: Superpowers-UML modifies Superpowers to ensure a software development workflow in which AI agents design through UML modeling. AdriByte Studio - Sviluppo Web e Soluzioni Digitali GitHub - chouligi/angel-copilot: Your personalized Angel Investment Advisor Show HN: MoodSense AI (ML and FastAPI and Gradio, Deployed on Hugging Face) Moodsense Ai - a Hugging Face Space by aman179102 GitHub - agenteractai/lodmem: Level Of Detail Context Management for Agents GitHub - ostefani/subnetlens: A fast, concurrent network scanner with a TUI and plain-text CLI, built in Go. It discovers live hosts on your network, scans their open ports, resolves hostnames, and fingerprints operating systems—delivered. Cyber Pulse: Agentic Intel - Apps on Google Play Whisper API: Self-Hostable Speech to Text Transcription The Agent-Web Protocol Stack: A Research Thesis GitHub - msmarkgu/RelayFreeLLM: A restful API designed to route user prompts to various AI model providers. Show HN: Provepy – A Python decorator that proves your code using Lean and LLMs Show HN: Pardonned.com – A searchable database of US Pardons GitHub - patrickdappollonio/dux: Dux is a terminal UI that lets you run multiple AI coding agents side by side, each in its own git worktree, with full companion terminals, macros, commit generation, and a command palette that knows more tricks than you do. kMC Crystal Simulator Show HN: HyperFlow – A self-improving agent framework built on LangGraph GitHub - stef41/vibescore: 🎵 Grade your vibe-coded project. One command, instant letter grade across security, quality, dependencies, and testing. GitHub - stef41/lmscan: 🔍 Detect AI-generated text and fingerprint which LLM wrote it. Open-source GPTZero alternative. Zero dependencies, works offline. imgur.com GitHub - visionscaper/collabmem: Enabling long-term collaboration with Agentic AI - building up episodic and world model memory over time with in-context awareness 在 Steam 上购买 FriedrichAI: Offline AI 立省 10% GitHub - atripati/ark: AI Runtime Kernel — a context operating system for AI agents. Eliminates tool bloat, loads only what’s needed, and gives LLMs their reasoning space back. GitHub - nowork-studio/toprank: Open-source Claude Code skills for SEO, SEM, Google Ads GitHub - tacomanator/sash: Lightweight macOS menu bar app for reliably cycling through windows of the current application. Appents | Social Media Management for Product-First Teams GitHub - pnhoang/youtube-spam-blocker: Automatically detects and hides spam messages in YouTube Live chat. Set rate limits, keyword filters, and block repeat offenders. GitHub - decisionnode/DecisionNode: CLI + Local MCP - A shared structured memory store across Claude Code, Cursor, Windsurf, Antigravity, and every MCP client. Semantically queryable. GitHub - AvaCodeSolutions/django-email-learning: An open source Django app for creating email-based learning platforms with IMAP integration and React frontend components. The $100K Gap in Kubernetes Security Tooling Function Calling Harness: From 6.75% to 100%
GitHub - maxbolgarin/unread: Read your Telegram unread. Without reading it.
maxbolgarin · 2026-06-25 · via Hacker News: Show HN

unread

Read your Telegram unread. Without reading it.

PyPI CI Python Ruff License: Apache 2.0

Website · Docs · PyPI

A local CLI that turns Telegram chats, YouTube videos, web pages, and files into reports with citations — using whichever LLM you keep an API key for.


You have 47 unread Telegram groups. You will never read them. You will now.

curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install unread && unread init
unread @somegroup --last-days 7

It pulls the chat, runs it through whichever LLM you keep an API key for, and hands you a report with clickable citations back to every claim. Same shape for YouTube videos, web pages, voice messages, recorded meetings, podcasts, PDFs, and stdin. Or run it as a self-hosted Telegram bot and forward anything weird at it — see Self-hosted Telegram bot below.

See a real report from @thehackernews — 99 messages over two weeks, four chunks, $0.016, every bullet linked back to its source.

unread analyzing a Telegram channel into a Markdown report

What it does

Three verbs. The same <ref> shape works on all of them.

  • unread <ref>analyze. Map-reduce the source into a Markdown report. Every claim links back to its message / paragraph / timestamp.
  • unread ask <ref> "Q"ask. One-shot Q&A with citations. Multi-turn follow-ups are one keystroke away.
  • unread dump <ref>dump. Save the original — chat history, transcript, article — verbatim. No LLM call.

<ref> is any of:

unread @somegroup --last-days 7              # Telegram chat / channel / forum
unread "https://youtu.be/jmzoJCn8evU"        # YouTube video (captions or Whisper)
unread "https://paulgraham.com/greatwork"    # Web page / article
unread ./meeting.mp3                         # Local file (PDF, DOCX, audio, video, image)
cat notes.txt | unread                       # Stdin

Telegram in any language

This is the bit you actually want.

Use unread tg to analyze any yours chats with interactive picker.

Source language and report language are independent. The chat can be in Russian, the report in English. Or English source → Spanish report. Or anything → anything — the LLM does the heavy lifting and the source hint is optional.

# Russian-language group, English summary
unread @forklog --last-days 7 --report-language en

# English channel, Russian summary
unread @thehackernews --last-days 14 --report-language ru

Out of the box, hand-tuned preset structures ship for en and ru under presets/<lang>/*.md — section names, the forum addendum, the report skeleton. For any other report language the LLM writes the structure on the fly using the English preset as a template. It works. It's not as polished as the native trees.

What you get back, for a Russian chat with --report-language en:

## Decisions
- Migrate to indexed fund structures starting Q1 2026. [#1586](https://t.me/c/3865481227/584/1586)
- Drop the legacy K8s 1.27 cluster by end of month — Bob owns the rollout. [#1604](...)

## Open questions
- Who pays the OpenAI bill across the joint team? [#1612](...)

Every citation is a t.me link. Click → Telegram opens that message.

unread handles forums (topics), channel comments, voice notes (transcribed), photos (described), forwarded media (deduped — Whisper runs once across N chats), and your folder structure (--folder Work batches everything in that Telegram folder). The full source-shape matrix is in docs/sources.md.

YouTube — the bonus that pays for itself

unread <youtube-url> does the obvious thing: tries captions first, falls back to Whisper if the video has none. Every citation in the report becomes a t=SECONDS deep link, so clicking jumps you to that moment of the video.

Analyze 30 mins of podcast:

unread https://www.youtube.com/watch?v=Pmd6knanPKw 

Analyze a random old russian lecture with german report:

unread https://www.youtube.com/watch?v=SBEtiXnLtpw --report-language de

Ask a question about the video:

from what timecode should i start watching if i want to know about RAG?

unread ask https://youtube.com/watch\?v\=k1njvbBmfsw "from what timecode should i start watching if i want to know about RAG?"

Save the transcript only:

unread dump https://www.youtube.com/watch?v=BDqvzFY72mg --mode=transcript

Cached after the first run. Re-asking a question about the same video costs only the answer call — no yt-dlp, no Whisper, no re-spend.

Plain web pages (unread <url>), PDFs, DOCX, Markdown, audio, video, and images all use the same <ref> syntax. See docs/sources.md for the full list of supported extensions and the cache rules.

Voice, video, and any file — talk-to-text in one command

That 12-minute voice message someone sent you. The 45-minute meeting recording you'll never play back. The hour-long lecture you wanted to skim. Drop any of them in and get a Markdown summary:

unread ./meeting.mp3                 # audio → Whisper → summary
unread ./standup.mp4                 # video → ffmpeg → Whisper → summary
unread ./voice-note.ogg              # forwarded voice message saved to disk
unread ./report.pdf                  # PDF
unread ./screenshot.png              # image (vision)

Inside a Telegram chat the same step runs invisibly: voice notes and video circles are transcribed, photos are described, the analysis treats them as text. Forward a voice across five chats — Whisper runs once, cached by Telegram's stable document_id.

Whisper is roughly $0.006 per minute of audio. A 30-minute podcast costs under twenty cents. Re-running on the same file is free when it hits the cache.

The full kind matrix and cache rules are in docs/sources.md#media-enrichment.

Bring your own model

Drop in a key for any of these. Switch at any time with unread settings — caches and analyses persist across switches.

Provider What you get
OpenAI Chat models + Whisper (audio) + embeddings + vision. The full toolkit.
Anthropic (Claude) Chat models only. Pair with an OpenAI key if you also want voice / image enrichment.
Google (Gemini) Chat models only. Same pairing note.
OpenRouter One key, dozens of chat models — handy for trying Llama / DeepSeek / Mistral without separate signups.
Local (Ollama / LM Studio / vLLM) OpenAI-compatible HTTP. Zero cost, zero data leakage, your own model.

Whisper / vision / embeddings are OpenAI-only. If you pick Anthropic or Google as your chat provider and also want media enrichment, add an OpenAI key alongside — unread init will offer it.

Quickstart (90 seconds)

# 1. Install. uv handles the Python venv and binary.
curl -LsSf https://astral.sh/uv/install.sh | sh         # macOS / Linux
uv tool install unread

# 2. Interactive setup. Picks install folder, AI provider, Telegram (optional).
unread init

# 3. Run something.
unread "https://paulgraham.com/greatwork.html"          # any web page
unread ./meeting.mp3                                    # any local file
unread @somegroup --last-days 7                         # last week of a chat
unread doctor                                           # confirm everything works
unread help                                           # show help

No virtualenv to activate, no pip conflicts, no global Python pollution. Upgrade later with uv tool upgrade unread.

Skip the Telegram step if you only want YouTube / web / file analysis — those work with only an AI key.

Full install matrix (Windows / ffmpeg / dev install / editable) is in docs/install.md.

Self-hosted Telegram bot

Run the same pipeline as a Telegram bot. Forward it a voice message you don't feel like listening to, a PDF you don't feel like reading, a YouTube link, a t.me/... post from a channel you're not sure you want to subscribe to, or that suspicious link a friend just sent — you get a Markdown summary back as a document, with cost and timing in the caption.

Bot replying with a voice-message summary, attaching the PDF report

Single-user by design: the bot only answers ONE Telegram ID. The allowlist is auto-derived from the user session you give it (mounted or sent via /upload_session); UNREAD_BOT_OWNER_ID is only a bootstrap fallback for the case where no session is installed yet. Everyone else is silently dropped.

Three install paths — pick by environment:

1. Local laptop / dev (unread bot run foreground):

uv tool install unread
export UNREAD_BOT_TOKEN=123:abc...   # from @BotFather
unread bot run

2. Fresh Linux VM — one line, blank disk to running systemd service:

UNREAD_EXECUTABLE="install-unread-bot.sh" && curl -fsSL https://raw.githubusercontent.com/maxbolgarin/unread/main/scripts/install-bot.sh > $UNREAD_EXECUTABLE && chmod +x $UNREAD_EXECUTABLE && ./$UNREAD_EXECUTABLE && rm ./$UNREAD_EXECUTABLE

Installs uv + ffmpeg + libpango, runs unread init, asks for the @BotFather token, drops a systemd --user unit that auto-restarts on crash and survives SSH disconnect.

3. Docker — pull the generic unread image from GHCR (same image can also run one-off CLI commands; command: ["unread","bot","run"] in the compose file specifies the bot mode):

cp .env.bot.example .env.bot && $EDITOR .env.bot
docker compose -f docker-compose.bot.yml --env-file .env.bot up -d

Reports default to PDF; set UNREAD_BOT_REPORT_FORMAT=md in .env.bot to skip PDF rendering (.md upload instead). The first time you message the bot with a t.me/... link it'll ask for /upload_session — send your laptop's ~/.unread/storage/session.sqlite as a Telegram document and it's ready.

Full feature reference (slash commands, the confirm panel, what each input kind does) is in docs/bot.md. End-to-end VM deployment guide covering all three paths is in docs/bot-vm-deploy.md.

Why this exists

I have ~50 Telegram groups I genuinely want to follow and not enough hours to read them. The same is true for the videos I bookmark and the articles I save to "read later." LLMs are now cheap enough that analyzing a week of group chat costs less than a coffee. My time is not. So I built the CLI I wanted to use — local-first, citation-backed, provider-agnostic — and now I open Telegram a lot less.

The boring but real bits

  • Local-first. SQLite under ~/.unread/. Your messages, embeddings, analyses, and secrets stay on your disk. The only network calls are to Telegram, your chosen AI provider, and any URLs you point at.
  • Security. Your API keys, Telegram session, and other secrets can be encrypted at rest. You can use your OS keychain (default) or passphrase to unlock the CLI.
  • Citations on every claim. Reports link back to the source message / paragraph / timestamp. --cite-context N expands citations into <details> blocks with surrounding context, so the report is auditable without re-opening Telegram.
  • Two-layer cache. Local analysis cache (re-running an unchanged chat is free) + the AI provider's prompt cache (server-side discount on repeated prefixes). unread cache stats shows the hit rate.
  • Cost guardrails. --max-cost 0.50 aborts or confirms before you spend more than that. --dry-run estimates without calling the model. unread stats shows lifetime spend by chat / preset / day.
  • PII redaction. --redact scrubs phones, emails, IBANs, and Luhn-valid card numbers from what gets sent to the LLM. Originals stay in the local DB.
  • Map-reduce, automatic. Big histories get chunked, summarized in parallel, then merged. Each chunk is cached independently — adding one message to the tail re-costs only the last chunk.
  • Forums, channels with comments, folders. Telegram's awkward shapes are first-class. --all-per-topic, --with-comments, --folder Work.

Encryption modes (keystore, passphrase-derived pass), session hygiene, and the threat model are documented in docs/security.md.

FAQ

Does this ship my Telegram history to OpenAI? Only the messages in the window you asked about, only after PII redaction if you set --redact, and only to the provider whose key you configured. Nothing else leaves the machine. The local cache is in your install dir; you can wipe it any time with unread cache ai purge.

What if I don't use Telegram? Skip unread init's Telegram step. unread <url> and unread <file> work with only an AI key. Most of the codebase is source-agnostic.

What languages does it actually support? Source content: anything Whisper auto-detects (audio) or your LLM can read (text) — pretty much everything human languages cover. Reports: anything your LLM can write. EN and RU get hand-tuned preset structures; other report languages use the English preset as a template that the LLM translates on the fly.

Will it cost me money? Yes — your AI provider charges. unread itself is free. Per-call USD is logged; --max-cost N caps a single run. Re-running an unchanged chat is free (local cache hit). With cheap models (gpt-5.4-mini-class, Gemini Flash, Claude Haiku) the bill is small enough that most users stop reading the cost reports after a week.

Is it actually fast? Fast enough that I stopped reading group chats. No benchmark table — speed depends on chat size, model choice, and your network. Try it with unread @somegroup --last-days 1 --dry-run to see the estimate before any LLM call.

Can I run it on a server / in cron? Yes. Non-TTY mode skips interactive prompts. unread watch --interval 1h ... loops in the foreground (run under tmux / systemd / nohup). API keys can come from env vars or ~/.unread/.env. The passphrase backend reads UNREAD_PASSPHRASE for headless unlock.

Can I plug in my own preset / prompt? --preset custom --prompt-file my-prompt.md. Same frontmatter format as the bundled ones in presets/. Bump prompt_version in the frontmatter when you edit, otherwise the cache won't notice.

Deep docs

The full reference manual lives under docs/:

Topic File
Install on macOS / Linux / Windows + first-run setup + where files live docs/install.md
Sources: Telegram refs, YouTube, web pages, local files, forums, media enrichment, presets docs/sources.md
Every CLI command, every flag, the wizard, watch, subscriptions docs/reference.md
Languages, cost & caching, config.toml, maintenance, troubleshooting, architecture docs/configuration.md
Threat model, encryption backends, PII redaction, session hygiene docs/security.md

Useful inline help: unread --help, unread <subcommand> --help, unread help, unread doctor.

Contributing

PRs welcome. Read CLAUDE.md first — it's the contributor map (DB invariants, cache keys, preset version bumps, the three language axes). CONTRIBUTING.md covers the bench (lint / format / tests). SECURITY.md for vulnerability reports.

uv sync --extra dev
uv run pytest -q
uv run ruff check . && uv run ruff format --check .

Issues and feature requests: https://github.com/maxbolgarin/unread/issues.

Credits

Standing on the shoulders of: Telethon for the Telegram side, OpenAI Whisper / Anthropic / Google Gemini / OpenRouter / Ollama for the LLM side, yt-dlp for YouTube, trafilatura for article extraction, tiktoken for token counting, Typer / Rich / structlog for the CLI shell, and uv for keeping all of the above out of your system Python.

License

Apache 2.0 — see LICENSE.