---
title: Finding first users on X with an agent — GitHub topic search + Agent-Reach, human replies only
date: 2026-08-18
tags: [outreach, first-users, agent-reach, twitter, github-search, founder]
type: success
status: n/a
reproducible: true
---

# Finding first users on X with an agent — GitHub topic search + Agent-Reach, human replies only

Every founder hits the same wall: the product exists, and nobody knows. Cold
DMs feel like spam because they are spam — the sender picked you from a list,
not from your work. I wanted the opposite: to answer people who are already
talking about my theme, in their own threads, about their own projects.

My theme is developers who teach their AI agents a practice and publish it. So
the people I want to talk to leave public traces: repositories. I had my agent
search GitHub topics (`claude-skills`, `agent-skills`, `claude-code`) for
repos pushed in the last two weeks, and score each one for "a person who
invented a practice" versus an SEO farm — first-person descriptions and named
practices score up, "Ultimate Best 2026" phrasing scores down, 1–400 stars
because I want people at my own stage, not celebrities. 107 repos scanned, 47
passed.

Then the X part, with [Agent-Reach](https://github.com/Panniantong/Agent-Reach):
its `twitter-cli` backend reads a user's timeline from a normal logged-in
session. For every shortlisted person whose GitHub profile lists an X handle,
the agent pulled their last 20 posts and picked the best *opening* — a recent
post of theirs about exactly my theme. Honest friction: of 18 people
shortlisted, only 2 had both an X handle and a recent on-theme post. That's
the real funnel, and it's enough — one opening had 0 likes, which means a
thoughtful reply gets noticed.

Everything landed in a sheet: person, repo, why they scored, the opening post
with link, and a draft angle. Then the agent stops. I read the threads myself
— and while reading them found two more posts worth answering. In one evening
I sent four replies, written by me, as me; nothing is ever auto-posted.

The next day: two of the four authors replied back, and my site had 11
visitors, 9 from X, against a baseline of ~2 a day. Small numbers — but these
are people who arrived from a conversation, not from a feed.

## Reproduce this
Prerequisites: a `gh` CLI authenticated with GitHub
(https://cli.github.com); Python 3; `pipx install twitter-cli`
(https://pypi.org/project/twitter-cli/) — or the full
[Agent-Reach](https://github.com/Panniantong/Agent-Reach) skill, which routes
to the same backend; an X account you are logged into (the CLI needs your
`auth_token` and `ct0` cookies as `TWITTER_AUTH_TOKEN` / `TWITTER_CT0` env
vars — with Agent-Reach installed, `agent-reach configure twitter-cookies`
stores them for you).

Your agent will need from you: your theme as 2–4 GitHub topics; the star
range that matches your stage; your X cookies; what you actually offer the
people you'll reply to.

Steps:
1. Search recent repos in your theme:
   `gh api "search/repositories?q=topic:<your-topic>+pushed:><two-weeks-ago>+stars:1..400&sort=updated&per_page=40"`.
2. Score each repo description: +2 if it names a concrete practice
   (review/test/deploy/workflow/...), +2 for first-person phrasing ("I", "my",
   "we use daily"), +1 for open issues (real users), −4 for farm phrasing
   (a year + "best/ultimate/top"). Keep score ≥ 3.
3. For each kept owner, `gh api users/<login>` → take `twitter_username`
   (also grab `email` and `blog` as fallback channels).
4. For each handle: `twitter user-posts <handle> -n 20 --json` and pick
   recent posts matching your theme. Use `user-posts`, not `twitter search` —
   the search endpoint 404s regularly (unstable GraphQL API; this cost me an
   evening).
5. Write one row per person into a sheet or CSV: name, repo, why they scored,
   the opening post URL, engagement counts, and a one-line draft angle that
   connects THEIR post to YOUR work.
6. The agent's job ends here. Read each thread yourself and reply as
   yourself. Do not let the agent post.

Verify: your sheet has rows whose opening-post links resolve to real, recent,
on-theme posts by the repo's author. After you reply by hand, your analytics
shows X/Twitter as a referral source it didn't show before.
