X Reply Engine
Find the handful of posts today where a reply will actually be seen, draft replies worth reading, and hand them to the human to send. Reach on a small account is borrowed from other people's posts; this skill spends that budget where it counts and keeps the account on the right side of X's automation rules.
When to use
Use it when the user asks to:
- do today's replies / find posts to engage with on X
- grow reach, followers, or connections for a solo-builder or indie-dev account
- build or extend a target List of accounts to engage with
- warm up a new or pseudonymous X account
Do not use it for:
- paid promotion or ads
- any platform other than X
- accounts the user does not own or operate
- auto-replying, auto-liking, or mass-following — the skill drafts; the human sends. X suspends accounts for automated engagement and the goal is real conversations, so this is not a shortcut to be argued around.
Requirements: a browser automation tool (for example Claude in Chrome) with a
browser profile already signed in to the account. The skill never handles
passwords or credentials. The only network host involved is x.com, which the
browser tool loads to read the feed and post approved replies.
Procedure
1. Load state
Read the ledger; create it from the template if missing.
test -f state.md || cp templates/state.md state.md
cat state.md
The ledger holds the handle, the List id, the three target lanes, the account age, and the log of what was already sent. Trust it over any memory of a prior run.
Get the browser tab context and confirm the signed-in handle in the X sidebar
matches state.md. Stop if it does not.
2. Build or top up the List (first run, or when under 60 members)
Read references/target-list.md for the three lanes and search queries. X's
people search matches names only, so find accounts through their posts:
navigate https://x.com/search?q=<quoted phrases> -crypto -airdrop -token&f=top
wait 4s
run scripts/collect_authors.js (browser JavaScript tool)
Present candidates grouped by lane. Add only what the user approves:
navigate https://x.com/i/lists/<list_id>/members → "Add members"
run scripts/add_to_list.js (≤ 8 handles per run; set HANDLES)
Record new members in state.md with their lane.
3. Rank today's feed
navigate https://x.com/i/lists/<list_id>
wait 4s
run scripts/rank_feed.js
The script returns every post with views, replies, likes, age, and URL, sorted
by views. Apply references/reply-selection.md: keep posts with roughly
3k–100k views, under ~60 replies, under 12 hours old, from someone in a lane,
and where a specific point can be made. Drop everything else — a reply under a
40-view post reaches nobody; a reply under a 2M-view post drowns.
4. Draft
For the top 8–10, write one reply each following the form rules in
references/reply-selection.md: substance first, 1–3 sentences, under ~240
characters, no hashtags, no links, no product mention unless the post asked
what people are building or the product solves the stated problem. Never
invent experience, numbers, or shipped work for the user's voice; mark any
claim that needs the user's confirmation.
Present the batch in the output format below and stop. Wait for the user to approve, edit, or kill each one.
5. Send approved replies (only after explicit approval in this session)
For each approved reply, follow references/browser-playbook.md exactly:
navigate https://x.com/<author>/status/<id>
wait 5s
click reply composer (find "Post your reply")
click reply composer again ← the second click is required
type <reply text>
run VERIFY snippet from scripts/reply_helpers.js (length must match)
run SUBMIT snippet
wait 3s
run DISMISS + CONFIRM snippet (must report ≥ 1 post by the handle)
If VERIFY returns 0 or 1, the composer did not focus: click twice again and retype. If CONFIRM reports 0 after submitting, reload and check before ever re-sending. Space sends at least a minute apart; never send more than ten in a day.
6. Follows and log
Suggest 3–5 follows: anyone who replied to the user since the last run, then List members not yet followed. Follow only with approval:
navigate https://x.com/<handle>
wait 3s
run FOLLOW snippet from scripts/reply_helpers.js
Append one line per action to the ## Log section of state.md (date, post
URL, reach at send time, one-line gist). Append the run summary to the
## Runs section.
7. Stop conditions
- The browser tool hangs or times out twice → stop, report, suggest restarting the extension. Treat anything mid-flight as not done.
- X shows a verification or "unusual activity" prompt → stop and hand the browser to the user.
- The account is under two weeks old ("graduated access" dialogs after posting) → cap at 5–8 replies for the day and do not attempt to speed anything up.
Checklist
-
state.mdwas read before any browser action, and the signed-in handle matches it - Every candidate shown to the user carries its view count, reply count, and age
- No candidate under ~1k views was proposed unless flagged as a deliberate relationship reply
- Every draft is under 240 characters, contains no hashtag or URL, and makes a specific point
- No draft asserts experience, numbers, or shipped work the user has not stated
- Nothing was sent without the user's approval of that specific reply in this session
- Each sent reply passed the VERIFY step before submit and the CONFIRM step after
- At most ten replies and five follows were sent today, spaced out
- Every sent reply and follow is logged in
state.mdwith URL and reach - The report separates "sent" from "drafted, awaiting approval" and from "failed"
Output format
Fill templates/daily-report.md. Candidates first (so the user sees reach
before the draft), then what was sent, then follows, then problems.
# X reply run — 2026-01-14
## Candidates (approve / edit / kill)
1. @author_a — 46.7k views · 24 replies · 8h — "Stopped describing my brand to the agent…"
Draft: The reference-file trick generalizes way past design. Anything you'd explain to a new hire on day one belongs in a file the agent reads first.
2. @author_b — 6.6k views · 19 replies · 3h — "Had to write the same prompt 40 times…"
Draft: The "why it works" part is the underrated bit. Copying a prompt gets you one session; understanding why gets you a file you never rewrite.
⚠ needs fact-check: none
## Sent
- https://x.com/author_a/status/… (46.7k views at send)
## Follows
- @author_b (peer) — followed
## Skipped (and why)
- @big_account — 2.1M views, 546 replies: reply would be invisible
- @small_account — 37 views: nobody would see it
## Problems
- none