diff --git a/extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts b/extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts
index 81f5f289671f..2cc993d13482 100644
--- a/extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts
+++ b/extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts
@@ -1829,6 +1829,31 @@ describe("dispatchPreparedSlackMessage preview fallback", () => {
expect(updates.join("\n")).not.toContain("Checking Reading");
});
+ it("extracts mm:think reasoning snapshots for Slack progress draft previews", async () => {
+ const draftStream = createDraftStreamStub();
+ createSlackDraftStreamMock.mockReturnValueOnce(draftStream);
+ mockedDispatchSequence = [];
+ mockedReplyOptionEvents = [
+ {
+ kind: "reasoning",
+ text: "Reading\nChecking",
+ isReasoningSnapshot: true,
+ },
+ ];
+
+ await dispatchPreparedSlackMessage(
+ createPreparedSlackMessage({
+ accountConfig: { streaming: { progress: { label: "Shelling" } } },
+ }),
+ );
+
+ expect(draftStream.update).toHaveBeenLastCalledWith(
+ ["Shelling", "• Reading Checking"].join("\n"),
+ );
+ const updates = draftStream.update.mock.calls.map((call) => String(call[0]));
+ expect(updates.join("\n")).toContain("Reading Checking");
+ });
+
it("keeps plain Slack reasoning content that starts with Thinking", async () => {
const draftStream = createDraftStreamStub();
createSlackDraftStreamMock.mockReturnValueOnce(draftStream);
diff --git a/extensions/slack/src/monitor/message-handler/dispatch.ts b/extensions/slack/src/monitor/message-handler/dispatch.ts
index bcee77508d79..0e048967fd70 100644
--- a/extensions/slack/src/monitor/message-handler/dispatch.ts
+++ b/extensions/slack/src/monitor/message-handler/dispatch.ts
@@ -122,7 +122,8 @@ const UNICODE_TO_SLACK: Record = {
"🛠️": "hammer_and_wrench",
"💻": "computer",
};
-const SLACK_REASONING_TAG_RE = /<\s*(\/?)\s*(?:think(?:ing)?|thought|antthinking)\b[^<>]*>/gi;
+const SLACK_REASONING_TAG_RE =
+ /<\s*(\/?)\s*(?:(?:antml:|mm:)?(?:think(?:ing)?|thought)|antthinking)\b[^<>]*>/gi;
const SLACK_REASONING_LABEL_PREFIX_RE = /^\s*(?:>\s*)?Reasoning:\s*/iu;
const SLACK_THINKING_LABEL_PREFIX_RE = /^\s*(?:>\s*)?Thinking\.{0,3}(?=\s*(?:\n|_))/iu;