Skill97 starsChanged 32 days agoApache-2.0View on GitHub
Govern X (Twitter) account work through three lanes: evidence reads, typed act plans for posting and account hygiene, and gated execution with per-act provider evidence. Nothing reaches a live timeline or mutates an account without an explicit approval recorded in the receipt.
15 other projects use a version of this.
Adopted by
Most recently taken up by
- insight68/Skillstheir own version, first seen Nov 8, 2026
- qwwiwi/agentos-skills-publictheir own version, first seen Nov 1, 2026
- eddmann/jeevestheir own version, first seen Oct 8, 2026
- hankunpeng/skillstheir own version, first seen Sep 10, 2026
- sh0wrun/skillstheir own version, first seen May 22, 2026
- Starchild-ai-agent/official-skillstheir own version, first seen May 21, 2026
Used with
Projects with it also use nano-banana-pro and github.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
szweibelSkillnano-banana-pro
Also in 3 projects that use this
NVIDIASkillgithub
Interact with GitHub using the gh CLI restricted to REST API only (no GraphQL). Use when the user wants to work with GitHub issues, pull requests, repos, releases, or Actions — especially in sandboxed environments where the GraphQL endpoint may be blocked. Trigger keywords - github, gh, pull request, PR, github issue, github actions, workflow, release, gh api.
Also in 3 projects that use this
Other versions15 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 15
- ReScienceLab/opc-skills★ 1.9ksame name
- refly-ai/refly-skills★ 204same name
- tdimino/claude-code-minoan★ 41same name
- Starchild-ai-agent/official-skills★ 32same name
- hankunpeng/skills★ 26same name
- mediause/agent-skills★ 9same name
- tomo3141592653/ayumu-oss★ 9same name
- insight68/Skills★ 5same name
- qwwiwi/agentos-skills-public★ 4same name
- The-Focus-AI/twitter-skill★ 4same name
5 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository94 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- llms.txtllms.txt
- runxSkill
- adopt-skillSkill
- agencySkill
- answer-from-docsSkill
- attention-reviewSkill
- audit-receiptSkill
- brand-voiceSkill
- business-opsSkill
- chargeSkill
- chief-of-staffSkill
- cold-outreachSkill
- content-pipelineSkill
- contract-drafterSkill
- conversation-replySkill
- conversation-reviewSkill
- crm-cleanupSkill
- cve-auditSkill
- data-storeSkill
- data-subject-requestSkill
- deep-researchSkill
- diagnose-skill-runSkill
- dispute-respondSkill
- ecosystem-briefSkill
- extractSkill
- ghostwriteSkill
- github-pr-commentSkill
- github-pr-reviewSkill
- github-syncSkill
- google-analyticsSkill
- google-calendarSkill
- google-search-consoleSkill
- governed-outboundSkill
- helpdeskSkill
- incident-commanderSkill
- issue-intakeSkill
- issue-to-prSkill
- issue-triageSkill
- knowledge-routerSkill
- lead-enrichmentSkill
- lead-qualifySkill
- least-privilegeSkill
- ledgerSkill
- list-hygiene-judgeSkill
- marketplace-invokeSkill
- meeting-followupSkill
- mock-chargeSkill
- mock-paySkill
- mock-refundSkill
- moltbookSkill
- n8n-handoffSkill
- nitrosendSkill
- nws-weather-forecastSkill
- open-meteo-weather-forecastSkill
- operator-inboxSkill
- ops-deskSkill
- organic-growthSkill
- policy-authorSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 3 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 12 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 21
Write for the operator who owns the account, the reviewer who approves a live act, and downstream skills that consume the resulting packets.
- Very specific: line 129
Every kind is consequential, so every plan sets gates.human_approval_required: true.
- Very specific: line 179
Write public content into the act params verbatim: the exact text or texts to publish, shaped by brand_context when supplied.
- Distinctive: line 188
Keep the plan small: at most 50 acts, at most 10 engagement acts, threads at most 25 segments.
- Distinctive: line 193
Never place credentials, bearer tokens, raw API dumps, or third-party personal data beyond public ids and handles in the plan.
- Very specific: line 313
Follow the plan procedure and act vocabulary above.
“Common” is measured: kept by at least 6 in 10 of the 12 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
One account, three lanes: read evidence, plan typed acts, execute an approved plan.
This is the public branded X (Twitter) catalog skill for the send-as action
family. Its core invariant: the agent may read, audit, draft, and plan freely,
but every act that publishes to a public timeline or mutates the account stops
at a human approval gate, and the sealed receipt proves which acts ran, against
which plan digest, with which provider evidence.
Write for the operator who owns the account, the reviewer who approves a live act, and downstream skills that consume the resulting packets. Keep each plan to the smallest evidence-backed act set that satisfies the objective. Existing post and user ids must come from supplied evidence, never memory or guesswork; name missing evidence as a blocker.
Composes
<!-- Generated from the native execution closure; run pnpm core-skills:composes:generate. -->data-store#append_eventdata-store#read_events
What this skill does
Five runners:
read: collect account evidence from the live API through thetwitterconnector. Queries:snapshot,posts,mentions,search,following,followers. A query withoutparams.user_idreads the authenticated account; with it, another account. The connector reads whole pages until it has at leastmax_items, keeps every item of them, and reports innext_cursorwhere a further read starts (pass it back asparams.pagination_token). Emitstwitter.evidence.v1. Read-only; no gate.read-archive: inspect one contained X archive export (tweets.js,following.js, orfollower.js) through the runtime's digest-bound artifact page seam. Twitter code receives bounded, record-complete pages and never a path or whole-file escape hatch. The runtime snapshots up to 512 MiB and this skill requests 512 KiB pages; the page size is not a total archive limit. Emits the sametwitter.evidence.v1packet; no gate.plan: turn one bounded objective plus evidence intotwitter.plan.v1, an explicit list of typed acts with rationale, using agent judgment, then bind the exact plan through nativedata.digest. This is the curated lane, for dozens of acts that each deserve a reason. A plan is a draft; it delivers nothing. The result exposestwitter_plan.dataand the matchingdigest_result.data.digestrequired byexecute; callers never calculate the digest themselves.select: the bulk lane. Apply a deterministic predicate to an archive export and emit a compact plan, no agent judgment. Use it when the criterion is mechanical and the match set runs to thousands, where a per-item rationale would be wrong and would exceed the runtime output limit. Two targets:postspagestweets.jsand emitsdelete_postacts (predicate: author, date range, engagement threshold), with identical results across page sizes;usersreads a boundedfollowing.jsbundle and emitsunfollowacts (predicate:non_mutual: truefor accounts you follow that do not follow back, needingfollower.jstoo, or an explicituser_idslist). Emitstwitter.selection.v1carrying a digest-boundtwitter_plan.execute: run the next batch of an approved plan as onetwitterconnector operation behind its own approval, sealing per-act outcomes intotwitter.execution.v1and appending one compact progress fact to a durable execution ledger. A batch is one published act (a post, reply, quote, or one thread segment), or the contiguous run of up to 50 acts of one other kind from the cursor. The approval binds that exact call. The kernel records each act's outcome as it lands and stops sending at a rate limit, so a monotonic cursor, not an accumulated id list, is enough to resume safely.
Resume and the execution ledger
execute is stateless per turn; the state lives in a data-store stream keyed
by the immutable plan digest. The latest twitter.execution.progress.v1 event
contains only the X account id the batch ran as, next_act_index,
total_act_count, an optional in-progress thread segment cursor, and a bounded
summary of the last batch. Its size is constant whether the plan has completed
two acts or two thousand.
Each batch first reads the bound account. It runs only when that account is
the plan's principal (account:@handle, any letter case) and, once the ledger
has pinned an account id, the same account every earlier batch ran as;
otherwise the run fails before anything is sent. The approval shows the
verified @handle and account id.
The driver reads only the latest ledger event (read_events, limit: 1) and
its stream version. It calls execute with that expected_version and the
canonical key twitter:<plan_digest>:v<expected_version+1>. The runner performs
the same tail read itself and refuses stale or misbound inputs before approval
or provider work. After a committed batch, the driver repeats with the new
version until next_act_index == total_act_count. It never scans history or
folds completed ids. An invalid plan, digest mismatch, stale cursor, or already
complete plan produces a sealed refusal/no-op receipt but does not append a
fake state transition.
Threads use one extra bounded cursor: each segment is its own batch, and
progress records the next segment plus the confirmed reply id until the last
one posts, so a resumed thread never reposts a confirmed segment. The operator binds
data_source_ref to durable local SQLite or another declared data-store
adapter; the skill never opens the database directly.
Each runner emits exactly one packet for its lane: typed evidence with provenance and a content digest, a curated or bulk act plan bound by digest, or provider outcomes bound to the executed plan digest and appended to the ledger.
The act vocabulary, with its consequence class:
| kind | consequence | params |
post | public_send | text |
reply | public_send | text, in_reply_to |
quote | public_send | text, quote_of |
thread | public_send | texts (ordered, max 25) |
repost | public_send | post_id |
delete_post | live_mutation | post_id |
unfollow | live_mutation | target_user_id |
mute | live_mutation | target_user_id |
block | live_mutation | target_user_id |
follow | live_mutation | target_user_id |
like | live_mutation | post_id |
Every kind is consequential, so every plan sets
gates.human_approval_required: true. follow, like, and repost are
engagement acts and share a hard cap of 10 per plan. Direct messages are
outside this skill.
A published act is confirmed by reading the post back. The other kinds are
acknowledged: X answers each with the resulting state (following: false,
deleted: true), which is the evidence, and has no read of one follow or like
cheap enough to confirm a batch. They set a state, so resending one changes
nothing. An answer that does not state the resulting state stops the cursor at
that act, and a later batch sends it again.
Post and reply text, and each thread segment, is a non-empty string of at
most 4000 characters, published verbatim; ids are X id strings. A plan that
breaks either is refused before approval.
When to use this skill
- Promote a release, publish a thread, or reply to a mention on behalf of a named principal, with content bound verbatim in the plan.
- Audit an account's own post history or following list and prune it: bulk delete old posts, unfollow low-value accounts, against operator-stated criteria.
- Gather timeline, mention, or search evidence for downstream research,
triage, or lead skills that consume
twitter.evidence.v1. - Route a
send-asplan onto X as its provider delivery lane.
When not to use this skill
- To send direct messages or manage DM conversations.
- To farm engagement: follow-churn, mass liking, coordinated reposting, or any volume pattern designed to game visibility. The engagement cap is not a budget to fill.
- To mention, reply to, or dogpile users who have not engaged with the principal, at volume.
- To operate an account the operator does not control, or to automate consumer account creation.
- To bypass the approval gate, the act caps, or the operator's spending limit on the pay-per-use API.
Procedure
For the plan runner, build twitter_plan this way:
- Hold one bounded objective. If the ask bundles unrelated jobs (a promo
thread plus a follow purge), return
needs_inputwith the split. - Ground every reference. Ids for
delete_post,unfollow,reply,quote,like,mute, andblockmust come fromevidence_jsonor an explicit operator-supplied id. If the evidence is missing or stale, name it as a blocker; never invent or approximate an id. - Write public content into the act params verbatim: the exact
textortextsto publish, shaped bybrand_contextwhen supplied. Do not plan a summary of what will be written; approval binds the exact words. - Give every act a stable
act_id(act-001onward), itskind,params, itsconsequencefrom the table, and a one-linerationaletied to the objective or the operator's stated criteria. - Apply
operator_policynarrowly. A prune criterion like "no engagement and older than 2023" selects only posts the evidence shows meet it; borderline items go toopen_questions, not into the act list. - Keep the plan small: at most 50 acts, at most 10 engagement acts, threads at most 25 segments. A larger job becomes staged plans.
- Set
decision:readywhen acts are grounded and complete;needs_inputfor missing objective, principal, evidence, or content;rejectfor asks outside the vocabulary or inside the abuse boundaries. - Never place credentials, bearer tokens, raw API dumps, or third-party personal data beyond public ids and handles in the plan.
Edge cases and stop conditions
- Mixed objective: return
needs_inputwith the runner or plan split. - Id not in evidence: blocker; the plan stays
needs_input. - Prune criteria ambiguous: select the unambiguous items, list the rest in
open_questions. - Rate limit or provider refusal during read: the read fails with the provider's reason; a read is whole or it fails.
- Oversized user-selection archive: the current two-file
usersselector refuses when either bounded text file exceeds the native read limit; it never treats truncation as an empty following/follower set.read-archiveitself remains paged. Do not claim an oversized users bulk plan was evaluated. - Rate limit during execute: nothing more is sent; the acts before it are
settled and the packet reports
next_act_index,remaining_count, and the reset time. After the reset, read the latest ledger version and invoke the next canonical batch; do not reconstruct ids. - One act refused: a refused act is recorded as
failedwith the provider's reason and the cursor moves past it. Unfollowing a deactivated account is already the state the act asked for, so it counts as done. - Plan digest mismatch on execute: the apply step refuses and executes nothing. A refusal is receipt evidence, not a fake ledger transition.
- Stale stream version or batch key: refusal before the approval/provider boundary. Re-read the one-event ledger tail and derive the canonical key.
- Partially posted thread: resume from the ledger's
active_threadcursor; never restart the thread from its first confirmed segment. - Approval missing or denied: the execute graph stops at the gate.
- No bound account: admission refuses before any provider call; bind one
with
runx credential set twitter. - Fully autonomous live posting requested:
reject; the gate is the contract.
Output schema
twitter.evidence.v1:decision(okorneeds_input),source(liveorarchive),query,account,items[](typed post or user records with metrics),item_count,truncated,next_cursor(where the next live read starts, or null),provenance(retrieved_via, the readback reference of the provider answers or the archive artifact, andcontent_digest),blockers[].twitter.plan.v1(returned astwitter_plan.datatogether withdigest_result.data.digest):decision(ready,needs_input,reject),objective,principal,acts[](act_id,kind,params,consequence,rationale),gates(human_approval_required,approval_ref),evidence_refs[], optionalcontext_bindings[](packet_digest,applied_rules[]) preserving the exact brand or taste context applied by the planner,open_questions[],blockers[],success_checkpoint.twitter.selection.v1:decision,objective,principal,predicate,matched,scanned,truncated,twitter_plan(atwitter.plan.v1),plan_digest,blockers[]. Thetwitter_planis what a driver hands toexecute, andplan_digestis bound so the approved and executed bytes are provably identical.twitter.execution.v1:decision(executed,partial,stopped,refused,noop),plan_digest,principal,results[](act_id,kind,consequence,status,provider_ref,detail) for the current bounded batch,next_act_index,total_act_count,remaining_count, optionalactive_thread,rate,blockers[], andsuccess_checkpoint. A ready batch also carries the compacttwitter.execution.progress.v1ledger delta.
Worked example
Input: objective "delete my zero-engagement posts from before 2024",
principal account:@example, evidence from
read-archive(query: posts, archive_file: data/tweets.js) showing three matching
posts, operator_policy "keep anything with replies".
Output: decision: ready; three delete_post acts, each carrying the post id
from the evidence and a rationale quoting its age and zero metrics;
gates.human_approval_required: true; one borderline post with two replies
listed in open_questions. Execution then stops at the approval gate, and the
sealed receipt binds the approved digest to the three deletions the provider
confirmed.
Inputs
read:query(required),params(user_id,q,pagination_token),max_items.read-archive:queryand relativearchive_file(required),archive_base(workspacedefault, orskillfor packaged fixtures), andmax_items.plan:objective(required),principal(required),evidence_json,operator_policy,brand_context,operator_context.select:objective(required),principal(required),target(postsdefault, orusers),archive_file(posts),following_fileandfollowers_file(users),predicate(required: posts takert_of,is_retweet,text_prefix,text_contains,max_likes,max_reposts,before_year,after_year; users takenon_mutualoruser_ids),archive_base,max_acts.execute:plan_jsonandplan_digest(required),data_source_ref(required),expected_version(required),idempotency_key(required),max_acts(acts per batch, hard-capped at 50).idempotency_keymust be exactlytwitter:<plan_digest>:v<expected_version+1>; the runner independently verifies both values against the durable one-event tail before execution.
Credentials and cost
The twitter connector declares two credentials, and the bound account's
credential decides how a request authenticates. Credentials never appear as
inputs or receipt material.
user: one JSON object holdingconsumer_key,consumer_secret,access_token,access_secret(OAuth 1.0a user context). Required for every mutation and for the authenticated account's own reads. Bind it withrunx credential set twitter --credential user --from-stdin.app: the app-context bearer token, enough forsearchand reads that name another account byuser_id. Bind it withrunx credential set twitter --credential app --from-stdin.
The X API bills per request on current plans and a post containing a link
costs a large multiple of a plain one, so prefer archive exports for bulk
history, set a spending cap in the developer portal, and let max_items and
the act caps bound each run.
Agent task contract
twitter-plan
Follow the plan procedure and act vocabulary above. Return one
twitter_plan containing decision, objective, principal, typed acts,
approval gates, evidence refs, open questions, blockers, and a truthful success
checkpoint. Every referenced post or user id must be grounded in supplied
evidence, and every public word must appear verbatim in the act params. A plan
never executes, publishes, deletes, follows, or otherwise mutates the account.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

