DMing the people who liked or reposted your post

A post that does well leaves hundreds of people who liked or reposted it and were never followed up. This page turns them into a short list the owner knows is worth it, writes each one a DM that opens on why they're on the list, and sends them through the queue as dms.

This is outbound DMs. Reading the inbox and answering people who are waiting is dmInbox.md.

Run it from a fresh context

Say: "go on docs/useCases/twitter/engagerDms.md for <post url>, pitching <what>". The agent then reads this page and README.md and runs the steps.

The steps

#StepToolDone when
0Session checktwitterSessionCheckloggedIn
1Who liked and reposted the post. X only shows likers of your own post to your own sessiontwitterNotifications { account, type: "likes", post } and again with type "reposts" (the account's own session, free; notifications.md); treg's likers read for anything older than the notifications reachthe list, with each person's user id
2Score them: their bio matches who you want, they reposted (a bonus) or engaged with more than one post, and a sensible follower count. Few followers and no bio is a bottreg's X profile reada ranked list
3The owner checks the top of the list: drop the team, people they don't want to contact, and friends (friends get a personal note, not a template)a tablethe owner's corrections applied
4Check for an existing thread with each person, and DMs already waitingtwitterDms { account, limit: 200 }no one gets a cold template where a chat already exists
5Write each DM the cold DM way below: their own tweet forwarded first, then one informal linehouse stylepasses twitterQueueCheck
6Queue as dms: targets are {handle, user_id, text}, action: "dm". Approve, plan, run liveREADME queue steps, twitterQueueBuild { action: "dm" }finished

How a cold DM opens

The first message is the opener and nothing else: always relevant to them, never an ask. No pitch, no "you using <tool> yet", no call, no link to the owner's own stuff. Going in for the kill on a first message is what a template does. The ask comes later, once they've answered and there's a conversation. voice fails a first message with an ask in it (opener only).

Never open cold with a line built from their bio. Build the context of the conversation from what they posted:

  1. Find one of their own recent tweets that's relevant (an original post, not a reply or a repost), with treg's posts read for that handle.
  2. Forward it into the DM: the tweet's link goes first, so X shows it as a card in the chat.
  3. Then one informal line: "saw this", then what's true about how you're connected ("also saw we follow each other but never chatted", or "saw you followed me but we ain't chatted yet" when you don't follow them back; check with twitterFollows), then something brief and true about their tweet. Stop there: no ask.
  4. No usable original tweet: use what else they've been posting or reposting lately (treg's posts read gives replies and reposts too), or that they reposted the owner. With nothing relevant to them at all, don't message them yet: a generic opener could go to anyone, and the gate fails it.

Never: "saw you're <bio thing>", their name, made-up camaraderie, or "thanks for following".

https://x.com/<them>/status/<id> saw this and noticed we follow each other but haven't spoken 4249 live ads for one product is insane

hey we follow each other and havent had a chat yet been seeing you share all the world model stuff genie 4 looked mad

What to know

  • A DM only lands if the person accepts DMs from accounts they don't follow. X answers otherwise, and the queue logs it and moves on.
  • Some chats live in X's encrypted Chat. twitterDms reads them once the account's X Chat PIN is saved, and step 4 must include them: a person you already talk to in X Chat never gets a cold template. A send still goes out as an old-style DM, which shows in their X Chat too.