Skip to main content

Getting started with Vercel's Slack Agent Skill

A skill is a reusable set of instructions that extends an AI agent with specialized knowledge for specific tasks or domain. Skills are invoked via slash commands (e.g., /slack-agent) and provide the agent with context it wouldn't otherwise have, such as framework patterns, step-by-step workflows, best practices, and reference docs.

Vercel's Slack Agent Skill takes you through building, testing, and deploying a Slack agent on Vercel. It builds on eve, Vercel's filesystem-first framework for durable backend agents, and Vercel Connect, which brokers short-lived Slack credentials at runtime, which means no bot tokens or signing secrets to manage. It includes a guided wizard that handles everything from project scaffolding to production deployment.

Install the skill

The first thing you need to do is to install the skill. You can do this via skills.sh or manually from GitHub.

Open your terminal and run the following command:

npx skills add vercel-labs/slack-agent-skill

The installation flow will install the skill to a list of agents by default; you can optionally choose additional agents to install it to. Asking to install it to a specific agent, like Claude Code, would look like this:

npx skills add vercel-labs/slack-agent-skill --yes --agent "claude-code"

Scaffold the agent

Open your coding agent platform of choice where you've installed the skill (like Claude Code shown above) and run this command:

/slack-agent new

A wizard experience will appear and ask you a series of questions. The wizard will guide you through:

  1. Project setup and scaffolding with npx eve@latest init (Node 24+)
  2. Custom implementation plan generation and approval
  3. Slack connector creation with Vercel Connect
  4. Environment configuration
  5. Local testing in the eve dev terminal UI
  6. Production deployment to Vercel
  7. Test framework setup

Respond with what kind of Slack agent you're building. For this example, enter:

A standup bot that collects daily updates.

The wizard then provides an implementation plan for the use case you've provided. For the standup bot, it created a plan along these lines:

Sample implementation plan
Implementation Plan: Standup Bot

Complexity: Medium-Complex

Overview

A Slack agent that DMs team members a daily standup prompt, collects their responses in DM threads, and posts an AI-generated summary to a team channel.

Core Features

1. Scheduled Prompts — DM team members at a configured time (default 9 AM) on weekdays
2. Response Collection — Accept free-form standup updates in DM threads
3. AI Summary — Generate a summary of all responses and post to a team channel
4. Status Tracking — Check who has/hasn't submitted their update
5. Configuration — Set standup time, channel, and team members by asking the bot

Interactions (@mentions and DMs)
┌─────────────────────────────────────┬────────────────────────────────────┐
│ Interaction │ Example │
├─────────────────────────────────────┼────────────────────────────────────┤
│ DM your update to the bot │ "Fixed auth bug, working on tests" │
│ @mention to check status │ "@standup-bot who's missing?" │
│ @mention to configure │ "@standup-bot post summaries to │
│ │ #engineering at 10am" │
└─────────────────────────────────────┴────────────────────────────────────┘

Dispatch Hooks (eve Slack channel)
- onDirectMessage — collect standup responses in DM threads
- onAppMention — answer status and configuration questions
- onInteraction — quick-response buttons on prompts (human-in-the-loop)

AI Tools

AI Tools (agent/tools/, filename = tool name)
┌────────────────────┬──────────────────────────────────────────────┐
│ Tool │ Purpose │
├────────────────────┼──────────────────────────────────────────────┤
│ summarize_standups │ Generate a digest of all responses │
│ parse_update │ Extract accomplishments, plans, and blockers │
│ get_standup_status │ List submitted / pending members │
└────────────────────┴──────────────────────────────────────────────┘

Schedules (proactive sessions)
┌──────────────┬──────────────────────────────────────────────────────┐
│ Schedule │ Action │
├──────────────┼──────────────────────────────────────────────────────┤
│ 0 9 * * 1-5 │ Send standup prompts to all configured team members │
│ 0 10 * * 1-5 │ Post AI-generated summary to the configured channel │
└──────────────┴──────────────────────────────────────────────────────┘

Durability & State
- Sessions are durable via the Workflow SDK — no state store to provision
- A database only if standup history must persist across sessions

Files to Create
agent/
├── instructions.md # System prompt: standup workflow and tone
├── agent.ts # defineAgent: model config
├── channels/
│ └── slack.ts # Slack channel via Vercel Connect credentials
└── tools/
├── summarize_standups.ts
├── parse_update.ts
└── get_standup_status.ts
Plus schedule definitions for the two proactive sessions.

From here you can make adjustments to the plan, add, or remove features. Once you confirm the plan looks good, allow the wizard to work its magic. 🪄

Create the agent

The wizard requests your preference for AI/LLM capabilities; the default routes anthropic/claude-sonnet-5 through the Vercel AI Gateway, which needs no API key on Vercel. Once those are given, it requests to create a project directory for your use case.

Key through the prompts, allowing the wizard to create the directory, initialize it with npx eve@latest init, and add all of the project files. Once complete, it will show you a summary of the project scaffolding, then prompt you to create the Slack connector.

Create the Slack connector

Instead of creating a Slack app by hand and copying tokens, the skill uses Vercel Connect: a credential broker that issues short-lived, scoped Slack tokens at runtime and forwards verified Slack events to your deployment. There is no SLACK_BOT_TOKEN or SLACK_SIGNING_SECRET. The only environment variable is SLACK_CONNECTOR.

The wizard walks you through:

vercel connect create slack --name my-agent --triggers
vercel connect attach slack/my-agent --triggers --trigger-path /eve/v1/slack --yes

The creation flow opens your browser to install the connector into your Slack workspace and select bot scopes and trigger events (like app_mention and message.im). Follow the wizard's prompts and relay the necessary information to it.

Test locally

The coding agent can assist you with local testing, and the wizard should prompt you to do so. Local testing happens in eve's terminal UI. Run eve dev and exercise your agent's instructions and tools in a local conversation. No tunnel is needed because there is no ngrok step.

The Slack surface itself can't be tested locally because Vercel Connect forwards Slack events to deployments only. Everything else (instructions, tools, skills, the conversation loop) works locally in the TUI, and the wizard verifies the Slack surface right after deploy.

Deploy to Vercel

The Slack Agent Skill also supports deploying to Vercel. Once you've committed your project to a GitHub repo, run the following command in the coding agent:

/slack-agent deploy

The coding agent deploys with eve deploy, confirms the connector's trigger points at your production deployment, and verifies the agent end to end. Invite the bot to a channel, @mention it, and watch it think. Because Vercel Connect owns event delivery, there are no webhook URLs to update in a Slack app manifest.

Next steps

✨ Check out our blog post on this very subject: Deploy Agents to Slack Faster with Vercel Skills.

✨ Learn more about the framework in the eve docs and the eve Slack agent starter guide.

✨ Explore Vercel's Agent Stack to help you on your agent creation journey.