zhi af33d747d9 feat: complete Dirigent rename + all TASKLIST items
- Task 1: Identity prompt now includes Discord userId
- Task 2: Added configurable schedulingIdentifier (default: ➡️)
- Task 3: Moderator handoff uses <@userId>+identifier instead of semantic messages
- Task 4: All prompts/comments/help text converted to English
- Task 5: Full project rename WhisperGate → Dirigent across all files

Breaking: config key changed from plugins.entries.whispergate to plugins.entries.dirigent
Breaking: channel policies file renamed to dirigent-channel-policies.json
Breaking: tool name changed from whispergate_tools to dirigent_tools
2026-03-03 10:10:27 +00:00

Dirigent

Rule-based no-reply gate + turn manager for OpenClaw (Discord).

What it does

Dirigent adds deterministic logic before model selection and turn-based speaking for multi-agent Discord channels:

  • Rule gate (before_model_resolve)

    1. Non-Discord → skip
    2. Sender in bypass list / human list → skip
    3. Message ends with configured end symbol → skip
    4. Otherwise → route to no-reply model/provider
  • End-symbol enforcement

    • Injects instruction like: 你的这次发言必须以🔚作为结尾…
    • In group chats, also injects: “无关/不需要回应就 NO_REPLY”
  • Turn-based speaking (multi-bot)

    • Only the current speaker is allowed to respond
    • Others are forced to no-reply
    • Turn advances on end-symbol or NO_REPLY
    • If all bots NO_REPLY, channel becomes dormant until a new human message
  • Moderator handoff (optional)

    • When the current speaker NO_REPLYs, a moderator bot can post a handoff message to wake the next speaker
  • Per-channel policy runtime

    • Policies stored in a standalone JSON file
    • Update at runtime via dirigent_tools (memory first → persist to file)
  • Discord control actions (optional)

    • Private channel create/update + member list
    • Unified via dirigent_tools

Repo layout

  • plugin/ — OpenClaw plugin (gate + turn manager + moderator presence)
  • no-reply-api/ — OpenAI-compatible API that always returns NO_REPLY
  • discord-control-api/ — Discord 管理扩展 API私密频道 + 成员列表)
  • docs/ — rollout, integration, run-mode notes, turn-wakeup analysis
  • 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)

cd no-reply-api
node server.mjs

Then render config snippet:

node scripts/render-openclaw-config.mjs

See docs/RUN_MODES.md for Docker mode. Discord 扩展能力见:docs/DISCORD_CONTROL.md


Runtime tools & commands

Tool: dirigent_tools

Actions:

  • policy-get, policy-set-channel, policy-delete-channel
  • turn-status, turn-advance, turn-reset
  • channel-private-create, channel-private-update, member-list

Slash command (Discord)

/dirigent status
/dirigent turn-status
/dirigent turn-advance
/dirigent turn-reset

Config highlights

Common options (see docs/INTEGRATION.md):

  • listMode: human-list or agent-list
  • humanList, agentList
  • endSymbols
  • channelPoliciesFile (per-channel overrides)
  • moderatorBotToken (handoff messages)
  • enableDebugLogs, debugLogChannelIds

Development plan (incremental commits)

  • Task 1: project docs + structure
  • Task 2: no-reply API MVP
  • Task 3: plugin MVP with rule chain
  • Task 4: sample config + quick verification scripts
  • Task 5: plugin rule extraction + hardening
  • Task 6: containerization + compose
  • Task 7: plugin usage notes
  • Task 8: sender normalization + TTL + one-shot decision
  • Task 9: auth-aware no-reply API
  • Task 10: smoke test helpers
  • Task 11: plugin structure checker
  • Task 12: rollout checklist
Description
Rule-based no-reply gate for OpenClaw
Readme 1.6 MiB
Languages
TypeScript 75.7%
JavaScript 23.8%
Shell 0.4%
Makefile 0.1%