From cf84a03ecf8e35e765de08e7e674b85a0310f63a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 30 Mar 2026 08:46:36 +0900 Subject: [PATCH] docs: clarify generic channel approval capabilities --- docs/plugins/sdk-channel-plugins.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/plugins/sdk-channel-plugins.md b/docs/plugins/sdk-channel-plugins.md index 2c4e1eb9bdd..82856fa0231 100644 --- a/docs/plugins/sdk-channel-plugins.md +++ b/docs/plugins/sdk-channel-plugins.md @@ -34,6 +34,18 @@ shared `message` tool in core. Your plugin owns: Core owns the shared message tool, prompt wiring, session bookkeeping, and dispatch. +## Approvals and channel capabilities + +Most channel plugins do not need approval-specific code. + +- Core owns same-chat `/approve`, shared approval button payloads, and generic fallback delivery. +- Use `auth.authorizeActorAction` or `auth.getActionAvailabilityState` only when approval auth differs from normal chat auth. +- Use `outbound.shouldSuppressLocalPayloadPrompt` or `outbound.beforeDeliverPayload` for channel-specific payload lifecycle behavior such as hiding duplicate local approval prompts or sending typing indicators before delivery. +- Use `approvals.delivery` only for native approval routing or fallback suppression. +- Use `approvals.render` only when a channel truly needs custom approval payloads instead of the shared renderer. + +For Slack, Matrix, Microsoft Teams, and similar chat channels, the default path is usually enough: core handles approvals and the plugin just exposes normal outbound and auth capabilities. + ## Walkthrough