Files
wehub-resource-sync 426e9eeabd
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Waiting to run
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Waiting to run
Build Agent Image / build-and-push (push) Waiting to run
Chat shell gestures / Chat shell gesture + parity e2e (push) Waiting to run
ci / test (push) Waiting to run
ci / lint-and-format (push) Waiting to run
ci / build (push) Waiting to run
ci / dev-startup (push) Waiting to run
Cloud Gateway Discord / Test (push) Waiting to run
Cloud Gateway Webhook / Test (push) Waiting to run
Cloud Tests / lint-and-types (push) Waiting to run
Cloud Tests / unit-tests (push) Waiting to run
Cloud Tests / integration-tests (push) Waiting to run
Cloud Tests / e2e-tests (push) Blocked by required conditions
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Apps Worker (Product 2) / Determine environment (push) Waiting to run
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Blocked by required conditions
Deploy Eliza Provisioning Worker / Determine environment (push) Waiting to run
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Blocked by required conditions
Dev Smoke / Classify changed paths (push) Waiting to run
Dev Smoke / bun run dev onboarding chat (push) Blocked by required conditions
Dev Smoke / Vite HMR dependency-level smoke (push) Blocked by required conditions
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Waiting to run
gitleaks / gitleaks (push) Waiting to run
Markdown Links / Relative Markdown Links (push) Waiting to run
Publish @elizaos/example-code / check_npm (push) Waiting to run
Publish @elizaos/example-code / publish_npm (push) Blocked by required conditions
Publish @elizaos/plugin-elizacloud / verify_version (push) Waiting to run
Publish @elizaos/plugin-elizacloud / publish_npm (push) Blocked by required conditions
Quality (Extended) / Homepage Build (PR smoke) (push) Waiting to run
Quality (Extended) / Comment-only diff guard (push) Waiting to run
Quality (Extended) / Format + Type Safety Ratchet (push) Waiting to run
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Waiting to run
Quality (Extended) / Develop Gate (lint) (push) Waiting to run
Sandbox Live Smoke / Sandbox live smoke (push) Waiting to run
Snap Build & Test / Build Snap (amd64) (push) Waiting to run
Snap Build & Test / Build Snap (arm64) (push) Waiting to run
supply-chain / sbom (push) Waiting to run
supply-chain / vulnerability-scan (push) Waiting to run
Build, Push & Deploy to Phala Cloud / build-and-push (push) Waiting to run
Test Packaging / Validate Packaging Configs (push) Waiting to run
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Waiting to run
Test Packaging / Pack & Test JS Tarballs (push) Waiting to run
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Waiting to run
UI Fixture E2E / ui-fixture-e2e (push) Waiting to run
UI Fixture E2E / fixture-e2e (push) Waiting to run
UI Story Gate / story-gate (push) Waiting to run
vault-ci / test (macos-latest) (push) Waiting to run
vault-ci / test (ubuntu-latest) (push) Waiting to run
vault-ci / test (windows-latest) (push) Waiting to run
vault-ci / app-core wiring tests (push) Waiting to run
verify-patches / verify patches/CHECKSUMS.sha256 (push) Waiting to run
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Waiting to run
Voice Benchmark Smoke / voice bench smoke summary (push) Blocked by required conditions
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Waiting to run
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Waiting to run
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Waiting to run
Test Packaging / Build & Test PyPI Package (push) Waiting to run
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00
..

@elizaos/plugin-twitch

Twitch chat integration for elizaOS agents. Connects to one or more Twitch channels over IRC (via @twurple), receives chat messages with role-based filtering and optional @mention gating, and sends replies. Outbound send/join/leave operations route through the runtime MESSAGE action via a registered MessageConnector — this plugin registers no actions or providers of its own.

Node-only ("runtime": "node" in package.json). Not compatible with browser or mobile runtimes.

Install

bun add @elizaos/plugin-twitch

Add the plugin name to a character's plugins array, or rely on auto-enable: a twitch connector block under agent config activates the plugin automatically unless enabled: false is set.

import type { Character } from "@elizaos/core";

const character: Character = {
  name: "my-agent",
  plugins: ["@elizaos/plugin-twitch"],
};

Prerequisites

  1. A Twitch application registered at the Twitch Developer Console (provides the client ID, and a client secret if you want token refresh).
  2. An OAuth access token with chat:read and chat:edit scopes.

Configuration

Settings resolve in priority order: a per-account object in TWITCH_ACCOUNTS JSON > character.settings.twitch > top-level env vars (default account only). See src/accounts.ts (resolveTwitchAccountSettings).

Required

Variable Description
TWITCH_USERNAME Bot's Twitch login name
TWITCH_CLIENT_ID Application client ID
TWITCH_ACCESS_TOKEN OAuth token (oauth: prefix stripped automatically)
TWITCH_CHANNEL Primary channel to join (no # prefix)

Optional

Variable Description Default
TWITCH_CLIENT_SECRET Enables RefreshingAuthProvider; without it a StaticAuthProvider is used -
TWITCH_REFRESH_TOKEN Passed to RefreshingAuthProvider when the client secret is also set -
TWITCH_CHANNELS Comma-separated additional channels to join at startup -
TWITCH_REQUIRE_MENTION "true" only processes messages that @mention the bot false
TWITCH_ALLOWED_ROLES Comma-separated: all, owner, moderator, vip, subscriber all
TWITCH_ACCOUNTS JSON array/object for multi-account mode -
TWITCH_ACCOUNT_ID / TWITCH_DEFAULT_ACCOUNT_ID Select the default account when several are configured -

The same settings can live under character.settings.twitch as camelCase fields (username, clientId, accessToken, channel, additionalChannels, requireMention, allowedRoles, allowedUserIds), with a nested accounts map for multi-account configs.

Messaging operations

Twitch chat operations route through the canonical MESSAGE action with source: "twitch". The connector exposes these operations:

Operation Description
send Send a message to a Twitch channel
join Join a Twitch channel
leave Leave a Twitch channel (the primary channel cannot be left)
list_channels List the configured/joined Twitch channels

Messages over 500 characters are split at sentence/word boundaries with a 300 ms delay between chunks (splitMessageForTwitch). LLM markdown is converted to plain text before sending (stripMarkdownForTwitch); Twitch does not render markdown.

Events

TwitchService emits these runtime events (string constants on TwitchEventTypes):

Constant String value
MESSAGE_RECEIVED TWITCH_MESSAGE_RECEIVED
MESSAGE_SENT TWITCH_MESSAGE_SENT
JOIN_CHANNEL TWITCH_JOIN_CHANNEL
LEAVE_CHANNEL TWITCH_LEAVE_CHANNEL
CONNECTION_READY TWITCH_CONNECTION_READY
CONNECTION_LOST TWITCH_CONNECTION_LOST

Source layout

src/
  index.ts                        Plugin entry (default export)
  service.ts                      TwitchService — IRC lifecycle, connector handlers
  accounts.ts                     Multi-account config resolution
  connector-account-provider.ts   ConnectorAccountProvider adapter
  workflow-credential-provider.ts TwitchWorkflowCredentialProvider service
  types.ts                        Interfaces, enums, constants, utils, errors
auto-enable.ts                    Lightweight shouldEnable() for the auto-enable engine

Commands

bun run --cwd plugins/plugin-twitch build         # compile dist/
bun run --cwd plugins/plugin-twitch test          # bun test
bun run --cwd plugins/plugin-twitch format        # biome format --write
bun run --cwd plugins/plugin-twitch format:check  # biome format (check only)

License

MIT