diff --git a/docs/channels/slack.md b/docs/channels/slack.md
index 0dc0bc1b45f..b7a814e378f 100644
--- a/docs/channels/slack.md
+++ b/docs/channels/slack.md
@@ -218,11 +218,24 @@ openclaw gateway
- `botToken` + `appToken` are required for Socket Mode.
- HTTP mode requires `botToken` + `signingSecret`.
+- `botToken`, `appToken`, `signingSecret`, and `userToken` accept plaintext
+ strings or SecretRef objects.
- Config tokens override env fallback.
- `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` env fallback applies only to the default account.
- `userToken` (`xoxp-...`) is config-only (no env fallback) and defaults to read-only behavior (`userTokenReadOnly: true`).
- Optional: add `chat:write.customize` if you want outgoing messages to use the active agent identity (custom `username` and icon). `icon_emoji` uses `:emoji_name:` syntax.
+Status snapshot behavior:
+
+- Slack account inspection tracks per-credential `*Source` and `*Status`
+ fields (`botToken`, `appToken`, `signingSecret`, `userToken`).
+- Status is `available`, `configured_unavailable`, or `missing`.
+- `configured_unavailable` means the account is configured through SecretRef
+ or another non-inline secret source, but the current command/runtime path
+ could not resolve the actual value.
+- In HTTP mode, `signingSecretStatus` is included; in Socket Mode, the
+ required pair is `botTokenStatus` + `appTokenStatus`.
+
For actions/directory reads, user token can be preferred when configured. For writes, bot token remains preferred; user-token writes are only allowed when `userTokenReadOnly: false` and bot token is unavailable.
@@ -624,6 +637,12 @@ openclaw pairing list slack
Validate bot + app tokens and Socket Mode enablement in Slack app settings.
+
+ If `openclaw channels status --probe --json` shows `botTokenStatus` or
+ `appTokenStatus: "configured_unavailable"`, the Slack account is
+ configured but the current runtime could not resolve the SecretRef-backed
+ value.
+
@@ -634,6 +653,10 @@ openclaw pairing list slack
- Slack Request URLs (Events + Interactivity + Slash Commands)
- unique `webhookPath` per HTTP account
+ If `signingSecretStatus: "configured_unavailable"` appears in account
+ snapshots, the HTTP account is configured but the current runtime could not
+ resolve the SecretRef-backed signing secret.
+
diff --git a/docs/channels/troubleshooting.md b/docs/channels/troubleshooting.md
index aeb69299afb..9c22d4b601e 100644
--- a/docs/channels/troubleshooting.md
+++ b/docs/channels/troubleshooting.md
@@ -70,11 +70,11 @@ Full troubleshooting: [/channels/discord#troubleshooting](/channels/discord#trou
### Slack failure signatures
-| Symptom | Fastest check | Fix |
-| -------------------------------------- | ----------------------------------------- | ------------------------------------------------- |
-| Socket mode connected but no responses | `openclaw channels status --probe` | Verify app token + bot token and required scopes. |
-| DMs blocked | `openclaw pairing list slack` | Approve pairing or relax DM policy. |
-| Channel message ignored | Check `groupPolicy` and channel allowlist | Allow the channel or switch policy to `open`. |
+| Symptom | Fastest check | Fix |
+| -------------------------------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Socket mode connected but no responses | `openclaw channels status --probe` | Verify app token + bot token and required scopes; watch for `botTokenStatus` / `appTokenStatus = configured_unavailable` on SecretRef-backed setups. |
+| DMs blocked | `openclaw pairing list slack` | Approve pairing or relax DM policy. |
+| Channel message ignored | Check `groupPolicy` and channel allowlist | Allow the channel or switch policy to `open`. |
Full troubleshooting: [/channels/slack#troubleshooting](/channels/slack#troubleshooting)
diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md
index 034cd4245ea..72df05d33d5 100644
--- a/docs/gateway/configuration-reference.md
+++ b/docs/gateway/configuration-reference.md
@@ -419,6 +419,13 @@ WhatsApp runs through the gateway's web channel (Baileys Web). It starts automat
- **Socket mode** requires both `botToken` and `appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` for default account env fallback).
- **HTTP mode** requires `botToken` plus `signingSecret` (at root or per-account).
+- `botToken`, `appToken`, `signingSecret`, and `userToken` accept plaintext
+ strings or SecretRef objects.
+- Slack account snapshots expose per-credential source/status fields such as
+ `botTokenSource`, `botTokenStatus`, `appTokenStatus`, and, in HTTP mode,
+ `signingSecretStatus`. `configured_unavailable` means the account is
+ configured through SecretRef but the current command/runtime path could not
+ resolve the secret value.
- `configWrites: false` blocks Slack-initiated config writes.
- Optional `channels.slack.defaultAccount` overrides default account selection when it matches a configured account id.
- `channels.slack.streaming` is the canonical stream mode key. Legacy `streamMode` and boolean `streaming` values are auto-migrated.