name: zulip-platform label: Zulip kind: platform manifest_version: 1 version: 1.0.0 description: > Zulip gateway adapter for Hermes Agent. Connects to a self-hosted or cloud Zulip realm via the REST API — an event queue (register + long-poll) for receiving and POST /messages for sending — relaying messages between Zulip channels (streams)/topics and direct messages and the Hermes agent. Supports topic-aware replies, native file uploads, channel-scoped allowlists, @mention gating via message flags, and home-channel cron delivery. No Zulip SDK required — uses aiohttp. author: wachtelhund requires_env: - name: ZULIP_SITE description: "Zulip realm URL (e.g. https://example.zulipchat.com)" prompt: "Zulip site URL" password: false url: "https://zulip.com/api/api-keys" - name: ZULIP_EMAIL description: "Bot email address" prompt: "Bot email" password: false - name: ZULIP_API_KEY description: "Bot API key" prompt: "Zulip bot API key" password: true optional_env: - name: ZULIP_ALLOWED_USERS description: "Comma-separated sender emails/ids allowed to talk to the bot" prompt: "Allowed users (comma-separated)" password: false - name: ZULIP_ALLOW_ALL_USERS description: "Allow any Zulip user to trigger the bot (dev only)" prompt: "Allow all users? (true/false)" password: false - name: ZULIP_HOME_CHANNEL description: "Default target for cron / notification delivery (e.g. general/hermes)" prompt: "Home channel (stream/topic)" password: false - name: ZULIP_REQUIRE_MENTION description: "Require @bot mention in channels (default true). Set false for free-response everywhere." prompt: "Require @mention? (true/false)" password: false - name: ZULIP_FREE_RESPONSE_CHANNELS description: "Comma-separated stream ids/names where @mention is not required." prompt: "Free-response streams (comma-separated)" password: false - name: ZULIP_ALLOWED_CHANNELS description: "If set, the bot only responds in these stream ids/names (whitelist)." prompt: "Allowed streams (comma-separated)" password: false - name: ZULIP_ALL_PUBLIC_STREAMS description: "Subscribe the event queue to all public streams (default false)." prompt: "Listen to all public streams? (true/false)" password: false - name: ZULIP_DEFAULT_TOPIC description: "Topic used when a target has none (default 'general')." prompt: "Default topic" password: false