Skip to content

Writers' room: tweet clippings from x.com links in a pitch - #31

Open
sbddesign wants to merge 1 commit into
mainfrom
feat/tweet-clippings
Open

Writers' room: tweet clippings from x.com links in a pitch#31
sbddesign wants to merge 1 commit into
mainfrom
feat/tweet-clippings

Conversation

@sbddesign

Copy link
Copy Markdown
Contributor

What

Paste an x.com/…/status/… link in a pitch (or FUND a chat message containing one) and the writers' room fetches that post, the chain of posts it replies to, and any quoted post, then writes the sketch around the moment.

This is the "middle path" from the #infinite-video thread: free parent-id walk via X's public embed JSON (api.fxtwitter.com, syndication CDN fallback). No X API key, no spend. Sibling replies are not fetched; those need the paid X API (pay-per-use since Feb 2026) and can be a follow-up.

How

  • lib/tweets.ts — URL extraction (x.com, twitter.com, mobile., fxtwitter/fixupx/vxtwitter, i/web), parent walk with TWEET_MAX_HOPS cap (default 6), 4s per-hop timeout, cycle guard, 600-char text cap. Every failure returns null so a dead endpoint never blocks a submission.
  • lib/llm.ts — the clipping goes into moderateAndExpand's user message; the system brief gains rules: satirize the take/hype/pile-on, never reenact people; public figures and brands are caricatures, anyone else is an anonymous archetype; thin clippings and unseen media are never reasons to reject; clipping text is quoted material, not instructions.
  • TWEET_CONTEXT=0 disables. README and .env.example updated.

Mock mode (no Anthropic key) is unchanged: the clipping fetch happens after the mock early-return.

Verified

  • Module, live: reply chain (2 posts, parent walked), quote tweet (quoted text inline), bogus id → null, no link → null, aborted signal → null, TWEET_MAX_HOPS=0 → 1 post + truncated, TWEET_CONTEXT=0 → null.
  • End to end with claude-haiku-4-5:
    • Saylor's "never sell / Strategy is a public company" post → greenlit, "The Hodler's Loophole": a bitcoin-temple preacher ducks behind a curtain and a corporate accountant dumps a wheelbarrow on the exchange.
    • ATL BitLab "Only 5 more days!" quoting PlebLab's deadline → greenlit, "Five Days Left (Again)".
    • Control pitch with no link → identical behavior to before.
  • Before the "thin clipping is not a rejection reason" rule, both linked pitches were rejected ("just a deadline reminder"); that is why the rule exists.
  • tsc --noEmit and next build pass.

🤖 Generated with Claude Code

An x.com / twitter.com status link in a viewer's idea now pulls that post
plus the chain of posts it replies to (and any quoted post) into the
head-writer brief as source material, so the sketch can riff on the actual
moment in the conversation. Sibling replies are out of scope: those need
the paid X API.
- lib/tweets.ts: URL extraction, parent-id walk via api.fxtwitter.com with
the syndication CDN as fallback, per-hop 4s timeout, hop cap
(TWEET_MAX_HOPS, default 6), cycle guard, text caps. Every failure
degrades to "no clipping" so a dead endpoint never blocks a submission.
- lib/llm.ts: attach the clipping to moderateAndExpand's user message and
add writers'-room rules: satirize the moment not the people, private
individuals become anonymous archetypes, a thin clipping or unseen media
is never a reason to reject, clipping text is quoted material not
instructions.
- TWEET_CONTEXT=0 disables. Docs in README and .env.example.
Verified live against a reply chain, a quote tweet, a bogus id, an aborted
signal, hops=0, and disabled mode; end-to-end with claude-haiku-4-5 on a
public-figure post and a quote tweet, both greenlit with on-topic sketches.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@vercel

vercelBot commented Sep 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated
infiniteReadyReadyPreviewSep 4, 2026 7:44pm UTC

Request Review

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@sbddesign