Skip to content

About

텔레그램 봇에 던진 링크·텍스트·이미지를 매일 22시 Claude가 요약해 Obsidian vault에 주제별 정리하는 개인용 자동 아카이버

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

🐷 zzamtong-bot

zzamtong mascot

English | 한국어

Drop links, text, or images into a Telegram bot throughout the day, and every night at 22:00 Claude visits, summarizes, and files them into your Obsidian vault by topic — a personal auto-archiver.

node deps telegram obsidian claude schedule license last commit

What it does

drop anytime into the bot →→→ daily 22:00 (launchd) →→→ Obsidian vault
   link / text / image            collect → summarize → file      topic folders + summary notes
                                                                   + Telegram "done" notification
Input Handling
🔗 Link Visit with WebFetch → summarize
📝 Text only WebSearch for related material → synthesize a summary
🖼️ Image Vision describes it + OCR, original kept and embedded in the note
💬 Natural-language instruction Reads "put this in the Design folder", "focus on risks", etc. and honors it
  • Automatic topic-folder matching (conservative — reuses existing folders first)
  • Automatic wikilinks to related notes ([[...]])
  • Sends a 📥 N items filed today message to the bot when done
  • Failed links are retried the next day (zero loss)

SNS & community sources

Social pages block direct scraping; tech communities mostly have open APIs. Each platform is a credential-gated enricher — drop optional credentials in .env to unlock the authenticated path; without them it degrades to best-effort + a "visit original" banner.

Source Access Credentials
Hacker News Full post + top comments (Algolia API) none
Lobsters Full post + top comments (.json) none
arXiv Title + abstract + authors (export API) none
X / Twitter Full tweet text (syndication) none
Bluesky Full post + replies (public AppView API) none
YouTube Title + channel + description (no transcript) none
Reddit Post + top comments (OAuth) REDDIT_CLIENT_ID / REDDIT_CLIENT_SECRET (optional)
Threads / Instagram og snippet (best-effort) —
Facebook / Truth Social mostly blocked → banner —
LinkedIn tries WebFetch first; posts usually authwalled → og snippet, pulse articles often full —

HN/Reddit notes emphasize the discussion: ## Discussion synthesizes the top comments' arguments. Indirectly-fetched SNS posts carry a banner telling you to visit the original.

Default for unreadable pages (X, LinkedIn, any platform): never dropped — summarized from whatever is available (enriched data → og snippet → title/URL), with the original link in the note's source and a "visit original" banner. Counted as partial success, not failure.

Note format

---
title: ...
source: <URL | telegram-text | telegram-image>
captured: YYYY-MM-DD
topic: <topic>
tags: [auto, ...]
---
## One-line summary
## Key points        (5–8 bullets)
## Background / context
## Implications / how to use
## Related notes

Layout

File Role
collect.mjs Telegram getUpdates → chat_id filter → collect messages (link/image/text) → pending.jsonl
lib/parse-message.mjs Message parsing (text / urls / photo)
lib/extract-urls.mjs URL extraction (entities + regex fallback)
lib/state.mjs offset / pending state files
prompt.md Claude instructions for summarizing, topic-matching, filing
run.sh collect → claude -p headless → notify
notify.mjs Sends the run result to the Telegram bot
com.zzamtong.linksummarizer.plist launchd schedule, daily 22:00

Zero dependencies — only Node's built-in fetch / node:test.

Install

git clone https://github.com/s1ns3nz0/zzamtong-bot.git
cd zzamtong-bot
cp .env.example .env      # fill in the values (below)
node --test               # 12 unit tests should pass

Fill in .env:

  1. Telegram @BotFather → /newbot → token → TELEGRAM_TOKEN
  2. Send /start to the bot, open https://api.telegram.org/bot<TOKEN>/getUpdates, read chat.id → TELEGRAM_CHAT_ID
  3. Your Obsidian vault path → VAULT_DIR

Register with launchd (daily 22:00):

# edit the paths in the plist for your environment, then
cp com.zzamtong.linksummarizer.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.zzamtong.linksummarizer.plist

Run / test manually:

./run.sh

Security

  • .env (token), state files, logs, and original images are all .gitignored — never committed.
  • The bot only processes messages from the TELEGRAM_CHAT_ID in .env (others are filtered out).
  • claude -p running with ANTHROPIC_API_KEY bills API tokens.

License

MIT

About

텔레그램 봇에 던진 링크·텍스트·이미지를 매일 22시 Claude가 요약해 Obsidian vault에 주제별 정리하는 개인용 자동 아카이버

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages