Files
moreminimore-service-system/skills/orbitos/orbites-ai-newsletters/SKILL.md
Kunthawat Greethong ddac3f187c Merge OrbitOS into project — one install, everything ready
- 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
2026-07-02 10:13:46 +07:00

11 KiB
Raw Blame History

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

  1. 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.

  2. Fetch feeds (see Provider Fallbacks for exact curl commands):

    • RSS sources: Use curl via terminal on each URL. Parse title, link, pubDate, description from XML. Fall back to web_extract if configured.
    • arXiv: Use curl on the API URL. Parse <entry> elements.
    • Web search: Run via web_search if configured; otherwise skip this section.
  3. Classify each item into topic buckets:

    • ai — LLMs, GPT, Claude, agents, ML, AI tools
    • marketing — digital marketing, paid ads, content strategy, brand, B2B marketing
    • seo — search rankings, Google updates, SERP features, technical SEO, GEO
    • research — academic papers, studies, surveys, reports with data/statistics
  4. Deduplicate: Items with 70%+ title word overlap across sources → merge into one entry tracking all source URLs.

  5. 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
  6. 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. ...
  1. Save files (all paths relative to vault root):

    • 50_Resources/Newsletters/YYYY-MM/YYYY-MM-DD-Digest.md — curated digest
    • 50_Resources/Newsletters/YYYY-MM/Raw/ — raw extracted content per source if substantial
  2. 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:
      1. Copy/save as 30_Research/<slug-title>.md with frontmatter type: article + source URL
      2. Remove from Raw/ folder (don't keep raw dumps there long-term)
      3. Add a note in the Research file linking back to the digest
    • 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.md for 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 (&#39;), 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/feedfeedpress.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_code is BLOCKED in cron mode. Use individual terminal calls instead. Batch parallel curl fetches as separate tool calls in one response.
  • web_search and web_extract may 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

  1. Identify the source articles linked in each news item — don't write from the digest summary alone
  2. Read the original source articles — use curl -sL --max-time 20 with python3 -c for HTML text extraction; fall back to browser_navigate for Cloudflare/Vercel-protected sites
  3. Extract key data: specific numbers, quotes, mechanisms, and causal relationships
  4. Synthesize multiple sources into a coherent single narrative — don't just restate one article
  5. 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
  6. Save article to ~/vault/60_Articles/<slug>/article.md with title/description/date/category/tags in frontmatter
  7. 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-products skill 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 grep to 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