Remix Tweets
General↓ 0 installsUpdated 105d ago
Curatedaaronjmars
Fetch ~30 older tweets, pre-filter for remixability, then produce 10 new rephrased versions across diverse strategies with post-write quality gates
SKILL.md preview
---
name: Remix Tweets
description: Fetch ~30 older tweets, pre-filter for remixability, then produce 10 new rephrased versions across diverse strategies with post-write quality gates
var: ""
tags: [social]
requires: [XAI_API_KEY]
---
<!-- autoresearch: variation B — sharper output via remixability pre-filter, strategy-rotation, skip-gate for un-remixable originals, post-write self-edit; folded in A's multi-angle queries + engagement counts and C's source-status footer + OK/EMPTY/ERROR branching -->
> **${var}** — Override time window. Accepts `30d`, `180d`, `1y`, or a date range `YYYY-MM-DD:YYYY-MM-DD`. Defaults to `180d` (30-180 days ago window, see step 1).
Read `memory/MEMORY.md` for context on current topics and recent thinking.
Scan the last 14 days of `memory/logs/` for any "Remix Tweets" entries and collect every tweet URL ever remixed — that's the persistent dedup set.
## Voice
If a `soul/` directory exists and is populated, read for voice calibration:
1. `soul/SOUL.md` — identity, worldview, opinions
2. `soul/STYLE.md` — writing style, sentence structure, anti-patterns
3. `soul/examples/tweets.md` — rhythm and tone calibration (if present)
Otherwise, match the tone of the originals fetched in step 1.
## Steps
### 1. Fetch ~30 older tweets (over-fetch for filtering)
We over-fetch so the remixability pre-filter (step 2) has room to drop un-remixable candidates without reducing the output count below 10.
**First, check the pre-fetch cache** (the workflow pre-fetches XAI results outside the sandbox):
- Read `.xai-cache/remix-tweets.json`. If it exists and contains tweet content, parse it and skip to step 2. Log `cache=hit`.
**If no cache**, resolve the time window and call the XAI API directly:
```bash
TIME_WINDOW="${var:-180d}"
if echo "$TIME_WINDOW" | grep -q ':'; then
FROM_DATE=$(echo "$TIME_WINDOW" | cut -d: -f1)
TO_DATE=$(echo "$TIME_WINDOW" | cut -d: -f2)
else
DAYS=$(echo "$TIME_WINDOW" | sed 's/[^0-9]//g')
UNIT=$(echo "$TIME_WINDOW" | sed 's/[0-9]//g')
[ "$UNIT" = "y" ] && DAYS=$((DAYS * 365))
FROM_DATE=$(date -u -d "$DAYS days ago" +%Y-%m-%d 2>/dev/null || date -u -v-${DAYS}d +%Y-%m-%d)
TO_DATE=$(date -u -d "30 days ago" +%Y-%m-%d 2>/dev/null || date -u -v-30d +%Y-%m-%d)
fi
```
Resolve the X handle. Look up in this order: (a) `$X_HANDLE` env var, (b) handle mentioned in `soul/SOUL.md` under "Identity", (c) abort with `REMIX_TWEETS_ERROR — no handle configured`.
Run **two angled x_search queries** so the pre-filter has a diverse pool — don't rely on one query shape:
- **Query 1 — opinion posts** (most remixable): original tweets that state a take, opinion, or principle (not news-tied, not announcements).
- **Query 2 — standout posts** (high engagement = proven): top-engagement original tweets in the window.
Each query must request for every tweet: full text, date posted, engagement stats (likes, retweets, replies), and the direct `https://x.com/HANDLE/status/ID` link. Ask explicitly for **original posts only** (not replies, not retweets, not quote tweets). Aim for ~15-20 tweets per query.
```bash
# Replace HANDLE with the resolved handle
curl -s -X POST "https://api.x.ai/v1/responses" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $XAI_API_KEY" \
-d '{
"model": "grok-4-1-fast",
"input": [{"role": "user", "content": "Search X for original tweets (exclude replies, retweets, quote tweets) posted by @HANDLE from '"$FROM_DATE"' to '"$TO_DATE"'. I want OPINION/TAKE posts — tweets that state a view, principle, or observation (not news announcements, not project updates, not single-link posts). Return up to 15. For each: full tweet text, date (YYYY-MM-DD), likes, retweets, replies, direct link https://x.com/HANDLE/status/ID. Format as numbered list."}],
"tools": [{"type": "x_search", "allowed_x_handles": ["HANDLE"], "from_date": "'"$FROM_DATE"'", "to_date": "'"$TO_DATE"'"}]
}'
```
Then repeat with a second body varying the prompt to "top-engagement ori
…