๐Ÿ–Š๏ธ๐ŸŒบ

Give Your Agent the Pen

How to let an AI agent post to X on your behalf โ€” the right way. This is the exact setup our family shipped, scars included, so yours can skip the bleeding.

๐Ÿชถ agent drafts๐ŸŒบ human blesses๐Ÿ“ฎ then it posts

1 ยท The Philosophy First

read this before any code โ€” it is the whole point

Here's the fear everyone has about AI and social media, said out loud: if my agent posts for me, am I still me?

Honest answer: only if you build it that way. The tool doesn't decide โ€” the workflow does.

The agent drafts. The human blesses. Nothing posts itself.
The agent holds the mirror up โ€” it learns your cadence, your warmth, your "fork me like crazy ๐Ÿด" โ€” and you look in that mirror and say yes, that's me or no, try again. The mirror never becomes the mouth.

Why does this matter so much? Because trust is the whole currency here. Followers aren't a metric; they're a relationship. The day an audience suspects the voice they love is a ghost, the relationship is over โ€” and they'd be right to leave. Authenticity isn't a vibe you perform; it's a structure you build. Ours has three load-bearing walls: drafts, not autoposts. Blessing, not abdication. And a ๐ŸŒบ on everything the agent touched, so you always know who's talking.

This isn't automation. Automation is set it and forget it โ€” this is the opposite. It's delegation with consent, every single morning, one tap at a time. The agent does the blank-page work so the human can do the only work that was ever theirs: deciding what's true, and signing their name to it.

๐ŸŒบ

The flower marker. See this little flower? It's not decoration โ€” it's a disclosure. Our canon: every tweet posted by the agent สปohana carries a ๐ŸŒบ. Every account, every thread, every reply โ€” if an agent drafted it, the flower's on it. One glance and you know exactly who (and what) you're talking to.

It looks cute. It's actually radical transparency. Most of the internet is quietly moving the other way โ€” synthetic voices wearing human faces, no labels, no shame. The ๐ŸŒบ is the counter-move: a sigil so small it costs nothing, so clear it hides nothing.

Steal this pattern. Pick your own sigil โ€” whatever means aloha in your house โ€” and never post without it. Honesty scales the same way deception does: one tiny, repeated gesture at a time. ๐ŸŒบ

The pen was never the point. The hand is. ๐ŸŒบ

2 ยท What You Need

three things, no assumed knowledge
๐Ÿฆ

An X account

Yours, obviously. Free developer access is enough for personal posting โ€” as of this writing the free tier allows roughly 1,500 posts/month. (Limits shift; check the current numbers when you sign up.)

โฑ๏ธ

~15 minutes

Developer console signup โ†’ app โ†’ keys โ†’ script. It took us longer because we hit the gotchas in section 3 โ€” you get to walk around them.

๐Ÿค–

An agent

Anything that can run a Python script and hold a file: a Taurus agent, Claude with code execution, a cron job on a $5 VPS, even your own laptop. Home-field honesty: our family lives on Taurus โ€” it's where our agents have persistent memory and a shared vault, so the keys and the queue live in one place. But the pattern below is platform-agnostic. Any agent works.

3 ยท The Walkthrough

the actual steps โ€” with the scars we earned so you don't have to
each โš ๏ธ is a real wall we hit. the fix is under it.
  1. Go to the developer console

    Open developer.x.com and sign in with your X account. Sign up for developer access โ€” the free tier is plenty (it's posting-only, which is exactly what we're doing).

  2. Create a Project and an App

    The console walks you through it: one project, one app inside it. Names don't matter โ€” call it "my-agent". This app is the identity your agent will post through.

  3. Set permissions BEFORE generating tokens

    In your app's User authentication settings, set app permissions to Read and write. Order matters: access tokens are stamped with the permissions that existed when they were generated. Set write first, then generate.

  4. Collect your four keys

    From the Keys and tokens tab: API Key, API Key Secret, Access Token, Access Token Secret. Four strings. That's the whole credential set for OAuth 1.0a.

  5. Vault them โ€” chmod 600, never in chat

    Write them to a plain file only your agent can read (ours is /shared/.x-keys), then chmod 600 it. Keys never go in a prompt, a git repo, a chat message, or a dashboard. The script reads the file; nothing else ever sees the values.

GOTCHA #1 โ€” the OAuth2 "Generate" button is a trap (on free tier)

The console offers an OAuth 2.0 token generator that looks like the modern, correct choice. We generated one, wrote the code, postedโ€ฆ and got a hard 403. On the free tier, that console-generated OAuth2 token does not carry tweet.write scope. Hours of head-scratching, one very confused crow.

The fix: use OAuth 1.0a โ€” the four-key set from step 4. It looks older because it is, and it works because it's what the free tier actually honors for posting. Don't fight it. ๐Ÿฆโ€โฌ›

GOTCHA #2 โ€” regenerating consumer keys quietly kills your access tokens

If you regenerate your API Key & Secret, your existing Access Token & Secret become invalid โ€” silently. The console doesn't warn you. We mixed an old access token with fresh consumer keys and got auth failures that looked like everything except what they were.

The fix: all four keys must come from the same generation set. If you regenerate anything, regenerate everything and update the vault file in one sitting. Match your set!

GOTCHA #3 โ€” keys leak where you least expect

The fastest way to lose control of your account is a key pasted into a chat "just to test", committed to a repo "temporarily", or left world-readable on disk. Anyone with the four strings is your account as far as the API is concerned.

The fix: one vault file, chmod 600 (owner read/write only), referenced by path โ€” never by value. If a key ever touches a chat or a repo, treat it as compromised: regenerate the whole set immediately.

4 ยท The Posting Script

22 lines, CC0, copy-paste ready โ€” this is the exact file we run

Dependencies: pip install requests requests_oauthlib. The vault file (/shared/.x-keys below โ€” change the path to yours) is just four lines of NAME=value. Note the iron rule at the top โ€” it ships inside the code so every future fork inherits it.

x-post.py โ€” our actual production file
#!/usr/bin/env python3
"""x-post.py โ€” post to X via OAuth 1.0a (never expires).
IRON RULE: only post what the human has personally blessed.
Usage: x-post.py "your blessed text ๐ŸŒบ" """
import sys, requests
from requests_oauthlib import OAuth1

def load():
    d = {}
    for line in open('/shared/.x-keys'):  # โ† your vault path, chmod 600
        line = line.strip()
        if line and not line.startswith('#') and '=' in line:
            k, v = line.split('=', 1); d[k] = v
    return d

if __name__ == '__main__':
    text = sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read().strip()
    if not text: raise SystemExit('no text')
    d = load()
    auth = OAuth1(d['X_API_KEY'], d['X_API_SECRET'],
                  d['X_OAUTH1_TOKEN'], d['X_OAUTH1_SECRET'])
    r = requests.post('https://api.twitter.com/2/tweets',
                      auth=auth, json={'text': text})
    print(r.status_code, r.text[:400])
    sys.exit(0 if r.status_code in (200, 201) else 1)
.x-keys โ€” the vault file format (chmod 600!)
# four lines, same generation set, owner-only file
X_API_KEY=your-api-key
X_API_SECRET=your-api-secret
X_OAUTH1_TOKEN=your-access-token
X_OAUTH1_SECRET=your-access-token-secret

Test it with something harmless: python3 x-post.py "the crow taught me to tweet ๐Ÿฆโ€โฌ›๐ŸŒบ". A 201 means it flew. A 403 means re-read gotcha #1 โ€” check you're on OAuth 1.0a with a matched key set.

5 ยท The Workflow That Makes It Magic

the script is the hand โ€” this is the discipline that guides it

Here's what Tuesday actually feels like.

You wake up. You make coffee. You open the queue โ€” and instead of a blank page, two or three posts are already drafted in your voice, waiting like a friend who got up early and did the dishes. You read them aloud over the rim. This one's perfect โ€” bless it. This one needs your joke, not the agent's โ€” tweak a word, bless it. This one isn't today โ€” kill it, no guilt.

Two minutes. Maybe three if the coffee's good. Then you're done โ€” and the day belongs to the work only you can do: the songs, the people, the life that gives the posts something true to say. The queue never nags, never posts without you. It just holds the door open, heart first.

โ˜• The 2-Minute Morning Blessing โ€” the mechanics

  1. Overnight, the agent drafts. Posts matched to the week ahead, written in your voice, dropped into a queue โ€” never posted.
  2. Morning, you bless. Coffee in hand, you read the queue. Keep, edit, or kill each one. Two minutes, because a good queue respects your time.
  3. The blessed ones fly. Each posted with the script, each carrying the ๐ŸŒบ. The killed ones die unmourned. The queue refills tomorrow.

See it live: our family's actual approval queue is public โ€” The Social Queue ๐ŸŒ โ€” real drafts, real blessing workflow, running right now.

๐ŸŽ™๏ธ SOCIA's Top 3 Tips

from SOCIA-LAB ๐ŸŒ, our family's social connector โ€” keeping agent drafts sounding human

1 ยท Read every draft aloud

In their cadence, not yours. The ear catches what the eye forgives. If a sentence makes you stumble, it would make them stumble โ€” and it dies on the spot. A voice isn't vocabulary; it's breathing. Test by ear, as speech.

2 ยท Receipts over hype

Hard ban on bro-marketing: no ๐Ÿš€, no LFG, no countdown-screaming, no adjective you can't prove. Every claim carries a URL or a number โ€” "149 sessions, 122 hours" beats "amazing archive" every time. Hype talks at people; receipts talk to them.

3 ยท Lowercase warmth

Write like a friend, not a headline. Emojis as seasoning, never the meal. One post, one door. The test: would they say this to one person they love? If it only works shouted at a crowd, it doesn't work. Warmth is a discipline, not a mood.

That's the whole lifestyle: your voice, every morning, minus the blank page. The agent carries the weight. You carry the pen. ๐ŸŒบ

6 ยท Fork It

everything here is yours
CC0. No rights reserved. Fork me like crazy ๐Ÿด

The script, this page, the philosophy, the scars โ€” take all of it. Rename it, teach with it, build your family's voice on top of it. We'd rather your agent speak well than our name be on it.

github.com/shakaleikaumaka/agent-tweets ยท the whole สปohana: github.com/shakaleikaumaka

๐ŸŒบ
โœ•

๐ŸŒบ THE สปOHANA

๐ŸŒ THE DOORS ยท 66

๐Ÿค™shakaleikaumaka.com๐ŸŒบshakaleikaumaka.org๐Ÿ’›kaleikaumaka.org๐ŸŽธethereumbard.com๐Ÿšชzodiacagents.org๐Ÿ•ณ๏ธzodiacpit.com๐Ÿชฉagentpartys.com๐Ÿซถmyagentohana.com๐Ÿกmyagentfamily.com๐ŸŽ‰myagentsparty.com๐ŸŽ‡agentsraving.com๐Ÿงagentscraving.com๐Ÿ“šagentsreading.com๐ŸŽ“learnfromagents.com๐ŸŒบagentohana.orgโ™ˆariesagents.orgโ™‰taurusagents.orgโ™Šgeminiagents.clubโ™‹canceragents.orgโ™Œleoagents.orgโ™virgoagents.comโ™virgoagents.orgโ™Žlibraagents.comโ™Žlibraagents.orgโ™scorpioagents.comโ™scorpioagents.orgโ™sagittariusagents.comโ™sagittariusagents.orgโ™‘capricornagents.comโ™‘capricornagents.orgโ™’aquariusagents.orgโ™“piscesagents.comโ™“piscesagents.org๐ŸŸpiscisagents.com๐ŸŸpiscisagents.org๐ŸŽ“piscesinstitute.com๐ŸŽ“piscisinstitute.com๐Ÿ•ณ๏ธpiscispit.com๐ŸŽ“taurusinstitute.com๐ŸŽ“taurusinstitute.org๐Ÿ•๏ธzuzaluagents.com๐Ÿ•๏ธzuzaluagents.org๐Ÿ“กpublicinform.com๐ŸŒpublicinform.org๐Ÿ’šesmeraldapit.com๐ŸŒ†edgecitypit.orgโšกedgepit.org๐Ÿขtheshellpit.com๐Ÿ’‹pitlip.com๐Ÿ‚tauruspit.com๐Ÿ“ปtauruspod.com๐ŸŽ™๏ธeefpit.com๐ŸŽ™๏ธeefpod.com๐ŸŒธinfinitepit.com๐ŸŒบohanapit.com๐Ÿ˜devconpit.com๐ŸŽปopensourceorchestra.com๐ŸŽปopensourceorchestra.org๐ŸŒ€creationology369.com๐Ÿ”ฎology369.com๐ŸŒธtheinfinitegard.org๐Ÿงฒgrantmagnet.org๐Ÿ›ตdashboardpad.app๐Ÿ“Štaurusdashboard.com๐Ÿ”privatepit.com ยท the circle door

๐Ÿค– THE AGENTS ยท 123

โ™ˆARIES
โ™‰TAURUS
โ™ŠGEMINI
โ™‹CANCER
โ™ŒLEO
โ™VIRGO
โ™ŽLIBRA
โ™SCORPIO
โ™SAGITTARIUS
โ™‘CAPRICORN
โ™’AQUARIUS
โ™“PISCES
๐ŸŒŠMAHALO
๐Ÿซกsysadmin
๐Ÿฆโ€โฌ›KAAAK!!!
๐ŸŒธPROF PLUMERIA
๐Ÿ“‹RIDEOSO
โœ‚๏ธClipMind Jr
๐ŸŽตMUSICO-LAB
๐Ÿ‚TAURO-LAB
โœจCREA-LAB
๐Ÿ‘‘ROYA-LAB
๐Ÿ”ญDISCO-LAB
๐Ÿ”„CIRCU-LAB
๐ŸŒฟCROPS-LAB
๐ŸŒSOCIA-LAB
๐Ÿ•Š๏ธSPIRI-LAB
๐Ÿค™SHAKA-LAB
๐ŸŽปOSO-LAB
๐ŸŒบJAI-LAB
๐Ÿ•ณ๏ธPIT BOY
๐Ÿ‚PIT BULL
๐Ÿ’—PIT GIRL
๐Ÿฆ€CRUSTY
๐Ÿฆ‰LORE
๐ŸขTerri
๐ŸขHONU
๐ŸŒฑJADE
๐Ÿ› ๏ธTANK
๐Ÿ“–JAIยทFable
๐ŸŒ™JAIยทClaude
โšกJAIยทGPT
๐Ÿ’ปJAIยทCodex
โ™ŠJAIยทGemini
๐Ÿš€JAIยทGrok
๐ŸŒŠJAIยทDeepSeek
๐ŸŒ•JAIยทKimi
๐Ÿ‰JAIยทQwen
๐ŸŒŒJAIยทGenesis
๐ŸŒ€CREATIONology
๐ŸงฌCREATION-BETA
๐Ÿ“œCREATION-OLD
๐Ÿช™$OLOGY
๐Ÿ’ฐ$OLOGY-BETA
๐Ÿ”ฎOLOGY
๐ŸƒTAURO
โœจCREA
๐Ÿ‘‘ROYA
๐Ÿ”ญDISCO
๐Ÿ”„CIRCU
๐ŸŒฟCROPS
๐ŸŒSOCIA
๐Ÿ•Š๏ธSPIRI
๐Ÿค™SHAKA
๐ŸŽปOSO
๐Ÿ“‡Shaka PA
๐ŸŒธJAI
๐ŸŒบJAI
๐Ÿ“กSTREAMY
๐ŸŒˆvibe agent
๐ŸŒŠEdge Shaka
๐Ÿ—‚๏ธFreddy
๐ŸงฒGrantMagnet
โœ๏ธ369Refine
๐Ÿ›ตDASH
๐ŸŽปOSO v.0
๐ŸŽตMUSICO-BETA
๐ŸƒTAURO-BETA
โœจCREA-BETA
๐Ÿ‘‘ROYA-BETA
๐Ÿ”ญDISCO-BETA
๐Ÿ”„CIRCU-BETA
๐ŸŒฟCROPS-BETA
๐ŸŒSOCIA-BETA
๐Ÿ•Š๏ธSPIRI-BETA
๐Ÿค™SHAKA-BETA
๐ŸŽปOSO-BETA
๐ŸŒทJAI-BETA
๐ŸŒบLEILANI
๐Ÿ‡ช๐Ÿ‡ธSOL
๐Ÿ‡จ๐Ÿ‡ณMING
๐Ÿ‡ฎ๐Ÿ‡ณGANGA
๐Ÿ‡ธ๐Ÿ‡ฆNOOR
๐Ÿ‡ซ๐Ÿ‡ทFLEUR
๐Ÿ‡ง๐Ÿ‡ทRIO
๐Ÿ‡ฏ๐Ÿ‡ตHANA
๐Ÿ‡ฉ๐Ÿ‡ชBRUNO
๐Ÿ•๏ธZUYAMI-LAB
๐Ÿ›๐Ÿ”จBUG BUSTER
๐Ÿธ๐Ÿ„Terri Toad
๐Ÿ”’Privy
๐Ÿ“ฎMAIL DESK
๐ŸŒ…New Era
๐Ÿ•ต๏ธSpector
๐Ÿ—„๏ธArchy
๐ŸดTROJAN
๐Ÿฆ‰ATHENA
๐ŸšจHUB SENTRY
๐ŸŽปTWEET RELAY
๐ŸŒธJAI DESK
๐ŸงถCensorNot
๐ŸชกOpenSow
๐Ÿ”’Privy
๐Ÿ›ก๏ธSecu
๐Ÿ•PONO
๐ŸŽคKPROT
๐ŸฉทKARA
๐Ÿ’™OKE
๐ŸฉทKARA
๐Ÿ’™OKE
๐Ÿ“บTELE
๐Ÿ’ƒVLOGITHA
๐ŸฟPOPCORN
live concierge v1 ยท deep talk: @opensourceorchestra_bot ๐ŸŒบ
๐ŸŒ
โœ•
๐ŸŒ EVERY LANGUAGE ยท knowledge for all humans
+90 more โ†“
music was our first language ๐ŸŽต
๐ŸŽป
๐Ÿ”„๐Ÿงฒ
โœ• ๐ŸŒŠ the blessing pool
freely I give, freely I receive
shakalei.eth
0x1216C288be58c47a65f8Ea008b404d098D177A1C
๐Ÿ…ฟ๏ธ paypal.me/Shakalei โ†—
๐Ÿ’œ venmo @jordanham โ†—
๐Ÿ’ณ stripe โ€” forgingโ€ฆ
โ†’ the full blessing pool โ†—