packages/examples/twitter-xai/README.md
A full-featured elizaOS agent that runs on X (formerly Twitter) using two plugins:
@elizaos/plugin-xai@elizaos/plugin-xruntime.messageService.handleMessage(...)).plugin-x's built-in post loop.TWITTER_DRY_RUN=true (no writes to X).XAI_API_KEY).TWITTER_API_KEY,
TWITTER_API_SECRET_KEY, TWITTER_ACCESS_TOKEN,
TWITTER_ACCESS_TOKEN_SECRET).TWITTER_AUTH_MODE=oauth.TWITTER_AUTH_MODE=broker —
delegates OAuth to a managed service.cd packages/examples/twitter-xai
cp env.example .env
# edit .env
Start 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 start
@elizaos/plugin-xaiXAI_API_KEY (required)XAI_BASE_URL (default https://api.x.ai/v1)XAI_SMALL_MODEL (default grok-3-mini)XAI_MODEL (default grok-3)XAI_EMBEDDING_MODEL (default grok-embedding)@elizaos/plugin-xTWITTER_AUTH_MODE — env (default), oauth, or broker.OAuth 1.0a user context (TWITTER_AUTH_MODE=env):
TWITTER_API_KEYTWITTER_API_SECRET_KEYTWITTER_ACCESS_TOKENTWITTER_ACCESS_TOKEN_SECRETOAuth 2.0 PKCE (TWITTER_AUTH_MODE=oauth):
TWITTER_CLIENT_IDTWITTER_REDIRECT_URITWITTER_SCOPES (default tweet.read tweet.write users.read offline.access)Eliza Cloud broker (TWITTER_AUTH_MODE=broker):
TWITTER_BROKER_URLTWITTER_DRY_RUN (default true)TWITTER_ENABLE_REPLIES (default true)TWITTER_ENABLE_POST (default false)TWITTER_ENABLE_ACTIONS (default false)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.