Happy New Year! We’ve been hard at work on new features and updates to make your work life simpler, more pleasant, and more productive.
Announcements
What’s old, what’s new, and what might need some action from you!
- New supported markdown types for rich text in Block Kit. We’ve introduced new markdown types for rich text when using Block Kit. Check out the changelog entry and our rich text block and markdown block references for more details.
- Slack MCP server and Real-Time Search API. We’re excited to announce the release of not one, but two, major components designed to significantly enhance how Large Language Models (LLMs) and AI agents interact with your workspace data: the Slack Model Context Protocol (MCP) server and the Real-time Search (RTS) API. Check out the changelog entry for more details.
- Thinking steps. Apps can now display thinking steps to users. Check out the changelog enry and our guide on developing AI apps.
- Optional scopes. You can now mark individual OAuth scopes as optional when configuring your Slack app. Optional scopes give users more control over what data your app can access during installation, without blocking them from installing your app entirely.
- Retry delayed events. In case of an outage where your app may have missed events, we’ve released a Delayed Events feature that lets you replay past events. Read all about it in the Events API docs.
- Set status method scope update. The
assistant.threads.setStatusAPI method now accepts either theassistant:writeorchat:writescope. This allows channel-based apps to use AI loading states in channels, without having to requestassistant:writeor use the AI assistant split view. Theassistant.threads.setStatusAPI method will eventually no longer accept theassistant:writescope in favor of thechat:writescope exclusively, so update your app soon!
Slack CLI
The command line interface for quickly creating, developing, and deploying Slack apps.
Updates to the slack create command:
- The command now normalizes project directory names to kebab-case (lowercase, dash-delimited, no whitespace or special characters).
- We’ve updated the command’s app name prompt to show the randomly generated app name as placeholder text. You can press
Enterto accept the default name, or type in a new name. - The
slack createcommand now updates the app name in thepackage.jsonandpyproject.tomlproject files. - The command now displays
AI Agent appinstead ofAI appto align with Slack’s new Agent app features. - The command now prompts you for a custom app name. This prompt appears before scaffolding a new project from a template, and when making new project directories with your custom app name, we now replace spaces with a dash (instead of removing spaces altogether) to make navigation a bit better.
- We’ve added a
--subdirflag to theslack createcommand for extracting a subdirectory from a template repository as the project root. This supports monorepo-style templates where multiple apps live in subdirectories (e.g.,slack create my-app -t org/monorepo --subdir apps/my-app). - When running the
slack createcommand with theagentargument, a list of agentic apps are now highlighted for selection. If you want to name your app “agent” and not create an agentic app, you can use the--nameflag instead to explicitly set your app name. - When running the
slack createcommand, the available templates are now shown without requiring an immediate selection when using the--listflag. - Bolt for JavaScript and Bolt for Python-related updates:
- Bolt JavaScript and Bolt Python projects now default to using the local
manifest.jsonas the app manifest (previously, it was a remote manifest from app settings). Changes to the app manifest via app settings will now be detected by the Slack CLI, and a prompt will be displayed before any manifest update action occurs (e.g., when using theslack runcommand). The manifest source is set after creating a new project with theslack createcommand or by initializing an existing project using theslack initcommand, and the setting is stored as"manifest.source": "local"in the.slack/config.jsonfile. - When running Slack CLI commands in a Bolt Python project, the Slack CLI will attempt to automatically activate the Python virtual environment (.venv).
- We’ve updated both the
slack createandslack initcommands to support creating a Python virtual environment (.venv) when it doesn’t exist, and installing the project’s dependencies from therequirements.txtandpyproject.tomlproject files. - We’ve added
pyproject.tomlsupport to Bolt for Python projects. Theslack createandslack init commandswill now detectpyproject.tomlfiles, add theslack-cli-hooks<1.0.0to the dependency section (when missing), and display instructions on how to install the dependencies. Python projects now support either or both of therequirements.txtandpyproject.tomlfiles. - We’ve updated the
slack runcommand to support file watching and live reloading for Bolt for JavaScript and Bolt for Python projects. When a file is changed, the Slack CLI will automatically restart the app development server. When themanifest.jsonfile is changed, the manifest update API is called (.slack/config.jsonmust havemanifest.source: "local").
- Bolt JavaScript and Bolt Python projects now default to using the local
- Other updates:
- We’ve updated the
slack app linkcommand to support projects that use a manifest file as the manifest source (manifest.json). We’ve also updated the app manifest overwrite warning prompt wording and appearance. - The
slack deploycommand now references the latest online documentation, with a suggestion to run a development app using theslack runcommand if adeployhook script doesn’t exist. Refer to our hooks documentation for more details. - The
slack docscommand opens the slack developer docs site, and you can now use the--searchflag to open the docs search page with the provided query. - We now prompt you to log in if no prior authentications are detected when running any command that requires credentials, rather than exiting with an error.
- We’ve updated the
- Bug fixes:
- We now avoid infinite loops when searching for the root project
.slackdirectory for projects existing on drives other than theC:drive on Windows. - We now check whether an installed
gitcommand exists on Windows. - We removed support for the
.slackignorefile in the project root, as this file was unused. For posterity, during the Slack CLI Beta, this allowed Deno SDK projects to ignore files during deployment, but the feature was removed before Slack CLI v1.0.0. - The
slack app settingscommand now opens the App Settings home page (https://api.slack.com/apps) when the command is run outside of a project. This allows you to see your complete list of apps. - We now print a debug log if the manifest file was changed but not reinstalled if the
manifest.sourcewas set to"remote". - We now output a warning instead of an error if activating the Python virtual environment (
.venv/) fails.
- We now avoid infinite loops when searching for the root project
That’s a wrap on this quarter’s highlights! Keep building and let us know what you think by submitting feedback to feedback@slack.com or reaching out to us on GitHub.
