This is our biggest update yet to building and designing cross-channel messaging in Knock. We redesigned our template editor and our workflow canvas with a renewed focus on:
Speed. All updates are optimistic. You will never see a loading spinner. You can now use keyboard shortcuts for everything.
Ease of use. Writing an email in Knock is as easy as writing a doc in Notion.
Quality control. We’ve overhauled error handling and introduced AI powered auto-fix suggestions to debug more complex issues
Agent Toolkit is a set of tools that enables your agents to send messaging across channels such as in-app, email, push, SMS, and chat apps (Slack, Microsoft Teams.) All messaging sent by the agent works within the guardrails of the messaging workflows and templates you configure in Knock.
An important part of building agents is enabling them to go to humans to provide input, verify work, and approve outputs. Agent Toolkit exposes a set of helper methods that make it easy to wrap your tool calls in asynchronous human approvals or inputs.
Our toolkit comes with built-in support for major agent frameworks and SDKs including Vercel AI SDK, LangChain, and OpenAI.
Knock MCP server
Anything you can do in the Knock dashboard you can now do using natural language.
We’re shipping a local MCP server that wraps Agent Toolkit and exposes the tools via the Model Context Protocol. The MCP server can be installed in any MCP-compatible client, including AI coding tools such as Cursor, Windsurf, or Claude Code.
We’re giving foundation models and tools like Cursor the ability to set up workflows, design emails, interact with Knock observability data, and much more.
Get started
You can get started today with Agent Toolkit and our MCP server by reading the documentation and installing the package via npm (@knocklabs/agent-toolkit).
The future is agentic. At Knock we’re thrilled to get the opportunity to partner with our customers and define how agents and humans work together.
Today we're shipping the ability to use AI to generate workflow trigger data schemas, making it effortless to get started with verifying the data being passed to your Knock workflow trigger.
Last year we shipped our workflow trigger data schema validation, which allows you to use a JSON schema to describe the data that's expected as part of your workflow trigger. However, getting started here required you to write out a full JSON schema from scratch.
Now, using AI, you can click the "Generate schema" button to automatically generate a trigger data JSON schema from data available to your workflow. It's like magic.
Fixes and improvements
👀 [Dashboard] We added a new "Commits" tab to the workflow page where you can see all commits on that workflow and promote changes.
👀 [SDKs] We now support a containerStyle prop for the React Native and Expo SDK's NotificationFeed component.
👀 [SDKs] fetchNextPage in the JavaScript SDK FeedClient now supports FetchFeedOptions.
🐛 [SDKs] Trigger data filtering now supports boolean values in the JavaScript and React SDK.
Today we're introducing workflow filtering for our commits page. Users can now filter the commits page by workflow to help teams better track and manage changes across their notifications.
Commit log filtering is available for all users on the "Commits" page, within the "Commit log" and "Unpromoted" tabs. Select a workflow from the filter dropdown to see all commits related to that workflow.
Fixes and improvements
🐛 [Notification engine] We fixed an issue where MS Teams webhooks would unexpectedly retry a sent notification.
👀 [API] We added support for datetime filtering to the user feed endpoint.
👀 [API] We added support for listing recipients with their preference sets loaded.
👀 [Notification engine] We added support for a new from_markdown Liquid helper to convert Markdown to HTML.
Today we're excited to announce a new design for our commits page.
Teams operating customer engagement at scale know the difficulty of managing multiple changes across several teams and channels. With all of the moving parts, it's easy to lose track of what's been changed and when.
Knock enables teams to collaborate effectively with a powerful commit and environment model. But we recently identified a need to enhance the commits page UI to be even more useful. That's why we've redesigned our commits page with a focus on clarity and usability, making it easier for growing teams to manage changes to their notifications.
The new design is available today to all users under the "Commits" tab in the sidebar.
Fixes and improvements
👀 [Dashboard] We added support for the "markdown" Liquid filter to allow MarkDown input -> HTML conversion
👀 [Dashboard] Rolled out trigger event improvements
🐛 [Dashboard] We fixed an issue with Menu Buttons firing multiple times
🐛 [Dashboard] We deployed a fix for an email template rendering issue
🐛 [SDK] We addressed an issue in the Go SDK where some user properties were incorrectly marked as required
Today we're releasing support for React 19 in our web JavaScript SDKs. This will enable projects with React 19 as a dependency to use our SDKs without any additional configuration. Projects using React 18 or below can safely upgrade to the latest SDK versions without any code changes, as this update maintains full backwards compatibility. All code changes can be found in the GitHub pull request here.
To upgrade, set the package versions in your package.json to the latest version listed below, then reinstall.
In addition to the JavaScript SDKs, we've also updated our Telegraph components to support React 19. As a dependency of our JavaScript SDKs, this means that you can now use our in-app notification components and hooks with React 19 without any additional configuration.
Today we’re introducing email-based user ID resolution for Slack, simplifying the steps needed to send direct messages via Slack to your Knock users.
Previously, if you wanted to send a direct message via Slack to one of your users, you needed to update your Knock user’s channel data to include their Slack user ID. This ID is typically found by making a request to the users.lookupByEmail endpoint of the Slack API using your Knock user’s email address.
Now, Knock can automatically make this API request on your behalf before sending a message. When the request succeeds, Knock will automatically add the Slack user ID to the user’s channel data.
You can read more about enabling email-based user ID resolution for Slack in our documentation.
👀 [Dashboard] We made it possible to see who created a workflow, in addition to who last edited a workflow.
🐛 [Notification engine] We fixed a bug in which temporary failures from Mailgun were treated as undelivered.
🐛 [Dashboard] We fixed a bug in which a cloned workflow would default to the inactive state.
👀 [SDK] We updated our SDKs to include ending_at for scheduled workflows.
Today we're introducing the ability to filter for messages by a workflow run ID or a workflow recipient run ID.
Before, if you wanted to find all of the messages produced for a single workflow trigger call you needed to attach your own identifier to your messages and use our trigger data filtering. Now, with our new filtering capabilities, you can filter for messages by the workflow run ID returned from a trigger request, or an individual workflow recipient run ID.
We've introduced these new filters into the messages API, and also to the dashboard, making it easier than ever to track down specific messages produced from a single workflow run, or for multiple workflow runs from a single trigger request.
Fixes and improvements
🐛 [Notification engine] We fixed an issue with our SMTP sender where including a from name could cause some email providers to fail.
👀 [Dashboard] We added support for better surfacing inline errors in our code editor for Liquid, JSON, and Markdown.
👀 [Dashboard] We now show the total number of members in a workspace in the members list.
🐛 [Dashboard] We fixed an issue with our fetch step where in certain cases it could fail to send a test with a hard crash.
🐛 [Dashboard] We added support for being able to use message conditions on push notification steps.
🐛 [Dashboard] We fixed a small bug where descriptions longer than 255 characters for variables would fail to save.
🐛 [Dashboard] We fixed a minor issue with our commit log viewer where long lines were not wrapping.
Today we're releasing an extension to our workflow trigger API: the ability to supply per-recipient trigger data. Previously, the data field supplied to your workflow trigger was shared across all recipients, meaning that if you wanted to supply recipient-specific data, you had to do so by either triggering a workflow per-recipient, or by stuffing data onto the user's profile.
Now, with the introduction of per-recipient trigger data, you can supply recipient-specific trigger data for up to 1000 recipients at a time via the workflow trigger API. The per-recipient trigger data will be merged onto the base workflow trigger data, making it easy to still supply shared data to all recipients of your workflow while providing anything recipient-specific.
Here's an example, where we're supplying a recipient-specific dashboard URL to the workflow. In this example, when the workflow runs for esattler, it will merge the contents of their trigger data onto the base data, so the dashboard_url will be https://dashboard.jurassic.park/esattler.
Today we're releasing TeamsKit, a suite of embeddable UIs and APIs that lets you connect your product to customers' Teams instances and send notifications to where they work.
Behind the scenes, TeamsKit:
manages your OAuth connection and tokens.
helps your customers select which channels they will receive notifications in.
integrates seamlessly with the rest of Knock, so you can easily send notifications to Teams alongside any other channel.
Shipping a Teams integration has never been easier.