> ## Documentation Index
> Fetch the complete documentation index at: https://docs.thor.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Product updates and announcements

export const ActionButtons = ({labels = "It's done,Later,Not needed", primary = true}) => {
  const items = Array.isArray(labels) ? labels : String(labels).split(",").map(s => s.trim()).filter(Boolean);
  return <div className="mt-3 flex flex-wrap gap-2 group-data-[chat=mcp]:hidden">
      {items.map((label, i) => <span key={label} className={`inline-flex items-center rounded-md px-3 py-1.5 text-[13px] font-medium border ${primary && i === 0 ? "bg-[#007a5a] text-white border-[#007a5a]" : "bg-transparent text-zinc-700 dark:text-zinc-200 border-zinc-300 dark:border-zinc-500"}`}>
          {label}
        </span>)}
    </div>;
};

export const ChatLink = ({children}) => <span className="text-[#1264A3] dark:text-[#1D9BD1] underline underline-offset-2 decoration-[#1264A3]/40 dark:decoration-[#1D9BD1]/40 group-data-[chat=teams]:text-[#5B5FC7] group-data-[chat=teams]:dark:text-[#A6A7DC] group-data-[chat=teams]:decoration-[#5B5FC7]/40 group-data-[chat=mcp]:text-[#79c0ff] group-data-[chat=mcp]:decoration-[#79c0ff]/50 group-data-[chat=mcp]:no-underline font-medium break-all cursor-pointer">
    {children}
  </span>;

export const MsgSection = ({children}) => <div className="mb-2.5 last:mb-0">{children}</div>;

export const McpResult = ({children}) => <div className="hidden group-data-[chat=mcp]:block font-mono text-[13px] leading-relaxed mt-4">
    <div className="mb-1.5 flex items-center gap-2">
      <span className="rounded px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wide bg-[#1f6feb]/25 text-[#79c0ff] border border-[#1f6feb]/40">
        thor
      </span>
      <span className="text-[11px] text-[#8b949e]">response</span>
    </div>
    <div className="rounded-md border border-[#1f6feb]/35 bg-[#0d1117] px-3 py-2.5 border-l-[3px] border-l-[#1f6feb]">
      <div className="min-w-0 text-[#c9d1d9] whitespace-pre-wrap">{children}</div>
    </div>
  </div>;

export const McpPrompt = ({children}) => <div className="hidden group-data-[chat=mcp]:block font-mono text-[13px] leading-relaxed">
    <div className="mb-1.5 flex items-center gap-2">
      <span className="rounded px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wide bg-[#238636]/25 text-[#3fb950] border border-[#238636]/40">
        you
      </span>
      <span className="text-[11px] text-[#8b949e]">prompt</span>
    </div>
    <div className="rounded-md border border-[#30363d] bg-[#161b22] px-3 py-2.5">
      <div className="flex gap-2">
        <span className="shrink-0 select-none text-[#3fb950] font-bold">›</span>
        <div className="min-w-0 text-[#e6edf3]">{children}</div>
      </div>
    </div>
  </div>;

export const Mention = ({children}) => <>
    <span className="text-[#1264A3] dark:text-[#1D9BD1] font-medium group-data-[chat=teams]:hidden group-data-[chat=mcp]:hidden">
      @{children}
    </span>
    <span className="hidden group-data-[chat=teams]:inline-flex items-center rounded px-1 mx-0.5 text-[#5B5FC7] dark:text-[#A6A7DC] bg-[#5B5FC7]/10 dark:bg-[#5B5FC7]/20 font-medium">
      @{children}
    </span>
  </>;

export const Message = ({name, bot = false, self = false, time, color, avatar: avatarUrl, children}) => {
  const thorAvatar = "/images/thor-icon.svg";
  const youAvatar = "/images/you-avatar.jpg";
  const resolvedName = bot ? "Thor" : self ? "You" : name || "Alex";
  const resolvedColor = color || "#5095dd";
  const imageAvatar = avatarUrl || (bot ? thorAvatar : self ? youAvatar : null);
  const imagePad = bot && !avatarUrl;
  const avatarNode = () => {
    if (imageAvatar) {
      return <>
          <img src={imageAvatar} alt={resolvedName} className={`h-9 w-9 rounded-lg object-cover shrink-0 group-data-[chat=teams]:hidden ${imagePad ? "bg-[#D9E3E6] p-1.5 object-contain" : ""}`} />
          <img src={imageAvatar} alt={resolvedName} className={`hidden h-8 w-8 rounded-full object-cover shrink-0 group-data-[chat=teams]:block ${imagePad ? "bg-[#E8E8F0] dark:bg-[#2B2B36] p-1 object-contain" : ""}`} />
        </>;
    }
    return <>
        <div className="h-8 w-8 rounded-lg shrink-0 flex items-center justify-center text-white text-xs font-semibold group-data-[chat=teams]:hidden" style={{
      backgroundColor: resolvedColor
    }}>
          {resolvedName.slice(0, 1).toUpperCase()}
        </div>
        <div className="hidden h-8 w-8 rounded-full shrink-0 items-center justify-center text-white text-xs font-semibold group-data-[chat=teams]:flex" style={{
      backgroundColor: resolvedColor
    }}>
          {resolvedName.slice(0, 1).toUpperCase()}
        </div>
      </>;
  };
  return <>
      <div className="flex gap-2.5 items-start rounded-lg px-2 py-1.5 hover:bg-zinc-50 dark:hover:bg-white/5 group-data-[chat=teams]:hidden group-data-[chat=mcp]:hidden">
        {avatarNode()}
        <div className="min-w-0 flex-1">
          <div className="flex items-baseline gap-2 flex-wrap">
            <span className="text-[15px] font-bold text-zinc-900 dark:text-zinc-100">
              {resolvedName}
            </span>
            {bot ? <span className="rounded px-1 py-px text-[10px] font-bold uppercase tracking-wide bg-[#E8F5FA] text-[#1264A3] dark:bg-[#1D9BD1]/20 dark:text-[#1D9BD1]">
                App
              </span> : null}
            {time ? <span className="text-[12px] text-zinc-500">{time}</span> : null}
          </div>
          <div className="text-[15px] leading-relaxed text-zinc-800 dark:text-zinc-200 mt-0.5">
            {children}
          </div>
        </div>
      </div>

      <div className="hidden group-data-[chat=teams]:flex gap-2.5 items-start">
        {avatarNode()}
        <div className="min-w-0 max-w-[92%]">
          <div className="flex items-baseline gap-2 mb-1">
            <span className="text-[13px] font-semibold text-zinc-900 dark:text-zinc-100">
              {resolvedName}
            </span>
            {bot ? <span className="rounded px-1 py-px text-[10px] font-semibold uppercase tracking-wide bg-[#5B5FC7]/15 text-[#5B5FC7] dark:text-[#A6A7DC]">
                Bot
              </span> : null}
            {time ? <span className="text-[11px] text-zinc-500">{time}</span> : null}
          </div>
          <div className={`rounded-md px-3 py-2 text-[13px] leading-relaxed text-zinc-800 dark:text-zinc-100 shadow-sm ${bot ? "bg-white dark:bg-[#292929] border border-[#5B5FC7]/25" : "bg-white dark:bg-[#292929]"}`}>
            {children}
          </div>
        </div>
      </div>
    </>;
};

export const Conversation = ({channel = "general", type = "channel", defaultPlatform, platforms = "slack,teams,mcp", children}) => {
  const available = platforms.split(",").map(p => p.trim()).filter(Boolean);
  const initial = defaultPlatform && available.includes(defaultPlatform) ? defaultPlatform : available[0] || "slack";
  const [platform, setPlatform] = useState(initial);
  const thorAvatar = "/images/thor-icon.svg";
  const isDm = type === "dm";
  const title = isDm ? "Thor" : channel.replace(/^#/, "");
  const showTabs = available.length > 1;
  const tabClass = active => `inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium transition-colors ${active ? "bg-white dark:bg-zinc-800 text-zinc-900 dark:text-zinc-100 shadow-sm" : "text-zinc-500 hover:text-zinc-800 dark:hover:text-zinc-200"}`;
  const slackIcon = () => <svg viewBox="0 0 20 20" className="h-3.5 w-3.5" aria-hidden="true">
      <path fill="currentColor" d="M4.5 12.7a1.6 1.6 0 1 1-1.6-1.6h1.6v1.6zm.8 0a1.6 1.6 0 1 1 3.2 0v4a1.6 1.6 0 1 1-3.2 0v-4zM7.3 4.5a1.6 1.6 0 1 1 1.6-1.6v1.6H7.3zm0 .8a1.6 1.6 0 1 1 0 3.2h-4a1.6 1.6 0 1 1 0-3.2h4zM15.5 7.3a1.6 1.6 0 1 1 1.6 1.6h-1.6V7.3zm-.8 0a1.6 1.6 0 1 1-3.2 0v-4a1.6 1.6 0 1 1 3.2 0v4zM12.7 15.5a1.6 1.6 0 1 1-1.6 1.6v-1.6h1.6zm0-.8a1.6 1.6 0 1 1 0-3.2h4a1.6 1.6 0 1 1 0 3.2h-4z" />
    </svg>;
  const teamsIcon = () => <svg viewBox="0 0 20 20" className="h-3.5 w-3.5" aria-hidden="true">
      <path fill="currentColor" d="M11.2 4.2a2.4 2.4 0 1 1 2.5 2.4h-.1a2.4 2.4 0 0 1-2.4-2.4zm-6.3.6a2.1 2.1 0 1 1 2.2 2h-.1a2.1 2.1 0 0 1-2.1-2zm6.5 3.4h4.2c.8 0 1.4.6 1.4 1.4v4.1a3.4 3.4 0 0 1-3.4 3.4h-.3A4.3 4.3 0 0 0 17 13.2V8.8c0-.9-.7-1.6-1.6-1.6h-4zm-6.6.3h4.6c.7 0 1.3.6 1.3 1.3v5.1A3.7 3.7 0 0 1 7 18.6H6.3A3.7 3.7 0 0 1 2.6 14.9V9.8c0-.7.6-1.3 1.3-1.3z" />
    </svg>;
  const mcpIcon = () => <svg viewBox="0 0 20 20" className="h-3.5 w-3.5" aria-hidden="true">
      <path fill="currentColor" d="M4 5.5A1.5 1.5 0 0 1 5.5 4h9A1.5 1.5 0 0 1 16 5.5v9a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 4 14.5v-9zM6 7v1.5h1.75V7H6zm3.25 0v1.5H11V7H9.25zM12.5 7v1.5H14.25V7H12.5zM6 10v1.5h8.25V10H6zm0 3v1.5h5V13H6z" />
    </svg>;
  let frame;
  if (platform === "mcp") {
    frame = <div className="overflow-hidden rounded-xl border border-zinc-700 shadow-sm not-prose bg-[#0d1117]">
        <div className="flex items-center gap-2 border-b border-zinc-700/80 bg-[#161b22] px-3 py-2">
          <div className="flex items-center gap-1.5">
            <span className="h-2.5 w-2.5 rounded-full bg-[#ff5f56]" />
            <span className="h-2.5 w-2.5 rounded-full bg-[#ffbd2e]" />
            <span className="h-2.5 w-2.5 rounded-full bg-[#27c93f]" />
          </div>
          <div className="min-w-0 flex-1 text-center font-mono text-[11px] text-[#8b949e] truncate">
            thor mcp — cursor / claude
          </div>
          <div className="w-10" />
        </div>
        <div className="px-4 py-4 space-y-1 min-h-[7rem]">
          <div className="font-mono text-[11px] text-[#8b949e] mb-3">
            <span className="text-[#79c0ff]">mcp</span>
            <span className="text-[#8b949e]">:</span>
            <span className="text-[#a5d6ff]">thor</span>
            <span className="text-[#8b949e]">$ </span>
            <span className="text-[#c9d1d9]">ask</span>
          </div>
          {children}
          <div className="font-mono text-[13px] text-[#7ee787] mt-4 animate-pulse">
            ▍
          </div>
        </div>
      </div>;
  } else if (platform === "teams") {
    frame = <div className="overflow-hidden rounded-xl border border-zinc-200 dark:border-zinc-700 shadow-sm not-prose">
        <div className="flex items-center gap-2.5 bg-[#5B5FC7] px-3 py-2.5">
          {isDm ? <img src={thorAvatar} alt="" className="h-6 w-6 rounded-full bg-white/90 p-0.5 object-contain" /> : <div className="flex h-6 w-6 items-center justify-center rounded bg-white/15 text-white text-xs font-bold">
              #
            </div>}
          <div className="min-w-0">
            <div className="text-sm font-semibold text-white truncate">
              {title}
            </div>
            <div className="text-[11px] text-white/70">
              {isDm ? "Chat · Microsoft Teams" : "Microsoft Teams"}
            </div>
          </div>
        </div>
        <div className="bg-[#F5F5F5] dark:bg-[#1F1F1F] px-3 py-3 space-y-3">
          {children}
        </div>
      </div>;
  } else {
    frame = <div className="overflow-hidden rounded-xl border border-zinc-200 dark:border-zinc-700 shadow-sm not-prose">
        <div className="flex items-center gap-2 border-b border-zinc-200 dark:border-zinc-700 bg-white dark:bg-[#1A1D21] px-3 py-2.5">
          {isDm ? <img src={thorAvatar} alt="" className="h-5 w-5 rounded bg-[#D9E3E6] p-0.5 object-contain" /> : <span className="text-zinc-500 dark:text-zinc-400 text-lg leading-none">
              #
            </span>}
          <span className="text-sm font-bold text-zinc-900 dark:text-zinc-100">
            {title}
          </span>
        </div>
        <div className="bg-white dark:bg-[#1A1D21] px-2 py-3 space-y-1">
          {children}
        </div>
      </div>;
  }
  return <div className="my-4 not-prose group" data-chat={platform}>
      {showTabs ? <div className="mb-2 inline-flex flex-wrap items-center rounded-lg border border-zinc-200 dark:border-zinc-700 bg-zinc-50 dark:bg-zinc-900 p-0.5">
          {available.includes("slack") ? <button type="button" onClick={() => setPlatform("slack")} className={tabClass(platform === "slack")}>
              {slackIcon()}
              Slack
            </button> : null}
          {available.includes("teams") ? <button type="button" onClick={() => setPlatform("teams")} className={tabClass(platform === "teams")}>
              {teamsIcon()}
              Teams
            </button> : null}
          {available.includes("mcp") ? <button type="button" onClick={() => setPlatform("mcp")} className={tabClass(platform === "mcp")}>
              {mcpIcon()}
              MCP
            </button> : null}
        </div> : null}

      {frame}

      {platform === "mcp" && showTabs ? <p className="mt-2 text-xs text-zinc-500 dark:text-zinc-400">
          Same workflows via Thor's{" "}
          <a href="/usecases/mcp" className="underline underline-offset-2">
            MCP server
          </a>{" "}
          in Cursor, Claude, or any MCP client.
        </p> : null}
    </div>;
};

<Update label="June 2026">
  ### <Badge color="green">New</Badge> Notion & Google Docs Support

  <img src="https://mintcdn.com/thor/YYCrix9H3kEt1_oM/images/documents.png?fit=max&auto=format&n=YYCrix9H3kEt1_oM&q=85&s=9613b03974d2eef4b5fea3dfdda1bd5a" alt="documents" width="1024" height="687" data-path="images/documents.png" />

  Thor now supports **Notion** and **Google Docs** as document context in the data layer. Connect your accounts from **Your Connections** in the Thor Slack app, then ask Thor to check whether work aligns with a spec, draft issues from a requirements doc, or answer questions grounded in what your team already wrote.

  A new **Documents** section in the webapp lets admins see which pages and docs are registered, share document access with teammates, and spot connections that need attention after a reconnect. [Learn more](/usecases/docs).

  ### <Badge color="green">New</Badge> Team Glossary

  <img src="https://mintcdn.com/thor/YYCrix9H3kEt1_oM/images/team-glossary.png?fit=max&auto=format&n=YYCrix9H3kEt1_oM&q=85&s=4b3418c9c99a3916d82dc4bdee96029c" alt="team-glossary" width="1024" height="796" data-path="images/team-glossary.png" />

  Thor now builds an organization-specific **Team Glossary** from your issues, Slack messages, and meeting transcripts — product names, project codenames, abbreviations, and internal jargon. Matching terms are injected into Thor's prompts so standups, meeting summaries, and agent replies use the vocabulary your team actually uses. Browse and review extracted terms from the **Team Glossary** page in the webapp.

  ### <Badge color="green">New</Badge> External Specialist Agents (Beta)

  Organizations can register **external specialist agents** (via the A2A protocol) and have Thor delegate focused sub-tasks to them — for example, a security review agent or a domain-specific coding assistant. Thor discovers available specialists, gathers relevant context, and orchestrates multi-round conversations, with an optional confirm-before-call step in Slack. Admins can delete registered agents from the webapp. Contact [support@thor.ai](mailto:support@thor.ai) to enable this for your organization.

  ### <Badge color="orange">Improved</Badge> Monday Kickoff

  The Monday kickoff message has been redesigned as a **strategic product dashboard**: priorities are grouped by product and project with richer narrative context, so the start-of-week briefing reads less like a flat task list and more like a focused planning brief. [Learn more](/usecases/reminders#weekly-messages).

  ### <Badge color="orange">Improved</Badge> Team Projects

  The **Team Projects** page now supports filtering, search, sorting, and pagination for large organizations. Thor also regenerates project groupings daily and requires at least two related work items before creating a new project, reducing one-off noise in your project taxonomy.

  ### <Badge color="orange">Improved</Badge> Work Item Status Sync

  Work items now reconcile their status automatically when linked GitHub issues or pull requests are closed or merged, keeping Thor's view of in-flight work aligned with your systems of record without manual updates.

  ### <Badge color="orange">Improved</Badge> Google Meet Transcript Reliability

  Google Meet transcripts are now ingested through the **Google Meet API** as the canonical source, with a fallback to Meet transcript entries when Drive export fails. A backfill path is available for calendar events that were missing transcript attachments.

  ### <Badge color="orange">Improved</Badge> MCP Work Item Tools

  The Thor MCP server now exposes tools to **list your work items** and **update their status** directly from Cursor, Claude, or any other MCP client — so you can triage and sync progress without switching back to Slack. Cursor's native OAuth redirect URI is also supported for MCP dynamic client registration. [Learn more](/usecases/mcp).

  ### <Badge color="orange">Improved</Badge> Issue Creation with Templates

  When Thor creates GitHub or Linear issues on your behalf, it now applies your repository's **issue templates** where available, producing better-structured tickets out of the box.

  ### <Badge color="orange">Improved</Badge> Standup & Post-Meeting Formatting

  Standup summary headers and section formatting have been refreshed for clarity. Post-meeting messages are easier to identify at a glance, action item owners are formatted more consistently, and non-user owners (teams or bots) are attributed correctly.

  ### <Badge color="orange">Improved</Badge> Work Item Quality

  Thor now filters out overly broad work items that span too many unrelated sources, relaxes similarity thresholds where appropriate, and reduces runaway expansion — so the work activity in your standups and summaries stays focused on real, actionable items.

  ### <Badge color="orange">Improved</Badge> Recurring Reminders

  Recurring reminders now fire correctly on **weekday-only** schedules and respect your local timezone when rendering trigger times.

  ### <Badge color="blue">Minor</Badge> Thread Nudge Timing

  Slack thread nudges no longer count weekend hours toward the quiet period, so threads are not nudged prematurely on Monday morning.

  ### <Badge color="blue">Minor</Badge> Weekly Reminder @-Mentions

  When Thor replies in a thread for a weekly recap or kickoff reminder, the message now @-mentions you so it is easier to spot in busy channels.

  ### <Badge color="blue">Minor</Badge> Connection Validation

  Thor now prevents duplicate Slack or Microsoft providers from being connected to the same organization and surfaces a clear validation error during OAuth if a connection already exists.

  ### <Badge color="blue">Minor</Badge> Meeting & Thread Privacy Accuracy

  Fewer meeting and Slack thread work items are incorrectly flagged as private, and Teams meeting transcripts are included reliably in meeting search results.
</Update>

<Update label="April 2026">
  ### <Badge color="green">New</Badge> Thor MCP Server

  Thor's Model Context Protocol (MCP) server is now generally available, so you can connect Thor securely to Cursor, Claude, and any other MCP-compatible client. Using Thor as the data source for your AI workflows is faster, cheaper, more accurate and more reliable than needing to build your own multi-MCP data pipelines. [Learn more](/usecases/mcp).

  ### <Badge color="green">New</Badge> Automation Configuration in Slack

  <img src="https://mintcdn.com/thor/ZicLt5N2ZynC2LYK/images/slack-automations.png?fit=max&auto=format&n=ZicLt5N2ZynC2LYK&q=85&s=bf33a0b4d2889316752b203d07c2ba7a" alt="slack-automations" width="1384" height="1330" data-path="images/slack-automations.png" />

  You can now manage all of your Thor automations and reminders directly from the Thor Slack app's "Home" tab. Browse your active datetime triggers at a glance, create new ones (including fully custom automations), and edit or delete existing ones from an overflow menu — no need to leave Slack. Previews and timezone-aware scheduling make it easy to confirm exactly when each automation will fire. [Learn more](/usecases/reminders#manage-automations-from-slack).

  ### <Badge color="green">New</Badge> New Webapp & Automated Project Categorization

  <img src="https://mintcdn.com/thor/ZicLt5N2ZynC2LYK/images/projects.png?fit=max&auto=format&n=ZicLt5N2ZynC2LYK&q=85&s=3b44d339e6ee3ebf5198aec342d63fb0" alt="projects" width="1263" height="986" data-path="images/projects.png" />

  The Thor webapp has been rebuilt from the ground up with new configuration options for personal settings, organization connections, team management, and integration health. Alongside the redesign, Thor now automatically categorizes your work into Products and Projects: a new "Team Projects" insights page surfaces the groups Thor has identified across your tools, and a new background classifier continuously detects new products and tracks scope drift over time.

  ### <Badge color="orange">Improved</Badge> Standup Summary Categorization & Context

  Standup summaries received a major refresh: items are now grouped by the products and projects they belong to, work items are rendered directly inside the standup message, and a new "Share" button lets you quickly forward a standup to a teammate or channel. "Show TLDR" buttons are now available on both individual and manager standups. [Learn more](/usecases/standups#whats-in-your-standup).

  ### <Badge color="orange">Improved</Badge> Post-Meeting Messages

  Post-meeting messages are now delivered as DMs only, keeping channels quieter and conversations more personal. Each message now includes the decisions made during the meeting (not just action items), and any action item that was previously discussed in another meeting is flagged with a "Previously Discussed In" reference. End-of-day reminders are batched into a single message instead of one per item. [Learn more](/usecases/meetings#get-a-summary-of-meeting-action-items-and-decisions).

  ### <Badge color="orange">Improved</Badge> Reminders with Quick Actions

  <Conversation type="dm">
    <Message bot time="Friday at 1:00 AM">
      <MsgSection>
        On Monday in the standup, you planned to update the Thor change log, create new feature videos, and refresh the docs for this week's recent changes. Let me know if you want help turning that into tracked issues or prioritizing the work.
      </MsgSection>

      <MsgSection>
        <div>🐙 <ChatLink>#46243 feat: migrate changelog from Headway to Plain Help Center</ChatLink></div>
        <div>🐙 <ChatLink>#2838 Thor v1.2 (March Public Launch)</ChatLink></div>
      </MsgSection>

      <ActionButtons />
    </Message>

    <McpPrompt>
      Use the Thor MCP to show my open reminder about the changelog and docs work, with the linked issues.
    </McpPrompt>

    <McpResult>
      Reminder — changelog, feature videos, docs refresh
      \#46243 feat: migrate changelog from Headway to Plain Help Center
      \#2838 Thor v1.2 (March Public Launch)
    </McpResult>
  </Conversation>

  Reminders that include work items now show inline quick action buttons, so you can update status or take the next step without typing a single word. Recurring reminder messages also have feedback and cancel buttons to make them easier to manage. [Learn more](/usecases/reminders#quick-actions-on-reminders).

  ### <Badge color="orange">Improved</Badge> Slack Thread Search

  Thor now has a dedicated Slack thread context tool: when you link or forward a Slack message, Thor will load the full thread (respecting private-channel access) and use keyword-first matching with semantic fallback to find the right conversation. Standup generation also recovers more gracefully when something goes wrong upstream. Try asking Thor, "I remember some time ago we were discussing \_\_\_. Help me find it." [Learn more](/usecases/meetings#find-a-past-slack-discussion).

  ### <Badge color="orange">Improved</Badge> Data Connection Preview

  When you connect a new data provider, Thor now shows your data immediately rather than making you wait for the next sync. The preview also suggests actionable next steps tailored to which tools you've connected so far.

  ### <Badge color="orange">Improved</Badge> Google Meet Gemini Notes

  Google Meet Gemini Notes ingestion has been overhauled — Thor now matches Gemini Notes to meetings via the conference space hangout link and filters attendees more accurately. Work item summaries generated from meetings are now more succinct and use richer work-activity context.

  ### <Badge color="orange">Improved</Badge> Calendar Status Per Installation

  When you connect multiple Google accounts to Thor, each calendar now reports its own connection status truthfully, so you can quickly tell which account needs attention if data goes missing.

  ### <Badge color="orange">Improved</Badge> GitHub App Approval Flow

  When a GitHub App installation is approved, both the requester and the approver now receive a notification once approval and the initial sync are complete. The approver's GitHub user is also automatically linked to their Thor account.

  ### <Badge color="blue">Minor</Badge> Integration Re-authorization in Settings

  Thor will now more clearly flag which providers need re-authorization, so admins can fix broken connections before they cause missing data.

  ### <Badge color="blue">Minor</Badge> Delete Organization

  Organization admins can now delete their entire Thor organization directly from the webapp, with a confirmation step and full cascading cleanup of related data.

  ### <Badge color="blue">Minor</Badge> Multi-Name User Lookups

  When asking Thor about multiple people at once (e.g. "what are Alice and Bob working on?"), Thor now resolves all of the named users in a single lookup for faster, more reliable answers.

  ### <Badge color="blue">Minor</Badge> PR Merge Activity Accuracy

  Fixed a class of issues where merged pull requests were attributed to the person who clicked "Merge" rather than the actual PR author, and where some development contributions were missing from standup activity entirely.

  ### <Badge color="blue">Minor</Badge> Issue Creation Robustness

  Eliminated duplicate issues that could occur when post-meeting "Create issue" buttons were clicked multiple times in quick succession. Thor will now also prompt you to choose a repository when no default is set, instead of silently failing. [Learn more](/usecases/tasks#convert-a-slack-thread-into-a-task).

  ### <Badge color="purple">Technical</Badge> Linear Authentication Hardening

  Thor now supports Linear refresh tokens, so long-running Linear connections stay authenticated automatically without requiring users to manually reconnect.
</Update>

<Update label="February 2026">
  ### <Badge color="green">New</Badge> Slack Thread Nudges

  Thor will now nudge Slack threads which have been abandoned or forgotten and still require resolution or further assistance. This helps ensure that no conversation falls through the cracks.

  ### <Badge color="green">New</Badge> Thor MCP Server (Beta)

  You can now connect Thor to your existing AI workflows via MCP. Ask any question that Thor is already good at answering, get a list of your work activity, and prepare for daily standups. Contact us to get early access.

  ### <Badge color="orange">Improved</Badge> Standup Quality & Detail

  Standups have received a number of quality improvements:

  * GitHub commits made outside the main branch and without a linked PR now contribute to work activity.
  * Improved detection of blockers, which are now surfaced more prominently in standup summaries.
  * Work activity summaries now more clearly highlight high-level goals and reduce technical jargon.
  * Every standup summary now includes additional detail and clear source attribution, with call-outs for recently shipped or completed work items.
  * If your Slack server has application-specific emojis, Thor will now make use of them.

  ### <Badge color="orange">Improved</Badge> Issue Search Accuracy

  We're continuing to make Thor's internal data memory management more context-aware and optimized for accuracy of issue search. Asking Thor to find that one specific issue you vaguely remember working on 6 months ago is now more reliable.

  ### <Badge color="orange">Improved</Badge> Meeting Attendance Detection

  Thor now more accurately detects meeting attendance even when a user has not RSVP'd to the calendar event.

  ### <Badge color="orange">Improved</Badge> Meeting Transcript Reliability

  Missing meeting transcripts are now detected and users are prompted to fix the problem with clear instructions. Additionally, highly delayed Google Meet transcript processing is now handled more reliably, ensuring transcripts are correctly linked to their meetings.

  ### <Badge color="orange">Improved</Badge> Issue Creation Speed

  Issues are now created 2x faster. Thor will continue to perform additional analysis, refinement, categorization, and grooming in the background. Thor will prompt you if any additional human input is needed.

  ### <Badge color="orange">Improved</Badge> Response Speed

  Thor's initial response time to prompts has been significantly improved. In some cases, the first reply previously took several minutes — this should no longer be the case.

  ### <Badge color="blue">Minor</Badge> Weekly Report Accuracy

  Weekly recap (Friday) and kickoff (Monday) reports now more accurately exclude work done over the weekend.

  ### <Badge color="blue">Minor</Badge> Post-Meeting Action Item Due Dates

  Post-meeting action items will now default to end-of-day when no specific due date is mentioned, ensuring no commitment is missed. Thor will now hunt you down if you say, "Guys, let's do it!" but don't actually say who owns the work, or when it's due.

  ### <Badge color="purple">Technical</Badge> Google Data Connection Reliability

  Fixed reliability issues with Google data connections and re-authentication flows.
</Update>

<Update label="January 2026">
  ### <Badge color="green">New</Badge> Standup Reviews for Managers

  For managers who want to help their teams stay on track, Thor can now automatically send a list of each team member's standup summary to their manager. See [Standup Reviews for Managers](/usecases/standups#standup-reviews-for-managers) for more details.

  ### <Badge color="orange">Improved</Badge> Standup Formatting & Context

  Standup messages from Thor now include more context (GitHub commits, meeting reminders, past & upcoming meetings) and more detailed formatting of work items and sources.

  ### <Badge color="orange">Improved</Badge> Standup Corrections/Feedback

  You can now reply to Thor's standup summary with feedback and corrections, and Thor will incorporate this feedback into your tracked work activity.

  ### <Badge color="orange">Improved</Badge> Standup Time Configuration

  Users can now individually configure the time of day when they want to receive their standup summary by going to the "Home" tab in the Thor Slack app and clicking "Your Notifications".

  ### <Badge color="orange">Improved</Badge> Meeting Context in Tasks

  When Thor creates a task on your behalf, it will now automatically include the context of the meeting in the task description. This meeting context is weighted based on relevance and aims to enrich context for coding agents.

  ### <Badge color="orange">Improved</Badge> Automatic Reminder Controls

  In the past Thor would sometimes try to be "too eager" when acting on post-meeting action items, and attempt to automatically send messages and create tasks you never asked for. Moving forward, Thor will only do this if it was explicitly told to do so.

  ### <Badge color="orange">Improved</Badge> Prompt for Missing Task Context

  When you ask Thor to create a task on your behalf, Thor will now detect if it doesn't have enough useful context and prompt you for additional information. This helps ensure accuracy and completeness of the task description.

  ### <Badge color="blue">Minor</Badge> Support for Google Calendar Group Invites

  When checking for meeting attendees, Thor will now automatically expand group invites (eg. "[engineering@acme.com](mailto:engineering@acme.com)") into individual attendees to ensure that each team member's attendance is captured accurately.

  ### <Badge color="blue">Minor</Badge> User Controls for Linear & GitHub Connections

  Individual users can now open the "Your Connections" dialog and ensure Thor has correctly linked their personal Linear & GitHub accounts to the organization. This can be used to diagnose and fix data connection issues.

  ### <Badge color="blue">Minor</Badge> Detection of Unconnected Meeting Participants

  When Thor detects that you attended a meeting with someone in your organization who hasn't configured Thor yet, it will now notify you of this and offer to share the meeting notes with them.

  ### <Badge color="blue">Minor</Badge> Meeting Cancellation Support

  Thor now properly detects and handles cancelled meetings. They will be removed from context for standups and reminders.

  ### <Badge color="purple">Technical</Badge> Upgraded to Gemini 3.0

  Thor uses several different AI models under-the-hood to perform different tasks. We've recently upgraded our base models to Gemini 3.0, which should result in improved performance and accuracy.
</Update>

<Update label="December 2025">
  ### <Badge color="green">New</Badge> Friday Recap & Monday Kickoff

  Have Thor automatically send you a weekly recap at the end of Friday, and a Monday kickoff message at the start of the week. See [Weekly Messages](/usecases/reminders#weekly-messages) for more details.

  ### <Badge color="green">New</Badge> Google Calendar Integration

  When you connect your Google account, Thor will now automatically can your past and upcoming calendar events and include that data in your standups and reminders. **NOTE:** *If you have connected to Google previously, you will need to re-authorize your connection to enable the additional calendar access.*

  ### <Badge color="green">New</Badge> Zoom Integration

  You can now have Thor automatically create tasks and reminders from your Zoom meetings. See [Zoom Configuration](/usecases/meetings#zoom-configuration) for more details.

  ### <Badge color="green">New</Badge> Coding Agent Integration

  Thor will now automatically assess your tasks for coding agent suitability and offer to auto-assign them to Cursor, Claude, Tembo or Charlie. See [Delegate to Coding Agents](/usecases/tasks#delegate-to-coding-agents) for more details.

  ### <Badge color="green">New</Badge> Task Subscriptions

  Thor can now subscribe to task events and notify you of important updates for tasks you care most about. See [Task Subscriptions](/usecases/tasks#task-subscriptions) for more details.

  ### <Badge color="orange">Improved</Badge> Automatic Task Categorization

  When you ask Thor to create a task on your behalf, it will now automatically tag the issue with the right labels, and set the most appropriate issue type based on the task description.

  ### <Badge color="orange">Improved</Badge> GitHub Integration

  Thor can now handle updating your GitHub issues with additional metadata, such as issue types, blocking/blocked by relationships, sub-issue management, and parent issue assignment. Thor can also help you close and re-open issues.

  ### <Badge color="blue">Minor</Badge> Connection Management

  Data connection which impact your entire organization are now separated into a new "Organization Connections" dialog, separate from your personal connections (now in "Your Connections"). This can be managed from the "Home" tab in the Thor Slack app.

  ### <Badge color="blue">Minor</Badge> Thor Message Removal

  Sometimes Thor might post a message in a Slack channel that you don't think is relevant, or adds noise. You can now ask Thor to remove that message by either replying in the thread with "remove this message" or by giving Thor a link to the message with the instruction "remove this message".

  ### <Badge color="purple">Technical</Badge> Weighted Work Activity Classification

  When Thor captures work activity from your Slack, GitHub, Linear and meeting data, it will now automatically give each work activity a contribution weight. Items which you own will be will be treated with more urgency and importance than items you simply review or comment on.
</Update>
