#4337: fix(signal): add group-level allowlist support via groups config
docs
channel: signal
Cluster:
Signal and Discord Fixes
## 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
#18656: fix(signal): add missing groups field to Signal channel schema (#18...
by awkoy · 2026-02-16
88.7%
#5201: Signal: add group mention gating with requireMention config
by csalvato · 2026-01-31
83.9%
#11611: feat: separate group-level allowlist from sender-level command auth...
by thisnick · 2026-02-08
81.5%
#8310: feat(telegram): Add allowBots support for groups (parity with Disco...
by vishaltandale00 · 2026-02-03
78.9%
#2703: docs(groups): clarify groupAllowFrom vs groups config
by RichardFellows · 2026-01-27
77.4%
#4390: fix(whatsapp): allow media from allowlisted groups without groupAllow…
by Sarang19114 · 2026-01-30
76.4%
#7660: fix(signal): route group reactions to group sessions
by ClawdadBot · 2026-02-03
75.6%
#5665: fix: match group JIDs in groupAllowFrom allowlist
by koala73 · 2026-01-31
75.6%
#7058: feat(telegram): add channel_post handler for broadcast channels
by waifu7498173 · 2026-02-02
75.2%
#4878: fix: string/type handling and API fixes (#4537, #4380, #4373, #4547...
by lailoo · 2026-01-30
74.8%