# WhisperGate Rule-based no-reply gate for OpenClaw. ## What it does WhisperGate adds a deterministic gate **before model selection**: 1. If message is not from Discord → skip gate 2. If sender is in bypass user list → skip gate 3. If message ends with configured end-symbol → skip gate 4. Otherwise switch this turn to a no-reply model/provider The no-reply provider returns `NO_REPLY` for any input. --- ## Repo layout - `plugin/` — OpenClaw plugin (before_model_resolve hook) - `no-reply-api/` — OpenAI-compatible minimal API that always returns `NO_REPLY` - `discord-control-api/` — Discord 管理扩展 API(私密频道 + 成员列表) - `docs/` — rollout, integration, run-mode notes - `scripts/` — smoke/dev/helper checks - `Makefile` — common dev commands (`make check`, `make check-rules`, `make test-api`, `make smoke-discord-control`, `make up`) - `CHANGELOG.md` — milestone summary ## Quick start (no Docker) ```bash cd no-reply-api node server.mjs ``` Then render config snippet: ```bash node scripts/render-openclaw-config.mjs ``` See `docs/RUN_MODES.md` for Docker mode. Discord 扩展能力见:`docs/DISCORD_CONTROL.md`。 --- ## Development plan (incremental commits) - [x] Task 1: project docs + structure - [x] Task 2: no-reply API MVP - [x] Task 3: plugin MVP with rule chain - [x] Task 4: sample config + quick verification scripts - [x] Task 5: plugin rule extraction + hardening - [x] Task 6: containerization + compose - [x] Task 7: plugin usage notes - [x] Task 8: sender normalization + TTL + one-shot decision - [x] Task 9: auth-aware no-reply API - [x] Task 10: smoke test helpers - [x] Task 11: plugin structure checker - [x] Task 12: rollout checklist