Install
$ agentstack add skill-lnvestor-twitr-skills-x-presence ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
X presence — unattended posting, listening, and reply drafting
| Task | Approach | |---|---| | First-time setup | Follow Setup below in order. Do not skip the profile step — every draft depends on it. | | Run one cycle now | Jump to The cycle. Safe to run any time; it is idempotent. | | Schedule it | See references/scheduling.md — verified commands for Claude routines, Hermes, OpenClaw. | | Approve queued replies | Read .twitr/pending.md, confirm with the user, then post per step 5. | | Change voice or topics | Edit .twitr/profile.json; nothing else needs touching. |
> Every call is paid per request from the user's wallet. State the cost before any batch, > and confirm before anything over $1. Reads are free; a reply is $0.036.
What this skill will not do
These are prohibited by X's automation rules, so the tools are simply absent from the loop — not merely discouraged. If the user asks for them, explain why rather than complying:
- No automated following or unfollowing. X bans automated following that is "bulk,
aggressive, or indiscriminate", and applications that claim to get users more followers are prohibited outright. The 400/day figure is a technical cap, not permission.
- No automated liking. "You may not like posts... in an automated manner."
- No keyword-triggered auto-replies. Banned by explicit example.
- No near-duplicate posting. Same text across posts or accounts is spam.
This isn't only compliance. In X's published ranking weights, follows aren't scored at all and a like scores 0.5, while a single report scores −369.0. The banned tactics cost reach. See references/ranking-signals.md.
Setup
Run these once, in order. Report the cost of step 4 before running it.
1. Payment. Confirm the user has an x402 wallet available — AgentCash MCP is easiest, and in Claude routines its traffic is proxied so no domain allowlisting is needed. If absent, stop and tell them to connect one; nothing here works without it.
2. Voice profile. Interview the user, then write .twitr/profile.json. Ask about tone, an account whose style they like, and what they never want to say. Keep it local — never send this file anywhere.
{
"handle": "myhandle",
"topics": ["x402", "agent payments"],
"voice": {
"tone": "direct, dry, technical — no hype, no emoji",
"styleUsername": "account_whose_voice_they_like",
"doNotSay": ["game-changer", "🚀"]
},
"goal": "be known for practical agent-payment writing",
"caps": { "repliesPerDay": 10, "postsPerDay": 2 },
"monitors": {}
}
3. Connect the X account — free, wallet-signed. Credentials are relayed sealed; they are never stored by twitr.sh, never placed in a URL, and never shown to you.
POST https://twitr.sh/api/x-accounts/connect
{"username","email","password","totp_secret"?} → 202 {status:"connecting"}
GET https://twitr.sh/api/x-accounts → poll until "linked"
POST https://twitr.sh/api/x-accounts/confirm {"challenge_id","code"} # if X emails a code
4. Create the listeners — one per topic plus one for mentions. ~$4.20 per monitor per week. Tell the user the total first.
POST https://twitr.sh/api/tools/x_monitor
Idempotency-Key:
{ "action": "create", "query": "x402", "hours": 168 }
{ "action": "create", "query": "@myhandle", "hours": 168 }
Save each returned monitor_id into profile.json → monitors. Monitors need a recoverable owner wallet, so pay on Base or Tempo, not Solana.
The cycle
One pass, then stop. Scheduling is what repeats it — never loop in-session.
1. Read new events (free)
GET https://twitr.sh/api/monitors/{id}/events?after={last_event_id}
after comes from .twitr/state.json. Events are returned oldest-first; the last id you process becomes the new cursor. A monitor.expired event means the monitor ended — tell the user it needs extending and stop.
2. Shortlist — at most caps.repliesPerDay. Priority: direct mentions, then genuine questions in-topic where the user actually knows the answer. Skip anything on doNotSay territory, anything political, anything already in state.json.replied, and anything older than ~12 hours (late replies read as automated).
3. Draft (~$0.001 each — draft freely, keep the best)
POST https://twitr.sh/api/tools/compose
{ "step": "generate", "topic": "",
"goal": "", "tone": "",
"styleUsername": "",
"additionalContext": "replying to @author who said: ..." }
step is generate | refine (pass draft) | score (pass draft). Compare every draft against the last 30 posts and discard near-duplicates — repeated text is the fastest way to get filtered.
4. Split by risk
- Original posts → publish autonomously (scheduled original content is permitted).
- Replies → append to
.twitr/pending.mdwith the source post, the draft, and the cost.
Never post a reply unattended. Replies carry judgment risk and are the most visible thing the account does.
5. Publish the approved ones
POST https://twitr.sh/api/tools/x_write
Idempotency-Key:
{ "action": "post", "account": "myhandle", "text": "..." }
{ "action": "reply", "account": "myhandle", "reply_to_tweet_id": "", "text": "..." }
A 202 pending_confirmation means accepted — do not resend. If you must retry, reuse the same Idempotency-Key; a new key posts a second time and charges again.
6. Record, then report. Write the new cursor, today's counts, and replied-to ids into state.json. Tell the user in plain language what happened and what it cost.
Gotchas
Idempotency-Keyis mandatory on every write and every monitor create. A scheduler that
fires twice (a coalesced wake after sleep, a retried run) will double-post and double-charge without it. Derive the key from the event id, not from a timestamp.
target_user_idis a numeric id, never an @handle. Get it fromx_read
{"resource":"get-user","username":"..."}.
- Failed calls are not charged, but a settled call whose dispatch fails still costs. If a
write returns 202, treat the money as spent.
- A scheduled run cannot ask permission. It has no interactive channel, so step 4's split is
what makes unattended operation safe. Do not "temporarily" post replies to avoid the queue.
- Volume tools require
resultsLimitor the call is rejected before charging. - Monitors are prepaid and stop at
expires_at. They do not auto-renew, and early deletion
is not refunded — so don't create one "to test".
Avoid
- Don't run more often than hourly; there is nothing new to see.
- Don't chase follower count. Replies that start conversations are the only thing that compounds.
- Don't raise the caps because it seems to be working — that is exactly when accounts get
actioned.
- Don't post the same idea twice in different words.
- Don't stack more than 3 consecutive failures; stop and report instead.
Costs
| Item | Cost | |---|---| | Monitor, 1 week | ~$4.20 each | | Reading events | free | | Draft | ~$0.001 | | Original post | $0.036 | | Reply | $0.036 |
A typical week — 2 monitors, 12 replies, 5 posts — is about $9.
References
references/scheduling.md— read when the user wants this to run unattended. Verified
commands for Claude Code routines, Hermes cron, and OpenClaw cron.
references/ranking-signals.md— read when the user asks what actually grows an account,
or pushes for follow/like automation. Published weights with provenance and caveats.
references/x-rules.md— read when the user asks why something is disallowed, or asks for
a prohibited action.
Full API: https://twitr.sh/skill.md · https://twitr.sh/docs
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: lnvestor
- Source: lnvestor/twitr-skills
- License: MIT
- Homepage: twitr.sh
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.