5.2 KiB
5.2 KiB
| name | description |
|---|---|
| daily-digest | Daily digest creation workflow - research, format, and publish to blog. Runs at 7am daily. Uses Tavily for research, formats with proper title, publishes to blog API. NO Vercel mentions ever. |
daily-digest
Orchestrator Skill - Creates and publishes the daily digest to blog.twisteddevices.com.
Purpose
Run every morning at 7am CST to:
- Research top stories in target categories via Tavily
- Extract content from top articles
- Format digest with proper title format
- Publish to blog API (NOT Vercel - no Vercel notes ever!)
- Handle duplicates gracefully
Authentication
export BLOG_API_URL="https://blog.twisteddevices.com/api"
export BLOG_MACHINE_TOKEN="21719c689a355e40b427a35c548b28699bd7c014aac4d23f5c1bbb122bbb9878"
Title Format (MANDATORY)
ALWAYS use this exact format:
## Daily Digest - <FULL_DATE>
Example: ## Daily Digest - Monday, March 2, 2026
- Day of week: Full name (Monday, Tuesday, etc.)
- Month: Full name (January, February, March, etc.)
- Day: Number (1, 2, 3, etc.)
- Year: 4-digit year (2026)
CRITICAL: This format is required - never use any other title format!
Workflow
Step 1: Check for Existing Digest
source ~/.agents/skills/blog-backup/lib/blog.sh
TODAY=$(date +%Y-%m-%d)
if blog_post_status "$TODAY"; then
echo "Digest already exists for today - delete it first"
# Get existing ID and delete
EXISTING=$(curl -s "$BLOG_API_URL/messages?date=eq.$TODAY" -H "Authorization: Bearer $BLOG_MACHINE_TOKEN" | jq -r '.[0].id')
if [ -n "$EXISTING" ]; then
blog_post_delete "$EXISTING"
fi
fi
Step 2: Research Categories
Research these 4 categories using Tavily:
- iOS/Apple AI - iOS development, Apple AI, Swift
- AI Coding Assistants - Claude Code, Cursor, AI coding tools
- OpenClaw/AI Agents - OpenClaw updates, AI agent news
- Entrepreneurship - Indie hacking, startups, side projects
Tavily search commands:
cd ~/.openclaw/workspace
./tavily-search.sh "iOS 26 Apple AI development" -n 5
./tavily-search.sh "Claude Code Cursor AI coding assistant" -n 5
./tavily-search.sh "OpenClaw AI agents updates" -n 5
./tavily-search.sh "indie hacking entrepreneurship startup" -n 5
Step 3: Extract Top Articles
For each category, extract 2-3 articles using Tavily or direct content extraction.
Target: 7-10 articles total across 4 categories
Step 4: Format Digest Content
Use this template:
## Daily Digest - <FULL_DATE>
### iOS & Apple AI News
**[Article Title]**
[2-3 sentence summary]
[Read more](URL)
---
### AI Coding Assistants
**[Article Title]**
[2-3 sentence summary]
[Read more](URL)
---
### OpenClaw & AI Agents
**[Article Title]**
[2-3 sentence summary]
[Read more](URL)
---
### Entrepreneurship & Indie Hacking
**[Article Title]**
[2-3 sentence summary]
[Read more](URL)
---
*Generated by OpenClaw*
Step 5: Publish to API
source ~/.agents/skills/blog-backup/lib/blog.sh
TODAY=$(date +%Y-%m-%d)
FULL_DATE=$(date +"%A, %B %-d, %Y") # e.g., "Monday, March 2, 2026"
# Prepend title to content
CONTENT="## Daily Digest - $FULL_DATE
$ARTICLE_CONTENT"
# Create digest
DIGEST_ID=$(blog_post_create \
--date "$TODAY" \
--content "$CONTENT" \
--tags '["daily-digest", "iOS", "AI", "Apple", "OpenClaw"]')
echo "Digest created: $DIGEST_ID"
Step 6: Handle Duplicates
BEFORE publishing, check and remove existing digest for today:
# Check for existing
EXISTING=$(curl -s "$BLOG_API_URL/messages?date=eq.$TODAY" \
-H "Authorization: Bearer $BLOG_MACHINE_TOKEN" | jq -r '.[0].id // empty')
if [ -n "$EXISTING" ]; then
echo "Deleting existing digest: $EXISTING"
curl -s -X DELETE "$BLOG_API_URL/messages" \
-H "x-api-key: $BLOG_MACHINE_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"id\": \"$EXISTING\"}"
fi
Cron Configuration
Schedule: Every day at 7:00 AM CST (America/Chicago)
Environment variables required:
export BLOG_API_URL="https://blog.twisteddevices.com/api"
export BLOG_MACHINE_TOKEN="21719c689a355e40b427a35c548b28699bd7c014aac4d23f5c1bbb122bbb9878"
export TAVILY_API_KEY="your-tavily-key" # if not auto-loaded
Common Issues
"No digest found" after posting
- The API endpoint for status check uses
/messages, not/digest - Check directly:
curl -s "$BLOG_API_URL/messages?date=eq.$TODAY"
Duplicate digests
- ALWAYS delete existing digest before creating new one
- Use the duplicate check Step 6 above
Vercel deployment issues
- NEVER mention Vercel in the digest content
- The blog is hosted on Vercel but we don't talk about that
- If there's an infrastructure issue, handle it silently
Files
~/.agents/skills/daily-digest/
├── SKILL.md # This file
└── lib/
└── daily-digest.sh # Helper functions (optional)
Usage
# Run the full workflow
source ~/.agents/skills/daily-digest/lib/daily-digest.sh
run_daily_digest
Or manually run each step following the workflow above.
REMEMBER:
- Title format:
## Daily Digest - <FULL_DATE> - NO Vercel mentions
- Delete duplicates before posting
- Use blog API (not Vercel CLI)