You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Discord auto-enables native exec approvals when `enabled` is unset or `"auto"` and at least one approver can be resolved, either from `execApprovals.approvers` or from the account's existing owner config (`allowFrom`, legacy `dm.allowFrom`, or explicit DM `defaultTo`). Set `enabled: false` to disable Discord as a native approval client explicitly.
957
+
Discord auto-enables native exec approvals when `enabled` is unset or `"auto"` and at least one approver can be resolved, either from `execApprovals.approvers` or from `commands.ownerAllowFrom`. Discord does not infer exec approvers from channel `allowFrom`, legacy `dm.allowFrom`, or direct-message `defaultTo`. Set `enabled: false` to disable Discord as a native approval client explicitly.
958
958
959
959
When `target` is `channel` or `both`, the approval prompt is visible in the channel. Only resolved approvers can use the buttons; other users receive an ephemeral denial. Approval prompts include the command text, so only enable channel delivery in trusted channels. If the channel ID cannot be derived from the session key, OpenClaw falls back to DM delivery.
Copy file name to clipboardExpand all lines: docs/channels/matrix.md
+7-1Lines changed: 7 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -667,6 +667,12 @@ Matrix can act as an exec approval client for a Matrix account.
667
667
668
668
Approvers must be Matrix user IDs such as `@owner:example.org`. Matrix auto-enables native exec approvals when `enabled` is unset or `"auto"` and at least one approver can be resolved, either from `execApprovals.approvers` or from `channels.matrix.dm.allowFrom`. Set `enabled: false` to disable Matrix as a native approval client explicitly. Approval requests otherwise fall back to other configured approval routes or the exec approval fallback policy.
669
669
670
+
Native Matrix routing is exec-only today:
671
+
672
+
-`channels.matrix.execApprovals.*` controls native DM/channel routing for exec approvals only.
673
+
- Plugin approvals still use shared same-chat `/approve` plus any configured `approvals.plugin` forwarding.
674
+
- Matrix can still reuse `channels.matrix.dm.allowFrom` for plugin-approval authorization when it can infer approvers safely, but it does not expose a separate native plugin-approval DM/channel fanout path.
675
+
670
676
Delivery rules:
671
677
672
678
-`target: "dm"` sends approval prompts to approver DMs
@@ -677,7 +683,7 @@ Matrix uses text approval prompts today. Approvers resolve them with `/approve <
677
683
678
684
Only resolved approvers can approve or deny. Channel delivery includes the command text, so only enable `channel` or `both` in trusted rooms.
679
685
680
-
Matrix approval prompts reuse the shared core approval planner. The Matrix-specific surface is transport only: room/DM routing and message send/update/delete behavior.
686
+
Matrix approval prompts reuse the shared core approval planner. The Matrix-specific native surface is transport only for exec approvals: room/DM routing and message send/update/delete behavior.
Copy file name to clipboardExpand all lines: docs/channels/slack.md
+9-3Lines changed: 9 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -513,7 +513,11 @@ Notes:
513
513
514
514
## Exec approvals in Slack
515
515
516
-
Exec approval prompts can route natively through Slack using interactive buttons and interactions, instead of falling back to the Web UI or terminal. Approver authorization is enforced: only users identified as approvers can approve or deny requests through Slack.
516
+
Slack can act as a native approval client with interactive buttons and interactions, instead of falling back to the Web UI or terminal.
517
+
518
+
- Exec approvals use `channels.slack.execApprovals.*` for native DM/channel routing.
519
+
- Plugin approvals can still resolve through the same Slack-native button surface when the request already lands in Slack and the approval id kind is `plugin:`.
520
+
- Approver authorization is still enforced: only users identified as approvers can approve or deny requests through Slack.
517
521
518
522
This uses the same shared approval button surface as other channels. When `interactivity` is enabled in your Slack app settings, approval prompts render as Block Kit buttons directly in the conversation.
519
523
@@ -555,8 +559,10 @@ opt into origin-chat delivery:
555
559
}
556
560
```
557
561
558
-
Shared `approvals.exec` forwarding is separate. Use it only when approval prompts must also route
559
-
to other chats or explicit out-of-band targets.
562
+
Shared `approvals.exec` forwarding is separate. Use it only when exec approval prompts must also
563
+
route to other chats or explicit out-of-band targets. Shared `approvals.plugin` forwarding is also
564
+
separate; Slack-native buttons can still resolve plugin approvals when those requests already land
565
+
in Slack.
560
566
561
567
Same-chat `/approve` also works in Slack channels and DMs that already support commands. See [Exec approvals](/tools/exec-approvals) for the full approval forwarding model.
- `/pair approve` when there is only one pending request
359
359
- `/pair approve latest` for most recent
360
360
361
-
The setup code carries a short-lived bootstrap token. Built-in bootstrap handoff keeps the primary node token at `scopes: []`; any handed-off operator token stays bounded to `operator.approvals`, `operator.read`, `operator.talk.secrets`, and `operator.write`.
361
+
The setup code carries a short-lived bootstrap token. Built-in bootstrap handoff keeps the primary node token at `scopes: []`; any handed-off operator token stays bounded to `operator.approvals`, `operator.read`, `operator.talk.secrets`, and `operator.write`. Bootstrap scope checks are role-prefixed, so that operator allowlist only satisfies operator requests; non-operator roles still need scopes under their own role prefix.
362
362
363
363
If a device retries with changed auth details (for example role/scopes/public key), the previous pending request is superseded and the new request uses a different `requestId`. Re-run `/pair pending` before approving.
Only resolved approvers can approve or deny. Non-approvers cannot use `/approve` and cannot use Telegram approval buttons.
834
834
835
+
Approval resolution behavior:
836
+
837
+
- IDs prefixed with `plugin:` always resolve through plugin approvals.
838
+
- Other approval IDs try `exec.approval.resolve` first.
839
+
- If Telegram is also authorized for plugin approvals and the gateway says
840
+
the exec approval is unknown/expired, Telegram retries once through
841
+
`plugin.approval.resolve`.
842
+
- Real exec approval denials/errors do not silently fall through to plugin
843
+
approval resolution.
844
+
835
845
Channel delivery shows the command text in the chat, so only enable `channel` or `both` in trusted groups/topics. When the prompt lands in a forum topic, OpenClaw preserves the topic for both the approval prompt and the post-approval follow-up. Exec approvals expire after 30 minutes by default.
836
846
837
847
Inline approval buttons also depend on `channels.telegram.capabilities.inlineButtons` allowing the target surface (`dm`, `group`, or `all`).
0 commit comments