A full-featured elizaOS agent that runs on X (formerly Twitter) using two plugins:
- Grok (xAI) for text generation + embeddings —
@elizaos/plugin-xai - X API v2 for mentions, posts, and timeline interactions —
@elizaos/plugin-x
- Replies to @mentions by routing each mention through the elizaOS message
pipeline (
runtime.messageService.handleMessage(...)). - Optional automated posting via
plugin-x's built-in post loop. - Dry run mode via
TWITTER_DRY_RUN=true(no writes to X).
- An xAI API key for Grok (
XAI_API_KEY). - An X developer app with user-context write access.
- Default: OAuth 1.0a user-context credentials (
TWITTER_API_KEY,TWITTER_API_SECRET_KEY,TWITTER_ACCESS_TOKEN,TWITTER_ACCESS_TOKEN_SECRET). - Alternative: OAuth 2.0 PKCE (interactive login) with
TWITTER_AUTH_MODE=oauth. - Alternative: Eliza Cloud broker with
TWITTER_AUTH_MODE=broker— delegates OAuth to a managed service.
- Default: OAuth 1.0a user-context credentials (
cd packages/examples/twitter-xai
cp env.example .env
# edit .envStart with TWITTER_DRY_RUN=true until you've verified everything.
# from repo root (build workspace deps)
bun install
bun run build
cd packages/examples/twitter-xai
bun run startXAI_API_KEY(required)XAI_BASE_URL(defaulthttps://api.x.ai/v1)XAI_SMALL_MODEL(defaultgrok-3-mini)XAI_MODEL(defaultgrok-3)XAI_EMBEDDING_MODEL(defaultgrok-embedding)
TWITTER_AUTH_MODE—broker(default),oauth, orenv.
OAuth 1.0a user context (TWITTER_AUTH_MODE=env):
TWITTER_API_KEYTWITTER_API_SECRET_KEYTWITTER_ACCESS_TOKENTWITTER_ACCESS_TOKEN_SECRET
OAuth 2.0 PKCE (TWITTER_AUTH_MODE=oauth):
TWITTER_CLIENT_IDTWITTER_REDIRECT_URITWITTER_SCOPES(defaulttweet.read tweet.write users.read offline.access)
Eliza Cloud broker (TWITTER_AUTH_MODE=broker):
TWITTER_BROKER_TOKENorELIZAOS_CLOUD_API_KEYTWITTER_BROKER_URL(optional service URL override)
TWITTER_DRY_RUN(defaulttrue)TWITTER_ENABLE_REPLIES(defaulttrue)TWITTER_ENABLE_POST(defaultfalse)TWITTER_ENABLE_ACTIONS(defaultfalse)TWITTER_TARGET_USERS(optional comma list or*for broad engagement)
plugin-x's XService runs background clients for posting,
interactions, timeline, and discovery. Incoming mentions are routed into the
runtime via runtime.messageService.handleMessage(...) so you get the standard
state-composition → model → action pipeline.
bun run test
bun run typecheckThe test suite validates local credential-mode checks without contacting xAI or X.