Why This Matters: The State of Slack Bot Development
Building a Slack bot used to be a rite of passage — and a pain. You’d need to set up OAuth flows, handle event subscriptions, configure webhook endpoints, and then figure out deployment. For a simple bot, the infrastructure often took more time than the actual bot logic.
Vercel’s new Slack Agent Skill changes that. It’s a CLI wizard that works with any coding assistant (Claude Code, Cursor, etc.) to scaffold, configure, and deploy a Slack agent in a single session. No more juggling manifests, secrets, and ngrok tunnels manually.
This is part of a broader trend: platforms are embedding deployment intelligence directly into the development workflow. If you’ve been following the evolution of React Compiler v1.0 and automatic memoization, you’ll notice a similar philosophy — reduce cognitive overhead by moving complexity into the toolchain.
How the Slack Agent Skill Works
The wizard walks you through five stages, each handled by the skill automatically:
- Project Setup – Choose your LLM provider and initialize from the Slack Agent Template.
- Slack App Creation – Generate a customized app manifest and create the app in Slack’s console.
- Environment Configuration – Set up signing secrets, bot tokens, and API keys with validation.
- Local Testing – Run locally with ngrok and verify the integration.
- Production Deployment – Deploy to Vercel with environment variables configured automatically.
To get started, install the skill and run the wizard:
npx skills add vercel-labs/slack-agent-skill
# Then invoke it in your coding agent, e.g., /slack-agent new
// Example: A simple Slack agent that responds to mentions
// This code is automatically generated by the wizard
import { SlackAgent } from '@vercel/slack-agent';
const agent = new SlackAgent({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET,
});
agent.on('mention', async ({ event, say }) => {
// Your agent logic here — the skill handles all OAuth and webhook plumbing
await say(`Hello <@${event.user}>! I'm your automated assistant.`);
});
export default agent;
Limitations & Caveats
While the Slack Agent Skill dramatically simplifies setup, there are a few things to keep in mind:
- LLM Provider Lock-in: The wizard currently supports a limited set of LLM providers. If you’re using a less common model, you may need to customize the template.
- ngrok Dependency for Local Testing: The local testing stage relies on ngrok. If you’re behind a strict corporate firewall, you might need an alternative tunneling solution.
- Production Readiness: The deployment to Vercel is straightforward, but you’ll still need to monitor rate limits, handle errors gracefully, and implement logging for production use.
Next Steps: Beyond the Wizard
Once your agent is deployed, consider these enhancements:
- Add slash commands for interactive workflows.
- Integrate with external APIs (CRM, ticketing, etc.) using Vercel Edge Functions.
- Use the agent to trigger CI/CD pipelines or run database queries.
For a deeper understanding of why separating concerns in your tech stack matters — especially when combining personalization and experimentation — check out our analysis on why separate tech stacks for personalization and experimentation.

Step-by-Step Code Walkthrough
Let’s look at the actual code generated by the wizard. After running /slack-agent new in Claude Code, you’ll get a project structure like this:
slack-agent/
├── src/
│ ├── agent.js # Main agent logic
│ ├── handlers/ # Event handlers (mentions, messages, etc.)
│ └── config.js # Environment variables and secrets
├── vercel.json # Vercel configuration
├── slack-manifest.yml # Slack app manifest
└── package.json
// src/agent.js — Core agent logic
// This file is auto-generated by the Slack Agent Skill
import { App } from '@slack/bolt';
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET,
socketMode: false, // Use HTTP mode for Vercel
port: process.env.PORT || 3000,
});
// Handle message events
app.message('hello', async ({ message, say }) => {
// Respond when someone says "hello" in a channel the bot is in
await say(`Hey there <@${message.user}>!`);
});
// Start the app
(async () => {
await app.start();
console.log('⚡️ Slack agent is running!');
})();
# slack-manifest.yml — Auto-generated Slack app configuration
# You don't need to edit this manually unless you're adding new permissions
display_information:
name: My Agent
features:
bot_user:
display_name: My Agent
always_online: true
slash_commands:
- command: /ask
description: Ask the agent a question
usage_hint: "[your question]"
should_escape: false
oauth_config:
scopes:
bot:
- chat:write
- commands
- app_mentions:read
settings:
event_subscriptions:
request_url: https://your-app.vercel.app/slack/events
bot_events:
- app_mention
- message.channels
interactivity:
is_enabled: true
request_url: https://your-app.vercel.app/slack/events
Why This Approach Works
The wizard eliminates the most error-prone parts of Slack bot development:
- OAuth flow: The skill generates the exact manifest and handles the OAuth redirect.
- Webhook endpoints: It sets up the correct routes in your Vercel deployment.
- Environment secrets: It validates tokens before deployment, preventing runtime crashes.
This is similar to the philosophy behind the React Compiler’s automatic memoization — let the tool handle the boilerplate so you can focus on the unique value of your application.

Practical Tips & Best Practices
- Start with the Template: Use the Slack Agent Template to deploy a working agent immediately, then customize.
- Test Locally First: The ngrok-based local testing stage catches 90% of configuration errors.
- Monitor Logs: After deployment, check Vercel’s function logs for any Slack API errors.
- Security: Never commit your
.envfile. The wizard adds it to.gitignoreautomatically.
Limitations & Considerations
- Socket Mode Not Supported: The current skill uses HTTP mode, which means you need a public endpoint. For private Slack grids, you might need to adapt.
- Single LLM Provider: The wizard currently defaults to OpenAI. If you prefer Anthropic or local models, you’ll need to modify the template.
- Deployment Cost: Vercel’s serverless functions have a free tier, but high-traffic agents may incur costs.
What’s Next?
Vercel is hinting at more “skills” for other platforms (Discord, Teams, WhatsApp). The pattern is clear: the future of bot development is conversational infrastructure. By 2026, expect coding assistants to handle 80% of the boilerplate for any platform integration.
If you’re interested in how this fits into the larger conversation about separating concerns in your tech stack, read our deep dive on why personalization and experimentation need separate tech stacks.

Conclusion
The Vercel Slack Agent Skill is a perfect example of infrastructure as a conversation. Instead of reading docs and copy-pasting configuration, you simply tell your coding assistant what you want, and the wizard handles the rest.
Key takeaways:
- The wizard reduces Slack bot setup time from hours to minutes.
- It’s ideal for prototyping, hackathons, and internal tools.
- For production, you’ll still need to handle edge cases and monitoring.
Action step: Try it today. Install the skill with npx skills add vercel-labs/slack-agent-skill, run /slack-agent new in Claude Code, and deploy your first Slack agent before lunch.
This article was based on the Vercel changelog announcement.