Social Channels
Broadcast / social-feed integrations. These differ from chat channels in two ways: messages are typically public, and the agent often acts as a poster rather than a bidirectional responder.
Build note: Social channels are not included in the lean default build. To use them, build with
--features channels-full(all channels) or the specific feature flag (e.g.--features channel-twitter). Prebuilt binaries do not include these channels by default. See Channels → Overview for the full build-options table.
Bluesky (AT Protocol)
- Auth: Bluesky app-password (not your real password). Create one in settings.
- Outbound: 300-character posts; longer responses auto-thread.
- Protocol: AT Protocol via the
atrium-apicrate.
Nostr
Inbound senders are gated against the peer set resolved for the bound
agent, drawn from the peer_groups config the agent belongs to. Matching strips
a leading @ and is case-insensitive against the channel’s native sender
identifier. An empty set denies everyone; a set containing "*" accepts
anyone; otherwise only the listed external peers (and peer agents) are accepted.
This is separate from gateway pairing (gateway.require_pairing), which
authenticates HTTP/WebSocket clients, not chat-channel senders.
A peer group for nostr sets channel to nostr, lists the allowed senders in
external_peers (for nostr, the sender’s hex public key; ["*"] accepts anyone), optionally
names peer agents for cross-agent dispatch, an ignore blocklist, and an
output_modality (mirror, voice, or text). See Peer Groups
for the field reference.
Where to set this:
Gateway dashboard
Open /config/peer_groups in the web dashboard.
zerocode
In the Config pane, under Peer groups.
- Auth: raw private key (
nsecbech32 or hex). - Inbound: kind-1 (text), kind-4 (DM, NIP-04), and kind-1059 (gift-wrap, NIP-17).
- Outbound: same kinds. Zap handling is experimental.
- Relays: the agent connects to all listed relays; use 3–5 for reliability. If
relaysis omitted, ZeroClaw connects to a built-in set of popular public relays.
Twitter / X
Inbound senders are gated against the peer set resolved for the bound
agent, drawn from the peer_groups config the agent belongs to. Matching strips
a leading @ and is case-insensitive against the channel’s native sender
identifier. An empty set denies everyone; a set containing "*" accepts
anyone; otherwise only the listed external peers (and peer agents) are accepted.
This is separate from gateway pairing (gateway.require_pairing), which
authenticates HTTP/WebSocket clients, not chat-channel senders.
A peer group for twitter sets channel to twitter, lists the allowed senders in
external_peers (for twitter, the Twitter/X @username; ["*"] accepts anyone), optionally
names peer agents for cross-agent dispatch, an ignore blocklist, and an
output_modality (mirror, voice, or text). See Peer Groups
for the field reference.
Where to set this:
Gateway dashboard
Open /config/peer_groups in the web dashboard.
zerocode
In the Config pane, under Peer groups.
- Auth: Twitter API v2 OAuth 2.0 Bearer Token only.
- Inbound: mentions via the Filtered Stream endpoint.
- Outbound: posts, replies, threads.
- Caveat: the free tier is rate-limited to the point of near-uselessness. Budget accordingly.
- Auth: OAuth 2.0 with a refresh token. Generate one with a script-type Reddit app and the
passwordorcodeflow. - Inbound: new posts and comments in the configured subreddits (or all subreddits the bot has access to when
subredditsis empty), plus replies to the agent’s own posts. - Outbound: posts, comments, private messages.
Operating social channels safely
Bots on public social networks attract adversarial input. Two precautions:
- Restrict who the agent will respond to. Gate inbound senders with a peer group (per channel, above): an empty peer set denies everyone,
["*"]accepts anyone. Bluesky has no peer-group sender field; gate at the autonomy / tool layer instead. - Keep autonomy level at
Supervisedor lower. A public-facing agent inFullautonomy is effectively a public shell. For public-facing channels, restrict the tool surface in the global tool-policy config rather than expecting per-channeltools_allow(no such per-channel field exists).
Rate limits and backoff
All social channels are subject to aggressive rate limits. ZeroClaw’s outbound queue uses exponential backoff on 429 responses. If you hit persistent rate-limiting, throttle the agent’s posting cadence at the source rather than relying on per-channel streaming knobs (none of these channels expose draft-update intervals; their schema is intentionally minimal).