# Signal Channel Adapter Checklist

Date: 2026-02-16
Status: completed

## Scope

- Add a first-class Signal channel adapter using `signal-cli`.
- Support direct-message and group routing with existing channel policy semantics.

## Completed

- Added `SignalAdapter` in `src/channels/signal/adapter.ts`:
  - process-backed integration via `signal-cli`
  - outbound send for direct peers and groups (`group:<id>` convention)
  - inbound polling loop with JSON parsing for `receive` output
  - allowlist gating for DMs/groups + optional DM pairing flow
  - group mention gating with configurable `mention_name`
- Registered channel exports:
  - `src/channels/signal/index.ts`
  - `src/channels/index.ts`
- Added config schema support in `src/config/schema.ts`:
  - `signal.account`
  - `signal.signal_cli_path`
  - `signal.allowed_numbers`
  - `signal.allowed_group_ids`
  - `signal.require_mention`
  - `signal.mention_name`
  - `signal.poll_interval_ms`
  - `signal.send_timeout_ms`
- Wired daemon registration in `src/daemon/channels.ts`.
- Extended gateway service discovery in `src/gateway/handlers/services.ts`.
- Updated docs:
  - `README.md` channel/config docs
  - `config/default.yaml` template block for Signal
- Added tests:
  - `src/channels/signal/adapter.test.ts`
  - `src/config/schema.test.ts` signal coverage
  - `src/gateway/handlers/services.test.ts` signal service coverage

## Verification

- `pnpm test:run src/channels/signal/adapter.test.ts src/config/schema.test.ts src/gateway/handlers/services.test.ts`
- `pnpm typecheck`
