X comment replies agent
A few posts a day in our market get a reply worth reading. A person taps Reply.
A new X account has no audience. On X the way in is replies: one useful reply under a post people in your market already read is seen by more of them than anything the account posts on its own. Finding that post every day, reading the thread, and writing something that is not a pitch takes an hour nobody has, so it does not happen.
Running on our own company since Oct 13, 2026 · X · Risk: Medium. Everything on this page is public; there is nothing to sign in for.
Tasks and outputs
What it takes on
Find the posts
Searches each lane through the X API, filters by rule (age, reply count, author, promotion words, the ledger), and offers the candidates with a score.
Write the replies
Reads each thread, writes one to three sentences per post that answer its point and add one thing, and runs the checklist on each.
Record and deliver
Writes a ledger row per reply and emails the links in one message. The next run marks each row sent or skipped.
Who it is for: Founders and small teams who want their X account to be part of a conversation in their market, one reply a day, without automating the one thing X suspends accounts for: posting the reply.
How we use it: We run it on our own new X account from October 2026: every morning, at a random minute, it writes two to five replies, each under a different post, in the two conversations we care about, founders asking how to show up in ChatGPT and Perplexity, and practitioners discussing AI search. The first two weeks are nurture only, with no product and no link in any reply. The ledger behind the run log records every reply it wrote, whether a person posted it or not.
What a reply looks like
01One to three sentences, 240 characters or fewer. The first sentence answers something specific in the post, in its own words.
02Exactly one addition: a number we measured, an observation that runs against the obvious, or a question. Not already in the thread.
03The thread’s register: length, lowercase or not, punctuation, slang. A thread of one-liners gets a one-liner.
04No link, ever. No product and no brand until 2026-10-26; after that one clause at most, in a user’s voice, promote mode only.
05None of the banned words, no em or en dash, no list, at most one emoji. No corrections, no arguments, no reply under a competitor’s ad.
06A reply that fails the checklist twice is not prefilled; the run picks another post or stops for the day.
The rules the agent’s output is written to, from the file named above. This site prints no example output; what the agent has shipped is in its run log.
Workflow
How a run goes, step by step
Pick a step to see what goes in, what comes out, and where a person is involved.
Step 1 of 6
Reconcile the ledger
Once a day, at a random minute inside a three-hour morning window, the wrapper starts and reads the replying account’s last 20 posts through the API. A row whose target one of them replies to becomes sent, with the reply’s link and impressions; one still unmatched 48 hours after it was written becomes skipped; a sent row gets one more impressions read once it is two days old.
The ledger and the account’s own posts
Settled rows
Nobody. If the account’s handle is not configured yet, the run stops and says so.
Step 2 of 6
Search two lanes
Two queries per lane, never the same two as the previous run, each a search of the last 48 hours for English posts that are not retweets or replies. The filter drops posts with no replies or more than 100, our own accounts, authors replied to in the last seven days, targets already in the ledger, and promotion words. What is left is printed with a score for recency, replies and the author’s reach.
Workflows/x-comment/queries.md and accounts.md
A list of candidate posts, or none
When nothing passes, the run stops. Three empty days in a week are the signal for a person to change the queries.
Step 3 of 6
Pick the posts and read each thread
The day’s target is drawn at random between two and five. The agent picks up to that many posts the way a person would, one per author: a founder asking a real question, or a practitioner making a point a measured number can add to; never a vendor’s ad or a thread that is already an argument. Each post and every reply under it are read through the API, for what was already said and for the thread’s register.
The candidates
Two to five posts and their threads
Nobody in this step. A day with fewer posts worth a reply gets fewer replies.
Step 4 of 6
Write each reply and check it
One to three sentences per post to the voice guide: answer the specific point, add one thing, match the thread, no link, no brand before 2026-10-26, none of the banned words, no number reused across the run. The checklist is run on each before anything is recorded; a reply that fails twice is dropped, never forced.
The threads and Workflows/x-comment/voice.md
One draft per post
Nobody; the checklist is the gate.
Step 5 of 6
Record, then deliver
A ledger row per reply is written first, dated now. Then the replies go out in one email, each as X’s own share link with the post and the text in it: opened on a phone or a computer, it shows the reply box under the right post with the reply already typed. No script touches a browser; nothing is posted by the agent.
The drafts and the post URLs
Ledger rows and one email with a link per reply
When the email cannot be sent, the links are in the run’s log on the machine. The rows are already written either way.
Step 6 of 6
A person posts; the ledger is pushed
The person opens each link, reads the reply and taps Reply, or skips it; the run does not wait. It commits and pushes the ledger, with no deploy, and writes a one-line note to its log. The next run’s reconcile records what happened, and the next deploy of the site shows it here.
The email
Posted replies, or not
Every run: the tap is a person’s. That is the design, not a gap.
Before you start
What you’ll need to bring
Company material
The numbers you can put in a reply: your own measured findings, in files the agent can read. A reply with a real number in it is the one thing nobody else in the thread has.
Source material
Two lanes of search queries for the conversations you want to be part of, and optionally a list of accounts whose posts to search directly.
Platform account
An X developer account with pay-per-use credits, for reading, and a separate replying account, signed in on the phone or browser the link is opened in and authorized once for its own reads.
Run environment
A machine that is on in the morning: Node.js for the scripts, an agent runner that follows a written workflow for the writing step, a scheduler, and an email sender. We use Claude Code under Windows Task Scheduler. No browser is needed.
Run log
Recent runs, as they happened
The full log is public and read-only. It holds every run on record, including the ones that stopped to wait for a person.
View the full run logGuides and files
Set it up yourself
The setup guide, and the files the agent is built from. You run it in your own environment, with your own accounts.
- 01
Runtime
- Node.js 20 or later, with the two dependencies installed in the scripts’ folder: the email client, and the browser driver only for the optional prefill. The API scripts have none.
- A scheduler that starts the wrapper once a day at a random minute inside a morning window, and an agent runner that follows the written workflow for the writing step — ours is Claude Code, started by Windows Task Scheduler on the founder’s machine.
- 02
Browser setup
- None for the daily run: the reply travels as a link, and the person posts from whatever X app or browser they open it in.
- Optionally, a Chrome profile used for nothing but this, with remote debugging on, for the prefill script when someone is at the machine. Never the everyday browser.
- 03
Account setup
- An X developer account with pay-per-use credits and OAuth 1.0a keys, for reading: the search, a thread, the account’s own posts. We read with the developer account and reply from a separate account.
- The replying account, signed in on the phone or browser where the link is opened: the link posts from whichever account is active there. Its API credentials come from a one-time PIN authorization of the same app and are used only to read its own posts when reconciling.
- An email sender verified in SES, and an inbox the link goes to; ours are the ones the site’s lead form already uses.
- 04
Configuration
- The query file: two lanes of search terms, the daily range (two to five replies, drawn at random each morning; never more than five), the lookback window (48 hours), the replying account’s handle, the handles never to reply to, and the address the replies are emailed to.
- An optional list of accounts whose posts are searched directly, empty for the first week and grown from what the searches turn up.
- The voice guide: length, the one-addition rule, the banned words, the no-link rule and the date before which no brand is named.
- 05
First run
- Run the search once and read what comes back; if nothing in it is a post you would reply to by hand, change the queries before anything else.
- Run the whole thing once by hand: read the email, open the link on your phone, check that the reply box holds the text under the right post, and that Reply is yours to tap.
- Post it, then run again the next day and check that the reconcile marked the row sent with the reply’s link.
x-comment.md
Workflow · Markdown. The steps: reconcile, quota, search, pick, read, write, record, deliver, report.
voice.md
Voice guide · Markdown. Length, the one-addition rule, the banned words, the no-link and no-brand rules, the checklist.
queries.md
Configuration · Markdown. Two lanes of queries, the daily range, the lookback window, the replying account, the handles never to reply to, the email address.
search.mjs
Script · Node. The reads: the two-lane search with its filter, a thread, and the reconcile that settles the ledger.
notify.mjs
Script · Node. Builds X’s share link for each row written in the run and emails them with the drafts and the targets.
ledger.mjs
Script · Node. Appends a row per reply, with the format module it shares with the website, which builds this log from the file.
run-x-comment.ps1
Scheduler · PowerShell. The daily run: reconcile, the day’s target, the writing session, the email, one commit of the ledger.
prefill-reply.mjs
Script · Node. Optional: types the reply into a dedicated Chrome for someone at the machine. Never clicks Reply.
reply-log.md
Ledger · Markdown. One row per written reply: date, lane, target, author, draft, status, reply link, impressions. The file this log is built from.
Not packaged for public download yet. The guide on the left describes what each one does, step by step, so you can rebuild the setup; the Hosted and Fully managed tiers run them for you today.
Rather have us run it?
Hosted: your accounts in a cloud browser we run, and you review what goes out. Fully managed: we set the strategy and run the agents.
Good to know
Where it stops and asks for you
- The replying account is not configured. The reconcile stops before any search: the handle goes into the query file and the account is authorized once.
- Today’s target is already met. The run stops before searching; a search costs money and could not be used.
- Nothing passed the filter, or fewer posts than the target were worth a reply. The run sends what it has, which may be nothing, and says so. It does not widen the window or lower the bar.
- The email cannot be sent. The run stops after writing the row; the link is in the run’s log on the machine. Nothing is retried.
- The link opens the wrong account. The link posts from whichever X account is signed in where it is opened. Switch accounts before tapping Reply; nothing is sent until then.
- The reply was emailed but nobody posted it. Forty-eight hours later the reconcile marks the row skipped. That is a record, not an error.
Risk notice
What to watch for
- X’s developer and automation rules are the whole shape of this agent: reads through the paid API, the reply delivered as X’s own share link, the tap a person’s. Do not add the tap. The replying account should not share a phone number with the developer account.
- A new account’s replies sit low in a thread and may be read as marketing even without a link. The first two weeks name no product; the day’s count is drawn between two and five and never exceeds five, with one reply per author per week; nothing is retried.
- Reads cost money: about half a dollar a run at 2026 prices, from the developer account’s balance. Set a monthly limit in the developer console.
FAQ
Questions about this agent
Why a link instead of posting for me?
X allows automated replies through its API only when the post’s author summoned the account, requires written approval for AI-generated replies, and lists browser automation as grounds for permanent suspension. The share link is what every “Post on X” button on the web uses; opening it and tapping Reply is a person posting.
The link opened the wrong account.
The link posts from whichever X account is signed in where it is opened. Switch to the replying account before tapping Reply; nothing is sent until the tap.
The search found nothing worth replying to.
The run emails a one-line note and stops; it never widens the window or lowers the bar on its own. Three such days in a week are the signal to change the queries, which is a person’s decision.
How does the log know whether the reply was posted?
It does not, on the day. The next run reads the account’s recent posts through the API and matches each one that replies to a ledger target; a row still unmatched 48 hours after the email is marked skipped.
Would you rather we ran this agent for you? There is a managed service for that.
Talk to us