- Added 15 OrbitOS skills (bundled in skills/orbitos/) - Added vault structure templates (views, templates, prompts) - Added install.sh (macOS + Linux) - Removed references/orbitos-skills.md (no longer needed) - Updated README: 30 skills total, unified install flow Total: 9 mm* + 6 dependencies + 15 orbitos = 30 skills
11 KiB
name, description
| name | description |
|---|---|
| orbites-ai-newsletters | Curate daily AI, Online Marketing, SEO, and AI×Marketing Research news digest. For OrbitOS. Use when user says 'AI news', 'marketing news', 'SEO news', 'newsletter digest', 'what's new in AI', 'ข่าว AI', 'ข่าว marketing', 'สรุปข่าว'. |
OrbitOS: Daily News Digest — AI · Marketing · SEO · Research
Fetch, deduplicate, and rank news from 5 curated topic areas into a daily digest saved to the OrbitOS vault.
Source Configuration
🔵 AI News
| Source | URL | Type |
|---|---|---|
| TLDR AI | https://bullrich.dev/tldr-rss/ai.rss |
RSS |
| The Rundown AI | https://rss.beehiiv.com/feeds/2R3C6Bt5wj.xml |
RSS |
🟢 Online Marketing
| Source | URL | Type |
|---|---|---|
| Marketing AI Institute | https://www.marketingaiinstitute.com/blog/rss.xml |
RSS |
| HubSpot Marketing | https://blog.hubspot.com/marketing/rss.xml |
RSS |
| Search Engine Land | https://searchengineland.com/feed |
RSS |
🟡 SEO
| Source | URL | Type |
|---|---|---|
| Search Engine Journal | https://www.searchenginejournal.com/feed/ |
RSS |
| Ahrefs Blog | https://ahrefs.com/blog/feed/ |
RSS |
| Semrush Blog | https://www.semrush.com/blog/feed/ |
RSS |
| Moz Blog | https://feedpress.me/mozblog |
RSS |
| Neil Patel | https://neilpatel.com/blog/feed/ |
RSS |
🟣 Marketing & AI Research
| Source | URL | Type |
|---|---|---|
| arXiv (AI + marketing) | https://export.arxiv.org/api/query?search_query=all:marketing+AND+all:AI&sortBy=submittedDate&sortOrder=descending&max_results=10 |
API |
| Web search | Execute: web_search("AI marketing research 2026 generative AI") + web_search("marketing AI agent study 2026") |
Search |
Workflow
-
Check cache: Look for
50_Resources/Newsletters/YYYY-MM/YYYY-MM-DD-Digest.md(relative to vault root). If exists with today's date, return cached content. -
Fetch feeds (see Provider Fallbacks for exact curl commands):
- RSS sources: Use
curlvia terminal on each URL. Parse title, link, pubDate, description from XML. Fall back toweb_extractif configured. - arXiv: Use
curlon the API URL. Parse<entry>elements. - Web search: Run via
web_searchif configured; otherwise skip this section.
- RSS sources: Use
-
Classify each item into topic buckets:
ai— LLMs, GPT, Claude, agents, ML, AI toolsmarketing— digital marketing, paid ads, content strategy, brand, B2B marketingseo— search rankings, Google updates, SERP features, technical SEO, GEOresearch— academic papers, studies, surveys, reports with data/statistics
-
Deduplicate: Items with 70%+ title word overlap across sources → merge into one entry tracking all source URLs.
-
Rank within each bucket by:
- Relevance to the topic cluster
- Content creation potential (can I write a post about this?)
- Novelty (penalize if similar item in recent archives)
- Recency
-
Generate digest — bilingual Thai/English:
# 📰 Daily Digest — YYYY-MM-DD
## 🔵 AI — Top 3
- **[Title]** — 1-line summary. [Source]
→ *Angle:* content idea in Thai
...
## 🟢 Online Marketing — Top 3
...
## 🟡 SEO — Top 3
...
## 🟣 Marketing & AI Research — Top 2
...
## 💡 Content Creation Opportunities
Top 5 across all buckets ranked by post potential:
1. ...
-
Save files (all paths relative to vault root):
50_Resources/Newsletters/YYYY-MM/YYYY-MM-DD-Digest.md— curated digest50_Resources/Newsletters/YYYY-MM/Raw/— raw extracted content per source if substantial
-
Curate high-value articles → migrate to 30_Research/
- After generating the digest, scan Content Creation Opportunities and related articles
- For each article worth keeping for future content creation:
- Copy/save as
30_Research/<slug-title>.mdwith frontmattertype: article+ source URL - Remove from
Raw/folder (don't keep raw dumps there long-term) - Add a note in the Research file linking back to the digest
- Copy/save as
- The user confirmed this:
Raw/= processing cache,30_Research/= permanent collection - Pitfall: Don't let Raw/ accumulate — it's a temp folder, not an archive
- See
references/article-curation-workflow.mdfor the full process
Output Format
Manual invocation (user asks directly): Display full digest with all 4 topic sections + content opportunities.
From start-my-day cron (07:00): Return condensed list:
**📰 Morning Briefing:**
🔵 AI: [N items] — top headline
🟢 Marketing: [N items] — top headline
🟡 SEO: [N items] — top headline
🟣 Research: [N items] — top headline
Full digest: [[YYYY-MM-DD-Digest]]
Provider Fallbacks
web_extract and web_search may be unavailable (no provider configured). Primary approach is curl via terminal. Only use web_extract/web_search if they return data.
Fetch commands (preferred — curl + terminal)
# RSS feeds: curl + parse XML inline
curl -sL --max-time 15 "https://bullrich.dev/tldr-rss/ai.rss" | head -500
curl -sL --max-time 15 "https://rss.beehiiv.com/feeds/2R3C6Bt5wj.xml" | head -500
curl -sL --max-time 15 "https://www.marketingaiinstitute.com/blog/rss.xml" | head -500
curl -sL --max-time 15 "https://blog.hubspot.com/marketing/rss.xml" | head -500
curl -sL --max-time 15 "https://searchengineland.com/feed" | head -500
curl -sL --max-time 15 "https://www.searchenginejournal.com/feed/" | head -500
curl -sL --max-time 15 "https://ahrefs.com/blog/feed/" | head -500
curl -sL --max-time 15 "https://www.semrush.com/blog/feed/" | head -500
curl -sL --max-time 15 "https://feedpress.me/mozblog" | head -500
curl -sL --max-time 15 "https://neilpatel.com/blog/feed/" | head -500
# arXiv API (XML — parse <entry> elements)
curl -sL --max-time 15 "https://export.arxiv.org/api/query?search_query=all:marketing+AND+all:AI&sortBy=submittedDate&sortOrder=descending&max_results=10" | head -300
# For truncated large feeds, extract titles only:
curl -sL --max-time 15 "https://rss.beehiiv.com/feeds/2R3C6Bt5wj.xml" | grep -o '<title>[^<]*</title>' | head -15
Source Health Notes
| Source | Status | Note |
|---|---|---|
| TLDR AI | ✅ Active | bullrich.dev/tldr-rss/ai.rss — reliable, rich descriptions |
| The Rundown AI | ✅ Active | rss.beehiiv.com — HTML entities in titles ('), use grep for title extraction if truncated |
| Marketing AI Institute | ✅ Active | Blog posts weekly, HubSpot-hosted |
| HubSpot Marketing | ✅ Active | Very large feed, head -500 sufficient for recent items |
| Search Engine Land | ✅ Active | WordPress RSS, standard format |
| Search Engine Journal | ✅ Active | WordPress RSS, frequent updates |
| Ahrefs Blog | ✅ Active | Fresh content, enterprise SEO focus |
| Semrush Blog | ✅ Active | Data-driven SEO, frequent posts |
| Moz Blog | ✅ Active | Fixed in June 2026 — URL changed from moz.com/blog/feed → feedpress.me/mozblog |
| Neil Patel | ✅ Active | Marketing + SEO insights, daily posts |
| Google Search Central | ❌ Permanently broken | developers.google.com/search/blog/feed 404 — blog discontinued/unhosted as of 2026 |
| arXiv API | ✅ Active | XML Atom feed, parse <entry> elements |
| Web Search | ⚠️ Config-dependent | Requires web.search_backend configured via hermes tools |
Cron Mode Constraints
execute_codeis BLOCKED in cron mode. Use individualterminalcalls instead. Batch parallelcurlfetches as separate tool calls in one response.web_searchandweb_extractmay be unavailable if not configured at the profile level.- When a tool fails with "No provider configured", silently fall back to
curl+terminal— do not abort.
Content Creation Bridge
After generating the digest, the user may ask to write articles from the news items. When doing so, follow the Research-First approach documented in references/news-to-article.md.
Research-First: News → Article Pipeline
- Identify the source articles linked in each news item — don't write from the digest summary alone
- Read the original source articles — use
curl -sL --max-time 20withpython3 -cfor HTML text extraction; fall back tobrowser_navigatefor Cloudflare/Vercel-protected sites - Extract key data: specific numbers, quotes, mechanisms, and causal relationships
- Synthesize multiple sources into a coherent single narrative — don't just restate one article
- Write in Thai with:
- 📌 "Takeaway" callout boxes per section (labeled by topic, e.g. "GEO Takeaway", "Content Strategy Takeaway")
- Data tables with comparison columns and emoji indicators (✅/❌/🟢/🟡/🔴)
- A summary table of actionable takeaways at the end (with bulletproof reasoning column)
- Source citations at the bottom linking back to originals
- Save article to
~/vault/60_Articles/<slug>/article.mdwith title/description/date/category/tags in frontmatter - Save brief — optionally create a brief.md in the same 60_Articles// directory with the research notes and source summaries
Research fallback handling
When web_extract and web_search have no provider configured (common in this profile):
- Generic HTML articles:
curl -sL --max-time 20 "<URL>" | python3 -c "import sys,re; html=sys.stdin.read(); html=re.sub(r'<script[^>]*>.*?</script>', '', html, flags=re.DOTALL); html=re.sub(r'<style[^>]*>.*?</style>', '', html, flags=re.DOTALL); text=re.sub(r'<[^>]+>', ' ', html); text=re.sub(r'\s+', ' ', text).strip(); print(text[:15000])" - Sites with article tag: Target
<article>element specifically:re.search(r'<article[^>]*>(.*?)</article>', html, re.DOTALL)then strip tags - Cloudflare/Vercel blocked sites: Fall back to
browser_navigate+browser_snapshot(full=true)or browser_scroll for longer articles - VentureBeat: Known to have Vercel security checkpoint; always use browser tools (curl won't work)
- See
orbites-ai-productsskill for the HN Algolia API and GitHub Search API curl patterns
Thai content conventions
- Title: Hook-driven, ≤ 60 chars, includes curiosity gap or contrarian claim
- Opening paragraph: Hook that breaks reader expectation (not throat-clearing)
- Structure per section: Data table → explanation paragraph → 📌 Takeaway box
- End with: "ที่มา:" section listing all source articles as markdown links
- Avoid: generic "ในโลกดิจิทัลวันนี้" openings, artificial FAQ, keyword stuffing
Error Handling
- One source down: Skip, note in section header "(1 source unavailable)"
- All sources in a topic down: Show "⚠️ No new items today" for that section
- All sources down: Use yesterday's digest with warning
- arXiv returns empty: Skip research section gracefully
- Web search rate-limited: Use cached web results or skip
- Terminal output truncated (>50KB): Use
grepto extract key fields (titles, links) - Google Search Central 404: Skip silently, note in source summary
- Moz stale: Skip entirely unless user asks for historical SEO content