X reply drafter
Draft a reply or a value-add quote tweet for a specific X (Twitter) tweet from its URL.
How to use it
- Hit Copy the whole skill.
- Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
ChatGPT: make a Project and paste it into Instructions.
Neither? Paste it at the top of a new chat — it works for that chat. - Describe your job in plain words. The AI follows the skill from there.
npx degit sergebulaev/x-skills/.codex-marketplace/x-skills/skills/x-reply-drafter#main ~/.claude/skills/x-reply-drafterFor one project only, change the path to .claude/skills/x-reply-drafter.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text122 lines
X Reply Drafter
Drafts a reply in a thread, or a quote tweet, for a specific tweet. On X a reply is just a tweet posted in-reply-to another, and replies nest naturally: there is no LinkedIn-style 2-level flattening and no parent-comment URN to resolve.
When to use
- User pastes a tweet URL and says "reply to this"
- A creator replied to the user and they want to continue the thread
- User wants to quote-tweet a take and add value (not a cheap dunk)
Input
An X tweet URL (x.com/HANDLE/status/ID or the twitter.com equivalent), plus
the tweet text (and any thread context) pasted by the user, since this bundle
has no built-in tweet reader.
Output
- 1-3 reply or quote-tweet drafts, each under 280 chars
- A reply vs quote tweet recommendation with the reason
- A short context summary (who said what)
- An approval card. On approval the draft is returned as a copy-paste block.
Reply vs quote tweet
| Use a reply when | Use a quote tweet when |
|---|---|
| You are adding to the conversation in place | Your addition deserves its own reach |
| You are answering a question or engaging a creator | Your followers should see the original for context |
| You want intimacy over reach | You want reach and a take on your own timeline |
Default to a reply for direct engagement and a quote tweet when the user's point is strong enough to stand as its own post. Never quote-dunk on a small account; add value or skip it.
Steps
Voice profile first (all drafts). If ../../references/voice-profile.md has filled: yes, load it and match the user's voice fingerprint, hard rules, and CTA/link style throughout. If it is not filled, mention once that x-humanizer --mode profile can learn their voice from a few posts, then proceed with the generic voice rules.
- Parse the URL.
lib.url_parser.parse_x_url(url)returnshandle,tweet_id,canonical_url. - Read the context. Ask the user to paste the target tweet and the relevant thread above it. If the user is already in the thread, include their prior tweet.
- Decide reply vs quote tweet using the table above. Recommend one, but let the user override.
- Draft 1-3 variants using
references/reply-templates.md. If the counterpart asked a question, answer it plainly with one real detail. If they pushed back, concede then sharpen. - Humanizer pass. Scrub 2026 AI vocab by density, cap em dashes (at
most one per reply, never swap one for a period), strip reveal bridges and
sincerity openers ("not gonna lie", "let me be honest"). Leave the rhythm
alone; never insert a fragment for punch. Keep each variant under 280
chars (emoji = 2). One idea per reply. Canonical rules:
x-humanizerV3. - Approval card. Show the thread context, the variants, the reply-vs-quote recommendation, and the target URL.
- On approval. Call
lib.publish(kind="reply", draft_text=<approved>, target_url=<canonical_url>)for a reply, orkind="quote"for a quote tweet. Publora has no reply endpoint, sokind="reply"always returns a copy-paste block. Akind="quote"could in principle post a new tweet containing the original URL via Publora, but the default is still copy-paste so the user controls the embed. Paste it on X yourself.
The no-flattening note
Unlike LinkedIn (which flattens reply threads to 2 levels and needs the top-level comment URN as the parent), X nests replies naturally. There is no parent-comment URN to compute. A reply is simply a tweet you post while replying to the target tweet. This skill therefore does not walk any comment tree; it just drafts the text and hands it back for you to post in-reply.
Templates (references/reply-templates.md)
- R1 Answer-Their-Question - they asked, you answer plainly plus one real detail
- R2 Concede-Then-Sharpen - "fair, and the part I would push on is Y"
- R3 Extend-Their-Point - take their point one layer deeper with a new framing
- R4 Share-Lived-Experience - "we hit this last quarter, here is what broke"
- R5 Value-Add Quote - quote tweet that adds the missing nuance (X4 shape)
Hard rules
Global voice rules: see root SKILL.md Voice rules. Additional skill-specific
rules:
- Under 280 chars (emoji = 2). Replies are tighter than posts.
- Never paste a canned "great point!". Respond with content or do not reply.
- Do not hard-sell the user's product in a reply on someone else's tweet. Describe what they do instead.
- Never quote-dunk on a small account. Add value or skip it.
Example
User: "Reply to this: https://x.com/somebuilder/status/1790000000000000000"
Skill: parses -> handle somebuilder, tweet 1790000000000000000. Asks the user to paste the tweet. User pastes a take about pricing. Skill recommends a reply (direct engagement), drafts an R2 Concede-Then-Sharpen variant and an R3 Extend-Their-Point variant, each under 280 chars. Shows the approval card.
User: "post the first one"
Skill: returns the copy-paste block with the target URL for the user to post as a reply on X.
Files
SKILL.md- this filereferences/reply-templates.md- 5 reply/quote templates with examples
Related skills
x-post-writer- for a standalone tweet rather than a replyx-thread-builder- for a multi-tweet responsex-humanizer- scrub the reply before posting
| 1 | |
| 2 | name x-reply-drafter |
| 3 | description "Draft a reply or a value-add quote tweet for a specific X (Twitter) tweet from its URL. Use to reply in a thread, answer a creator, or quote-tweet with added value. Parses the tweet URL, reads pasted context, decides reply vs quote tweet, and drafts 1-3 variants in your voice. X has no LinkedIn-style 2-level thread flattening, so a reply is just a tweet. Publora has no reply endpoint, so the draft is returned as a copy-paste block to post yourself. Not for top-level posts (use x-post-writer)." |
| 4 | |
| 5 | |
| 6 | # X Reply Drafter |
| 7 | |
| 8 | Drafts a reply in a thread, or a quote tweet, for a specific tweet. On X a reply |
| 9 | is just a tweet posted in-reply-to another, and replies nest naturally: there is |
| 10 | **no LinkedIn-style 2-level flattening** and no parent-comment URN to resolve. |
| 11 | |
| 12 | ## When to use |
| 13 | |
| 14 | User pastes a tweet URL and says "reply to this" |
| 15 | A creator replied to the user and they want to continue the thread |
| 16 | User wants to quote-tweet a take and add value (not a cheap dunk) |
| 17 | |
| 18 | ## Input |
| 19 | |
| 20 | An X tweet URL (`x.com/HANDLE/status/ID` or the twitter.com equivalent), plus |
| 21 | the tweet text (and any thread context) pasted by the user, since this bundle |
| 22 | has no built-in tweet reader. |
| 23 | |
| 24 | ## Output |
| 25 | |
| 26 | 1-3 reply or quote-tweet drafts, each under 280 chars |
| 27 | A **reply vs quote tweet** recommendation with the reason |
| 28 | A short context summary (who said what) |
| 29 | An approval card. On approval the draft is returned as a copy-paste block. |
| 30 | |
| 31 | ## Reply vs quote tweet |
| 32 | |
| 33 | | Use a reply when | Use a quote tweet when | |
| 34 | |---|---| |
| 35 | | You are adding to the conversation in place | Your addition deserves its own reach | |
| 36 | | You are answering a question or engaging a creator | Your followers should see the original for context | |
| 37 | | You want intimacy over reach | You want reach and a take on your own timeline | |
| 38 | |
| 39 | Default to a **reply** for direct engagement and a **quote tweet** when the |
| 40 | user's point is strong enough to stand as its own post. Never quote-dunk on a |
| 41 | small account; add value or skip it. |
| 42 | |
| 43 | ## Steps |
| 44 | |
| 45 | **Voice profile first (all drafts).** If `../../references/voice-profile.md` has `filled: yes`, load it and match the user's voice fingerprint, hard rules, and CTA/link style throughout. If it is not filled, mention once that `x-humanizer --mode profile` can learn their voice from a few posts, then proceed with the generic voice rules. |
| 46 | |
| 47 | **Parse the URL.** `lib.url_parser.parse_x_url(url)` returns `handle`, |
| 48 | `tweet_id`, `canonical_url`. |
| 49 | **Read the context.** Ask the user to paste the target tweet and the relevant |
| 50 | thread above it. If the user is already in the thread, include their prior |
| 51 | tweet. |
| 52 | **Decide reply vs quote tweet** using the table above. Recommend one, but let |
| 53 | the user override. |
| 54 | **Draft 1-3 variants** using `references/reply-templates.md`. If the |
| 55 | counterpart asked a question, answer it plainly with one real detail. If they |
| 56 | pushed back, concede then sharpen. |
| 57 | **Humanizer pass.** Scrub 2026 AI vocab by density, cap em dashes (at |
| 58 | most one per reply, never swap one for a period), strip reveal bridges and |
| 59 | sincerity openers ("not gonna lie", "let me be honest"). Leave the rhythm |
| 60 | alone; never insert a fragment for punch. Keep each variant under 280 |
| 61 | chars (emoji = 2). One idea per reply. Canonical rules: `x-humanizer` V3. |
| 62 | **Approval card.** Show the thread context, the variants, the reply-vs-quote |
| 63 | recommendation, and the target URL. |
| 64 | **On approval.** Call `lib.publish(kind="reply", draft_text=<approved>, |
| 65 | target_url=<canonical_url>)` for a reply, or `kind="quote"` for a quote |
| 66 | tweet. Publora has no reply endpoint, so `kind="reply"` always returns a |
| 67 | copy-paste block. A `kind="quote"` could in principle post a new tweet |
| 68 | containing the original URL via Publora, but the default is still copy-paste |
| 69 | so the user controls the embed. Paste it on X yourself. |
| 70 | |
| 71 | ## The no-flattening note |
| 72 | |
| 73 | Unlike LinkedIn (which flattens reply threads to 2 levels and needs the |
| 74 | top-level comment URN as the parent), X nests replies naturally. There is no |
| 75 | parent-comment URN to compute. A reply is simply a tweet you post while replying |
| 76 | to the target tweet. This skill therefore does not walk any comment tree; it |
| 77 | just drafts the text and hands it back for you to post in-reply. |
| 78 | |
| 79 | ## Templates (`references/reply-templates.md`) |
| 80 | |
| 81 | **R1 Answer-Their-Question** - they asked, you answer plainly plus one real detail |
| 82 | **R2 Concede-Then-Sharpen** - "fair, and the part I would push on is Y" |
| 83 | **R3 Extend-Their-Point** - take their point one layer deeper with a new framing |
| 84 | **R4 Share-Lived-Experience** - "we hit this last quarter, here is what broke" |
| 85 | **R5 Value-Add Quote** - quote tweet that adds the missing nuance (X4 shape) |
| 86 | |
| 87 | ## Hard rules |
| 88 | |
| 89 | Global voice rules: see root `SKILL.md` Voice rules. Additional skill-specific |
| 90 | rules: |
| 91 | |
| 92 | Under 280 chars (emoji = 2). Replies are tighter than posts. |
| 93 | Never paste a canned "great point!". Respond with content or do not reply. |
| 94 | Do not hard-sell the user's product in a reply on someone else's tweet. |
| 95 | Describe what they do instead. |
| 96 | Never quote-dunk on a small account. Add value or skip it. |
| 97 | |
| 98 | ## Example |
| 99 | |
| 100 | > User: "Reply to this: https://x.com/somebuilder/status/1790000000000000000" |
| 101 | > |
| 102 | > Skill: parses -> handle somebuilder, tweet 1790000000000000000. Asks the user |
| 103 | > to paste the tweet. User pastes a take about pricing. Skill recommends a reply |
| 104 | > (direct engagement), drafts an R2 Concede-Then-Sharpen variant and an R3 |
| 105 | > Extend-Their-Point variant, each under 280 chars. Shows the approval card. |
| 106 | > |
| 107 | > User: "post the first one" |
| 108 | > |
| 109 | > Skill: returns the copy-paste block with the target URL for the user to post |
| 110 | > as a reply on X. |
| 111 | |
| 112 | ## Files |
| 113 | |
| 114 | `SKILL.md` - this file |
| 115 | `references/reply-templates.md` - 5 reply/quote templates with examples |
| 116 | |
| 117 | ## Related skills |
| 118 | |
| 119 | `x-post-writer` - for a standalone tweet rather than a reply |
| 120 | `x-thread-builder` - for a multi-tweet response |
| 121 | `x-humanizer` - scrub the reply before posting |
| 122 |