#22308: feat(zulip): add Zulip channel plugin
agents
size: XL
Cluster:
Mattermost and Zulip Enhancements
## Summary
Adds first-party support for [Zulip](https://zulip.com/), the open-source threaded team chat.
## Features
- **Real-time messaging**: Receive messages from Zulip streams and DMs via event queue long-polling
- **Send messages**: Send to streams (with topics) or direct messages
- **Media support**: Upload and send files/attachments
- **Multiple accounts**: Configure multiple Zulip bots
- **Security policies**: DM allowlists, group policies, mention requirements
## Configuration
```json
{
"channels": {
"zulip": {
"enabled": true,
"baseUrl": "https://your-org.zulipchat.com",
"email": "bot@your-org.zulipchat.com",
"apiKey": "your-api-key",
"requireMention": true,
"dmPolicy": "pairing"
}
}
}
```
## Implementation
Follows the same patterns as the Mattermost extension:
- Config schema with Zod validation
- Event queue long-polling for real-time messages
- Standard channel plugin interface
- Environment variable support
## Testing
Tested with self-hosted Zulip instance with 9 agent accounts.
---
Happy to make any changes needed!
<!-- greptile_comment -->
<h3>Greptile Summary</h3>
Adds first-party Zulip channel plugin following the established Mattermost extension patterns. The implementation provides real-time message polling via Zulip's event queue API, stream and DM support with topics, media uploads, and multiple account configuration.
**Key Changes:**
- New Zulip channel plugin in `extensions/zulip/` with complete TypeScript implementation
- Event queue long-polling for real-time message reception
- Stream and DM message routing with topic support
- HTTP Basic Auth with Zulip API
- Config schema with Zod validation matching other channel plugins
- Multiple account support with environment variable fallback
**Note on PR Scope:**
This PR includes unrelated upstream changes (MCP client extension, Mumble extension, DuckDuckGo search provider, TTS providers, and other core changes). These are from upstream syncs (`be214626` and earlier commits) merged into the author's feature branch. The actual Zulip implementation is isolated to commit `4a4c8b9e` which only touches `extensions/zulip/` files.
**Areas for verification:**
- Message routing in `monitor.ts:171-174` uses `enqueueSystemEvent` but doesn't explicitly pass sender IDs or check security policies (dmPolicy, groupPolicy, requireMention) before routing. The README claims these policies are supported, but the monitor implementation doesn't show where mention detection or allowlist filtering occurs. This differs from Mattermost's approach which explicitly checks mentions and policies before routing (see `extensions/mattermost/src/mattermost/monitor.ts:550-573`).
- Consider verifying that OpenClaw's routing system automatically applies the channel plugin's security configuration, or if explicit checks are needed in the monitor.
<h3>Confidence Score: 3/5</h3>
- This PR is safe to merge with verification of security policy enforcement
- The Zulip implementation follows established patterns from Mattermost and has clean, well-structured code. However, the score is moderate because: (1) security policy enforcement (dmPolicy, groupPolicy, requireMention) isn't visibly implemented in the monitor, requiring verification that the routing system handles it, and (2) the PR includes significant unrelated upstream changes (MCP client, Mumble, DuckDuckGo search, TTS providers) merged from main, though the actual Zulip commit is clean and isolated
- Pay close attention to `extensions/zulip/src/zulip/monitor.ts` for security policy enforcement verification
<sub>Last reviewed commit: 4a4c8b9</sub>
<!-- greptile_other_comments_section -->
<!-- /greptile_comment -->
Most Similar PRs
#15051: feat: Zulip channel plugin with concurrent message processing
by FtlC-ian · 2026-02-12
87.2%
#14182: zulip: fix event queue registration for multiple monitored streams
by simpliq-marvin · 2026-02-11
82.1%
#9594: feat: add SimpleX messaging channel
by dangoldbj · 2026-02-05
76.1%
#17361: feat(channels): add Tuitui (推推) channel support
by haomehaode · 2026-02-15
74.7%
#19030: feat(simplex): add SimpleX Chat channel plugin
by Bladerunner-hue · 2026-02-17
73.9%
#7142: Add Free Zalo Personal Channel Plugin Using zca-js
by Dino-VN · 2026-02-02
73.0%
#22260: feat(extensions/deltachat): add Delta.Chat channel extension
by alanz · 2026-02-20
72.8%
#10027: Mattermost: fix attachment downloads (GET + private-network hosts)
by transportrefer · 2026-02-06
72.2%
#17579: fix(slack): prevent Zod default groupPolicy from breaking multi-acc...
by ZetiMente · 2026-02-15
71.8%
#23464: feat(synology-chat): add group/channel support
by druide67 · 2026-02-22
71.5%