← Back to PRs

#4337: fix(signal): add group-level allowlist support via groups config

by derekross open 2026-01-30 03:14 View on GitHub →
docs channel: signal
## Summary Fixes #4336 - Add `channels.signal.groups.<groupId>` config to allow specific Signal groups by ID - Groups listed in this config bypass the sender-level `groupAllowFrom` check - Matches the pattern used by Telegram and iMessage for group allowlists ## Changes - Add `SignalGroupConfig` type and `groups` property to Signal config schema - Add `SignalGroupSchema` to Zod validation - Add `resolveChannelGroupPolicy` check in Signal event handler - Add tests for group-level allowlist functionality - Update docs to explain `groupAllowFrom` (senders) vs `groups` (group IDs) ## Usage ```json5 { channels: { signal: { groupPolicy: "allowlist", groups: { "your-signal-group-id": {} // Allow this specific group } } } } ``` ## Testing - Added unit tests for group-level allowlist - Manually tested on live Signal instance <!-- greptile_comment --> <h2>Greptile Overview</h2> <h3>Greptile Summary</h3> This PR adds a per-group allowlist for Signal via `channels.signal.groups.<groupId>`, updates Signal config types/Zod schema, adds a group allowlist check in the Signal event handler, and documents the difference between sender allowlists (`groupAllowFrom`) vs group-ID allowlists (`groups`). The new behavior plugs into the shared `resolveChannelGroupPolicy` mechanism (already used by Telegram/iMessage/WhatsApp) so Signal can allow or block groups by ID (including `"*"` wildcard) before applying sender-level `groupAllowFrom` gating. <h3>Confidence Score: 3/5</h3> - Reasonably safe to merge once the Signal groups schema mismatch is fixed. - Core logic is small and follows existing group-policy patterns, but the current Zod schema likely rejects the documented/expected config shape (`groups: { id: {} }`), which would break the feature at runtime. Also, command authorization may not align with the new group-level allowlist semantics. - src/config/zod-schema.providers-core.ts; src/signal/monitor/event-handler.ts <!-- greptile_other_comments_section --> <sub>(2/5) Greptile learns from your feedback when you react with thumbs up/down!</sub> **Context used:** - Context from `dashboard` - CLAUDE.md ([source](https://app.greptile.com/review/custom-context?memory=fd949e91-5c3a-4ab5-90a1-cbe184fd6ce8)) - Context from `dashboard` - AGENTS.md ([source](https://app.greptile.com/review/custom-context?memory=0d0c8278-ef8e-4d6c-ab21-f5527e322f13)) <!-- /greptile_comment -->

Most Similar PRs