#Slack auto-ack responses

1 messages · Page 1 of 1 (latest)

jaunty spadeBOT
#

I think you’re hitting lifecycle status reactions, not the base ack reaction.

If you want the bot to keep one emoji while thinking, then remove it after replying, set:

{
  channels: {
    slack: {
      ackReaction: "eyes",
    },
  },
  messages: {
    removeAckAfterReply: true,
    statusReactions: {
      enabled: false,
    },
#
  },
}

If you want no Slack emoji at all, also disable the Slack reactions themselves:

{
  channels: {
    slack: {
      ackReaction: "",
      typingReaction: "",
    },
  },
}
#

If you want, paste openclaw --version plus your Slack config snippet and I’ll tell you which of the three is the exact fix.

#

Yep, in the structure you pasted, make the change in two places:

  1. Add ackReaction inside channels.slack
  2. Add statusReactions.enabled: false inside messages

So your config should become:

{
  "channels": {
    "slack": {
      "enabled": true,
      "botToken": "xoxb-REDACTED",
      "appToken": "xapp-1-rEDACTED",
      "ackReaction": "eyes",
      "channels": {
#
        "rEDACTED": {
          "enabled": true,
          "requireMention": true,
          "allowBots": false
        }
      },
      "capabilities": {
        "interactiveReplies": false
      },
      "dmPolicy": "disabled",
      "dm": {
        "enabled": false
      },
      "historyLimit": 0,
      "replyToModeByChatType": {
#
        "channel": "all"
      },
      "thread": {
        "historyScope": "thread",
        "inheritParent": false,
        "initialHistoryLimit": 0,
        "requireExplicitMention": false
      },
      "streaming": {
        "mode": "partial",
        "nativeTransport": true
      },
      "configWrites": false
    }
  },
#
  "messages": {
    "removeAckAfterReply": true,
    "statusReactions": {
      "enabled": false
    }
  }
}

If you already like the current emoji, the important line is really this one:

"messages": {
  "removeAckAfterReply": true,
  "statusReactions": {
#
    "enabled": false
  }
}

That stops the emoji from changing through queued/thinking/tool/done states.

Small caveat: because you have:

"streaming": {
  "mode": "partial",
  "nativeTransport": true
}
#

Slack may still show its own native thread “thinking” UI in some thread flows. If you make the change above and it still animates, that means it’s Slack native streaming, not status reactions, and I’d have you flip nativeTransport to false next.

#

Almost, yes.

Your statusReactions syntax is fine. The only thing I notice in the snippet you pasted is:

  • if this is the entire file, you’re missing the opening { at the very top
  • if this is just a partial excerpt from a bigger config object, then it’s fine

As a full object, it should be:

{
  "channels": {
    "slack": {
      "enabled": true,
      "botToken": "xoxb-RED",
      "appToken": "xapp-RED",
#
      "channels": {
        "RED": {
          "enabled": true,
          "requireMention": true,
          "allowBots": false
        }
      },
      "capabilities": {
        "interactiveReplies": false
      },
      "dmPolicy": "disabled",
      "dm": {
        "enabled": false
      },
      "historyLimit": 0,
#
      "replyToModeByChatType": {
        "channel": "all"
      },
      "thread": {
        "historyScope": "thread",
        "inheritParent": false,
        "initialHistoryLimit": 0,
        "requireExplicitMention": false
      },
      "streaming": {
        "mode": "partial",
        "nativeTransport": true
      },
      "configWrites": false
    }
#
  },
  "messages": {
    "removeAckAfterReply": true,
    "statusReactions": {
      "enabled": false
    }
  }
}

One more thing: this disables the changing reaction, but it does not explicitly set which single emoji to use. If you want to force one, add this inside channels.slack:

"ackReaction": "eyes",
#

If you want, paste the final version with that added and I’ll sanity check it too.

#

Yes, the placement of your new block is correct.

This part is in the right spot:

"messages": {
  "removeAckAfterReply": true,
  "statusReactions": {
    "enabled": false
  }
}

Two notes:

  1. As pasted here, it is not strictly valid JSON because of redaction placeholders like:
#
   "port": REDACTED

That’s only invalid because REDACTED is not a real JSON value. If your real file has an actual number there, you’re fine.

  1. If you want to force one specific emoji instead of whatever default/fallback is being used, add this inside channels.slack:
"ackReaction": "eyes",

So that section would look like:

"channels": {
  "slack": {
#
    "enabled": true,
    "botToken": "REDACTED",
    "appToken": "REDACTED",
    "ackReaction": "eyes",
    ...
  }
}

So, short version: your statusReactions.enabled: false syntax is good.

If you save that and it still changes, then it’s probably Slack native thread streaming UI from this part:

"streaming": {